表達式 - AWS IoT Events

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

表達式

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)

評估轉換為指定類型的運算式值。類值必須是StringBoolean、或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

variable-name是您使用CreateDetectorModel動作定義的變數。

例如,如果您有一個名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)函數,如果您使用類型值的引用,則引用的評估結果必須是StringDecimal、或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}"