在 中將訊息作為輸入傳送到偵測器 AWS IoT Events - AWS IoT Events

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

在 中將訊息作為輸入傳送到偵測器 AWS IoT Events

您現在已定義輸入,識別從裝置傳送訊息中的重要欄位 (請參閱 建立 AWS IoT Events 輸入以擷取裝置資料)。在上一節中,您建立的 detector model會回應馬達中的過壓事件 (請參閱 建立偵測器模型以代表 中的裝置狀態 AWS IoT Events)。

若要完成此範例,請從裝置 (在此情況下為 AWS CLI 已安裝 的電腦) 傳送訊息,做為偵測器的輸入。

注意

當您建立偵測器模型或更新現有偵測器模型時,在新的或更新的偵測器模型開始接收訊息和建立偵測器 (執行個體) 之前,需要幾分鐘的時間。如果您更新偵測器模型,在此期間,您可能會繼續看到根據先前版本的行為。

使用下列 AWS CLI 命令來傳送訊息,其中包含違反閾值的資料。

aws iotevents-data batch-put-message --cli-input-json file://highPressureMessage.json --cli-binary-format raw-in-base64-out

檔案「highPressureMessage.json」包含下列項目。

{ "messages": [ { "messageId": "00001", "inputName": "PressureInput", "payload": "{\"motorid\": \"Fulton-A32\", \"sensorData\": {\"pressure\": 80, \"temperature\": 39} }" } ] }

您必須變更每個傳送的訊息messageId中的 。如果您不變更訊息, AWS IoT Events 系統會刪除重複訊息。如果訊息與過去五分鐘內傳送的messageID另一個訊息相同,則 AWS IoT Events 忽略訊息。

此時,會建立偵測器 (執行個體) 來監控馬達 的事件"Fulton-A32"。此偵測器在建立時會進入 "Normal" 狀態。但由於我們傳送了超過閾值的壓力值,因此會立即轉換為 "Dangerous" 狀態。如此一來,偵測器會傳送訊息至 Amazon SNS端點,其ARN為 arn:aws:sns:us-east-1:123456789012:underPressureAction

執行下列 AWS CLI 命令,以傳送資料低於壓力閾值的訊息。

aws iotevents-data batch-put-message --cli-input-json file://normalPressureMessage.json --cli-binary-format raw-in-base64-out

檔案normalPressureMessage.json包含下列項目。

{ "messages": [ { "messageId": "00002", "inputName": "PressureInput", "payload": "{\"motorid\": \"Fulton-A32\", \"sensorData\": {\"pressure\": 60, \"temperature\": 29} }" } ] }

每次在五分鐘內調用 BatchPutMessage 命令時,都必須變更messageId檔案中的 。再傳送訊息兩次。訊息傳送三次後,馬達 "Fulton-A32" 的偵測器 (執行個體) 會傳送訊息至 Amazon SNS端點"arn:aws:sns:us-east-1:123456789012:pressureClearedAction",然後重新進入 "Normal" 狀態。

注意

您可以使用 一次傳送多則訊息BatchPutMessage。不過,無法保證處理這些訊息的順序。若要保證訊息 (輸入) 會依序處理,請一次傳送一個訊息,並在每次呼叫 API 時等待成功回應。

以下是本節中描述的偵測器模型範例所建立SNS的訊息承載範例。

事件發生時「違反壓力閾值」

IoT> { "eventTime":1558129816420, "payload":{ "actionExecutionId":"5d7444df-a655-3587-a609-dbd7a0f55267", "detector":{ "detectorModelName":"motorDetectorModel", "keyValue":"Fulton-A32", "detectorModelVersion":"1" }, "eventTriggerDetails":{ "inputName":"PressureInput", "messageId":"00001", "triggerType":"Message" }, "state":{ "stateName":"Dangerous", "variables":{ "pressureThresholdBreached":3 }, "timers":{} } }, "eventName":"Pressure Threshold Breached" }

發生「恢復正常壓力」事件時

IoT> { "eventTime":1558129925568, "payload":{ "actionExecutionId":"7e25fd38-2533-303d-899f-c979792a12cb", "detector":{ "detectorModelName":"motorDetectorModel", "keyValue":"Fulton-A32", "detectorModelVersion":"1" }, "eventTriggerDetails":{ "inputName":"PressureInput", "messageId":"00004", "triggerType":"Message" }, "state":{ "stateName":"Dangerous", "variables":{ "pressureThresholdBreached":0 }, "timers":{} } }, "eventName":"Normal Pressure Restored" }

如果您已定義任何計時器,其目前狀態也會顯示在SNS訊息承載中。

訊息承載包含傳送訊息時偵測器 (執行個體) 狀態的相關資訊 (即執行SNS動作時)。您可以使用 https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_DescribeDetector.html操作來取得偵測器狀態的類似資訊。