AWS IoT Events 常見問題和解決方案 - AWS IoT Events

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS IoT Events 常見問題和解決方案

請參閱下一節,以疑難排解錯誤並尋找解決 問題的可能解決方案 AWS IoT Events。

偵測器模型建立錯誤

嘗試建立偵測器模型時,我會收到錯誤。

建立偵測器模型時,您必須考量下列限制。

  • 每個action欄位中僅允許一個動作。

  • condition 是 的必要項目transitionEvents。對於 OnEnterOnInputOnExit事件,這是選擇性的。

  • 如果condition欄位為空,則條件表達式的評估結果等於 true

  • 條件表達式的評估結果應該是布林值。如果結果不是布林值,則等於 false ,且 不會觸發 actions或 轉換至事件中nextState指定的 。

如需詳細資訊,請參閱AWS IoT Events 偵測器模型限制

從已刪除的偵測器模型更新

我幾分鐘前更新或刪除了偵測器模型,但仍然透過MQTT訊息或SNS提醒從舊偵測器模型收到狀態更新。

如果您更新、刪除或重新建立偵測器模型 (請參閱 UpdateDetectorModel),則會在刪除所有偵測器執行個體並使用新模型之前發生延遲。在此期間,舊版偵測器模型的執行個體可能會繼續處理輸入。您可能會繼續收到先前偵測器模型定義的警示。請等待至少七分鐘,再重新檢查更新或報告錯誤。

動作觸發失敗 (符合條件時)

當條件滿足時,偵測器無法觸發動作或轉換為新狀態。

確認偵測器條件表達式的評估結果是布林值。如果結果不是布林值,則等於 false ,且 不會觸發 action或 轉換至事件中nextState指定的 。如需詳細資訊,請參閱條件式表達式語法

動作觸發失敗 (達到閾值時)

當條件式表達式中的變數達到指定值時,偵測器不會觸發動作或事件轉換。

如果您setVariable更新 onInputonEnteronExit,則在目前處理週期condition期間評估任何 時,不會使用新值。而是使用原始值,直到目前的週期完成為止。您可以在偵測器模型定義中設定 evaluationMethod 參數來變更此行為。當 evaluationMethod 設定為 時SERIAL,變數會更新,並依事件定義的順序評估事件條件。當 evaluationMethod 設定為 BATCH(預設) 時,只有在評估所有事件條件後,才會更新變數並執行事件。

狀態用量不正確

嘗試使用 將訊息傳送至輸入時,偵測器會進入錯誤狀態BatchPutMessage

如果您使用 BatchPutMessage 將多則訊息傳送至輸入,則無法保證訊息或輸入的處理順序。若要保證訂購,請一次傳送訊息一個,每次等待 BatchPutMessage 以確認成功。

連線訊息

嘗試呼叫 時,我收到('Connection aborted.', error(54, 'Connection reset by peer'))錯誤API。

確認 OpenSSL 使用 TLS 1.1 或更新版本來建立連線。這應該是大多數 Linux 發行版本或 Windows 第 7 版及更新版本下的預設值。macOS 使用者可能需要升級 Open SSL。

InvalidRequestException 訊息

當我嘗試呼叫 CreateDetectorModelUpdateDetectorModel InvalidRequestException 時,我會收到 APIs。

檢查下列項目以協助解決問題。如需詳細資訊,請參閱 CreateDetectorModelUpdateDetectorModel

  • 請確定您不會SetTimerAction同時使用 secondsdurationExpression 作為 參數。

  • 請確定 的字串表達durationExpression式有效。字串表達式可以包含數字、變數 ($variable.<variable-name>) 或輸入值 ($input.<input-name>.<path-to-datum>)。

Amazon CloudWatch Logs action.setTimer錯誤

您可以設定 Amazon CloudWatch Logs 來監控 AWS IoT Events 偵測器模型執行個體。以下是當您使用 時 AWS IoT Events, 產生的常見錯誤action.setTimer

  • 錯誤:無法將名為 的計時器的持續時間表達式<timer-name>評估為數字。

    確定您的 字串表達式durationExpression可以轉換為數字。不允許其他資料類型,例如布林值。

  • 錯誤:名為 的計時器的持續時間表達式評估結果<timer-name>大於 31622440。為了確保準確性,請確定您的持續時間表達式參考介於 60‐31622400 之間的值。

    請確定計時器的持續時間小於或等於 31622400 秒。持續時間的評估結果會四捨五入到最接近的整數。

  • 錯誤:名為 的計時器的持續時間表達式評估結果<timer-name>小於 60。為了確保準確性,請確定您的持續時間表達式參考介於 60‐31622400 之間的值。

    請確定計時器的持續時間大於或等於 60 秒。持續時間的評估結果會四捨五入到最接近的整數。

  • 錯誤:<timer-name>無法評估名為 的計時器的持續時間表達式。檢查資料的變數名稱、輸入名稱和路徑,以確保您參考現有的變數和輸入。

    確保您的字串表達式參考現有的變數和輸入。字串表達式可以包含數字、變數 ($variable.variable-name) 和輸入值 ($input.input-name.path-to-datum)。

  • 錯誤:無法設定名為 的計時器<timer-name>。請檢查您的持續時間表達式,然後再試一次。

    請參閱 SetTimerAction動作以確保您指定了正確的參數,然後再次設定計時器。

