

サポート終了通知: 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-detector-model"></a>

このトピックでは、*状態*を使用して*ディテクターモデル* (機器またはプロセスのモデル) を定義します。

状態ごとに、重要なイベントを検出するために着信入力を評価する条件付き (ブール) ロジックを定義します。イベントが検出されると、状態が変化し、追加のアクションを開始できます。これらのイベントは、移行イベントと呼ばれます。

この状態では、ディテクターがその状態になるか、その状態を終了するたびに、あるいは入力を受信したときにアクションを実行できるイベント (それぞれ `OnEnter`、`OnExit`、`OnInput` イベントと呼ばれる) の定義もします 。アクションは、イベントの条件付きロジックが `true` と評価された場合にのみ実行されます。

**ディテクターモデルを作成するには**

1. 最初のディテクターの状態が作成されました。変更するには、メインの編集スペースで **State\$11** というラベルの付いた円を選択します。

1. **状態**ペインで、**状態名**を入力し、**OnEnter**で**イベントの追加**を選択します。

1. **OnEnterイベントの追加**ページで、**イベント名**と**イベント条件**を入力します。この例では、`true` と入力して、状態に入ったときにイベントが常に開始されることを示します。

1. **イベントアクション**で、**アクションの追加**を選択します。

1. **イベントアクション**で、次の手順を実行します。

   1. **可変の設定**を選択します

   1.  **可変オペレーション**の場合は、**値の割当**を選択します。

   1. **可変名**に、設定する可変の名前を入力します。

   1. **可変値**に、値 **0** (ゼロ) を入力します。

1. **[保存]** を選択します。

   定義した可変のような可変は、ディテクターモデルの任意のイベントで設定　(値を指定) できます。可変の値を参照できるのは、ディテクターが状態に到達し、定義または設定されているところでアクションを実行した後のみです (例えば、イベントの条件付きロジックで)。

1. **状態**ペインで、**状態**の横の**X**を選択して、**ディテクターモデルパレット**に戻ります。

1. 2 番目のディテクターの状態を作成するには、**ディテクターのモデル**パレットで**状態**を選択し、メインの編集スペースにドラッグします。これにより、`untitled_state_1` というタイトルの状態が作成されます。

1. 最初の状態で一時停止します (**通常**)。状態の周囲に矢印が表示されます。

1. 矢印をクリックして、最初の状態から 2 番目の状態にドラッグします。最初の状態から 2 番目の状態 (**無題**のラベルが付いている) への有向線が表示されます。

1. **無題**の行を選択します。**移行イベント**ペインで、**イベント名**と**イベントトリガーロジック**を入力します。

1. **移行イベント**ペインで、**アクションの追加**を選択します。

1. **移行イベントアクションの追加**ペインで、**アクションの追加**を選択します。

1.  **アクションの選択**で、**可変の設定**を選択します。

   1. **可変オペレーション**の場合は、**値の割当**を選択します。

   1. **可変名**に、可変の名前を入力します。

   1. **値の割り当て**に、次のような値を入力します: `$variable.pressureThresholdBreached + 3`

   1. **[保存]** を選択します。

1. 2 番目の状態 **untitled\$1state\$11** を選択します。

1. **状態**ペインで**状態名**を入力し、**入力時**で**イベントの追加**を選択します。

1. **OnEnter イベントの追加**ページで、**イベント名**と**イベント条件**を入力します。**[アクションを追加]** を選択します。

1. **アクションの選択**で、**SNS メッセージの送信**を選択します。

   1. **SNS トピック**には、自分の Amazon SNS トピックのターゲット ARN を入力します。

   1. **[保存]** を選択します。

1. 例にイベントを追加し続けます。

   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
      ```

   1. **OnInput**で、**イベントの追加**を選択し、次のイベント情報を入力して保存します。

      ```
        Event name: Pressure Okay
        Event condition: $input.PressureInput.sensorData.pressure <= 70
        Event actions:
          Set variable:
            Variable operation: Decrement
            Variable name: pressureThresholdBreached
      ```

   1. **OnExit**の場合は、**イベントの追加**を選択し、作成したAmazon 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
      ```

1. 2 番目の状態 (**危険**``) で一時停止します。状態の周囲に矢印が表示されます

1. 矢印をクリックして、2 番目の状態から最初の状態にドラッグします。**無題**のラベルが付いた有向線が表示されます。

1. **無題**の行を選択し、**移行イベント**ペインで、次の情報を使用して**イベント名**と**イベントトリガーロジック**を入力します。

   ```
   {
     Event name: BackToNormal
     Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0
   }
   ```

   トリガーロジックで `$input` 値と `$variable` 値をテストする理由の詳細については、[AWS IoT Events ディテクターモデルの制限と制限](iotevents-restrictions-detector-model.md) での可変値の可用性のエントリを参照してください。

1. **スタート**状態を選択します。デフォルトでは、この状態はディテクターモデルを作成したときに作成されました)。**スタート**ウィンドウで、**宛先の状態** (例えば、**通常**) を選択します。

1. 次に、入力をリッスンするようにディテクターモデルを設定します。右上隅で、**公開**を選択します。

1. **ディテクターモデルの公開**ページで、次の手順を実行します。

   1.  **ディテクターモデル名**、**説明**、および**ロール**の名前を入力します。そのロールが作成されます。

   1. **一意のキーバリューごとにディテクターの作成**を選択します。独自の**ロール**を作成して使用するには、[のアクセス許可の設定 AWS IoT Events](iotevents-permissions.md) のステップに従って、ここに**ロール**として入力します。

1. **ディテクター作成キー**には、前に定義した入力の属性の 1 つの名前を選択します。ディテクター作成キーとして選択する属性は、各メッセージ入力に存在する必要があり、メッセージを送信する各デバイスに固有である必要があります。この例では、**motorid** 属性を使用しています。

1. [**保存して発行**] を選択します。

**注記**  
特定のディテクターモデルに対して作成される一意のディテクターの数は、送信される入力メッセージに基づいて決まります。ディテクターモデルが作成されると、入力属性からキーが選択されます。このキーは、どのディテクターインスタンスを使用するかを決定します。キーが (このディテクターモデルで) 以前に参照されたことがない場合、新しいディテクターインスタンスが作成されます。キーが以前に参照されたことがある場合は、このキー値に対応する既存のディテクターインスタンスを使用します。

ディテクターモデル定義のバックアップコピーを (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"
        }
    }
}
```