Expressions - AWS IoT イベント

Expressions

AWS IoT イベント では、検出器モデルの作成および更新時に値を指定するいくつかの方法について説明しています。式を使用してリテラル値を指定することができます。または、 AWS IoT イベント では、特定の値を指定する前に式を評価できます。

Syntax

リテラル、演算子、関数、参照、および置換テンプレートは、 AWS IoT イベント 式。

Literals

  • Integer

  • 10 進数

  • 文字列

  • Boolean

Operators

単発性
  • なし(ブール値): !

  • なし(ビット単位): ~

  • マイナス(算術): -

文字列
  • 連結: +

    両方のオペランドは文字列である必要があります。文字列リテラルは、一重引用符(')で囲む必要があります。

    以下に例を示します。'my' + 'string' -> 'mystring'

算術
  • 追加: +

    両方のオペランドは数値である必要があります。

  • 減算: -

  • 部門: /

    除算の結果は、オペランド(除算または配当)の少なくとも1つが10進数でない限り、四捨五入した整数値になります。

  • 乗算: *

Bitwise(Integer)
  • または: |

    以下に例を示します。13 | 5 -> 13

  • および: &

    以下に例を示します。13 & 5 -> 5

  • XOR: ^

    以下に例を示します。13 ^ 5 -> 8

  • NOT: ~

    以下に例を示します。~13 -> -14

Boolean
  • 次の値未満: <

  • 次の値以下: <=

  • 等しい値: ==

  • 以下と等しくない: !=

  • 次の値以上: >=

  • 次の値より大きい: >

  • および: &&

  • または: ||

    注記

    の副次式が || 定義されていないデータを含み、その副式は次のように扱われます。 false.

括弧

式内の用語をグループ化するには、括弧を使用できます。

Functions

組み込み関数
timeout("timer-name")

評価対象 true 指定タイマが経過している場合。置換"タイマー名」を、定義したタイマの名前とともに引用符で囲みます。イベント アクションでは、タイマを定義してから、タイマを開始、リセット、または以前に定義したタイマをクリアすることができます。フィールドを見る detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName.

1つの状態で設定されたタイマは、別の状態で参照できます。タイマが参照される状態に入る前に、タイマを作成した状態にアクセスする必要があります。

たとえば、検出器モデルには、TemperatureChecked と RecordUpdated の 2 つの状態があります。TemperatureChecked 状態のタイマーを作成しました。RecordUpdated 状態でタイマーを使用するには、まず TemperatureChecked 状態にアクセスする必要があります。

精度を確保するために、タイマーを設定する最小時間は60秒です。

注記

timeout() リターン true 実際のタイマーの有効期限後に初めてチェックされ、 false その後。

convert(type, expression)

指定された型に変換された式の値を評価します。- type 値は StringBoolean、または Decimal. これらのキーワードのいずれかを使用するか、キーワードを含む文字列を評価する式を使用します。次の変換のみが成功し、有効な値が返されます。

  • ブール型 -> 文字列

    文字列を返します。 "true" 又は "false".

  • 小数 -> 文字列

  • 文字列 -> ブール値

  • 文字列 -> 小数

    指定された文字列は、10進数の有効な表現である必要があります。または、 convert() 失敗します。

次の場合: convert() は有効な値を返しません。その一部である式も無効です。この結果は、 false トリガーは発生しません actions または nextState 式が発生するイベントの一部として指定します。

isNull(expression)

評価対象 true 式が NULL を返す場合。たとえば、 MyInput メッセージを受信します。 { "a": null }で、以下が trueですが、 isUndefined($input.MyInput.a) 評価対象 false.

isNull($input.MyInput.a)
isUndefined(expression)

評価対象 true 式が定義されていない場合。たとえば、 MyInput メッセージを受信します。 { "a": null }で、以下が falseですが、 isNull($input.MyInput.a) 評価対象 true.

isUndefined($input.MyInput.a)
triggerType("type")

- type 値は "Message" 又は "Timer". 評価対象 true 次の例のように、タイマが期限切れになったためにイベントが表示されるイベント条件が評価されている場合。

triggerType("Timer")

または、入力メッセージが受信されました。

triggerType("Message")
currentInput("input")

評価対象 true 指定された入力メッセージが受信されたために、そのイベントが表示されるイベント条件が評価されている場合。たとえば、 Command メッセージを受信します。 { "value": "Abort" }で、以下が true.

currentInput("Command")

この関数を使用して、次の式のように、特定の入力が受信され、タイマが期限切れになっていないために条件が評価中であることを確認します。

currentInput("Command") && $input.Command.value == "Abort"
文字列マッチング関数
startsWith(expression1, expression2)

評価対象 true 最初の文字列式が2番目の文字列式で始まる場合。たとえば、 MyInput メッセージを受信します。 { "status": "offline"}で、以下が true.

startsWith($input.MyInput.status, "off")

Both expressions must evaluate to a string value. If either expression does not evaluate to a string value, then the result of the function is undefined. No conversions are performed.

endsWith(expression1, expression2)

評価対象 true 最初の文字列式が2番目の文字列式で終わる場合。たとえば、 MyInput メッセージを受信します。 { "status": "offline" }で、以下が true.

endsWith($input.MyInput.status, "line")

Both expressions must evaluate to a string value. If either expression does not evaluate to a string value, then the result of the function is undefined. No conversions are performed.

contains(expression1, expression2)

評価対象 true 最初の文字列式に 2 番目の文字列式が含まれる場合。たとえば、 MyInput メッセージを受信します。 { "status": "offline" }で、以下が true.

contains($input.MyInput.value, "fli")

Both expressions must evaluate to a string value. If either expression does not evaluate to a string value, then the result of the function is undefined. No conversions are performed.

ビット単位の整数操作関数
bitor(expression1, expression2)

整数式のビット単位のORを評価します(バイナリOR演算は、整数の対応するビットに対して実行されます)。たとえば、 MyInput メッセージを受信します。 { "value1": 13, "value2": 5 }で、以下が 13.

bitor($input.MyInput.value1, $input.MyInput.value2)

Both expressions must evaluate to an integer value. If either expression does not evaluate to an integer value, then the result of the function is undefined. No conversions are performed.

bitand(expression1, expression2)

整数式のビット単位のANDを評価します(バイナリAND演算は、整数の対応するビットに対して実行されます)。たとえば、 MyInput メッセージを受信します。 { "value1": 13, "value2": 5 }で、以下が 5.

bitand($input.MyInput.value1, $input.MyInput.value2)

Both expressions must evaluate to an integer value. If either expression does not evaluate to an integer value, then the result of the function is undefined. No conversions are performed.

bitxor(expression1, expression2)

整数式のビット単位のXORを評価します(バイナリXOR演算は、整数の対応するビットに対して実行されます)。たとえば、 MyInput メッセージを受信します。 { "value1": 13, "value2": 5 }で、以下が 8.

bitxor($input.MyInput.value1, $input.MyInput.value2)

Both expressions must evaluate to an integer value. If either expression does not evaluate to an integer value, then the result of the function is undefined. No conversions are performed.

bitnot(expression)

整数式のbitwise NOTを評価します(バイナリNOT演算は整数のビットに対して実行されます)。たとえば、 MyInput メッセージを受信します。 { "value": 13 }で、以下が -14.

bitnot($input.MyInput.value)

Both expressions must evaluate to an integer value. If either expression does not evaluate to an integer value, then the result of the function is undefined. No conversions are performed.

References

入力

$input.input-name.path-to-data

input-name は、 入力を作成 アクション。

たとえば、 TemperatureInput 定義して inputDefinition.attributes.jsonPath 次の使用可能なフィールドに値が表示される場合があります。

{ "temperature": 78.5, "date": 2018-10-03T16:09:09Z }

_の値を参照するには temperature ]フィールドで、次のコマンドを使用します。

