간단한 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 "" 상태로 전환됩니다. 인스턴스는keymotorid "“에 대한 고유한 값을 가진 입력이 도착하면 생성됩니다.

감지기 인스턴스가 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". 다음 단계에 따라 이 역할을 생성하고 감지기 모델 정의의 적절한 위치에 역할의 ARN을 복사합니다.AWS IoT Events에 대한 권한 설정

다음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 반응하는 a를 생성했습니다 (참조기기 상태를 나타내는 감지기 모델 생성).

예제를 완료하려면 장치 (이 경우 컴퓨터가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" 상태로 전환됩니다. Amazon SNSarn: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작업을 사용하여 탐지기 상태에 대한 유사한 정보를 얻을 수 있습니다.