간단한 step-by-step 예 - AWS IoT Events

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

간단한 step-by-step 예

이 예제에서는 AWS CLI 명령을 사용하여 AWS IoT Events API를 호출하여 엔진의 두 가지 상태, 즉 정상 상태와 과압 상태를 모델링하는 감지기를 생성합니다.

엔진에서 측정된 압력이 특정 임계값을 초과하면 모델은 과압 상태로 전환하고 Amazon Simple Notification Service (Amazon SNS) 메시지를 보내 기술자에게 상태를 알립니다. 압력이 3회 연속으로 압력 판독값이 임계값 아래로 떨어지면 모델은 정상 상태로 돌아가고 상태가 해결되었음을 확인하는 Amazon SNS 메시지를 하나 더 보냅니다. 비선형 복구 단계 또는 일회성 변칙 복구 측정값 발생 시 과압/정상 메시지가 끊길 가능성을 없애려면 압력 임계값 아래로 3회 연속 측정값이 필요합니다.

다음은 검출기 생성 단계에 대한 개요입니다.

입력 생성.

디바이스와 프로세스를 모니터링하려면 원격 측정 데이터를 AWS IoT Events로 보낼 방법이 있어야 합니다. 이를 위해 메시지를 입력으로 AWS IoT Events에 전송합니다. 여러 가지 방법으로 이 작업을 수행할 수 있습니다.

  • BatchPutMessage오퍼레이션 사용. 이 방법은 간단하지만 장치 또는 프로세스가 SDK 또는 를 통해 AWS IoT Events API에 액세스할 수 있어야 합니다AWS CLI.

  • 에서 AWS IoT Core 메시지 데이터를 전달하는 AWS IoT Core 규칙 엔진용 AWS IoT Events작업 규칙을 작성하십시오. AWS IoT Events 이렇게 하면 입력이 이름으로 식별됩니다. 장치 또는 프로세스에서 메시지를 보낼 수 있거나 이미 전송하고 있는 AWS IoT Core 경우 이 방법을 사용하십시오. 이 방법을 사용하는 경우 일반적으로 장치의 컴퓨팅 성능이 덜 필요합니다.

  • AWS IoT Analytics에서는 이 CreateDataset작업을 사용하여 AWS IoT Events 입력값을 contentDeliveryRules 지정하는 데이터 세트를 만들면 데이터 세트 내용이 자동으로 전송됩니다. 집계되거나 분석된 데이터를 기반으로 장치 또는 프로세스를 제어하려면 이 방법을 사용하십시오. AWS IoT Analytics

장치에서 이러한 방식으로 데이터를 전송하려면 먼저 하나 이상의 입력을 정의해야 합니다. 이렇게 하려면 각 입력에 이름을 지정하고 입력이 모니터링하는 수신 메시지 데이터의 필드를 지정하십시오.

검출기 모델 만들기

상태를 사용하여 검출기 모델 (장비 또는 프로세스 모델) 을 생성합니다. 각 상태에 대해 들어오는 입력을 평가하여 중요한 이벤트를 탐지하는 조건부 (부울) 로직을 정의하십시오. 이벤트가 감지되면 다른 서비스를 사용하여 상태를 변경하거나 사용자 지정 또는 사전 정의된 작업을 시작할 수 있습니다. AWS 상태에 들어가거나 종료할 때, 그리고 선택적으로 조건이 충족될 때 작업을 시작하는 추가 이벤트를 정의할 수 있습니다.

여러 장치 또는 프로세스를 모니터링합니다.

여러 장치 또는 프로세스를 모니터링하고 각 장치를 개별적으로 추적하려면 각 입력에 특정 장치를 식별하거나 입력이 들어오는 프로세스를 식별하는 필드를 지정하십시오. 의 key CreateDetectorModel 필드를 참조하십시오. 새 기기가 식별되면 (로 식별되는 입력 필드에 새 값이 key 표시됨) 검출기 인스턴스가 생성됩니다. 새 감지기 인스턴스는 해당 탐지기 모델이 업데이트되거나 삭제될 때까지 해당 특정 기기에서 들어오는 입력에 계속 응답합니다. 입력 key 필드의 고유 값 수만큼 고유한 감지기 (인스턴스) 가 있습니다.

단일 장치 또는 프로세스를 모니터링하십시오.

