

지원 종료 알림: 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).

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

# 에서 감지기 모델 생성 AWS IoT Events
<a name="iotevents-detector-model"></a>

이 주제에서는 *상태*를 사용하여 *감지기 모델*(장비 또는 프로세스의 모델)을 정의합니다.

각 상태에 대해 수신되는 입력을 평가하여 중요 이벤트를 탐지하는 조건부(부울) 논리를 정의합니다. 이벤트가 감지되면 상태가 변경되고 추가 작업을 시작할 수 있습니다. 이러한 이벤트를 전환 이벤트라고 합니다.

또한 상태에서는 감지기가 해당 상태에 들어가거나 종료할 때마다, 혹은 입력을 받을 때마다 작업을 실행할 수 있는 이벤트(이를 `OnEnter`, `OnExit` 및 `OnInput` 이벤트라고 함)를 정의합니다. 작업은 이벤트의 조건부 로직이 `true`로 평가되는 경우에만 실행됩니다.

**감지기 모델 생성**

1. 첫 번째 감지기 상태가 생성되었습니다. 수정하려면 기본 편집 스페이스에서 **State\$11**(이)라는 레이블이 있는 원을 선택하십시오.

1. **상태** 창에서 **상태 이름** 및 **OnEnter**을 입력하고 **이벤트 추가**를 선택하십시오.

1. **OnEnter 이벤트 추가** 페이지에서 **이벤트 이름**과 **이벤트 조건**을 입력합니다. 이 예제에서는 `true`를 입력해 상태를 입력할 때 이벤트가 항상 시작됨을 나타냅니다.

1. **이벤트 작업**에서 **작업 추가**를 선택합니다.

1. **이벤트 작업**에서 다음을 수행합니다.

   1. **변수 설정**을 선택합니다.

   1.  **변수 작업**의 경우 **값 할당**을 선택합니다.

   1. **변수 이름**에는 설정할 변수의 이름을 입력합니다.

   1. **변수 값**에 값 **0**(제로)을 입력합니다.

1. **저장**을 선택합니다.

   정의한 것과 같은 변수는 감지기 모델의 모든 이벤트에서 설정(지정 값)될 수 있습니다. 감지기가 상태에 도달하고 해당 상태가 정의되거나 설정된 작업을 실행한 후에만 변수 값을 참조할 수 있습니다(예: 이벤트의 조건부 로직).

1. **상태** 창에서 **상태** 옆의 **X**를 선택해 **감지기 모델 팔레트**로 돌아갑니다.

1. 두 번째 감지기 상태를 만들려면 **감지기 모델 팔레트**에서 **상태**를 선택하고 기본 편집 스페이스로 드래그하십시오. 그러면 `untitled_state_1` 제목이 붙은 상태가 만들어집니다.

1. 첫 번째 상태(**보통**)에서 일시 중지합니다. 상태 둘레에 화살표가 나타납니다.

1. 화살표를 클릭하여 첫 번째 상태에서 두 번째 상태로 드래그합니다. 첫 번째 상태에서 두 번째 상태로 이어지는 지시선(**제목 없음**)이 나타납니다.

1. **제목 없음** 라인을 선택합니다. **전환 이벤트** 창에서 **이벤트 이름**과 **이벤트 트리거 로직**을 입력합니다.

1. **전환 이벤트** 창에서 **작업 추가**를 선택합니다.

1. **전환 이벤트 작업 추가** 창에서 **작업 추가**를 선택합니다.

1.  **작업 선택**에서 **변수 설정**을 선택합니다.

   1. **변수 작업**의 경우 **값 할당**을 선택합니다.

   1. **변수 이름**에 변수의 이름을 입력합니다.

   1. **값 할당**에 `$variable.pressureThresholdBreached + 3`과 같은 값을 입력합니다

   1. **저장**을 선택합니다.

1. 두 번째 상태 **untitled\$1state\$11**를 선택합니다.

1. **상태** 창에서 **주 이름**을 입력하고 **On Enter**에 대해 **이벤트 추가**를 선택합니다.

