ディテクターモデルの作成 - AWS IoT Events

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ディテクターモデルの作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  15. 2 番目の状態 untitled_state_1 を選択します。

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

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

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

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

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

  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イベントの追加 を選択し、作成した 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
  20. 2 番目の状態 (危険) で一時停止します。状態の周囲に矢印が表示されます

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

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

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

    トリガーロジックで $input 値と $variable 値をテストする理由の詳細については、ディテクターモデルの制限と制限 での可変値の可用性のエントリを参照してください。

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

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

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

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

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

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

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

注記

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

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