AWS IoT를 사용한 라즈파이의 사활 모니터링의 예

4648 단어 파이썬IoTawsIoTAWS
사활 모니터링은 IoT 제어에서 잘 수행되는 기능이라고 생각하지만 AWS IoT에서는 몇 가지 접근 방식이있는 것 같습니다.
이번에는 connection 주제에 송신되는 메시지를 사용한 사활 감시의 일례를 적어 둡니다.

환경



IoT 장비: 라즈파이

라즈파이는 AWSIoTPythonSDK의 인스톨과 증명서 파일의 배치를 실시해, MQTT 접속할 수 있는 상태의 것을 상정.

통신 상태 감지



첫째, 다음과 같이 AWSIoTPythonSDK의 AWSIoTMQTTShadowClient를 사용하여 라즈파이와 AWSIoT 사이에 연결합니다.
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient

...

# Connect to AWS IoT
myAWSIoTMQTTShadowClient.connect()

그러면 AWSIoT 측은 연결을 감지하고 다음 주제에 메시지를 보내는 사양입니다.
# 対象のclientIdのIoT機器が接続、切断を実施した際にパブリッシュされるトピック
$aws/events/presence/connected/clientId
$aws/events/presence/disconnected/clientId

여기에 게시된 메시지는 다음 구조로 들어옵니다.
{
    "clientId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
    "timestamp": 1460065214626,
    "eventType": "connected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "000000000000/ABCDEFGHIJKLMNOPQRSTU:some-user/ABCDEFGHIJKLMNOPQRSTU:some-user"
}

이 메시지를 사활 감시 정보로 하는 것으로 감시를 실시합니다.

IoT Role을 이용한 다른 서비스와의 연계



사활 정보의 취득 장소를 알 수 있었으므로, AWS의 다른 서비스와 제휴해 보존해 갑니다.
AWS IoT에서는 주제에 포함된 메시지를 트리거로 다른 서비스를 호출할 수 있습니다.
이번에는 Lambda를 사용하여 라즈파이의 Shadow에 사활 정보를 저장합니다.
Lambda 함수를 미리 만든 후 IoT Role에서 호출하여 저장합니다.
  • AWSIoT 콘솔에서 ACT 화면으로 이동하여 규칙 작성을 시작합니다.
  • 규칙 쿼리 문을 다음과 같이 설명



  • 3. 액션 항목에서 アクションの追加4. 실행하고 싶은 AWS 서비스를 선택, 이번에는 Lambda를 선택
    여기서 Shadow에 쓰는 Lambda 함수를 선택합니다. 지정하는 Lambda 함수는 아래에 설명되어 있습니다.

    Shadow를 다시 쓰는 Lambda 함수 만들기



    Lambda 콘솔로 이동합니다.
    이번에는 Python에서 boto3을 사용하고 Shadow에 상태를보고하는 과정을 설명합니다.
    import boto3
    import json
    
    def lambda_handler(event, context):
        client = boto3.client('iot-data')
        connected_bool = 0
        if event['eventType'] == "connected":
            connected_bool = 1
        shadow = {"state":{'reported': {'connected': connected_bool}}}
        print(event)
        response = client.update_thing_shadow(
            thingName = event['clientId'],
            payload = json.dumps(shadow, ensure_ascii=False)
        )
        return
    

    이 함수를 함께 사용하면 Shadow가 항상 상태 확인 정보를 반영할 수 있습니다.

    헬스 체크의 정보와 Shadow의 상태는 나누지 않고 정리하는 것이 관리가 하기 쉽다고 생각 이러한 구성으로 했습니다.
    데이터베이스에 저장 등은이 Shadow의 내용을 그대로 DynamoDB에 저장하면 좋다고 생각합니다.

    좋은 웹페이지 즐겨찾기