표현식 - 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

  • NOT: ~

    예제: ~13 -> -14

부울
  • 작음: <

  • 작거나 같음: <=

  • 같음: ==

  • 같지 않음: !=

  • 크거나 같음: >=

  • 큼: >

  • 및: &&

  • 또는: ||

    참고

    ||의 하위 표현식에 정의되지 않은 데이터가 포함된 경우 해당 하위 표현식은 false와(과) 같이 취급됩니다.

괄호

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

함수

기본 제공 함수
timeout("timer-name")

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

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

예를 들어, 감지기 모델에는 온도 확인과 기록 업데이트라는 두 가지 상태가 있습니다. TemperatureChecked 상태에서 타이머를 생성했습니다. RecordUpdated 상태에서 타이머를 사용하려면 먼저 TemperatureChecked 상태로 이동해야 합니다.

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

참고

실제 타이머 만료 후 처음 확인할 때만 timeout()이(가) true(으)로 반환되고 그 이후에는 false(으)로 반환됩니다.

convert(type, expression)

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

  • 부울 -> 문자열

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

  • 10진수 -> 문자열

  • 문자열 -> 부울

  • 문자열 -> 10진수

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

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

isNull(expression)

표현식이 NULL로 반환되면 true(으)로 평가됩니다. 예를 들어, 입력 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을 평가합니다(이항 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은(는) 입력 생성 작업을 사용하여 만든 입력입니다.

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

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

$variable.TechnicianID

setVariable 작업을 사용해서만 변수 값을 설정할 수 있습니다. 표현식에는 변수 값을 할당할 수 없습니다. 변수는 설정을 해제할 수 없습니다. 예를 들어 값 null을(를) 할당할 수 없습니다.

참고

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

표현식에서 참조를 사용하는 경우 다음을 확인하세요.

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

    예를 들어, 다음 표현식에서 정수 2는 및 연산자 ==와(과) && 모두의 피연산자입니다. 피연산자를 호환하기 위해서는 $variable.testVariable + 1$variable.testVariable이(가) 정수 또는 10진수를 참조해야 합니다.

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

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

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

    timeout("timer-name")
    참고

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

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

호환되지 않는 유형 페어

정수, 문자열

정수, 부울

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}"