1. **OnEnter 이벤트** 추가 페이지에서 **이벤트 이름** 및 **이벤트 조건**을 입력합니다. **작업 추가**를 선택합니다.

1. **작업 선택**에서 **SNS 메시지 보내기**를 선택합니다.

   1. **SNS 주제**에 사용할 Amazon SNS 주제의 대상 ARN을 입력합니다.

   1. **저장**을 선택합니다.

1. 예제에 이벤트를 계속 추가하십시오.

   1. **OnInput**의 경우, **이벤트 추가**를 선택하고 다음 이벤트 정보를 입력하고 저장합니다.

      ```
        Event name: Overpressurized
        Event condition: $input.PressureInput.sensorData.pressure > 70
        Event actions:
          Set variable:
            Variable operation: Assign value
            Variable name: pressureThresholdBreached
            Assign value: 3
      ```

   1. **OnInput**의 경우, **이벤트 추가**를 선택하고 다음 이벤트 정보를 입력하고 저장합니다.

      ```
        Event name: Pressure Okay
        Event condition: $input.PressureInput.sensorData.pressure <= 70
        Event actions:
          Set variable:
            Variable operation: Decrement
            Variable name: pressureThresholdBreached
      ```

   1. **OnExit**의 경우, **이벤트 추가**를 선택하고 생성한 Amazon SNS 주제의 ARN을 사용하여 다음 이벤트 정보를 입력하고 저장합니다.

      ```
        Event name: Normal Pressure Restored
        Event condition: true
        Event actions:
          Send SNS message: 
            Target arn: arn:aws:sns:us-east-1:123456789012:pressureClearedAction
      ```

1. 두 번째 상태(**위험**``) 에서 일시 중지합니다. 상태 둘레에 화살표가 나타납니다.

1. 화살표를 클릭하여 두 번째 상태에서 첫 번째 상태로 드래그합니다. **제목 없음** 레이블이 있는 지시선이 나타납니다.

1. **제목 없음** 라인을 선택하고 **전환 이벤트** 창에서 다음 정보를 사용하여 **이벤트 이름**과 **이벤트 트리거 로직**을 입력합니다.

   ```
   {
     Event name: BackToNormal
     Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0
   }
   ```

   트리거 로직에서 `$input` 값과 `$variable` 값을 테스트하는 이유에 대한 자세한 내용은 [AWS IoT Events 감지기 모델 제한 사항 및 제한 사항](iotevents-restrictions-detector-model.md)의 변수 값 가용성 항목을 참조하십시오.

1. **시작** 상태를 선택합니다. 기본적으로 이 상태는 감지기 모델을 생성할 때 생성되었습니다. **시작** 창에서 **대상 상태**(예: **보통**)를 선택합니다.

1. 그런 다음, 입력을 수신하도록 감지기 모델을 구성합니다. 오른쪽 상단 모서리에서 **게시**를 선택합니다.

1. **감지기 모델 게시** 창에서 다음을 수행합니다.

   1.  **감지기 모델 이름**, **설명**, **역할** 이름을 입력합니다. 이 역할은 사용자를 위해 생성됩니다.

   1. **각 고유 키 값에 대한 감지기 만들기**를 선택합니다. 고유한 **역할**을 생성하여 사용하려면 [에 대한 권한 설정 AWS IoT Events](iotevents-permissions.md)에 나와 있는 단계를 따르고 여기에 **역할**로 입력합니다.

1. **감지기 생성 키**의 경우, 이전에 정의한 입력 속성 중 하나의 이름을 선택합니다. 감지기 생성 키로 선택하는 속성은 각 메시지 입력에 있어야 하며 메시지를 보내는 각 디바이스마다 고유해야 합니다. 이 예제에서는 **motorid** 속성을 사용합니다.

1. [**Save and publish(저장 및 게시)**]를 선택합니다.

