创建检测器模型
在本主题中,您定义了 检测器型号 (您的设备或工艺型号) 状态.
对于每个状态,您定义条件(布尔)逻辑,用于评估传入输入以检测重要事件。检测到事件时,它将更改状态并可以触发其他操作。这些事件被称为过渡事件。
在您所在的状态下,您还可以定义每当检测器进入或退出该状态或接收到输入时可以执行操作的事件(这些事件被称为 OnEnter
, OnExit
和 OnInput
事件)。只有在事件的条件逻辑评估为 true
.
创建检测器模型
-
已为您创建第一个检测器状态。要修改它,请选择带标签的圆圈 状态_1 主编辑空间中。
-
在 状态 窗格,输入 州名称 和 输入,选择 添加事件.
-
在 附加Enter事件 页面中,输入 事件名称 和 事件情况. 在这个例子中,输入
true
指示在输入状态时始终触发事件。 -
低于 事件操作,选择 添加操作.
-
低于 事件操作,请执行以下操作:
-
选择 设置变量
-
对于 变量运算,选择 分配值.
-
对于 变量名称,输入要设置的变量的名称。
-
对于 变量值,输入值
0
(零)。
-
-
选择 Save (保存)。
与您定义的变量一样,变量可在检测器模型中的任何事件中被设置(给出一个值)。但是,只有在检测器达到状态并执行定义或设置它的操作后,它的值才能被引用(例如,在事件的条件逻辑中)。
-
在 状态 窗格中,选择 X 旁边 状态 返回 检测器型号面板.
-
要创建第二检测器状态,请在 检测器型号面板,选择 状态 并将其拖入主编辑空间。这样会创建一个名为
untitled_state_1
. -
在第一个状态暂停(正常)。状态的圆周上会出现一个箭头。
-
单击箭头并将其从第一状态拖动到第二状态。从第一状态到第二状态的引导线(标记为 未命名)出现。
-
选择 未命名 行。在 过渡事件 窗格中,输入 事件名称 和 事件触发逻辑.
-
在 过渡事件 窗格,选择 添加操作.
-
在 添加过渡事件操作 窗格,选择 添加操作.
-
对于 选择一项操作,选择 设置变量.
-
对于 变量运算,选择 分配值.
-
对于 变量名称,输入变量的名称。
-
对于 分配值,输入值,例如:
$variable.pressureThresholdBreached + 3
-
选择 Save (保存)。
-
-
选择第二个状态 无标题_状态_1.
-
在 状态 窗格,输入 州名称 和 输入时,选择 添加事件.
-
在 附加Enter事件 页面中,输入 事件名称, 事件情况 选择 添加操作.
-
对于 选择一项操作,选择 发送SNS消息.
-
对于 SNS主题,输入您的SNS主题的目标ARN。
-
选择 Save (保存)。
-
-
继续在示例中添加事件。
-
对于 输入时,选择 添加事件,然后输入并保存以下事件信息。
Event name: Overpressurized Event condition: $input.PressureInput.sensorData.pressure > 70 Event actions: Set variable: Variable operation: Assign value Variable name: pressureThresholdBreached Assign value: 3
-
对于 输入时,选择 添加事件,然后输入并保存以下事件信息。
Event name: Pressure Okay Event condition: $input.PressureInput.sensorData.pressure <= 70 Event actions: Set variable: Variable operation: Decrement Variable name: pressureThresholdBreached
-
对于 退出时,选择 添加事件,然后使用您创建的SNS主题的ARN输入并保存以下事件信息。
Event name: Normal Pressure Restored Event condition: true Event actions: Send SNS message: Target arn:
arn:aws:sns:us-east-1:123456789012:pressureClearedAction
-
-
在第二个状态暂停(危险的
)。状态圆周上出现一个箭头
-
单击箭头并将其从第二个状态拖动到第一个状态。带标签的引导线 未命名 出现。
-
选择 未命名 行和 过渡事件 窗格中,输入 事件名称 和 事件触发逻辑 使用以下信息。
{ Event name: BackToNormal Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0 }
有关我们为什么要测试
$input
值和$variable
触发逻辑中的值,请参阅中变量值的可用性条目 检测器型号限制. -
选择 开始 状态。默认情况下,此状态是在创建检测器模型时创建的)。在 开始 窗格中,选择 目的地状态 (例如, 正常)。
-
接下来,配置您的检测器模型以侦听输入。在右上角,选择 发布.
-
在 发布检测器模型 ,请执行以下。
-
输入 检测器型号名称,a 描述,以及 角色. 将为您创建此角色。
-
选择 为每个唯一键值创建检测器. 创建和使用您自己的 角色,请按照 使用 IAM 控制台管理角色和权限 然后输入为 角色 在这里。
-
-
对于 检测器创建密钥,选择您之前定义的输入属性之一的名称。您选择作为检测器创建密钥的属性必须存在于每个消息输入中,并且对于发送消息的每个设备必须是唯一的。本示例使用 摩迪 属性。
-
选择保存并发布。
您可以创建检测器模型定义的备份副本(在JSON中)重新创建或更新检测器模型,或用作模板以创建另一个检测器模型。
您可以从控制台或通过使用以下CLI命令执行此操作。如有必要,更改检测器型号的名称,使其与您在上一步中发布时所使用的名称相匹配。
aws iotevents describe-detector-model --detector-model-name motorDetectorModel > motorDetectorModel.json
这将创建一个文件(motorDetectorModel.json
)的内容类似于以下。
{ "detectorModel": { "detectorModelConfiguration": { "status": "ACTIVE", "lastUpdateTime": 1552072424.212, "roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole", "creationTime": 1552072424.212, "detectorModelArn": "arn:aws:iotevents:us-west-2:123456789012:detectorModel/motorDetectorModel", "key": "motorid", "detectorModelName": "motorDetectorModel", "detectorModelVersion": "1" }, "detectorModelDefinition": { "states": [ { "onInput": { "transitionEvents": [ { "eventName": "Overpressurized", "actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached + 3" } } ], "condition": "$input.PressureInput.sensorData.pressure > 70", "nextState": "Dangerous" } ], "events": [] }, "stateName": "Normal", "onEnter": { "events": [ { "eventName": "init", "actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "0" } } ], "condition": "true" } ] }, "onExit": { "events": [] } }, { "onInput": { "transitionEvents": [ { "eventName": "Back to Normal", "actions": [], "condition": "$variable.pressureThresholdBreached <= 1 && $input.PressureInput.sensorData.pressure <= 70", "nextState": "Normal" } ], "events": [ { "eventName": "Overpressurized", "actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "3" } } ], "condition": "$input.PressureInput.sensorData.pressure > 70" }, { "eventName": "Pressure Okay", "actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached - 1" } } ], "condition": "$input.PressureInput.sensorData.pressure <= 70" } ] }, "stateName": "Dangerous", "onEnter": { "events": [ { "eventName": "Pressure Threshold Breached", "actions": [ { "sns": { "targetArn": "arn:aws:sns:us-west-2:123456789012:MyIoTButtonSNSTopic" } } ], "condition": "$variable.pressureThresholdBreached > 1" } ] }, "onExit": { "events": [ { "eventName": "Normal Pressure Restored", "actions": [ { "sns": { "targetArn": "arn:aws:sns:us-west-2:123456789012:IoTVirtualButtonTopic" } } ], "condition": "true" } ] } } ], "initialStateName": "Normal" } } }