단일 프로세스를 모니터링하는 경우 (여러 장치 또는 하위 프로세스가 입력을 보내는 경우에도) 고유한 식별 key 필드를 지정하지 마십시오. 이 경우 첫 번째 입력이 도착하면 단일 검출기 (인스턴스) 가 생성됩니다. 예를 들어 집의 각 방에는 온도 센서가 있지만 집 전체를 난방 또는 냉방하는 HVAC 장치는 하나뿐일 수 있습니다. 따라서 각 방 거주자가 자신의 투표 (입력) 가 우세하기를 원하더라도 이를 단일 프로세스로만 제어할 수 있습니다.

장치 또는 프로세스의 메시지를 검출기 모델의 입력으로 전송하십시오.

장치 또는 프로세스에서 메시지를 입력으로 AWS IoT Events 검출기에 입력으로 전송하는 몇 가지 방법을 설명했습니다. 입력을 생성하고 검출기 모델을 구축했으면 이제 데이터 전송을 시작할 준비가 되었습니다.

참고

검출기 모델을 생성하거나 기존 탐지기 모델을 업데이트하면 신규 또는 업데이트된 탐지기 모델이 메시지를 수신하고 탐지기 (인스턴스) 생성을 시작하기까지 몇 분이 걸립니다. 검출기 모델이 업데이트되면 이 기간 동안 이전 버전에 기반한 동작이 계속 나타날 수 있습니다.

기기 데이터를 캡처하기 위한 입력을 생성합니다.

예를 들어, 디바이스에서 다음 형식으로 메시지를 전송한다고 가정해 보겠습니다.

{ "motorid": "Fulton-A32", "sensorData": { "pressure": 23, "temperature": 47 } }

다음 AWS CLI 명령을 사용하여 pressure 데이터를 캡처하고 motorid (메시지를 보낸 특정 장치를 식별하는) 입력을 만들 수 있습니다.

aws iotevents create-input --cli-input-json file://pressureInput.json

pressureInput.json파일에는 다음이 포함됩니다.

{ "inputName": "PressureInput", "inputDescription": "Pressure readings from a motor", "inputDefinition": { "attributes": [ { "jsonPath": "sensorData.pressure" }, { "jsonPath": "motorid" } ] } }

직접 입력을 생성할 때는 먼저 장치 또는 프로세스에서 예제 메시지를 JSON 파일로 수집해야 합니다. 이를 사용하여 콘솔 또는 CLI에서 입력을 생성할 수 있습니다.

디바이스 상태를 나타내는 검출기 모델을 생성하십시오.

기기 데이터를 캡처하기 위한 입력을 생성합니다.에서는 모터의 압력 데이터를 보고하는 메시지를 input 기반으로 모델을 만들었습니다. 예제를 계속하기 위해 모터의 과압 상황에 대응하는 검출기 모델을 살펴보겠습니다.

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

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

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

자세한 내용은 Amazon 단순 알림 서비스 개발자 안내서를 참조하십시오. 특히 Amazon 단순 알림 서비스 API 참조의 CreateTopic작업 설명서를 참조하십시오.

또한 이 예제에서는 적절한 권한을 가진 AWS Identity and Access Management (IAM) 역할을 생성했다고 가정합니다. 이 역할의 ARN은 검출기 모델 정의에 다음과 같이 표시됩니다. "roleArn": "arn:aws:iam::123456789012:role/IoTEventsRole" 단계에 따라 이 역할을 생성하고 역할의 AWS IoT Events에 대한 권한 설정 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" }

메시지를 입력으로 탐지기에 전송

이제 기기에서 보낸 메시지의 중요 필드를 식별하는 입력이 정의되었습니다 (참조기기 데이터를 캡처하기 위한 입력을 생성합니다.). 이전 섹션에서는 모터의 과압 이벤트에 detector model 반응하는 신호를 생성했습니다 (참조). 디바이스 상태를 나타내는 검출기 모델을 생성하십시오.

예제를 완료하려면 장치 (이 경우에는 AWS CLI 설치된 컴퓨터) 의 메시지를 감지기의 입력으로 보내십시오.

참고

탐지기 모델을 생성하거나 기존 탐지기 모델을 업데이트하면 새 또는 업데이트된 탐지기 모델이 메시지를 수신하고 탐지기 (인스턴스) 를 생성하기 시작하기까지 몇 분 정도 걸립니다. 탐지기 모델을 업데이트하면 이 기간 동안 이전 버전에 기반한 동작이 계속 나타날 수 있습니다.

다음 AWS CLI 명령을 사용하여 임계값을 위반하는 데이터가 포함된 메시지를 보내십시오.

