本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
表達式
AWS IoT Events在建立和更新偵測器模型時,提供了數種指定值的方法。您可以使用運算式來指定常值,或AWS IoT Events在指定特定值之前評估運算式。
語法
您可以在運算式中使用常值、運AWS IoT Events算子、函數、參照和替代範本。
文字
-
整數
-
Decimal (小數)
-
字串
-
Boolean
電信業者
- 一元
-
-
不 (布林值):
!
-
不(按位):
~
-
減號(算術):
-
-
- 字串
-
-
串聯:
+
兩個操作數必須是字符串。字符串文字必須用單引號(')括起來。
例如:
'my' + 'string'
->'mystring'
-
- 算術
-
-
加法:
+
兩個操作數必須是數字。
-
減法:
-
-
分部:
/
除法的結果是一個四捨五入的整數值,除非至少有一個運算元 (除數或紅利) 是十進位值。
-
乘法:
*
-
- 按位(整數)
-
-
或者:
|
例如:
13 | 5
->13
-
和:
&
例如:
13 & 5
->5
-
異或:
^
例如:
13 ^ 5
->8
-
不:
~
例如:
~13
->-14
-
- Boolean
-
-
小於:
<
-
小於或等於:
<=
-
等於:
==
-
不等於:
!=
-
大於或等於:
>=
-
大於:
>
-
和:
&&
-
或者:
||
注意
當的子表達式
||
包含未定義的數據時,該子表達式被視為。false
-
- 括號
-
您可以使用括號將運算式中的詞彙分組。
函數
- 內建函數
-
timeout("
timer-name
")-
評估指定的計時器是
true
否已經過去。將「計時器名稱
」取代為您定義的計時器名稱,並用引號加上引號。在事件動作中,您可以定義計時器,然後啟動計時器、重設或清除先前定義的計時器。請參閱欄位detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName
。處於一種狀態的計時器集可以在不同的狀態下引用。在輸入參照計時器的狀態之前,您必須先造訪建立計時器的狀態。
例如,一個檢測器模型有兩種狀態, TemperatureChecked 和 RecordUpdated。您在 TemperatureChecked 狀態中建立了計時器。您必須先訪問該 TemperatureChecked 州,然後才能在 RecordUpdated 狀態下使用計時器。
為了確保準確性,應設置計時器的最短時間為 60 秒。
注意
timeout()
true
僅返回在實際計時器到期之後的第一次檢查,false
然後返回。 convert(
type
,expression
)-
評估轉換為指定類型的運算式值。類
型
值必須是String
Boolean
、或Decimal
。使用下列其中一個關鍵字或評估為包含關鍵字之字串的運算式。只有下列轉換成功並傳回有效值:-
布爾-> 字符串
返回字符串
"true"
或"false"
。 -
十進制-> 字符串
-
字符串-> 布爾
-
字符串-> 小數
指定的字串必須是十進位數字的有效表示,否
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
")-
類
型
值可以是"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
否以第二個字串運算式開頭。例如,如果輸入MyInput
收到訊息{ "status": "offline"}
,則下列評估結果為true
。startsWith($input.MyInput.status, "off")
兩個運算式都必須評估為字串值。如果任一運算式未評估為字串值,則函數的結果未定義。不會執行任何轉換。
endsWith(
expression1
,expression2
)-
評估第一個字串運算式是
true
否以第二個字串運算式結尾。例如,如果輸入MyInput
收到訊息{ "status": "offline" }
,則下列評估結果為true
。endsWith($input.MyInput.status, "line")
兩個運算式都必須評估為字串值。如果任一運算式未評估為字串值,則函數的結果未定義。不會執行任何轉換。
contains(
expression1
,expression2
)-
評估第一個字串運算式是
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 運算會在整數的對應位元上執行)。例如,如果輸入
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]
- Variables
-
$variable.
variable-name
這
是您使用CreateDetectorModel動作定義的變數。variable-name
例如,如果您有一個名
TechnicianID
為您使用定義的變數detectorDefinition.states.onInputEvents.actions.setVariable.variableName
,您可以使用下列命令參考最近提供給變數的 (字串) 值。$variable.TechnicianID
您只能使用
setVariable
動作來設定變數的值。您無法為運算式中的變數指派值。變數無法取消設定。例如,您無法為其指派值null
。
注意
在使用不遵循 (規則運算式) 模式之識別碼的參考中[a-zA-Z][a-zA-Z0-9_]*
,您必須將這些識別碼括在 backtick (`
) 中。例如,對以名稱為欄位命名之輸入MyInput
的參照,_value
必須將此欄位指定為$input.MyInput.`_value`
。
當您在運算式中使用參照時,請檢查下列項目:
-
當您使用具有一或多個運算子的參考做為運算元時,請確定您參考的所有資料型別都相容。
例如,在下列運算式中,integer
2
是==
和&&
運算子的運算元。為了確保操作數是兼容的,$variable.testVariable + 1
並且$variable.testVariable
必須引用整數或小數。此外,整數
1
是運算子的+
運算元。因此,$variable.testVariable
必須引用整數或小數。‘$variable.testVariable + 1 == 2 && $variable.testVariable’
-
當您使用參考作為傳遞給函數的引數時,請確保該函數支持您引用的數據類型。
例如,下列
timeout("
函數需要以雙引號做為引數的字串。如果您使用time-name
")計時器名稱
值的參考,則必須使用雙引號引用字串。timeout("
timer-name
")注意
對於
convert(
函數,如果您使用type
,expression
)類型
值的引用,則引用的評估結果必須是String
Decimal
、或Boolean
。
AWS IoT Events表示式支援整數、十進位、字串和布林資料類型。下表提供不相容的類型對清單。
不相容的類型對 |
---|
整數,字符串 |
整數,布爾 |
十進制,字符串 |
十進制,布爾 |
字符串,布爾 |
替代範本
-
'${
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}"