偵測器模型分析與診斷資訊 - AWS IoT Events

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

偵測器模型分析與診斷資訊

偵測器模型分析會收集下列診斷資訊:

  • 層級 — 分析結果的嚴重性層級。根據嚴重性等級,分析結果分為三大類:

    • 資訊 (INFO) — 資訊結果會告訴您偵測器模型中的重要欄位。這種類型的結果通常不需要立即採取行動。

    • 警告 (WARNING) — 警告結果會特別注意可能導致偵測器模型出現問題的欄位。我們建議您在生產環境中使用偵測器模型之前,先檢閱警告並採取必要的動作。否則,檢測器模型可能無法按預期工作。

    • Error (ERROR) — 錯誤結果會通知您偵測器模型中發現的問題。 AWS IoT Events 當您嘗試發佈偵測器模型時,會自動執行這組分析。您必須先修正所有錯誤,才能發佈偵測器模型。

  • 位置 — 包含可用於在分析結果參照的偵測器模型中尋找欄位的資訊。位置通常包括狀態名稱、轉移事件名稱、事件名稱和運算式 (例如in state TemperatureCheck in onEnter in event Init in action setVariable)。

  • 類型-分析結果的類型。分析類型分為以下幾類:

    • supported-actions— AWS IoT Events 可以在偵測到指定的事件或轉換事件時叫用動作。您可以定義內建動作以使用計時器或設定變數,或將資料傳送至其他 AWS 服務。您必須在提供服務的 AWS 區域中指定與其他 AWS 服 AWS 務搭配使用的動作。

    • service-limits— 服務配額 (也稱為限制) 是您帳戶的服務資源或作業的最大或最小數 AWS 目。除非另有說明,否則每個配額都是區域特定規定。根據您的業務需求,您可以更新檢測器模型以避免遇到限制或請求增加配額。您可以要求增加某些配額,而其他配額則無法增加。如需詳細資訊,請參閱 配額

  • structure— 檢測器模型必須具有所有必需的組件,例如狀態,並遵循 AWS IoT Events 支持的結構。檢測器模型必須至少具有一個狀態和一個條件,用於評估傳入的輸入數據以檢測重要事件。偵測到事件時,偵測器模型會轉換至下一個狀態,並可叫用動作。這些事件稱為轉換事件。轉移事件必須引導下一個狀態才能進入。

  • expression-syntax— AWS IoT Events 提供數種在建立和更新偵測器模型時指定值的方法。您可以在運算式中使用常值、運算子、函數、參照和替代範本。您可以使用運算式來指定常值,或 AWS IoT Events 在指定特定值之前評估運算式。您的運算式必須遵循所需的語法。如需詳細資訊,請參閱用於篩選、轉換和處理事件資料的運算式

    中的偵測器模型運算式 AWS IoT Events 可以參考特定資料或資源。

    • data-type— AWS IoT Events 支援整數、十進位、字串和布林資料類型。如果 AWS IoT Events 可以在運算式評估期間自動將一種資料類型的資料轉換為另一種資料類型,則這些資料類型是相容

      注意
      • 整數和小數是唯一支持的兼容數據類型 AWS IoT Events。

      • AWS IoT Events 無法評估算術表達式,因為 AWS IoT Events 無法將整數轉換為字符串。

    • referenced-data— 您必須先定義偵測器模型中參照的資料,才能使用資料。例如,如果您想要將資料傳送至 DynamoDB 表,您必須先定義參考資料表名稱的變數,才能在運算式 () $variable.TableName 中使用變數。

    • referenced-resource— 檢測器模型使用的資源必須可用。您必須先定義資源,才能使用它們。例如,您想要建立偵測器模型來監視溫室的溫度。您必須先定義 input ($input.TemperatureInput),將傳入的溫度資料路由到偵測器模型,然後才能使用$input.TemperatureInput.sensorData.temperature來參考溫度。

請參閱以下章節以疑難排解錯誤,並從檢測器模型的分析中找到可能的解決方案。

排除偵測器模型錯誤

上述錯誤類型提供有關偵測器模型的診斷資訊,並與您可能擷取的訊息相對應。使用這些訊息和建議的解決方案,以疑難排解偵測器模型的錯誤。

Location

