表現 - AWS IoT Events

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

表現

AWS IoT Events は、ディテクターモデルを作成および更新するときに値を指定するいくつかの方法を提供します。表現を使用してリテラル値を指定するか、AWS IoT Events で特定の値を指定する前に式を評価できます。

構文

AWS IoT Events 表現では、リテラル、演算子、関数、リファレンス、および置換テンプレートを使用できます。

リテラル

  • 整数

  • 10 進数

  • 文字列

  • ブール値

演算子

単項
  • 否定 (ブール値): !

  • 否定 (ビット単位): ~

  • マイナス (算術): -

文字列
  • 連結: +

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

    例: 'my' + 'string''mystring'

算術
  • 加算: +

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

  • 減算: -

  • 除算: /

    オペランドの少なくとも 1 つ (除数または被除数) が 10 進値でない限り、除算の結果は丸められた整数値になります。

  • 乗算: *

ビット単位 (整数)
  • OR: |

    例: 13 | 513

  • AND: &

    例: 13 & 55

  • XOR: ^

    例: 13 ^ 58

  • NOT: ~

    例: ~13-14

ブール値
  • 未満: <

  • 以下: <=

  • 等しい: ==

  • 等しくない: !=

  • 以上: >=

  • 以上: >

  • AND: &&

  • OR: ||

    注記

    || の部分式に未定義のデータが含まれている場合、その部分式は false として扱われます。

括弧

括弧を使用して、表現内の用語をグループ化できます。

関数

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

指定されたタイマーが経過した場合、true に評価されます。「timer-name」を、定義したタイマーの名前を引用符で囲んで置き換えます。イベントアクションでは、タイマーを定義してから、タイマーをスタート、リセット、または以前に定義したタイマーをクリアできます。フィールド detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName を参照してください。

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

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

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

注記

timeout() は、実際のタイマーの有効期限切れに最初にチェックされたときにのみ true を返し、その後 false を返します。

convert(type, expression)

指定された型に変換された表現の値に評価されます。タイプ値は、StringBooleanDecimal またはである必要があります。これらのキーワードの 1 つ、またはキーワードを含む文字列に評価される表現を使用してください。次の変換のみが成功し、有効な値を返します。

  • ブール型 → 文字列

    "true" または "false" の文字列を返します。

  • 10 進数 → 文字列

  • 文字列 → ブール型

  • 文字列 → 10 進数

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

convert() が有効な値を返さない場合、そのパートである表現も無効です。この結果は false と同等であり、表現が発生するイベントのパートとして指定された actions または nextState への移行をトリガーしません。

isNull(expression)

表現がヌルを返す場合、true と評価されます。例えば、入力 { "a": null } がメッセージ true を受信した場合、以下は isUndefined($input.MyInput.a) と評価されますが、falseMyInput と評価されます。

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

表現が未定義の場合、true と評価されます。例えば、入力 MyInput がメッセージ { "a": null } を受信した場合、以下は false と評価されますが、isNull($input.MyInput.a)true と評価されます。

