翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
表現
AWS IoT Events は、ディテクターモデルを作成および更新するときに値を指定するいくつかの方法を提供します。表現を使用してリテラル値を指定するか、AWS IoT Events で特定の値を指定する前に式を評価できます。
構文
AWS IoT Events 表現では、リテラル、演算子、関数、リファレンス、および置換テンプレートを使用できます。
リテラル
-
整数
-
10 進数
-
文字列
-
ブール値
演算子
- 単項
-
-
否定 (ブール値):
!
-
否定 (ビット単位):
~
-
マイナス (算術):
-
-
- 文字列
-
-
連結:
+
両方のオペランドは文字列である必要があります。文字列リテラルは一重引用符 (') で囲む必要があります。
例:
'my' + 'string'
→'mystring'
-
- 算術
-
-
加算:
+
両方のオペランドは数値である必要があります。
-
減算:
-
-
除算:
/
オペランドの少なくとも 1 つ (除数または被除数) が 10 進値でない限り、除算の結果は丸められた整数値になります。
-
乗算:
*
-
- ビット単位 (整数)
-
-
OR:
|
例:
13 | 5
→13
-
AND:
&
例:
13 & 5
→5
-
XOR:
^
例:
13 ^ 5
→8
-
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
)-
指定された型に変換された表現の値に評価されます。
タイプ
値は、String
、Boolean
、Decimal
またはである必要があります。これらのキーワードの 1 つ、またはキーワードを含む文字列に評価される表現を使用してください。次の変換のみが成功し、有効な値を返します。-
ブール型 → 文字列
"true"
または"false"
の文字列を返します。 -
10 進数 → 文字列
-
文字列 → ブール型
-
文字列 → 10 進数
指定する文字列は、10 進数の有効な表現である必要があります。そうでない場合、
convert()
は失敗します。
convert()
が有効な値を返さない場合、そのパートである表現も無効です。この結果はfalse
と同等であり、表現が発生するイベントのパートとして指定されたactions
またはnextState
への移行をトリガーしません。 -
isNull(
expression
)-
表現がヌルを返す場合、
true
と評価されます。例えば、入力{ "a": null }
がメッセージtrue
を受信した場合、以下はisUndefined($input.MyInput.a)
と評価されますが、false
はMyInput
と評価されます。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
は、CreateDetectorModel アクションを使用して定義した可変です。variable-name
例えば、
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
)タイプ
値にリファレンスを使用する場合、参照の評価結果はString
、Decimal
、またはBoolean
である必要があります。
AWS IoT Events 表現は、整数、10 進数、文字列、およびブールデータ型をサポートします。次の表に、互換性のないタイプのペアのリストを示します。
互換性のないタイプのペア |
---|
整数、文字列 |
整数、ブール型 |
10 進数、文字列 |
10 進数、ブール型 |
文字列、ブール型 |
置換テンプレート
-
'${
expression
}'${}
は、文字列を補間された文字列として識別します。expression
は任意の AWS IoT Events 表現にすることができます。これには、演算子、関数、およびリファレンスが含まれます。例えば、SetVariableAction アクションを使用して可変を定義しました。
variableName
はSensorID
であり、value
は10
です。次の置換テンプレートを作成できます。置換テンプレート 結果文字列 '${'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}"