Der Grund für die Implementierung dieser Architektur liegt darin, dass es bereits einen Mechanismus gibt, um das Gerät per SMS zu benachrichtigen. Aufgrund der instabilen Kommunikation und der Nutzung von Diensten anderer Unternehmen ist die Untersuchung jedoch schwierig. Es gab ein Problem. Ziel ist es daher, es zu stabilisieren, indem es mit MQTT verwaltet werden kann.
--AWS IoT Core (im Folgenden IoT Core)
Richten Sie zunächst IoT Core und Beam ein.
Bitte lesen Sie den SORACOM-Leitfaden, da dieser sehr leicht zu verstehen ist. Wenn Sie das Verfahren befolgen, werden Sie keinen Fehler machen.
https://dev.soracom.io/jp/docs/aws_iot_guide_console/
Wenn Sie fertig sind, können Sie über IoT Core mit der Geräteseite kommunizieren.
Informationen zur Einstellungsmethode finden Sie im Folgenden 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"]
#Wird ausgeführt, wenn MQTT eintrifft
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:
#Die Kennung des Clients. Diesmal ist alles in Ordnung.
mqttClient = AWSIoTMQTTClient('aws_iot_sub')
#Einstellungen des Kommunikationshosts. Einstellen des Strahlendpunkts.
mqttClient.configureEndpoint('beam.soracom.io', 1883)
#Dies ist die Einstellung, wenn Sie offline gehen.
# configureOfflinePublishQueueing(queueSize, dropBehavior=DROP_NEWEST)
# queueSize:1 oder mehr...Die Warteschlangengröße wird auf den Wert des Arguments festgelegt
# queueSize: 0 ...Warteschlange ungültig
# queueSize: -1 ...unbegrenzte Warteschlangengröße
# dropBehavior:Festlegen, wann die Warteschlange voll wird DROP, wenn nicht festgelegt_NEWEST
mqttClient.configureOfflinePublishQueueing(0)
#Ausführungshäufigkeit
mqttClient.configureDrainingFrequency(2) # Hz
#Client-Timeout-Zeit
mqttClient.configureConnectDisconnectTimeout(10) # sec
#Timeout-Zeit für QoS 1
mqttClient.configureMQTTOperationTimeout(5) # sec
#Verbindung mit IoT Core
#Sie können auch Keepalive einstellen. Der Standardwert beträgt 600 Sekunden
mqttClient.connect()
imsi = get_imsi()
except Exception as err:
print(err)
#Wenn die Funkwelle schlecht ist, ist das Abonnieren eine Ausnahme und Python wird gelöscht. Versuchen Sie es also/Schleife mit Ausnahme
#Der Grund, warum Err of Except nicht ausgegeben wird, liegt darin, dass die Nachricht nicht von Exception of Subcribe ausgelöst wird. Selbst wenn sie ausgegeben wird, ist sie leer.
#Der Themenname sollte imsi sein, damit nur die Umgebung abonniert werden kann, in der er ausgeführt wird.
while True:
try:
mqttClient.subscribe(str(imsi), 1, customCallback)
time.sleep(1)
except Exception as err:
pass
if __name__ == "__main__":
main()
Dieses Mal habe ich nur einen Neustart eingeführt, aber es ist möglich, verschiedene Prozesse durch Ausführen von sh auszuführen. Der Artikel, der am 5. Adventskalender 2019 veröffentlicht wurde und den dieser Artikel registriert hat, war interessant, daher denke ich, dass er hilfreich sein wird. Ich will es versuchen...
Ich habe das AWSIoTPython SDK verwendet, konnte aber auch über paho mit Beam kommunizieren. Mit dieser Anforderung ist die Verwendung des SDK wenig sinnvoll, und ich denke, dass das SDK beim Betrieb von Schatten nützlicher ist, als IoT Core als Broker zu verwenden. Da paho jedoch intern ausgeführt wird, haben wir ein SDK eingeführt, das auf AWS spezialisiert ist.
Wenn Sie wissen, ob es einen anderen guten Weg gibt, lassen Sie es mich bitte wissen.
Recommended Posts