

지원 종료 알림: 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-create-detector"></a>

[AWS IoT Events 입력을 생성하여 디바이스 데이터 캡처](iotevents-create-input.md)에서 모터의 압력 데이터를 보고하는 메시지를 기반으로 `input`을 만들었습니다. 예제를 계속하기 위해 모터의 과압 상황에 대응하는 감지기 모델을 살펴보겠습니다.

“`Normal`” 및 “`Dangerous`”의 두 가지 상태를 생성합니다. 각 감지기(인스턴스)는 생성될 때 "`Normal`" 상태로 전환됩니다. 인스턴스는 `key` “`motorid`”에 대한 고유한 값을 가진 입력이 도착하면 생성됩니다.

감지기 인스턴스가 70 이상의 압력 판독값을 수신하면 "`Dangerous`" 상태로 전환되고 Amazon SNS 메시지를 경고로 보냅니다. 압력 측정값이 정상(70 미만)으로 3회 연속 입력되면 감지기는 "`Normal`" 상태로 돌아가고 다른 Amazon SNS 메시지를 모두 지우기 상태로 보냅니다.

이 예제 감지기 모델은 정의에 Amazon 리소스 이름(ARN)이 `"targetArn": "arn:aws:sns:us-east-1:123456789012:underPressureAction"` 및 `"targetArn": "arn:aws:sns:us-east-1:123456789012:pressureClearedAction"`으로 표시된 두 개의 Amazon SNS 주제를 생성했다고 가정합니다.

자세한 내용은 [Amazon Simple Notification Service 개발자 안내서](https://docs.aws.amazon.com/sns/latest/dg/)를 참조하십시오. 더 구체적인 설명은 *Amazon Simple Notification Service API 참조*의 [CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html) 작업을 참조하십시오.

또한이 예제에서는 적절한 권한이 있는 AWS Identity and Access Management (IAM) 역할을 생성했다고 가정합니다. 이 역할의 ARN은 감지기 모델 정의에 `"roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole"`과 같이 표시됩니다. [에 대한 권한 설정 AWS IoT Events](iotevents-permissions.md)의 단계에 따라 이 역할을 생성하고 역할의 ARN을 감지기 모델 정의의 적절한 위치에 복사하십시오.

다음 AWS CLI 명령을 사용하여 감지기 모델을 생성할 수 있습니다.

```
aws iotevents create-detector-model  --cli-input-json file://motorDetectorModel.json
```

`"motorDetectorModel.json"` 파일에는 다음 코드가 포함되어 있습니다.

```
{
  "detectorModelName": "motorDetectorModel",
  "detectorModelDefinition": {
    "states": [
      {
        "stateName": "Normal",
        "onEnter": {
          "events": [
            {
              "eventName": "init",
              "condition": "true",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "0"
                  }
                }
              ]
            }
          ]
        },
        "onInput": {
          "transitionEvents": [
            {
              "eventName": "Overpressurized",
              "condition": "$input.PressureInput.sensorData.pressure > 70",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "$variable.pressureThresholdBreached + 3"
                  }
                }
              ],
              "nextState": "Dangerous"
            }
          ]
        }
      }, 
      {
        "stateName": "Dangerous",
        "onEnter": {
          "events": [
            {
              "eventName": "Pressure Threshold Breached",
              "condition": "$variable.pressureThresholdBreached > 1",
              "actions": [
                {
                  "sns": {
                    "targetArn": "arn:aws:sns:us-east-1:123456789012:underPressureAction"
                  }
                }
              ]
            }
          ]
        },
        "onInput": {
          "events": [
            {
              "eventName": "Overpressurized",
              "condition": "$input.PressureInput.sensorData.pressure > 70",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "3"
                  }
                }
              ]
            },
            {
              "eventName": "Pressure Okay",
              "condition": "$input.PressureInput.sensorData.pressure <= 70",
              "actions": [
                {
                  "setVariable": {
                    "variableName": "pressureThresholdBreached",
                    "value": "$variable.pressureThresholdBreached - 1"
                  }
                }
              ]
            }
          ],
          "transitionEvents": [
            {
              "eventName": "BackToNormal",
              "condition": "$input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 1",
              "nextState": "Normal"
            }
          ]
        },
        "onExit": {
          "events": [
            {
              "eventName": "Normal Pressure Restored",
              "condition": "true",
              "actions": [
                {
                  "sns": {
                    "targetArn": "arn:aws:sns:us-east-1:123456789012:pressureClearedAction"
                  }
                }
              ]
            }
          ]
        }
      }
    ],
    "initialStateName": "Normal"
  },
  "key" : "motorid",
  "roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole"
}
```