本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将消息作为输入发送给探测器 Amazon IoT Events
现在您已定义了一个输入,用于识别从设备发送的消息中的重要字段(参见创建用于捕获设备数据的 Amazon IoT Events 输入)。在上一节中,您创建了一个detector model
,它可以响应电机的过压事件(参见创建用于表示设备状态的探测器模型 Amazon IoT Events)。
要完成此示例,请将来自设备(此例中为已安装 Amazon CLI 的计算机)的消息作为输入发送至探测器。
注意
创建探测器模型或更新现有探测器模型时,新的或更新的探测器模型需要几分钟才能开始接收消息和创建探测器(实例)。如果您更新探测器模型,则在此期间,您可能会继续看到基于先前版本的行为。
使用以下 Amazon 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
。如果您不对其进行更改, Amazon IoT Events 系统会对消息进行重复数据删除。 Amazon IoT Events 如果一条消息与最近五分钟内发送的另一封邮件messageID
相同,则忽略该消息。
此时,将创建一个探测器(实例)以监视电机事件"Fulton-A32"
。该探测器在创建时进入 "Normal"
状态。但是,由于我们发送的压力值高于阈值,因此它会立即转换为 "Dangerous"
状态。在此过程中,探测器会向 ARN 为arn:aws:sns:us-east-1:123456789012:underPressureAction
的 Amazon SNS 端点发送消息。
运行以下 Amazon 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.amazonaws.cn/iotevents/latest/apireference/API_iotevents-data_DescribeDetector.html 操作获取有关探测器状态的类似信息。