本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
的偵測器模型分析和診斷資訊 AWS IoT Events
偵測器模型分析會收集下列診斷資訊:
-
層級 – 分析結果的嚴重性層級。根據嚴重性層級,分析結果分為三個一般類別:
-
資訊 (
INFO
) – 資訊結果會告訴您偵測器模型中的重要欄位。這種結果類型通常不需要立即採取行動。 -
警告 (
WARNING
) – 警告結果會特別注意可能導致偵測器模型問題的欄位。建議您在生產環境中使用偵測器模型之前,先檢閱警告並採取必要的動作。否則,偵測器模型可能無法如預期運作。 -
錯誤 (
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.TemperatureInput
),將傳入的溫度資料路由至偵測器模型,才能使用$input.TemperatureInput.sensorData.temperature
參考溫度。
-
請參閱下一節,以針對錯誤進行故障診斷,並從偵測器模型的分析中尋找可能的解決方案。
對 中的偵測器模型錯誤進行故障診斷 AWS IoT Events
上述錯誤類型提供偵測器模型的診斷資訊,並對應至您可能擷取的訊息。使用這些訊息和建議的解決方案,來疑難排解偵測器模型的錯誤。
訊息和解決方案
Location
具有 相關資訊的分析結果Location
對應至下列錯誤訊息:
-
訊息 – 包含有關分析結果的其他資訊。這可以是資訊、警告或錯誤訊息。
如果您指定了 AWS IoT Events 目前不支援的動作,您可能會收到此錯誤訊息。如需支援動作的清單,請參閱 在 中接收資料和觸發動作的支援動作 AWS IoT Events。
supported-actions
具有 相關資訊的分析結果supported‐actions
對應至下列錯誤訊息:
-
訊息:動作定義中存在無效的動作類型:
action-definition
。如果您指定 AWS IoT Events 目前不支援的動作,您可能會收到此錯誤訊息。如需支援動作的清單,請參閱 在 中接收資料和觸發動作的支援動作 AWS IoT Events。
-
Message: DetectorModel definition 具有
aws-service
動作,但區域 不支援aws-service
此服務region-name
。如果您指定的動作受到支援 AWS IoT Events,但目前區域中無法使用該動作,則可能會收到此錯誤訊息。當您嘗試將資料傳送至 區域中無法使用 AWS 的服務時,可能會發生這種情況。您還必須為 AWS IoT Events 和 AWS 您正在使用的服務選擇相同的區域。
service-limits
具有 相關資訊的分析結果service‐limits
對應至下列錯誤訊息:
-
訊息:承載中允許的內容表達式超過
event-name
狀態為 時的限制content-expression-size
位元組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
物件陣列。請務必將每個動作定義為個別的物件。 -
訊息: TransitionEvent
transition-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
如果您同時使用
seconds
和durationExpression
做為計時器,您可能會收到此錯誤訊息。請確定您使用seconds
或durationExpression
做為 的參數SetTimerAction
。如需詳細資訊,請參閱 AWS IoT Events API 參考中的「SetTimerAction」。 -
訊息:無法連線偵測器模型中的動作。檢查啟動動作的條件。
如果偵測器模型中的動作無法連線,則事件的條件會評估為 false。檢查包含 動作的事件條件,以確保其評估為 true。當事件的條件評估為 true 時,動作應該可以連線。
-
訊息:正在讀取輸入屬性,但這可能是計時器過期所造成。
發生下列任一情況時,可以讀取輸入屬性的值:
-
已收到新的輸入值。
-
當偵測器中的計時器過期時。
若要確保只有在收到輸入的新值時才會評估輸入屬性,請在您的 條件中包含對
triggerType(“Message”)
函數的呼叫,如下所示:在偵測器模型中評估的原始條件:
if ($input.HeartBeat.status == “OFFLINE”)
會變成類似以下內容:
if ( triggerType("MESSAGE") && $input.HeartBeat.status == “OFFLINE”)
其中對
triggerType(“Message”)
函數的呼叫在條件中提供的初始輸入之前。透過使用此技術,triggerType("Message")
函數將評估為 true,並滿足接收新輸入值的條件。如需triggerType
函數使用方式的詳細資訊,請在 AWS IoT Events 開發人員指南中的表達式區段triggerType
中搜尋 。 -
-
訊息:無法連線偵測器模型中的狀態。檢查會導致 轉換為所需狀態的條件。
如果偵測器模型中的狀態無法連線,則會導致傳入轉換至該狀態的條件會評估為 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
和 的變數value
。value
可以是字串、數字或布林值。您也可以指定 的表達式value
。如需詳細資訊,請參閱 AWS IoT Events API 參考SetVariableAction中的 。 -
訊息:我們無法剖析 DynamoDB 動作屬性 (
attribute-name
) 的表達式。使用正確的語法輸入表達式。您必須對
DynamoDBAction
. 替代範本中的所有參數使用表達式。如需詳細資訊,請參閱 AWS IoT Events API參考中的 DynamoDBAction。 -
訊息:我們無法剖析 DynamoDBv2 動作 tableName 的 表達式。使用正確的語法輸入表達式。
tableName
中的DynamoDBv2Action
必須是字串。您必須使用 的表達式tableName
。表達式接受文字、運算子、函數、參考和替代範本。如需詳細資訊,請參閱 AWS IoT Events API參考中的 DynamoDBv2Action。 -
訊息:我們無法評估您的表達式為有效的 JSON。DynamoDBv2 動作僅支援JSON承載類型。
的承載類型
DynamoDBv2
必須是 JSON。確定 AWS IoT Events 可以評估您的內容表達式,以將承載評估為有效的 JSON。如需詳細資訊,請參閱 AWS IoT Events API參考中的 DynamoDBv2Action。 -
訊息:我們無法剖析 承載的內容表達式
action-type
。使用正確的語法輸入內容表達式。內容表達式可以包含字串 ('
string
')、變數 ($variable.variable-name
)、輸入值 ($inputinput-name
..path-to-datum
)、字串串連,以及包含 的字串。${}
-
訊息:自訂承載必須是非空白的。
如果您為動作選擇自訂承載,且未在 AWS IoT Events 主控台中輸入內容表達式,則可能會收到此錯誤訊息。如果您選擇自訂承載,則必須在自訂承載下輸入內容表達式。如需詳細資訊,請參閱 AWS IoT Events API參考中的承載。
-
訊息:無法剖析計時器 '
duration-expression
' 的持續時間表達式 'timer-name
'。計時器持續時間表達式的評估結果必須是介於 60–31622400 之間的值。持續時間的評估結果會四捨五入到最接近的整數。
-
訊息:無法剖析 的表達式 '
expression
'action-name
如果指定動作的表達式語法不正確,您可能會收到此訊息。請確定您使用正確的語法輸入表達式。如需詳細資訊,請參閱在 中篩選裝置資料和定義動作的語法 AWS IoT Events。
-
訊息:
IotSitewiseAction
無法剖析fieldName
的 。您必須在表達式中使用正確的語法。如果 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
為布林值,您可能會收到此錯誤訊息。布林值必須為TRUE
或FALSE
。請確定您的條件表達式可以轉換為布林值。如果結果不是布林值,則等於FALSE
,且 不會叫用動作或轉換至事件中nextState
指定的 。 -
訊息:在下列表達式
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 運算式中輸入和變數的參考。
-
-
訊息:搭配 使用的不相容資料類型 【
inferred-types
】reference
。這可能會導致執行時間錯誤。如果相同輸入屬性或變數的兩個表達式參考兩種資料類型,您可能會收到此警告訊息。請確定相同輸入屬性或變數的表達式參考偵測器模型中的相同資料類型。
-
訊息:您為運算子 【
inferred‐types
】 輸入的資料類型 【operator
】 與下列表達式不相容:'expression
'如果您的表達式結合與指定運算子不相容的資料類型,您可能會收到此錯誤訊息。例如,在以下表達式中,運算子與整數、十進位和字串資料類型
+
相容,但與布林資料類型的運算元不相容。true + false
您必須確保您與 運算子搭配使用的資料類型相容。
-
訊息:找到的資料類型 【
inferred‐types
】input‐attribute
不相容,可能導致執行期錯誤。如果相同輸入屬性的兩個表達式參考狀態
OnEnterLifecycle
的兩種資料類型,或狀態OnExitLifecycle
的OnInputLifecycle
和 的兩種資料類型,則您可能會收到此錯誤訊息。確定您在OnEnterLifecycle
(或OnInputLifecycle
和OnExitLifecycle
) 中的表達式參考偵測器模型每個狀態的相同資料類型。 -
訊息:承載表達式 【
expression
】 無效。指定將在執行時間評估為字串的表達式,因為承載類型為 JSON 格式。如果您指定的承載類型為 JSON,但 AWS IoT Events 無法評估其表達式為字串,則可能會收到此錯誤。確定評估的結果是字串,而不是布林值或數字。
-
訊息:您的插補表達式 {
interpolated-expression
} 必須在執行時間評估為整數或布林值。否則,您的承載表達式 {payload-expression
} 在執行時間將無法剖析為有效的 JSON。如果 AWS IoT Events 無法將插補表達式評估為整數或布林值,您可能會收到此錯誤訊息。請確定您的插補表達式可以轉換為整數或布林值,因為不支援其他資料類型,例如 tring。
-
訊息:
IotSitewiseAction
欄位中的表達式類型expression
定義為類型,defined‐type
並推斷為類型inferred‐type
。定義的類型和推斷的類型必須相同。如果您在
propertyValue
中的表達式IotSitewiseAction
具有與推斷的資料類型不同的定義,您可能會收到此錯誤訊息 AWS IoT Events。請確定您在偵測器模型中使用此表達式的所有執行個體使用相同的資料類型。 -
訊息:用於
setTimer
動作的資料類型 【inferred-types
】 不會Integer
針對下列表達式評估為 :expression
如果持續時間表達式的推斷資料類型不是整數或小數,您可能會收到此錯誤訊息。請確定您的
durationExpression
可以轉換為數字。不支援其他資料類型,例如布林值和字串。 -
訊息:與比較運算子 【
inferred-types
】 運算元搭配使用的資料類型 【operator
】 與下列表達式不相容:expression
偵測器模型的條件式表達式 (
expression
)operator
中 運算元的推斷資料類型不相符。運算元必須搭配偵測器模型所有其他部分的相符資料類型使用。提示
您可以使用
convert
來變更偵測器模型中表達式的資料類型。如需詳細資訊,請參閱要在 AWS IoT Events 運算式中使用的函數。
referenced-data
具有 相關資訊的分析結果referenced‐data
對應至下列錯誤訊息:
-
訊息:偵測到中斷的計時器:計時器
timer-name
用於表達式,但從未設定。如果您使用未設定的計時器,可能會收到此錯誤訊息。您必須先設定計時器,才能在表達式中使用計時器。此外,請確定您輸入正確的計時器名稱。
-
訊息:偵測到損壞的變數:變數
variable-name
用於表達式,但從未設定。如果您使用未設定的變數,可能會收到此錯誤訊息。您必須先設定變數,才能在表達式中使用它。此外,請確定您輸入正確的變數名稱。
-
訊息:偵測到損壞的變數:變數在設定為值之前會先用於表達式。
每個變數都必須指派給一個值,才能在表達式中進行評估。在每次使用之前設定變數的值,以便擷取其值。此外,請確定您輸入正確的變數名稱。
referenced-resource
具有 相關資訊的分析結果referenced‐resource
對應至下列錯誤訊息:
-
訊息:偵測器模型定義包含參考不存在的輸入。
如果您使用表達式來參考不存在的輸入,您可能會收到此錯誤訊息。請確定您的表達式參考現有的輸入,並輸入正確的輸入名稱。如果您沒有輸入,請先建立一個。
-
訊息:偵測器模型定義包含無效 InputName:
input-name
如果您的偵測器模型包含無效的輸入名稱,您可能會收到此錯誤訊息。請確定您輸入正確的輸入名稱。輸入名稱必須有 1-128 個字元。有效字元:a-z、A-Z、0-9、_ (底線) 和 - (連字號)。