표현식 - AWS IoT Events

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

표현식

AWS IoT Events에서는 탐지기 모델을 생성하고 업데이트할 때 값을 지정하는 여러 가지 방법을 제공합니다. 표현식을 사용하여 리터럴 값을 지정하거나 특정 값을 지정하기 전에 표현식을 평가할AWS IoT Events 수 있습니다.

조건

AWS IoT Events표현식에는 리터럴, 연산자, 함수, 참조 및 대체 템플릿을 사용할 수 있습니다.

리터럴

  • Integer

  • 10진수

  • 문자열

  • 부울

연산자

단항
  • 아니요 (부울):!

  • 아니요 (비트 단위):~

  • 마이너스 (산술):-

문자열
  • 연결: +

    두 피연산자 모두 문자열이어야 합니다. 문자열 리터럴은 작은따옴표 (') 로 묶여야 합니다.

    예:'my' + 'string' ->'mystring'

Arithmetic
  • 추가: +

    두 피연산자는 모두 숫자여야 합니다.

  • 빼기: -

  • 부문: /

    피연산자 (제수 또는 제수) 중 하나 이상이 10진수인 경우를 제외하고 나눗셈 결과는 반올림된 정수 값입니다.

  • 곱셈: *

비트 단위 (정수)
  • 또는: |

    예:13 | 5 ->13

  • 그리고: &

    예:13 & 5 ->5

  • XOR: ^

    예:13 ^ 5 ->8

  • 아니: ~

    예:~13 ->-14

부울
  • 이하: <

  • 다음보다 작거나 같음: <=

  • 다음과 같음: ==

  • 같지 않음: !=

  • 다음보다 크거나 같음: >=

  • 보다 큰: >

  • 그리고: &&

  • 또는: ||

    참고

    의 하위 표현식에 정의되지 않은 데이터가|| 포함된 경우 해당 하위 표현식은 로 처리됩니다false.

괄호

괄호를 사용하여 표현식 내에서 용어를 그룹화할 수 있습니다.

함수

기본 설정 함수
timeout("timer-name")

지정된 타이머가 경과했는지true 여부를 평가합니다. “timer-name “을 사용자가 정의한 타이머 이름을 따옴표로 묶어 바꿉니다. 이벤트 액션에서는 타이머를 정의한 다음 타이머를 시작하거나 재설정하거나 이전에 정의한 타이머를 지울 수 있습니다. 필드를 참조하십시오detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName.

한 상태에서 설정된 타이머를 다른 상태에서 참조할 수 있습니다. 타이머가 참조되는 상태를 입력하기 전에 타이머를 만든 상태를 방문해야 합니다.

예를 들어, 검출기 모델에는 두 가지 상태TemperatureChecked 및 가RecordUpdated 있습니다. TemperatureChecked주에서 타이머를 생성했습니다. 해당TemperatureChecked 주에서 타이머를 사용하려면 먼저RecordUpdated 주를 방문해야 합니다.

정확성을 보장하기 위해 타이머를 설정해야 하는 최소 시간은 60초입니다.

참고

timeout()실제 타이머 만료false 후 처음 확인한true 경우에만 반환되고 이후 반환됩니다.

convert(type, expression)

지정된 유형으로 변환된 표현식의 값으로 평가합니다. 유형 값은StringBoolean, 또는 이어야 합니다Decimal. 이러한 키워드 중 하나를 사용하거나 키워드가 포함된 문자열로 평가되는 식을 사용하십시오. 다음 변환만 성공하고 유효한 값을 반환합니다.

  • BOLEAN

    문자열"true" 또는 을 반환합니다"false".

  • DECIIMAL

  • 문자열

  • 문자열

    지정된 문자열은 십진수의 유효한 표현이어야 합니다. 그렇지convert() 않으면 실패합니다.

유효한 값을 반환하지convert() 않으면 해당 값이 속한 표현식도 유효하지 않습니다. 이 결과는 표현식이 발생하는 이벤트의 일부로nextState 지정된 이벤트의 일부로actions 또는false 전환과 동일하며 트리거되지 않습니다.

isNull(expression)

표현식이 null을true 반환하는지 여부를 평가합니다. 예를 들어, 입력이 메시지를MyInput{ "a": null } 수신하면 다음은 로 평가되지만 로trueisUndefined($input.MyInput.a) 평가됩니다false.

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

표현식이 정의되지 않은true 경우 로 평가합니다. 예를 들어, 입력이 메시지를MyInput{ "a": null } 수신하면 다음은 로 평가되지만 로falseisNull($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을 평가합니다 (이진 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-nameCreateInput액션을 사용하여 만든 입력입니다.

예를 들어,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-nameCreateDetectorModel작업을 사용하여 정의한 변수입니다.

예를 들어, 를 사용하여 정의한 변수 이름이TechnicianID 있는 경우 다음 명령을 사용하여detectorDefinition.states.onInputEvents.actions.setVariable.variableName 변수에 가장 최근에 지정된 (문자열) 값을 참조할 수 있습니다.

$variable.TechnicianID

setVariable액션을 통해서만 변수 값을 설정할 수 있습니다. 표현식에는 변수 값을 할당할 수 없습니다. 변수는 설정 해제할 수 없습니다. 예를 들어, 값을 할당할 수null 있습니다.

참고

(정규 표현식) 패턴을[a-zA-Z][a-zA-Z0-9_]* 따르지 않는 식별자를 사용하는 참조에서는 해당 식별자를 백틱 (`) 으로 묶어야 합니다. 예를 들어, 필드가 이름이 지정된 입력에 대한 참조는 이 필드를MyInput_value 지정해야 합니다$input.MyInput.`_value`.

표현식에 참조를 사용하는 경우 다음 사항을 확인하십시오.

  • 참조를 하나 이상의 연산자와 함께 피연산자로 사용하는 경우 참조하는 모든 데이터 유형이 호환되는지 확인하십시오.

    예를 들어, 다음 표현식에서2 정수는 및 연산자의&& 피연산자입니다.== 피연산자가 호환되는지 확인하려면 정수 또는 십진수를$variable.testVariable 참조해야 합니다.$variable.testVariable + 1

    또한1 정수는 연산자의+ 피연산자입니다. 따라서 정수 또는 십진수를$variable.testVariable 참조해야 합니다.

    ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
  • 참조를 함수에 전달된 인수로 사용하는 경우 참조하는 데이터 유형을 해당 함수가 지원하는지 확인하십시오.

    예를 들어, 다음timeout("time-name") 함수에는 큰따옴표가 인수로 포함된 문자열이 필요합니다. 타이머 이름 값에 참조를 사용하는 경우 큰따옴표가 있는 문자열을 참조해야 합니다.

    timeout("timer-name")
    참고

    convert(type, expression)함수의 경우 유형 값에 참조를 사용하는 경우 참조의 평가 결과는StringDecimal, 또는 이어야 합니다Boolean.

AWS IoT Events표현식은 정수, 십진수, 문자열 및 부울 데이터 유형을 지원합니다. 다음 표에서는 호환되지 않는 유형 쌍의 목록을 확인할 수 있습니다.

호환되지 않는 유형 쌍

정수, 문자열

정수, BOLEAN

십진수, 문자열

DECIIMAL

문자열, BOLEAN

대체 템플릿

'${expression}'

는 문자열을 보간 문자열로${} 식별합니다. 모든AWS IoT Events 표현식이 될expression 수 있습니다. 여기에는 연산자, 함수 및 참조가 포함됩니다.

예를 들어, 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}"