偵測器模型分析與診斷資訊 - 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資訊的分析結果會對應下列錯誤訊息:

  • 訊息:動作定義中存在無效的動作類型:作定義。

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

  • 訊息: DetectorModel 定義具有aws-service動作,但區名稱不支援aws-service服務。

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

service-limits

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

  • 訊息:有效負載中允許的內容運算式超過狀態名稱中事件事件名稱的限制content-expression-size位元組。

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

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

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

  • 消息:計時器計時器名稱的持續時間至少minimum-timer-duration應為秒長。

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

  • 訊息:每個事件允許的動作數量超過偵測器模型定義actions-per-event中的限制

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

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

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

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

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

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

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

structure

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

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

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

  • 訊息: TransitionEventtransition-event-name轉換為不存在的狀態名稱。

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

  • 消息: DetectorModelDefinition 有一個共享狀態名稱:找到重複的狀態名稱number-of-states

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

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

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

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

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

  • 訊息:只能在中設定秒數和持續時間中的一個表示式。 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資訊的分析結果會對應下列錯誤訊息:

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

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

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

    您可SetVariableAction以使用name和定義變數valuevalue可以是字串、數字或布林值。您也可以指定的表示式value。如需詳細資訊 SetVariableAction,請參閱 AWS IoT EventsAPI 參考中的。

  • 訊息:我們無法剖析 DynamoDB 動作的屬性 (屬性名稱) 運算式。使用正確的語法輸入表示式。

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

  • 訊息:我們無法針對 DynamoDBv2 動作剖析您的 tableName 運算式。使用正確的語法輸入表示式。

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

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

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

  • 消息:我們無法解析您的內容表達式以獲取動作類型的有效負載。使用正確的語法輸入內容表示式。

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

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

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

  • 訊息:無法剖析計時器「計時器名稱」的持續時間運算式「持續時間表示」。

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

  • 訊息:無法剖析動作名稱的運算式 '運'

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

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

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

data-type

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

  • 消息:計時器計時器定時器名稱的持續時間表達式持續時間表達式無效,它必須返回一個數字。

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

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

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

  • 訊息:在下列運算式中找到不相容的資料類型 [推斷型別] 可供參考:運算式

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

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

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

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

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

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

      例如,下列timeout("time-name")函數需要以雙引號做為引數的字串。如果您使用計時器名稱值的參考,則必須使用雙引號引用字串。

      timeout("timer-name")
      注意

      對於convert(type, expression)函數,如果您使用類型值的引用,則引用的評估結果必須是StringDecimal、或Boolean

    如需詳細資訊,請參閱 參考

  • 消息:不兼容的數據類型 [推斷類型] 與參考一起使用。這可能會導致執行階段錯誤。

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

  • 訊息:您為運算子 [運算子] 輸入的資料類型 [推斷型別] 與下列運算式不相容:'expression'

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

    true + false

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

  • 訊息:針對輸入屬性找到的資料類型 [推斷型別] 不相容,可能會導致執行階段錯誤。

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

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

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

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

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

  • 消息:IotSitewiseAction字段表達式中的表達式類型被定義為類型定義類型,並推斷為推斷類型定義的類型和推斷的類型必須相同。

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

  • 消息:用於setTimer動作的數據類型 [推斷類型] 不會評估Integer為以下表達式:表達式

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

  • 訊息:與比較運算子 [運算子] 之運算元搭配使用的資料類型 [推斷型別] 在下列運算式中不相容:運算式

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

    提示

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

referenced-data

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

  • 訊息:偵測到損壞的計時器:計時器計時器名稱用於運算式中,但永遠不會設定。

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

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

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

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

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

referenced-resource

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

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

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

  • 訊息:偵測器模型定義包含無效 InputName:輸入名稱

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