如需詳細資訊,請參閱在開發 AWS IoT Events 偵測器模型時啟用 Amazon CloudWatch 記錄。

Amazon CloudWatch 承載錯誤

您可以設定 Amazon CloudWatch Logs 來監控 AWS IoT Events 偵測器模型執行個體。當您設定動作承載時 AWS IoT Events,以下是 產生的常見錯誤和警告。

  • 錯誤:我們無法評估動作的表達式。確定資料中的變數名稱、輸入名稱和路徑參考現有的變數和輸入值。此外,請確認承載的大小小於 1 KB,即承載允許的大小上限。

    請務必輸入正確的變數名稱、輸入名稱和資料路徑。如果動作承載大於 1 KB,您也可能收到此錯誤訊息。

  • 錯誤:我們無法剖析 承載的內容表達式<action-type>。使用正確的語法輸入內容表達式。

    內容表達式可以包含字串 ('string')、變數 ($variable.variable-name)、輸入值 ($input.input-name.path-to-datum)、字串串連和包含 的字串${}

  • 錯誤:您的承載表達式 {expression} 無效。定義的承載類型為 JSON,因此您必須指定 AWS IoT Events 一個評估為字串的表達式。

    如果指定的承載類型為 JSON, AWS IoT Events 則首先檢查服務是否可以評估對字串的表達式。評估的結果不能是布林值或數字。如果驗證失敗,您可能會收到此錯誤。

  • 警告:動作已執行,但我們無法評估您的動作承載內容表達式至有效的 JSON。定義的承載類型為 JSON。

    如果您將承載類型定義為 JSON,請確定 AWS IoT Events 可以評估您的內容表達式,以將動作承載評估為有效 JSON。即使 AWS IoT Events 無法評估內容表達式為有效 , 仍會 AWS IoT Events 執行該動作JSON。

如需詳細資訊,請參閱在開發 AWS IoT Events 偵測器模型時啟用 Amazon CloudWatch 記錄。

不相容的資料類型

訊息:在以下表達式<reference>中找到 的不相容資料類型 【<inferred-types>】: <expression>

您可能會因為下列其中一個原因收到此錯誤:

  • 參考的評估結果與表達式中的其他運算元不相容。

  • 不支援傳遞至函數的引數類型。

當您在運算式中使用參考時,請檢查下列項目:

  • 當您將參考用作具有一或多個運算子的運算元時,請確定您參考的所有資料類型都相容。

    例如,在以下運算式中,整數2==&&運算子的運算元。為確保運算元相容,$variable.testVariable + 1$variable.testVariable必須參考整數或小數。

    此外,整數1+運算子的運算元。因此, $variable.testVariable 必須參考整數或小數。

    ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
  • 當您使用參考做為傳遞給函數的引數時,請確定該函數支援您參考的資料類型。

    例如,下列timeout("time-name")函數需要一個字串,以雙引號作為引數。如果您使用 的參考 timer-name 值,您必須參考具有雙引號的字串。

    timeout("timer-name")
    注意

    對於 convert(type, expression)函數,如果您使用 的參考 type 值,參考的評估結果必須是 StringDecimalBoolean

如需詳細資訊,請參閱AWS IoT Events 運算式中輸入和變數的參考

無法傳送訊息至 AWS IoT Events

訊息:無法傳送訊息至 Iot Events

您可能會因為下列原因遇到此錯誤:

  • 輸入訊息承載不包含 Input attribute Key

  • Input attribute Key 與輸入定義中指定的JSON路徑不同。

  • 輸入訊息與 AWS IoT Events 輸入中定義的結構描述不相符。

注意

從其他服務擷取資料也會失敗。

例如,在 中 AWS IoT Core, AWS IoT 規則會失敗,並顯示下列訊息 Verify the Input Attribute key.

若要解決此問題,請確定輸入承載訊息結構描述符合 AWS IoT Events 輸入定義和Input attribute Key位置相符。如需詳細資訊,請參閱 以在 中建立模型的輸入 AWS IoT Events了解如何定義 AWS IoT Events 輸入。