ディテクターモデルの制限と制限 - AWS IoT Events

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

ディテクターモデルの制限と制限

ディテクターモデルを作成する際には、次の点を考慮することが重要です。

actions フィールドの使用方法

actions フィールドは、オブジェクトのリストです。複数のオブジェクトを持つことができますが、各オブジェクトで許可されるアクションは 1 つだけです。

"actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached - 1" } } { "setVariable": { "variableName": "temperatureIsTooHigh", "value": "$variable.temperatureIsTooHigh - 1" } } ]
condition フィールドの使用方法

conditiontransitionEvents に必須であり、それ以外の場合はオプションです。

condition フィールドが存在しない場合は、"condition": true と同等です。

条件表現の評価結果はブール値である必要があります。結果がブール値でない場合、false と同等であり、actions を開始したり、イベントで指定された nextState に移行したりすることはありません。

可変値の可用性

デフォルトでは、可変の値がイベントに設定されている場合、その新しい値は使用できないか、同じグループ内の他のイベントの条件を評価するために使用されません。新しい値は使用できないか、同じ onInputonEnter、または onExit フィールドのイベント条件で使用されません。

この動作を変更するには、ディテクターモデル定義で evaluationMethodパラメータを設定します。evaluationMethodSERIAL に設定されている場合、可変が更新され、イベントが定義された順序でイベント条件が評価されます。それ以外の場合、evaluationMethodBATCH に設定されているか、デフォルトで設定されていると、状態内の可変が更新され、状態内のイベントはすべてのイベント条件が評価された後にのみ実行されます。

"Dangerous" 状態の onInput フィールドでは、条件が満たされたとき (現在の入力の圧力が 70 以下のとき)、"Pressure Okay" イベントで "$variable.pressureThresholdBreached" が 1 つデクリメントされます。

{ "eventName": "Pressure Okay", "condition": "$input.PressureInput.sensorData.pressure <= 70", "actions": [ { "setVariable": { "variableName": "pressureThresholdBreached", "value": "$variable.pressureThresholdBreached - 1" } } ] }

"$variable.pressureThresholdBreached" が 0 に達すると (つまり、ディテクターが 70 以下の 3 つの連続した圧力測定値を受け取った場合)、ディテクターは "Normal" 状態に戻る必要があります。transitionEvents"BackToNormal" イベントは、"$variable.pressureThresholdBreached" が 1 以下 (0 ではない) であることをテストし、さらに "$input.PressureInput.sensorData.pressure" で与えられる現在の値が 70 以下であることを再度検証しなければなりません。 

"transitionEvents": [ { "eventName": "BackToNormal", "condition": "$input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 1", "nextState": "Normal" } ]

それ以外の場合、条件が可変の値のみをテストする場合、2 つの通常の読み取り値とそれに続く過圧読み取り値が条件を満たし、"Normal" 状態に戻ります。条件は、前回入力が処理されたときに "$variable.pressureThresholdBreached" が与えられた値を調べています。可変の値は "Overpressurized" イベントで 3 にリセットされますが、この新しい値はまだどの condition でも使用できないことに注意してください。

デフォルトでは、コントロールが onInput フィールドに入るたびに、condition は、onInput で指定されたアクションによって変更される前に、入力の処理のスタート時の可変の値のみを確認できます。同じことが onEnteronExit にも当てはまります。状態に入るときまたは状態を終了するときに可変に加えられた変更は、同じ onEnter または onExit フィールドで指定された他の条件では使用できません。

ディテクターモデルを更新するときのレイテンシー

ディテクターモデルを更新、削除、再作成する場合 (「」を参照UpdateDetectorModel)、スポーンされたすべてのディテクター (インスタンス) が削除され、新しいモデルを使用してディテクターを再作成するまでに多少の遅延があります。これらは、新しいディテクターモデルが有効になり、新しい入力が到着した後に再作成されます。この間、入力は、以前のバージョンのディテクターモデルによって生成されたディテクターによって引き続き処理される可能性があります。この期間中、以前のディテクターモデルで定義されたアラートを引き続き受信する可能性があります。

入力キーのスペース

入力キーにはスペースを使用できますが、入力属性の定義と、キーの値が表現で参照される場合の両方で、キーへのリファレンスをバッククォートで囲む必要があります。例えば、次のようなメッセージペイロードがあるとします。

{ "motor id": "A32", "sensorData" { "motor pressure": 56, "motor temperature": 39 } }

以下を使用して入力を定義します。

{ "inputName": "PressureInput", "inputDescription": "Pressure readings from a motor", "inputDefinition": { "attributes": [ { "jsonPath": "sensorData.`motor pressure`" }, { "jsonPath": "`motor id`" } ] } }

条件表現では、バッククォートを使用してそのようなキーの値も参照する必要があります。

$input.PressureInput.sensorData.`motor pressure`