翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ディテクターモデルの作成
このトピックでは、状態を使用してディテクターモデル (機器またはプロセスのモデル) を定義します。
状態ごとに、重要なイベントを検出するために着信入力を評価する条件付き (ブール) ロジックを定義します。イベントが検出されると、状態が変化し、追加のアクションを開始できます。これらのイベントは、移行イベントと呼ばれます。
この状態では、ディテクターがその状態になるか、その状態を終了するたびに、あるいは入力を受信したときにアクションを実行できるイベント (それぞれ OnEnter
、OnExit
、OnInput
イベントと呼ばれる) の定義もします 。アクションは、イベントの条件付きロジックが true
と評価された場合にのみ実行されます。
ディテクターモデルを作成するには
-
最初のディテクターの状態が作成されました。変更するには、メインの編集スペースで State_1 というラベルの付いた円を選択します。
-
状態ペインで、状態名を入力しOnEnter、イベントの追加を選択します。
-
OnEnter イベントの追加 ページで、イベント名 とイベント条件 を入力します。この例では、
true
と入力して、状態に入ったときにイベントが常に開始されることを示します。 -
イベントアクションで、アクションの追加を選択します。
-
イベントアクションで、次の手順を実行します。
-
可変の設定を選択します
-
可変オペレーションの場合は、値の割当を選択します。
-
可変名に、設定する可変の名前を入力します。
-
可変値に、値
0
(ゼロ) を入力します。
-
-
[Save] を選択します。
定義した可変のような可変は、ディテクターモデルの任意のイベントで設定 (値を指定) できます。可変の値を参照できるのは、ディテクターが状態に到達し、定義または設定されているところでアクションを実行した後のみです (例えば、イベントの条件付きロジックで)。
-
状態ペインで、状態の横のXを選択して、ディテクターモデルパレットに戻ります。
-
2 番目のディテクターの状態を作成するには、ディテクターのモデルパレットで状態を選択し、メインの編集スペースにドラッグします。これにより、
untitled_state_1
というタイトルの状態が作成されます。 -
最初の状態で一時停止します (通常)。状態の周囲に矢印が表示されます。
-
矢印をクリックして、最初の状態から 2 番目の状態にドラッグします。最初の状態から 2 番目の状態 (無題のラベルが付いている) への有向線が表示されます。
-
無題の行を選択します。移行イベントペインで、イベント名とイベントトリガーロジックを入力します。
-
移行イベントペインで、アクションの追加を選択します。
-
移行イベントアクションの追加ペインで、アクションの追加を選択します。
-
アクションの選択で、可変の設定を選択します。
-
可変オペレーションの場合は、値の割当を選択します。
-
可変名に、可変の名前を入力します。
-
値の割り当てに、次のような値を入力します:
$variable.pressureThresholdBreached + 3
-
[Save] を選択します。
-
-
2 番目の状態 untitled_state_1 を選択します。
-
状態ペインで状態名を入力し、入力時でイベントの追加を選択します。
-
OnEnter イベントの追加ページで、イベント名 とイベント条件 を入力します。[アクションを追加] を選択します。
-
アクションの選択 で、SNSメッセージの送信 を選択します。
-
SNS トピック には、Amazon SNSトピックARNのターゲットを入力します。
-
[Save] を選択します。
-
-
例にイベントを追加し続けます。
-
で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
-
でOnInput、イベントの追加 を選択し、次のイベント情報を入力して保存します。
Event name: Pressure Okay Event condition: $input.PressureInput.sensorData.pressure <= 70 Event actions: Set variable: Variable operation: Decrement Variable name: pressureThresholdBreached
-
で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
-
-
2 番目の状態 (危険
) で一時停止します。状態の周囲に矢印が表示されます
-
矢印をクリックして、2 番目の状態から最初の状態にドラッグします。無題のラベルが付いた有向線が表示されます。
-
無題の行を選択し、移行イベントペインで、次の情報を使用してイベント名とイベントトリガーロジックを入力します。
{ Event name: BackToNormal Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0 }
トリガーロジックで
$input
値と$variable
値をテストする理由の詳細については、ディテクターモデルの制限と制限 での可変値の可用性のエントリを参照してください。 -
スタート状態を選択します。デフォルトでは、この状態はディテクターモデルを作成したときに作成されました)。スタートウィンドウで、宛先の状態 (例えば、通常) を選択します。
-
次に、入力をリッスンするようにディテクターモデルを設定します。右上隅で、公開を選択します。
-
ディテクターモデルの公開ページで、次の手順を実行します。
-
ディテクターモデル名、説明、およびロールの名前を入力します。そのロールが作成されます。
-
一意のキーバリューごとにディテクターの作成を選択します。独自のロールを作成して使用するには、のアクセス許可の設定 AWS IoT Events のステップに従って、ここにロールとして入力します。
-
-
ディテクター作成キーには、前に定義した入力の属性の 1 つの名前を選択します。ディテクター作成キーとして選択する属性は、各メッセージ入力に存在する必要があり、メッセージを送信する各デバイスに固有である必要があります。この例では、motorid 属性を使用しています。
-
[保存して発行] を選択します。
注記
特定のディテクターモデルに対して作成される一意のディテクターの数は、送信される入力メッセージに基づいて決まります。ディテクターモデルが作成されると、入力属性からキーが選択されます。このキーは、どのディテクターインスタンスを使用するかを決定します。キーが (このディテクターモデルで) 以前に参照されたことがない場合、新しいディテクターインスタンスが作成されます。キーが以前に参照されたことがある場合は、このキー値に対応する既存のディテクターインスタンスを使用します。
ディテクターモデル定義のバックアップコピーを ( で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" } } }