isUndefined($input.MyInput.a)
triggerType("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)

最初の文字列表現が 2 番目の文字列表現でスタート場合、true と評価されます。例えば、入力 MyInput がメッセージ { "status": "offline"} を受信した場合、以下は true と評価されます。

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

両方の表現は文字列値に評価される必要があります。いずれかの表現が文字列値に評価されない場合、関数の結果は未定義です。変換は実行されません。

endsWith(expression1, expression2)

最初の文字列表現が 2 番目の文字列表現で終了する場合、true と評価されます。例えば、入力 MyInput がメッセージ { "status": "offline" } を受信した場合、以下は true と評価されます。

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

両方の表現は文字列値に評価される必要があります。いずれかの表現が文字列値に評価されない場合、関数の結果は未定義です。変換は実行されません。

contains(expression1, expression2)

最初の文字列表現に 2 番目の文字列表現が含まれている場合、true と評価されます。例えば、入力 MyInput がメッセージ { "status": "offline" } を受信した場合、以下は true と評価されます。

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

両方の表現は文字列値に評価される必要があります。いずれかの表現が文字列値に評価されない場合、関数の結果は未定義です。変換は実行されません。

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

整数表現のビットごとの OR を評価します (バイナリ OR オペレーションは、整数の対応するビットに対して実行されます)。例えば、入力 MyInput がメッセージ { "value1": 13, "value2": 5 } を受信した場合、以下は 13 と評価されます。

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

両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。

bitand(expression1, expression2)

整数表現のビット単位の AND を評価します (バイナリ AND オペレーションは、整数の対応するビットに対して実行されます)。例えば、入力 MyInput がメッセージ { "value1": 13, "value2": 5 } を受信した場合、以下は 5 と評価されます。

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

両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。

bitxor(expression1, expression2)

整数表現のビット単位の XOR を評価します (バイナリ XOR オペレーションは、整数の対応するビットに対して実行されます)。例えば、入力 MyInput がメッセージ { "value1": 13, "value2": 5 } を受信した場合、以下は 8 と評価されます。

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

両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。

bitnot(expression)

整数表現のビット単位の NOT を評価します (バイナリ NOT オペレーションは整数のビットに対して実行されます)。例えば、入力 MyInput がメッセージ { "value": 13 } を受信した場合、以下は -14 と評価されます。

bitnot($input.MyInput.value)

両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。

リファレンス

入力

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

input-name は、CreateInput アクションを使用して作成する入力です。

例えば、inputDefinition.attributes.jsonPath エントリを定義した TemperatureInput という名前の入力がある場合、値は次の使用可能なフィールドに表示される可能性があります。

{ "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 は、CreateDetectorModel アクションを使用して定義した可変です。

例えば、detectorDefinition.states.onInputEvents.actions.setVariable.variableName を使用して定義した TechnicianID という名前の可変がある場合、次のコマンドを使用して、可変に最後に指定された (文字列) 値をリファレンスできます。

$variable.TechnicianID

可変の値は、setVariable アクションを使用してのみ設定できます。表現の可変に値を割り当てることはできません。可変を設定解除することはできません。例えば、値 null を割り当てることはできません。

注記

(正規表現) パターン [a-zA-Z][a-zA-Z0-9_]* に従わない識別子を使用する参照では、それらの識別子をバッククォート (`) で囲む必要があります。例えば、_value という名前のフィールドを持つ MyInput という名前の入力へのリファレンスでは、このフィールドを $input.MyInput.`_value` として指定する必要があります。

表現でリファレンスを使用する場合は、以下をチェックしてください。

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

    例えば、次の表現では、整数 2== 演算子と && 演算子の両方のオペランドです。オペランドに互換性があることを確認するには、$variable.testVariable + 1$variable.testVariable は整数または 10 進数をリファレンスする必要があります。

    また、整数 1+ 演算子のオペランドです。したがって、$variable.testVariable は整数または 10 進数をリファレンスする必要があります。

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

    例えば、次の timeout("time-name") 関数では、引数として二重引用符を含む文字列が必要です。timer-name 値のリファレンスを使用する場合は、二重引用符で囲まれた文字列を参照する必要があります。

    timeout("timer-name")
    注記

    convert(type, expression) 関数の場合、タイプ値にリファレンスを使用する場合、参照の評価結果は StringDecimal、または Boolean である必要があります。

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

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

整数、文字列

整数、ブール型

10 進数、文字列

10 進数、ブール型

文字列、ブール型

置換テンプレート

'${expression}'

${} は、文字列を補間された文字列として識別します。expression は任意の AWS IoT Events 表現にすることができます。これには、演算子、関数、およびリファレンスが含まれます。

例えば、SetVariableAction アクションを使用して可変を定義しました。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}"