本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS IoT Events 常見問題和解決方案
請參閱下一節,以疑難排解錯誤並尋找解決 問題的可能解決方案 AWS IoT Events。
錯誤
偵測器模型建立錯誤
嘗試建立偵測器模型時,我會收到錯誤。
建立偵測器模型時,您必須考量下列限制。
-
每個
action
欄位中僅允許一個動作。 -
condition
是 的必要項目transitionEvents
。對於OnEnter
、OnInput
和OnExit
事件,這是選擇性的。 -
如果
condition
欄位為空,則條件表達式的評估結果等於true
。 -
條件表達式的評估結果應該是布林值。如果結果不是布林值,則等於
false
,且 不會觸發actions
或 轉換至事件中nextState
指定的 。
如需詳細資訊,請參閱AWS IoT Events 偵測器模型限制。
從已刪除的偵測器模型更新
我幾分鐘前更新或刪除了偵測器模型,但仍然透過MQTT訊息或SNS提醒從舊偵測器模型收到狀態更新。
如果您更新、刪除或重新建立偵測器模型 (請參閱 UpdateDetectorModel),則會在刪除所有偵測器執行個體並使用新模型之前發生延遲。在此期間,舊版偵測器模型的執行個體可能會繼續處理輸入。您可能會繼續收到先前偵測器模型定義的警示。請等待至少七分鐘,再重新檢查更新或報告錯誤。
動作觸發失敗 (符合條件時)
當條件滿足時,偵測器無法觸發動作或轉換為新狀態。
確認偵測器條件表達式的評估結果是布林值。如果結果不是布林值,則等於 false
,且 不會觸發 action
或 轉換至事件中nextState
指定的 。如需詳細資訊,請參閱條件式表達式語法 。
動作觸發失敗 (達到閾值時)
當條件式表達式中的變數達到指定值時,偵測器不會觸發動作或事件轉換。
如果您setVariable
更新 onInput
、 onEnter
或 onExit
,則在目前處理週期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 訊息
當我嘗試呼叫 CreateDetectorModel
和 UpdateDetectorModel
InvalidRequestException 時,我會收到 APIs。
檢查下列項目以協助解決問題。如需詳細資訊,請參閱 CreateDetectorModel和 UpdateDetectorModel。
-
請確定您不會
SetTimerAction
同時使用seconds
和durationExpression
作為 參數。 -
請確定 的字串表達
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
可以轉換為數字。不允許其他資料類型,例如布林值。 -
錯誤:名為 的計時器的持續時間表達式評估結果
大於 31622440。為了確保準確性,請確定您的持續時間表達式參考介於 60‐31622400 之間的值。<timer-name>
請確定計時器的持續時間小於或等於 31622400 秒。持續時間的評估結果會四捨五入到最接近的整數。
-
錯誤:名為 的計時器的持續時間表達式評估結果
小於 60。為了確保準確性,請確定您的持續時間表達式參考介於 60‐31622400 之間的值。<timer-name>
請確定計時器的持續時間大於或等於 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
值,參考的評估結果必須是String
、Decimal
或Boolean
。
如需詳細資訊,請參閱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 輸入。