[PYTHON] Surveillance active des appareils AWS IoT

introduction

Dans l'article précédent (http://qiita.com/yokobonbon/items/be0da968bba40b396187), j'ai expliqué qu'il était possible d'émuler facilement des appareils IoT avec Python.

Cette fois, j'aimerais surveiller facilement la vitalité de l'appareil en utilisant le mécanisme Pub / Sub d'AWS IoT.

Préparation

La chose créée dans Article précédent sera utilisée, veuillez donc implémenter le contenu.

Implémentation côté périphérique (Python)

Du côté de l'appareil, on suppose que le certificat client et l'UUID de l'appareil sont spécifiés pour l'exécution. Il s'agit d'une implémentation simple qui enregistre un sujet pour la surveillance de la vie et de la mort du côté de l'appareil, et si un message y entre, il répondra.

Voici un exemple de code de Python

class AWSIoTClient:
    def __init__(self, endpoint, rootCA, key, cert, uuid):
        self.myMQTTClient = AWSIoTMQTTClient("python-thing")
        self.myMQTTClient.configureEndpoint(endpoint, 8883)
        self.myMQTTClient.configureCredentials(rootCA, key, cert)
        self.myMQTTClient.configureOfflinePublishQueueing(-1)  # Infinite offline Publish queueing
        self.myMQTTClient.configureDrainingFrequency(2)  # Draining: 2 Hz
        self.myMQTTClient.configureConnectDisconnectTimeout(10)  # 10 sec
        self.myMQTTClient.configureMQTTOperationTimeout(5)

        self.notificationTopic = uuid + "/notification"
        self.eventTopic = uuid + "/event"

    def start(self):
        self.myMQTTClient.connect()
        print "Wating for : " + self.notificationTopic
        self.myMQTTClient.subscribe(self.notificationTopic, 1, self.customCallback)

    def customCallback(self, client, userdata, message):
        print message.payload
        callbackMessage = "{\n    I'm healthy\n}"
        client.publish(self.eventTopic, callbackMessage, 1)

def main():
    args = Args()
    client = AWSIoTClient(args.getEndpoint(), args.getRootCA(), args.getKey(), args.getCert(),
                          args.getUUID())
    client.start()
    while True:
        time.sleep(1)

La méthode d'abonnement MQTTClient surveille la rubrique «UUID / notification». Lorsqu'un message est écrit dans la rubrique, la méthode customCallback est appelée pour écrire le message dans la rubrique «UUID / événement». En conséquence, la surveillance de la vie et de la mort est simplement réalisée.

La valeur 1 dans le deuxième argument de la méthode subscribe représente la qualité de service de MQTT.

Référence API MQTClient

L'implémentation de l'application python fonctionne comme suit

python python-thing.py -e XXXX.iot.ap-northeast-1.amazonaws.com -r root-CA.crt -c test_thing.cert.pem -k test_thing.private.key -u 1234

Vérification du fonctionnement à l'aide de la console AWS IoT

Maintenant que l'appareil est prêt, vous pouvez envoyer un message au sujet à partir de la console AWS IoT. Dans la console AWS IoT, vous pouvez sélectionner «Test» pour envoyer un message à une rubrique «Publier» ou lire un message «S'abonner».

Tout d'abord, la rubrique 1234 / event sera renvoyée avec une vérification de l'état de l'appareil, alors abonnez-vous comme suit.

スクリーンショット 2017-01-15 18.33.17.png

Ensuite, envoyez un message à la rubrique 1234 / notification que l'appareil attend:

スクリーンショット 2017-01-15 18.32.50.png

Le côté appareil reçoit le message de rubrique et répond à 1234 / événement comme suit.

スクリーンショット 2017-01-15 18.38.19.png

en conclusion

La surveillance de la vie et de la mort peut être facilement réalisée en renvoyant un message sur un autre sujet lorsqu'un message concerne un sujet spécifique. AWS IoT est génial car cela peut être réalisé par vous-même en quelques heures.

Recommended Posts

Surveillance active des appareils AWS IoT
La vie IoT facile et facile avec Micropython!
crond est mort, alors parlez de la surveillance de la vie et de la mort avec zabbix
J'ai essayé la surveillance vivante (Ping) de Linux (CentOS 7) avec le serveur de surveillance Zabbix
Connexion facile entre Raspberry Pi et AWS IoT
Python simulé pour essayer AWS IoT Device Shadow
Exemple de programme de connexion Raspberry Pi et AWS IoT
[blackbird-dynamodb] Surveillance d'AWS DynamoDB
[blackbird-rds] Surveillance d'AWS RDS
[blackbird-sqs] Surveillance d'AWS SQS
[blackbird-elb] Surveillance d'AWS ElasticLoadBalancing
J'ai essayé AWS Iot
Exécutez AWS IoT Device SDK for Python sur Raspberry Pi
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack