

지원 종료 알림: 2026년 5월 20일에 AWS 에 대한 지원이 종료됩니다 AWS IoT Events. 2026년 5월 20일 이후에는 AWS IoT Events 콘솔 또는 AWS IoT Events 리소스에 더 이상 액세스할 수 없습니다. 자세한 내용은 [AWS IoT Events 지원 종료를 참조하세요](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

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

# 이벤트 데이터를 필터링, 변환 및 처리하는 표현식
<a name="iotevents-expressions"></a>

표현식은 수신 데이터를 평가하고, 계산을 수행하고, 특정 작업 또는 상태 전환이 발생하는 조건을 결정하는 데 사용됩니다.는 감지기 모델을 생성하고 업데이트할 때 값을 지정하는 몇 가지 방법을 AWS IoT Events 제공합니다. 표현식을 사용하여 리터럴 값을 지정하거나 특정 값을 지정하기 전에 표현식을 평가할 AWS IoT Events 수 있습니다.

**Topics**
+ [에서 디바이스 데이터를 필터링하고 작업을 정의하는 구문 AWS IoT Events](#expression-syntax)
+ [에 대한 표현식 예제 및 사용량 AWS IoT Events](expression-usage.md)

## 에서 디바이스 데이터를 필터링하고 작업을 정의하는 구문 AWS IoT Events
<a name="expression-syntax"></a>

표현식은 디바이스 데이터를 필터링하고 작업을 정의하는 구문을 제공합니다. AWS IoT Events 표현식에서 리터럴, 연산자, 함수, 참조 및 대체 템플릿을 사용할 수 있습니다. 이러한 구성 요소를 결합하여 강력하고 유연한 표현식을 생성하여 IoT 데이터를 처리하고, 계산을 수행하고, 문자열을 조작하고, 감지기 모델 내에서 논리적 결정을 내릴 수 있습니다.

### 리터럴
<a name="expression-literal"></a>
+ Integer
+ 10진수
+ 문자열
+ 부울

### 연산자
<a name="expression-operator"></a>

단항  
+ 아니요(부울): `!`
+ 아니요(비트별): `~`
+ 마이너스(산술): `-`

문자열  
+ 연결: **`+`**

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

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

Arithmetic  
+ 더하기: **`+`**

  두 피연산자는 모두 숫자여야 합니다.
+ 빼기: **`-`**
+ 나눗셈: **`/`**

  피연산자(약수 또는 배당) 중 하나 이상이 10진수가 아닌 경우 나눗셈 결과는 반올림된 정수 값입니다.
+ 곱하기: **`*`**

비트별(정수)  
+ 또는: **`|`**

  예제: `13 | 5` -> `13`
+ 및: **`&`**

  예제: `13 & 5` -> `5`
+ XOR: **`^`**

  예제: `13 ^ 5` -> `8`
+ NOT: **`~`**

  예제: `~13` -> `-14`

부울  
+ 작음: **`<`**
+ 작거나 같음: **`<=`**
+ 같음: **`==`**
+ 같지 않음: **`!=`**
+ 크거나 같음: **`>=`**
+ 큼: **`>`**
+ 및: **`&&`**
+ 또는: **`||`**
**참고**  
`||`의 하위 표현식에 정의되지 않은 데이터가 포함된 경우 해당 하위 표현식은 `false`와 같이 취급됩니다.

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

### AWS IoT Events 표현식에 사용할 함수
<a name="expression-function"></a>

AWS IoT Events 는 감지기 모델 표현식의 기능을 개선하기 위한 내장 함수 세트를 제공합니다. 이러한 함수를 사용하면 타이머 관리, 유형 변환, null 확인, 트리거 유형 식별, 입력 확인, 문자열 조작 및 비트 단위 작업을 수행할 수 있습니다. 이러한 함수를 활용하면 응답 처리 AWS IoT Events 로직을 생성하여 IoT 애플리케이션의 전반적인 효율성을 개선할 수 있습니다.

기본 제공 함수    
`timeout("{{timer-name}}")`  
지정된 타이머가 경과했는지 여부를 `true` 평가합니다. “{{*timer-name*}}“을 사용자가 정의한 타이머 이름으로 바꾸어 따옴표로 표기하십시오. 이벤트 작업에서 타이머를 정의한 다음 타이머를 시작하거나, 재설정하거나, 이전에 정의한 타이머를 지울 수 있습니다. 필드 `detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName`을 참조하십시오.  
한 상태에서 설정된 타이머를 다른 상태에서 참조할 수 있습니다. 타이머가 참조되는 상태를 입력하기 전에 타이머를 만든 상태를 방문해야 합니다.  
예를 들어 감지기 모델에는 `TemperatureChecked` 및 라는 두 가지 상태가 있습니다`RecordUpdated`. `TemperatureChecked` 상태에서 타이머를 생성했습니다. `TemperatureChecked` 상태에서 타이머를 사용하려면 먼저 `RecordUpdated` 상태를 방문해야 합니다.  
정확성을 보장하기 위해 타이머를 설정해야 하는 시간은 최소 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)
```
두 표현식 모두 정수 값으로 평가되어야 합니다. 두 표현식 중 하나가 정수 값으로 평가되지 않으면 함수의 결과가 정의되지 않습니다. 변환은 수행되지 않습니다.

### AWS IoT Events 표현식의 입력 및 변수에 대한 참조
<a name="expression-reference"></a>

입력  
`$input.{{input-name}}.{{path-to-data}}`  
`input-name`은(는) [입력 생성](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateInput.html) 작업을 사용하여 만든 입력입니다.  
예를 들어, `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]
```

변수  
`$variable.{{variable-name}}`  
`{{variable-name}}`는 [CreateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateDetectorModel.html) 작업을 사용하여 정의한 변수입니다.  
예를 들어 `detectorDefinition.states.onInputEvents.actions.setVariable.variableName`를 사용하여 정의한 이름이 지정된 `TechnicianID` 변수가 있는 경우 다음 명령을 사용하여 변수에 가장 최근에 지정된(문자열) 값을 참조할 수 있습니다.  

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

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

표현식에서 참조를 사용하는 경우 다음을 확인하십시오.<a name="expression-reference-type-compatibility"></a>
+ 하나 이상의 연산자와 함께 참조를 피연산자로 사용하는 경우, 참조하는 모든 데이터 유형이 호환되는지 확인하십시오.

  예를 들어, 다음 표현식에서 정수 `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진수, 부울 | 
| 문자열, 부울 | 

### AWS IoT Events 표현식의 대체 템플릿
<a name="expression-substitution-template"></a>

****  
`'${{{expression}}}'`  
`${}`는 문자열을 보간된 문자열로 식별합니다. 는 모든 AWS IoT Events 표현식일 `expression` 수 있습니다. 여기에는 연산자, 함수 및 참조가 포함됩니다.  
예를 들어, [SetVariableAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetVariableAction.html) 작업을 사용하여 변수를 정의했습니다. `variableName`은(는) `SensorID`이고 `value`은(는) `10`입니다. 다음과 같은 대체 템플릿을 만들 수 있습니다.      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/iotevents/latest/developerguide/iotevents-expressions.html)