包含相關Location資訊的分析結果會對應於下列錯誤訊息:

  • — 包含有關分析結果的其他資訊。這可以是資訊、警告或錯誤訊息。

    如果您指定的動作 AWS IoT Events 目前不支援,您可能會收到此錯誤訊息。如需支援動作的清單,請參閱接收資料和觸發動作的支援動作

supported-actions

含有相關supported‐actions資訊的分析結果會對應下列錯誤訊息:

  • 訊息:動作定義中存在無效的動作類型:action-definition.

    如果您指定的動作 AWS IoT Events 目前不支援,您可能會收到此錯誤訊息。如需支援動作的清單,請參閱接收資料和觸發動作的支援動作

  • 訊息: DetectorModel 定義有 AWS 服務 行動,但 AWS 服務 該地區不支持服務 region-name.

    如果您指定的動作受支援 AWS IoT Events,但您目前的區域無法使用該動作,您可能會收到此錯誤訊息。當您嘗試將資料傳送至該地區無法使用的 AWS 服務時,可能會發生這種情況。您還必須為所使用的 AWS 服務 AWS IoT Events 和選擇相同的區域。

service-limits

含有相關service‐limits資訊的分析結果會對應下列錯誤訊息:

  • 訊息:承載中允許的內容運算式超過限制 content-expression-size 事件中的位元組 event-name 處於狀態 state-name.

    如果動作承載的內容運算式大於 1024 位元組,您可能會收到此錯誤訊息。有效負載的內容運算式大小最多可以是 1024 個位元組。

  • 訊息:偵測器模型定義中允許的狀態數目超過限制 states-per-detector-model.

    如果您的偵測器型號有超過 20 個狀態,您可能會收到此錯誤訊息。檢測器模型最多可以有 20 個狀態。

  • 訊息:計時器的持續時間 timer-name 至少應該是 minimum-timer-duration 秒長。

    如果計時器的持續時間少於 60 秒,您可能會收到此錯誤訊息。我們建議計時器的持續時間介於 60 到 31622400 秒之間。如果您在計時器的持續時間內指定運算式,則持續時間運算式的評估結果會四捨五入為最接近的整數。

  • 訊息:每個事件允許的動作數目超過上限 actions-per-event 在檢測器模型定義

    如果事件有 10 個以上的動作,您可能會收到此錯誤訊息。檢測器模型中的每個事件最多可以有 10 個動作。

  • 訊息:每個狀態允許的轉換事件數目超過限制 transition-events-per-state 在檢測器模型定義中。

    如果狀態有超過 20 個轉換事件,您可能會收到這個錯誤訊息。檢測器模型中的每個狀態最多可以有 20 個轉換事件。

  • 訊息:每個狀態允許的事件數目超過上限 events-per-state 在檢測器模型定義

    如果狀態有超過 20 個事件,您可能會收到此錯誤訊息。檢測器模型中的每個狀態最多可以有 20 個事件。

  • 消息:可以與單個輸入相關聯的檢測器模型的最大數量可能已達到限制。輸入 input-name 用於 detector-models-per-input 檢測器模型路線。

    如果您嘗試將輸入路由傳送至 10 個以上的偵測器型號,您可能會收到此警告訊息。您可以有多達 10 個不同的檢測器模型與單個檢測器模型相關聯。

structure

