기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
표현식
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
는 CreateDetectorModel 작업을 사용하여 정의한 변수입니다.variable-name
예를 들어
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}"