创建检测器模型 - Amazon IoT Events
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建检测器模型

在本主题中,您将定义探测器模型(您的设备或进程的模型)使用状态

对于每种状态,您定义条件(布尔值)逻辑,该逻辑评估传入的输入以检测重要事件。当检测到事件时,它会更改状态并触发其他操作。这些事件称为过渡事件。

在您的状态中,您还可以定义事件,这些事件可以在检测器进入或退出该状态或收到输入时执行操作(这些事件称为OnEnterOnExitOnInput事件)。只有当事件的条件逻辑计算为true

创建检测器模型

  1. 已为您创建第一个检测器状态。要修改它,请选择带有标签的圆状态 _1在主编辑空间中创建。

    
            在Amazon IoT Events控制台。
  2. 窗格中,输入州名称OnEnter中,选择添加事件

    
            在Amazon IoT Events控制台。
  3. 在存储库的添加 OnEnter页面上,输入Event name (事件名称)事件条件。在此示例中,输入true以指示在进入状态时始终触发事件。

  4. INDER事件操作中,选择添加操作

    
            在Amazon IoT Events控制台。
  5. INDER事件操作中,执行以下操作:

    1. Select设置变量

    2. 适用于变量操作中,选择分配值

    3. 适用于变量名称中,输入要设置的变量的名称。

    4. 适用于变量值中,输入值0(零).

    
            在Amazon IoT Events控制台。
  6. 选择 Save

    
            在Amazon IoT Events控制台。

    在检测器模型中的任何情况下,都可以设置一个变量(如您定义的变量)。但是,只有在检测器达到状态并执行定义或设置的操作后,才能引用它的值(例如,在事件的条件逻辑中)。

  7. 窗格中,选择X旁边的返回到探测器模型调色板

    
            在Amazon IoT Events控制台。
  8. 要创建第二个检测器状态,请在探测器模型调色板中,选择并将其拖动到主编辑空间中。这会创建一个名为untitled_state_1

    
            在Amazon IoT Events控制台。
  9. 暂停第一个状态(普通)。状态周长上会出现一个箭头。

  10. 单击并将箭头从第一个状态拖动到第二个状态。从第一个状态到第二个状态的有向线(标记为无标题)。

    
            在Amazon IoT Events控制台。
  11. 选择无标题行。在转移事件窗格中,输入Event name (事件名称)事件触发器逻辑

    
            在Amazon IoT Events控制台。
  12. 转移事件窗格中,选择添加操作

    
            在Amazon IoT Events控制台。
  13. 在存储库的添加过渡事件操作窗格中,选择添加操作

    
            在Amazon IoT Events控制台。
  14. 适用于选择一个操作中,选择设置变量

    1. 适用于变量操作中,选择分配值

    2. 适用于变量名称中,输入变量的名称。

    3. 适用于分配值中,输入如下值:$variable.pressureThresholdBreached + 3

    4. 选择 Save

    
            在Amazon IoT Events控制台。
  15. 选择第二个状态无标题状态 _1

  16. 窗格中,输入州名称输入时中,选择添加事件

    
            在Amazon IoT Events控制台。
  17. 在存储库的添加 OnEnter页面上,输入Event name (事件名称)事件条件,然后选择添加操作

    
            在Amazon IoT Events控制台。
  18. 适用于选择一个操作中,选择发送 SNS 消息

    1. 适用于SNS 主题中,输入 SNS 主题的目标 ARN。

    2. 选择 Save

    
            在Amazon IoT Events控制台。
  19. 继续在示例中添加事件。

    1. 适用于OnInput中,选择添加事件,然后输入并保存以下事件信息。

      Event name: Overpressurized Event condition: $input.PressureInput.sensorData.pressure > 70 Event actions: Set variable: Variable operation: Assign value Variable name: pressureThresholdBreached Assign value: 3
    2. 适用于OnInput中,选择添加事件,然后输入并保存以下事件信息。

      Event name: Pressure Okay Event condition: $input.PressureInput.sensorData.pressure <= 70 Event actions: Set variable: Variable operation: Decrement Variable name: pressureThresholdBreached
    3. 适用于OnExit中,选择添加事件,然后使用您创建的 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
  20. 暂停第二个状态(危险)。一个箭头出现在状态的周长上

  21. 单击并将箭头从第二个状态拖动到第一个状态。带有标签的定向线无标题此时会显示。

    
            在Amazon IoT Events控制台。
  22. 选择无标题行中,并在转移事件窗格中,输入Event name (事件名称)事件触发器逻辑使用以下信息。

    { Event name: BackToNormal Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0 }
    
            在Amazon IoT Events控制台。

    有关为什么我们测试$input值和$variable值,请参阅探测器模型限制

  23. 选择启动状态。默认情况下,此状态是在创建检测器模型时创建的)。在启动窗格中,选择目标状态(例如,普通)。

    
            在Amazon IoT Events控制台。
  24. 接下来,配置检测器型号以侦听输入。在右上角,选择和。发布

  25. 在存储库的发布检测器模型页面上,执行以下操作。

    1. 输入一个探测器模型名,a说明,以及角色。此角色将为您创建。

    2. 选择为每个唯一键值创建一个检测器。创建和使用您自己的密钥角色,请按照中的步骤操作 使用 IAM 控制台管理角色和权限并将其输入为角色在这里。

      
                将检测器模型发布在Amazon IoT Events控制台。
  26. 适用于探测器创建密钥中,选择您之前定义的输入属性之一的名称。您选择作为检测器创建密钥的属性必须存在于每个消息输入中,并且对于每个发送消息的设备必须是唯一的。此示例使用电动属性。

  27. 选择保存并发布

    
            在Amazon IoT Events控制台。

您可以创建检测器模型定义的备份副本(在 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" } } }