含有相關structure資訊的分析結果會對應下列錯誤訊息:

  • 訊息:動作可能只定義了一個類型,但是找到了 number-of-types 類型。請分成單獨的操作。

    如果您使用作API業建立或更新偵測器模型,在單一欄位中指定了兩個或多個動作,則可能會收到此錯誤訊息。您可以定義Action物件的陣列。請務必將每個動作定義為單獨的物件。

  • 信息: TransitionEventtransition-event-name 轉換為不存在的狀態 state-name.

    如果找 AWS IoT Events 不到轉換事件所參考的下一個狀態,您可能會收到此錯誤訊息。請確定已定義下一個狀態,並輸入正確的狀態名稱。

  • 消息: DetectorModelDefinition 有一個共享狀態名稱:找到狀態 state-name 取代為 number-of-states 重複。

    如果您對一或多個狀態使用相同的名稱,您可能會收到此錯誤訊息。確保您為檢測器模型中的每個狀態提供唯一的名稱。狀態名稱必須包含 1-128 個字元。有效字元:a-z、A-Z、0-9、_ (底線) 和-(連字號)。

  • 信息:定義的 initialStateName initial-state-name 未對應於已定義的狀態。

    如果初始狀態名稱不正確,您可能會收到此錯誤訊息。檢測器模型保持在初始(啟動)狀態,直到輸入到達。一旦輸入到達,檢測器模型立即轉換到下一個狀態。請確定初始狀態名稱是已定義狀態的名稱,且您輸入正確的名稱。

  • 訊息:偵測器模型定義在條件下必須至少使用一個輸入。

    如果您未在條件中指定輸入,則可能會收到此錯誤。您必須在至少一個條件下使用一個輸入。否則, AWS IoT Events 不會評估傳入的資料。

  • 訊息:只有一秒,且 durationExpression 可以在中設定 SetTimer。

    如果您同時使用secondsdurationExpression計時器,則可能會收到此錯誤訊息。請確定您使用secondsdurationExpression作為的參數SetTimerAction。如需詳細資訊,請參閱〈AWS IoT Events API參考SetTimerAction中的〈〉。

  • 訊息:偵測器模型中的動作無法存取。檢查啟動動作的條件。

    如果偵測器模型中的動作無法存取,則事件的條件評估為 false。檢查包含動作的事件的條件,以確保其評估為 true。當事件的條件評估為 true 時,該動作應該變為可訪問。

  • 消息:正在讀取輸入屬性,但這可能是由計時器到期引起的。

    當發生以下任一情況時,可以讀取輸入屬性的值:

    • 已收到新的輸入值。

    • 當檢測器中的計時器已過期。

    若要確保只有在接收到輸入的新值時才會評估 input 屬性,請在條件中包含對triggerType(“Message”)函數的呼叫,如下所示:

    檢測器模型中評估的原始條件:

    if ($input.HeartBeat.status == “OFFLINE”)

    將變得類似於以下內容:

    if ( triggerType("MESSAGE") && $input.HeartBeat.status == “OFFLINE”)

    其中,對triggerType(“Message”)函數的調用來自條件中提供的初始輸入之前。通過使用這種技術,該triggerType("Message")函數將評估為 true 並滿足接收新輸入值的條件。如需有關triggerType函數使用方式的詳細資訊,請triggerTypeAWS IoT Events 開發人員指南的「運算式」區段中搜尋

  • 消息:無法訪問檢測器模型中的狀態。檢查將導致過渡到所需狀態的條件。

    如果偵測器模型中的某個狀態無法存取,則導致該狀態的傳入轉換的條件會評估為 false。檢查檢測器模型中到該無法訪問狀態的傳入轉換的條件評估為 true,以便所需的狀態可以達到。

  • 訊息:即將到期的計時器可能會導致傳送意外數量的訊息。

    為了防止您的檢測器模型因計時器已過期而進入無限發送意外數量消息的狀態,請考慮在檢測器模型的條件下使用對triggerType("Message")函數的調用,如下所示:

    檢測器模型中評估的原始條件:

    if (timeout("awake"))

    會轉換成類似下列的條件:

    if (triggerType("MESSAGE") && timeout("awake"))

    其中,對triggerType(“Message”)函數的調用來自條件中提供的初始輸入之前。

    此更改可防止在檢測器中啟動計時器操作,從而防止發送消息的無限循環。如需有關如何在偵測器中使用計時器動作的詳細資訊,請參閱AWS IoT Events 開發人員指南使用內建動作頁面

expression-syntax

