

サポート終了通知: 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`」の 2 つの状態を作成します。各ディテクター (インスタンス) は、作成時に「`Normal`」状態になります。インスタンスは、`key`「`motorid`」の一意の値を持つ入力が到着したときに作成されます。

ディテクターインスタンスが 70 以上の圧力測定値を受信すると、「`Dangerous`」状態になり、警告として Amazon SNS メッセージを送信します。3 回の連続入力で圧力測定値が通常 (70 未満) に戻ると、ディテクターは「`Normal`」状態に戻り、別の Amazon SNS メッセージをすべてクリアとして送信します。

このディテクターモデルの例では、Amazon リソースネーム (ARN) が `"targetArn": "arn:aws:sns:us-east-1:123456789012:underPressureAction"` および `"targetArn": "arn:aws:sns:us-east-1:123456789012:pressureClearedAction"` として定義に示されている 2 つの Amazon SNS トピックを作成したことを前提としています。

詳細については、[Amazon Simple Notification Service デベロッパーガイド](https://docs.aws.amazon.com/sns/latest/dg/)を参照してください。具体的には、*Amazon Simple Notification Service 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"
}
```