La raison de la mise en œuvre de cette architecture est qu'il existe déjà un mécanisme pour notifier l'appareil à l'aide de SMS, mais il est difficile d'enquêter en raison de l'instabilité de la communication et de l'utilisation des services d'autres entreprises. Il y avait un problème. L'objectif est donc de le stabiliser en le rendant gérable à l'aide de MQTT.
--AWS IoT Core (ci-après IoT Core) --SORACOM Poutre (ci-après Poutre)
Tout d'abord, configurez IoT Core et Beam.
Veuillez vous référer au guide SORACOM car il est très simple à comprendre. Si vous suivez la procédure, vous ne ferez pas d'erreur.
https://dev.soracom.io/jp/docs/aws_iot_guide_console/
Une fois terminé, vous pourrez communiquer avec le côté appareil via IoT Core.
Veuillez vous référer à ce qui suit pour la méthode de réglage https://dev.soracom.io/jp/start/metadata/
mqtt_sub.py
# -*- coding: utf-8 -*-
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import time
import json
import subprocess
import requests
SORACOM_METADATA_URL = 'http://metadata.soracom.io/v1/subscriber'
def get_imsi(self):
"""get IMSI from SORACOM API"""
subscriber = json.loads(requests.get(SORACOM_METADATA_URL).text)
return subscriber["imsi"]
#Sera exécuté à l'arrivée de MQTT
def customCallback(client, userdata, message):
message = json.loads(message.payload)["message"]
if message == "REBOOT":
reboot = "sudo reboot"
subprocess.call(reboot, shell=True)
else:
print(message)
pass
def main():
try:
#L'identifiant du client. Tout va bien cette fois.
mqttClient = AWSIoTMQTTClient('aws_iot_sub')
#Paramètres de l'hôte de communication. Définition de l'extrémité de la poutre.
mqttClient.configureEndpoint('beam.soracom.io', 1883)
#C'est le paramètre lorsque vous vous déconnectez.
# configureOfflinePublishQueueing(queueSize, dropBehavior=DROP_NEWEST)
# queueSize:1 ou plus...la taille de la file d'attente est définie sur la valeur de l'argument
# queueSize: 0 ...file d'attente invalide
# queueSize: -1 ...taille de file d'attente illimitée
# dropBehavior:Définition lorsque la file d'attente devient pleine DROP si elle n'est pas définie_NEWEST
mqttClient.configureOfflinePublishQueueing(0)
#Fréquence d'exécution
mqttClient.configureDrainingFrequency(2) # Hz
#délai d'expiration du client
mqttClient.configureConnectDisconnectTimeout(10) # sec
#Délai d'expiration pour QoS 1
mqttClient.configureMQTTOperationTimeout(5) # sec
#Connexion avec IoT Core
#Vous pouvez également définir keepalive. La valeur par défaut est 600 secondes
mqttClient.connect()
imsi = get_imsi()
except Exception as err:
print(err)
#Si l'onde radio est mauvaise, l'abonnement sera une exception et python tombera, alors essayez/Boucle avec sauf
#La raison pour laquelle err of except n'est pas sorti est que le message n'est pas renvoyé par Exception of subcribe, donc même s'il est sorti, il sera vide.
#Le nom du sujet doit être imsi afin que seul l'environnement dans lequel il s'exécute puisse être abonné.
while True:
try:
mqttClient.subscribe(str(imsi), 1, customCallback)
time.sleep(1)
except Exception as err:
pass
if __name__ == "__main__":
main()
Cette fois, j'ai introduit uniquement le redémarrage, mais il est possible d'exécuter divers processus en exécutant sh. L'article publié le 5ème jour du calendrier de l'Avent 2019, que cet article a enregistré, faisait quelque chose d'intéressant, donc je pense que ce sera utile. Je veux essayer...
J'ai utilisé le SDK AWSIoTPython, mais j'ai également pu communiquer avec Beam en utilisant paho. Avec cette exigence, il n'y a guère d'intérêt à utiliser le SDK, et je pense que le SDK sera plus utile lors de l'exploitation des ombres au lieu d'utiliser IoT Core en tant que courtier. Cependant, comme paho fonctionne en interne, nous avons adopté un SDK spécialisé pour AWS.
Si vous savez s'il existe un autre bon moyen, faites-le moi savoir.
Recommended Posts