기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
표현식
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
)-
지정된 유형으로 변환된 표현식의 값으로 평가합니다.
유형
값은String
Boolean
, 또는 이어야 합니다Decimal
. 이러한 키워드 중 하나를 사용하거나 키워드가 포함된 문자열로 평가되는 식을 사용하십시오. 다음 변환만 성공하고 유효한 값을 반환합니다.-
BOLEAN
문자열
"true"
또는 을 반환합니다"false"
. -
DECIIMAL
-
문자열
-
문자열
지정된 문자열은 십진수의 유효한 표현이어야 합니다. 그렇지
convert()
않으면 실패합니다.
유효한 값을 반환하지
convert()
않으면 해당 값이 속한 표현식도 유효하지 않습니다. 이 결과는 표현식이 발생하는 이벤트의 일부로nextState
지정된 이벤트의 일부로actions
또는false
전환과 동일하며 트리거되지 않습니다. -
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
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_]*
따르지 않는 식별자를 사용하는 참조에서는 해당 식별자를 백틱 (`
) 으로 묶어야 합니다. 예를 들어, 필드가 이름이 지정된 입력에 대한 참조는 이 필드를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
)유형
값에 참조를 사용하는 경우 참조의 평가 결과는String
Decimal
, 또는 이어야 합니다Boolean
.
AWS IoT Events표현식은 정수, 십진수, 문자열 및 부울 데이터 유형을 지원합니다. 다음 표에서는 호환되지 않는 유형 쌍의 목록을 확인할 수 있습니다.
호환되지 않는 유형 쌍 |
---|
정수, 문자열 |
정수, BOLEAN |
십진수, 문자열 |
DECIIMAL |
문자열, BOLEAN |
대체 템플릿
-
'${
expression
}'는 문자열을 보간 문자열로
${}
식별합니다. 모든AWS IoT Events 표현식이 될expression
수 있습니다. 여기에는 연산자, 함수 및 참조가 포함됩니다.예를 들어, 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}"