含有相關expression‐syntax資訊的分析結果會對應下列錯誤訊息:

  • 消息:您的有效負載表達式 {expression} 無效。定義的有效負載類型為JSON,因此您必須指定 AWS IoT Events 將評估為字串的運算式。

    如果指定的有效負載類型為JSON,請 AWS IoT Events 先檢查服務是否可以將運算式評估為字串。評估的結果不能是布林值或數字。如果驗證不成功,您可能會收到此錯誤。

  • 訊息:SetVariableAction.value必須是表示式。無法剖析值 'variable-value'

    您可SetVariableAction以使用name和定義變數valuevalue可以是字串、數字或布林值。您也可以指定的表示式value。若要取得更多資訊 SetVariableAction,請參閱〈AWS IoT Events API參考〉中的〈〉。

  • 消息:我們無法解析您的屬性表達式(attribute-name) 針對 DynamoDB 作。使用正確的語法輸入表示式。

    您必須對中的所有參數使用表示式DynamoDBAction。替代範本。如需詳細資訊,請參閱〈AWS IoT Events API參考〉ynamoDBAction中的 D

  • 消息:我們無法解析您 tableName 對 D ynamoDBv 2 動作的表達式。使用正確的語法輸入表示式。

    tableNamein DynamoDBv2Action 必須是字串。您必須使用的運算式tableName。表達式接受文字、運算子、函數、參考和替代範本。如需詳細資訊,請參閱AWS IoT Events API參考資料中的 D ynamoDBv 2Action

  • 訊息:我們無法評估您的運算式為有效JSON。D ynamoDBv 2 動作僅支援裝JSON載類型。

    的承載類型DynamoDBv2必須是JSON。確保 AWS IoT Events 可以評估您的內容表達式是否有效JSON。如需詳細資訊,請參閱AWS IoT Events API參考資料中的 D ynamoDBv 2Action

  • 消息:我們無法解析您的內容表達式的有效負載 action-type。 使用正確的語法輸入內容表示式。

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

  • 訊息:自訂承載必須非空白。

    如果您為動作選擇了「自訂承載」,但未在 AWS IoT Events 主控台中輸入內容運算式,則可能會收到此錯誤訊息。如果您選擇「自訂承載」,則必須在「自訂承載」下輸入內容運算式。如需詳細資訊,請參閱AWS IoT Events API參考資料中的裝載

  • 訊息:無法剖析持續時間表示式 'duration-expression'用於計時器'timer-name'.

    計時器持續時間運算式的評估結果必須是介於 60—31622400 之間的值。持續時間的評估結果會四捨五入到最接近的整數。

  • 訊息:無法剖析表示式 'expression'為 action-name

    如果指定動作的運算式語法不正確,您可能會收到此訊息。請確定您輸入的表示式具有正確的語法。如需詳細資訊,請參閱篩選裝置資料和定義動作的語法

  • 訊息:您的 fieldName 因為IotSitewiseAction無法解析。您必須在運算式中使用正確的語法。

    解如果 AWS IoT Events 無法解析,您可能會收到此錯誤 fieldName 對於IotSitewiseAction. 請確定 fieldName 使用可 AWS IoT Events 以解析的表達式。如需詳細資訊,請參閱〈AWS IoT Events API參考IotSiteWiseAction中的〈〉。

data-type