**참고**  
지정된 감지기 모델에 대해 생성되는 고유 감지기의 수는 전송된 입력 메시지를 기반으로 합니다. 감지기 모델이 생성되면 입력 속성에서 키가 선택됩니다. 이 키는 사용할 감지기 인스턴스를 결정합니다. (이 감지기 모델에서) 이전에 본 적이 없는 키일 경우, 새 감지기 인스턴스가 생성됩니다. 이전에 본 적이 있는 키일 경우, 이 키 값에 해당하는 기존 감지기 인스턴스를 사용합니다.

감지기 모델 정의의 백업 사본(JSON 내)을 만들어 감지기 모델을 재생성 또는 업데이트하거나 템플릿으로 사용하여 다른 감지기 모델을 생성할 수 있습니다.

콘솔 또는 다음 CLI 명령을 사용하여 수행할 수 있습니다. 필요한 경우 이전 단계에서 게시할 때 사용한 것과 일치하도록 감지기 모델 이름을 변경하십시오.

```
aws iotevents describe-detector-model  --detector-model-name motorDetectorModel > motorDetectorModel.json 
```

그러면 다음과 비슷한 내용이 포함된 파일(`motorDetectorModel.json`)이 생성됩니다.

```
{
    "detectorModel": {
        "detectorModelConfiguration": {
            "status": "ACTIVE", 
            "lastUpdateTime": 1552072424.212, 
            "roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole", 
            "creationTime": 1552072424.212, 
            "detectorModelArn": "arn:aws:iotevents:us-west-2:123456789012:detectorModel/motorDetectorModel", 
            "key": "motorid", 
            "detectorModelName": "motorDetectorModel", 
            "detectorModelVersion": "1"
        }, 
        "detectorModelDefinition": {
            "states": [
                {
                    "onInput": {
                        "transitionEvents": [
                            {
                                "eventName": "Overpressurized", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "$variable.pressureThresholdBreached + 3"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure > 70", 
                                "nextState": "Dangerous"
                            }
                        ], 
                        "events": []
                    }, 
                    "stateName": "Normal", 
                    "onEnter": {
                        "events": [
                            {
                                "eventName": "init", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "0"
                                        }
                                    }
                                ], 
                                "condition": "true"
                            }
                        ]
                    }, 
                    "onExit": {
                        "events": []
                    }
                }, 
                {
                    "onInput": {
                        "transitionEvents": [
                            {
                                "eventName": "Back to Normal", 
                                "actions": [], 
                                "condition": "$variable.pressureThresholdBreached <= 1 && $input.PressureInput.sensorData.pressure <= 70", 
                                "nextState": "Normal"
                            }
                        ], 
                        "events": [
                            {
                                "eventName": "Overpressurized", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "3"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure > 70"
                            }, 
                            {
                                "eventName": "Pressure Okay", 
                                "actions": [
                                    {
                                        "setVariable": {
                                            "variableName": "pressureThresholdBreached", 
                                            "value": "$variable.pressureThresholdBreached - 1"
                                        }
                                    }
                                ], 
                                "condition": "$input.PressureInput.sensorData.pressure <= 70"
                            }
                        ]
                    }, 
                    "stateName": "Dangerous", 
                    "onEnter": {
                        "events": [
                            {
                                "eventName": "Pressure Threshold Breached", 
                                "actions": [
                                    {
                                        "sns": {
                                            "targetArn": "arn:aws:sns:us-west-2:123456789012:MyIoTButtonSNSTopic"
                                        }
                                    }
                                ], 
                                "condition": "$variable.pressureThresholdBreached > 1"
                            }
                        ]
                    }, 
                    "onExit": {
                        "events": [
                            {
                                "eventName": "Normal Pressure Restored", 
                                "actions": [
                                    {
                                        "sns": {
                                            "targetArn": "arn:aws:sns:us-west-2:123456789012:IoTVirtualButtonTopic"
                                        }
                                    }
                                ], 
                                "condition": "true"
                            }
                        ]
                    }
                }
            ], 
            "initialStateName": "Normal"
        }
    }
}
```