$input.TemperatureInput.temperature

値が配列であるフィールドの場合、 [n]. たとえば、次の値を指定します。

{ "temperatures": [ 78.4, 77.9, 78.8 ], "date": 2018-10-03T16:09:09Z }

価値 78.8 は、次のコマンドで参照できます。

$input.TemperatureInput.temperatures[2]
変数

$variable.variable-name

[ variable-name は、 CreateDetectorモデル アクション。

たとえば、 TechnicianID 定義し、 detectorDefinition.states.onInputEvents.actions.setVariable.variableName変数に最後に与えられた(文字列)値を、次のコマンドで参照できます。

$variable.TechnicianID

変数の値は、 setVariable アクション。式内の変数に値を割り当てることはできません。変数は設定解除できません。たとえば、この値を割り当てることはできません。 null.

注記

(正規表現)パターンに従わない識別子を使用する参照の場合 [a-zA-Z][a-zA-Z0-9_]*これらの識別子をバックティック(`)。たとえば、 MyInput フィールドの名前が _value このフィールドには、次のように指定する必要があります。 $input.MyInput.`_value`.

式で参照を使用する場合は、次の点を確認します。

  • 1つ以上の演算子とともにリファレンスをオペランドとして使用する場合は、参照するすべてのデータ型が互換性があることを確認してください。

    たとえば、次の式では、整数 2 は、両方の == および && 演算子。オペランドの互換性を確保するため、 $variable.testVariable + 1 および $variable.testVariable は整数または小数を参照する必要があります。

    また、整数 1 は、 + 演算子。そのため、 $variable.testVariable は整数または小数を参照する必要があります。

    ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
  • 参照を関数に渡される引数として使用する場合は、関数が参照するデータ型をサポートしていることを確認してください。

    たとえば、次の timeout("time-name") 関数には、引数として二重引用符付きの文字列が必要です。参照を timer-name 値の場合、二重引用符で文字列を参照する必要があります。

    timeout("timer-name")
    注記

    convert(type, expression) 参照を type 参照の評価結果は StringDecimal、または Boolean.

AWS IoT イベント 式は、整数、小数、文字列、およびブール型のデータ型をサポートします。次の表に、互換性のないタイプのペアのリストを示します。

互換性のないタイプのペア

整数、文字列

整数、ブール型

小数点、文字列

小数点、ブール値

文字列、ブール値

置換テンプレート

'${expression}'

[ ${} 補間文字列として文字列を識別します。[ expression 任意の AWS IoT イベント 式。これには、演算子、関数、および参照が含まれます。

たとえば、 変数アクションを設定 変数を定義するアクション。[ variableNameSensorID、および value10. 次の置換テンプレートを作成できます。

代替テンプレート 結果文字列
'${'Sensor ' + $variable.SensorID}'

"Sensor 10"

'Sensor ' + '${$variable.SensorID + 1}'

"Sensor 11"

'Sensor 10: ${$variable.SensorID == 10}'

"Sensor 10: true"

'{\"sensor\":\"${$variable.SensorID + 1}\"}'

"{\"sensor"\:\"11\"}"

'{\"sensor\":${$variable.SensorID + 1}}'

"{\"sensor\":11}"