감지기 모델 생성 - AWS IoT Events

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

감지기 모델 생성

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

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

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

감지기 모델 생성
  1. 첫 번째 감지기 상태가 생성되었습니다. 수정하려면 기본 편집 스페이스에서 State_1(이)라는 레이블이 있는 원을 선택하세요.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  2. 상태 창에서 상태 이름OnEnter을 입력하고 이벤트 추가를 선택하세요.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  3. OnEnter 이벤트 추가 페이지에서 이벤트 이름이벤트 조건을 입력합니다. 이 예제에서는 true을(를) 입력해 상태를 입력할 때 이벤트가 항상 시작됨을 나타냅니다.

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

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  5. 이벤트 작업에서 다음을 수행합니다.

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

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

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

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

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  6. Save를 선택합니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.

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

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

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  8. 두 번째 감지기 상태를 만들려면 감지기 모델 팔레트에서 상태를 선택하고 기본 편집 스페이스로 드래그하세요. 그러면 untitled_state_1 제목이 붙은 상태가 만들어집니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  9. 첫 번째 상태(보통)에서 일시 중지합니다. 상태 둘레에 화살표가 나타납니다.

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

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  11. 제목 없음 라인을 선택합니다. 전환 이벤트 창에서 이벤트 이름이벤트 트리거 로직을 입력합니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  12. 전환 이벤트 창에서 작업 추가를 선택합니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  13. 전환 이벤트 작업 추가 창에서 작업 추가를 선택합니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  14. 작업 선택에서 변수 설정을 선택합니다.

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

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

    3. 값 할당$variable.pressureThresholdBreached + 3와(과) 같은 값을 입력합니다

    4. Save를 선택합니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  15. 두 번째 상태 untitled_state_1를 선택합니다.

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

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  17. OnEnter 이벤트 추가 페이지에서 이벤트 이름이벤트 조건을 입력합니다. 작업 추가를 선택합니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  18. 작업 선택에서 SNS 메시지 보내기를 선택합니다.

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

    2. Save를 선택합니다.

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  19. 예제에 이벤트를 계속 추가하세요.

    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
    2. OnInput의 경우, 이벤트 추가를 선택하고 다음 이벤트 정보를 입력하고 저장합니다.

      Event name: Pressure Okay Event condition: $input.PressureInput.sensorData.pressure <= 70 Event actions: Set variable: Variable operation: Decrement Variable name: pressureThresholdBreached
    3. 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
  20. 두 번째 상태(위험) 에서 일시 중지합니다. 상태 둘레에 화살표가 나타납니다.

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

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
  22. 제목 없음 라인을 선택하고 전환 이벤트 창에서 다음 정보를 사용하여 이벤트 이름이벤트 트리거 로직을 입력합니다.

    { Event name: BackToNormal Event trigger logic: $input.PressureInput.sensorData.pressure <= 70 && $variable.pressureThresholdBreached <= 0 }
    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.

    트리거 로직에서 $input 값과 $variable 값을 테스트하는 이유에 대한 자세한 내용은 감지기 모델 규제 및 제한의 변수 값 가용성 항목을 참조하세요.

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

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

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

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

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

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

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

    
            AWS IoT Events 콘솔에서 감지기 모델을 생성합니다.
참고

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

감지기 모델 정의의 백업 사본(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" } } }