

终止支持通知：2026 年 5 月 20 日， AWS 将终止对的支持。 AWS IoT Events 2026 年 5 月 20 日之后，您将无法再访问 AWS IoT Events 控制台或 AWS IoT Events 资源。有关更多信息，请参阅[AWS IoT Events 终止支持](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html)。

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

# 创建用于表示设备状态的探测器模型 AWS IoT Events
<a name="iotevents-create-detector"></a>

在[创建用于捕获设备数据的 AWS IoT Events 输入](iotevents-create-input.md)，您根据电机压力数据报告消息，创建了`input`。继续举例，有一个响应电机过压事件的探测器模型。

您可以创建两种状态：“`Normal`”和“`Dangerous`”。创建后，每种探测器（实例）都会进入“`Normal`”状态。当具有唯一`key`值的“`motorid`”输入到达时，可创建实例。

如果探测器实例收到的压力读数为 70 或以上，它将进入“`Dangerous`”状态并发送 Amazon SNS 消息作为警告。如果连续三次输入的压力读数恢复正常（小于 70），探测器将返回“`Normal`”状态，并发送另一条 Amazon SNS 消息作为警报解除信号。

此示例检测器模型假设您创建了两个 Amazon SNS 主题，其亚马逊资源名称 (ARNs) 在定义中显示为`"targetArn": "arn:aws:sns:us-east-1:123456789012:underPressureAction"`和。`"targetArn": "arn:aws:sns:us-east-1:123456789012:pressureClearedAction"`

有关更多信息，请参阅《[亚马逊简单通知服务开发者指南》](https://docs.aws.amazon.com/sns/latest/dg/)，更具体地说，请参阅《*亚马逊简单通知服务 API 参考*》中的[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)操作文档。

此示例还假设您已创建具有相应权限的 AWS Identity and Access Management (IAM) 角色。该角色的 ARN 在探测器模型定义中显示为`"roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole"`。按[为设置权限 AWS IoT Events](iotevents-permissions.md)中的步骤创建此角色，将角色的 ARN 复制到探测器模型定义的适当位置。

您可以使用以下 AWS CLI 命令创建探测器模型。

```
aws iotevents create-detector-model  --cli-input-json file://motorDetectorModel.json
```

`"motorDetectorModel.json"` 文件包含以下内容。

```
{
  "detectorModelName": "motorDetectorModel",
  "detectorModelDefinition": {
    "states": [
      {
        "stateName": "Normal",
        "onEnter": {
          "events": [
            {
              "eventName": "init",
              "condition": "true",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "0"
                  }
                }
              ]
            }
          ]
        },
        "onInput": {
          "transitionEvents": [
            {
              "eventName": "Overpressurized",
              "condition": "$input.PressureInput.sensorData.pressure > 70",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "$variable.pressureThresholdBreached + 3"
                  }
                }
              ],
              "nextState": "Dangerous"
            }
          ]
        }
      }, 
      {
        "stateName": "Dangerous",
        "onEnter": {
          "events": [
            {
              "eventName": "Pressure Threshold Breached",
              "condition": "$variable.pressureThresholdBreached > 1",
              "actions": [
                {
                  "sns": {
                    "targetArn": "arn:aws:sns:us-east-1:123456789012:underPressureAction"
                  }
                }
              ]
            }
          ]
        },
        "onInput": {
          "events": [
            {
              "eventName": "Overpressurized",
              "condition": "$input.PressureInput.sensorData.pressure > 70",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "3"
                  }
                }
              ]
            },
            {
              "eventName": "Pressure Okay",
              "condition": "$input.PressureInput.sensorData.pressure <= 70",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "$variable.pressureThresholdBreached - 1"
                  }
                }
              ]
            }
          ],
          "transitionEvents": [
            {
              "eventName": "BackToNormal",
              "condition": "$input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 1",
              "nextState": "Normal"
            }
          ]
        },
        "onExit": {
          "events": [
            {
              "eventName": "Normal Pressure Restored",
              "condition": "true",
              "actions": [
                {
                  "sns": {
                    "targetArn": "arn:aws:sns:us-east-1:123456789012:pressureClearedAction"
                  }
                }
              ]
            }
          ]
        }
      }
    ],
    "initialStateName": "Normal"
  },
  "key" : "motorid",
  "roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole"
}
```