含有相關data‐type資訊的分析結果會對應下列錯誤訊息:

  • 訊息:持續時間表示 duration-expression 用於計時器 timer-name 無效,它必須返回一個數字。

    如果 AWS IoT Events 無法將計時器的持續時間運算式評估為數字,您可能會收到此錯誤訊息。確保您durationExpression可以轉換為數字。不支援其他資料類型,例如布林值。

  • 訊息:表示式 condition-expression 不是有效的條件運算式。

    如果 AWS IoT Events 無法評估布林值,您condition-expression可能會收到此錯誤訊息。布林值必須是TRUEFALSE。請確定您的條件運算式可以轉換為布林值。如果結果不是 Boolean 值,則相當於FALSE且不會叫用事件中nextState指定的動作或轉換。

  • 訊息:不相容的資料類型 [inferred-types] 找到「」 reference 在下面的表達式中:expression

    解決方案:偵測器模型中相同輸入屬性或變數的所有運算式都必須參考相同的資料類型。

    請使用下列資訊來解決問題:

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

      例如,在下列運算式中,integer 2==&&運算子的運算元。為了確保操作數是兼容的,$variable.testVariable + 1並且$variable.testVariable必須引用整數或小數。

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

      ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
    • 當您使用參考作為傳遞給函數的引數時,請確保該函數支持您引用的數據類型。

      例如,下列timeout("time-name")函數需要以雙引號做為引數的字串。如果您使用的參考 timer-name value,您必須引用帶雙引號的字符串。

      timeout("timer-name")
      注意

      對於convert(type, expression)函數,如果您使用的引用 type value,您的參考的評估結果必須是StringDecimal、或Boolean

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

  • 訊息:不相容的資料類型 [inferred-types] 搭配使用 reference。 這可能會導致執行階段錯誤。

    如果相同輸入屬性或變數的兩個運算式參照兩種資料類型,您可能會收到此警告訊息。確保相同輸入屬性或變量的表達式引用了檢測器模型中的相同數據類型。

  • 消息:數據類型 [inferred‐types您為運算子輸入的] [operator] 與下列運算式不相容:'expression'

    如果運算式結合了與指定運算子不相容的資料類型,您可能會收到此錯誤訊息。例如,在下列運算式中,運算+子與「整數」、「十進位」和「字串」資料類型相容,但不相容於布林資料類型的運算元。

    true + false

    您必須確定搭配運算子使用的資料類型是相容的。

  • 消息:數據類型 [inferred‐types] 找到「」 input‐attribute 不兼容,可能導致運行時錯誤。

    如果相同輸入屬性的兩個運算式針對某個狀態或OnInputLifecycleOnExitLifecycle狀態的兩個資料類型參考兩OnEnterLifecycle種資料類型,您可能會收到此錯誤訊息。確保OnEnterLifecycle(或,OnInputLifecycleOnExitLifecycle)中的表達式為檢測器模型的每個狀態引用相同的數據類型。

  • 訊息:承載運算式 [expression] 無效。指定在執行階段評估為字串的運算式,因為裝載類型是JSON格式。

    如果您指定的有效負載類型是JSON,但無法將其運算式評估為 String,則 AWS IoT Events 可能會收到此錯誤。確保評估的結果是一個字符串,而不是布爾或數字。

  • 消息:您的插值表達式 {interpolated-expression} 必須在執行階段評估為整數或布林值。否則,您的有效負載表達式 {payload-expression} 在運行時將無法解析為有效。JSON

    如果 AWS IoT Events 無法將內插運算式評估為整數或布林值,您可能會收到此錯誤訊息。請確定您的內插運算式可以轉換為整數或布林值,因為不支援其他資料類型,例如 tring。

  • 訊息:IotSitewiseAction欄位中的運算式類型 expression 被定義為類型 defined‐type 並推斷為類型 inferred‐type。 定義的類型和推斷的類型必須相同。

    如果 of 中的運算式定義的資料類型與所 AWS IoT Events推斷propertyValueIotSitewiseAction的資料類型不同,您可能會收到此錯誤訊息。確保在檢測器模型中對此表達式的所有實例使用相同的數據類型。

  • 消息:數據類型 [inferred-types] 用於setTimer動作不評估Integer為以下表達式:expression

    如果持續時間運算式的推斷資料類型不是「整數」或「Decimal」,您可能會收到此錯誤訊息。確保您durationExpression可以轉換為數字。不支援其他資料類型,例如布林值和字串。

  • 消息:數據類型 [inferred-types] 與比較運算子的運算元搭配使用 [operator] 在下列運算式中不相容:expression

    針對的運算元推斷的資料類型 operator 在條件表達式中(expression)您的檢測器型號不匹配。在檢測器模型的所有其他部分中,操作數必須與匹配的數據類型一起使用。

    提示

    您可以使用convert來變更偵測器模型中運算式的資料類型。如需詳細資訊,請參閱要在運算式中使用的函數

referenced-data

含有相關referenced‐data資訊的分析結果會對應下列錯誤訊息:

  • 消息:檢測到損壞的計時器:計時 timer-name 在運算式中使用,但永遠不會設定。

    如果您使用未設定的計時器,可能會收到此錯誤訊息。在運算式中使用計時器之前,您必須先設定計時器。另外,請確保輸入正確的計時器名稱。

  • 訊息:偵測到損毀的變數:變數 variable-name 在運算式中使用,但永遠不會設定。

    如果您使用未設定的變數,可能會收到此錯誤訊息。在運算式中使用變數之前,您必須先設定變數。此外,請確定您輸入正確的變數名稱。

  • 訊息:偵測到中斷的變數:在設定為值之前,會在運算式中使用變數。

    必須將每個變數指派給一個值,才能在運算式中對其進行評估。在每次使用之前設置變量的值,以便可以檢索其值。此外,請確定您輸入正確的變數名稱。

referenced-resource

含有相關referenced‐resource資訊的分析結果會對應下列錯誤訊息:

  • 訊息:偵測器模型定義包含不存在之輸入的參照。

    如果您使用運算式來參考不存在的輸入,可能會收到此錯誤訊息。請確定您的運算式參考現有的輸入,並輸入正確的輸入名稱。如果您沒有輸入,請先創建一個輸入。

  • 訊息:偵測器模型定義包含無效的 InputName: input-name

    如果偵測器模型包含無效的輸入名稱,您可能會收到此錯誤訊息。確保輸入正確的輸入名稱。輸入名稱必須有 1-128 個字元。有效字元:a-z、A-Z、0-9、_ (底線) 和-(連字號)。