aws iotevents-data batch-put-message --cli-input-json file://highPressureMessage.json --cli-binary-format raw-in-base64-out

highPressureMessage.json" 파일에는 다음이 포함됩니다.

{ "messages": [ { "messageId": "00001", "inputName": "PressureInput", "payload": "{\"motorid\": \"Fulton-A32\", \"sensorData\": {\"pressure\": 80, \"temperature\": 39} }" } ] }

전송되는 messageId 각 메시지의 내용을 변경해야 합니다. 변경하지 않으면 AWS IoT Events 시스템에서 메시지의 중복을 제거합니다. AWS IoT Events최근 5분 이내에 전송된 다른 메시지와 messageID 동일한 메시지가 있는 경우 메시지를 무시합니다.

이때 모터의 "Fulton-A32" 이벤트를 모니터링하기 위한 탐지기 (인스턴스) 가 생성됩니다. 이 감지기는 생성되었을 때의 "Normal" 상태로 들어갑니다. 하지만 임계값을 초과하는 압력 값을 보냈기 때문에 즉시 "Dangerous" 상태로 전환됩니다. 그러면 탐지기는 ARN이 있는 Amazon SNS 엔드포인트로 메시지를 보냅니다. arn:aws:sns:us-east-1:123456789012:underPressureAction

다음 AWS CLI 명령을 실행하여 압력 임계값 미만의 데이터가 포함된 메시지를 보내십시오.

aws iotevents-data batch-put-message --cli-input-json file://normalPressureMessage.json --cli-binary-format raw-in-base64-out

normalPressureMessage.json파일에는 다음이 포함됩니다.

{ "messages": [ { "messageId": "00002", "inputName": "PressureInput", "payload": "{\"motorid\": \"Fulton-A32\", \"sensorData\": {\"pressure\": 60, \"temperature\": 29} }" } ] }

5분 이내에 BatchPutMessage 명령을 호출할 때마다 파일의 내용을 변경해야 합니다. messageId 메시지를 두 번 더 보내십시오. 메시지가 세 번 전송되면 모터 Fulton-A32 "“의 탐지기 (인스턴스) 가 Amazon SNS 엔드포인트로 "arn:aws:sns:us-east-1:123456789012:pressureClearedAction" 메시지를 보내고 "Normal" 상태를 다시 입력합니다.

참고

를 사용하여 한 번에 여러 메시지를 보낼 수 있습니다BatchPutMessage. 하지만 이러한 메시지가 처리되는 순서는 보장되지 않습니다. 메시지 (입력) 가 순서대로 처리되도록 하려면 메시지를 한 번에 하나씩 보내고 API가 호출될 때마다 성공적인 응답을 기다리세요.

다음은 이 섹션에 설명된 탐지기 모델 예제로 생성된 SNS 메시지 페이로드의 예시입니다.

“압력 임계값 위반” 이벤트 발생 시

IoT> { "eventTime":1558129816420, "payload":{ "actionExecutionId":"5d7444df-a655-3587-a609-dbd7a0f55267", "detector":{ "detectorModelName":"motorDetectorModel", "keyValue":"Fulton-A32", "detectorModelVersion":"1" }, "eventTriggerDetails":{ "inputName":"PressureInput", "messageId":"00001", "triggerType":"Message" }, "state":{ "stateName":"Dangerous", "variables":{ "pressureThresholdBreached":3 }, "timers":{} } }, "eventName":"Pressure Threshold Breached" }

“정상 압력 복원” 이벤트 발생 시

IoT> { "eventTime":1558129925568, "payload":{ "actionExecutionId":"7e25fd38-2533-303d-899f-c979792a12cb", "detector":{ "detectorModelName":"motorDetectorModel", "keyValue":"Fulton-A32", "detectorModelVersion":"1" }, "eventTriggerDetails":{ "inputName":"PressureInput", "messageId":"00004", "triggerType":"Message" }, "state":{ "stateName":"Dangerous", "variables":{ "pressureThresholdBreached":0 }, "timers":{} } }, "eventName":"Normal Pressure Restored" }

타이머를 정의한 경우 해당 타이머의 현재 상태는 SNS 메시지 페이로드에도 표시됩니다.

메시지 페이로드에는 메시지가 전송된 시점 (즉, SNS 작업이 실행된 시점) 의 탐지기 (인스턴스) 상태에 대한 정보가 포함됩니다. https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_DescribeDetector.html작업을 사용하여 탐지기 상태에 대한 유사한 정보를 얻을 수 있습니다.