[PYTHON] [MQTT] Ich habe versucht, mit einem Gerät über AWS IoT Core und Soracom Beam zu sprechen.

Einführung

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.

Bedarf

Technologie verwendet

--AWS IoT Core (im Folgenden IoT Core)

Inhalt

Vorbereitungen

  1. IoT Core- und Beam-Einstellungen

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.

  1. SIM-Einstellungen Holen Sie sich imsi von SIM in Python-Code und verwenden Sie es als Themennamen. Dazu müssen Sie "Metadatendienst-Einstellungen" aktivieren.

Informationen zur Einstellungsmethode finden Sie im Folgenden https://dev.soracom.io/jp/start/metadata/

Implementierung! !!

  1. Führen Sie die folgende Python im IoT-Gerät aus
  2. Veröffentlichen Sie die Nachricht vom IoT Core-Test
  3. Wenn es an die Konsole ausgegeben wird oder neu gestartet werden kann, ist es erfolgreich.

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()

Zusammenfassung

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

[MQTT] Ich habe versucht, mit einem Gerät über AWS IoT Core und Soracom Beam zu sprechen.
[Einführung in AWS] Ich habe versucht, eine Konversations-App zu portieren und mit text2speech @ AWS playing zu spielen
Ich habe AWS Iot ausprobiert
Ich habe versucht, AWS Chalice zu verwenden
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part2 zu bedienen
Ich habe versucht, den Sesam für Eingang 2 mit einem einzigen Druck auf die AWS IoT-Taste zu entsperren
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 4: Automatisieren Sie die ISP-Einrichtung mit PyEZ und JSNAPy
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part1 zu bedienen
Ich habe versucht, die checkio-API zu verwenden
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Ich habe versucht, datetime <-> string mit tzinfo mit strftime () und strptime () zu konvertieren.
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe versucht, den Google-Kalender mit CSV-Terminen mithilfe von Python und Google API zu aktualisieren
Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
AWS IoT Device Alive Monitoring
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
Ich habe Hello World mit 64-Bit-OS + C-Sprache ohne Verwendung einer Bibliothek ausprobiert
Ich habe versucht, eine Umgebung zu erstellen, um regelmäßig mit Selenium mit AWS Fargate zu überprüfen
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 1: Übersicht
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe versucht, die Detect Labels-API von AWS Rekognition zu verwenden
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, PyCaret mit der schnellsten Geschwindigkeit zu verwenden
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe Funktionssynthese und Curry mit Python versucht
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, AWS Lambda mit anderen Diensten zu verbinden
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe DBM mit Pylearn 2 unter Verwendung künstlicher Daten ausprobiert
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
Ich habe versucht, die Datenbank (sqlite3) mit kivy zu verwenden
Ich habe versucht, mit tkinter mit dem Taschenrechner zu spielen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht, die Syntax zu bewerten, die mit der COTOHA-API zu humorvoll und humorvoll war.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, die App auf der IoT-Plattform "Rimotte" auszuführen.
[AWS IoT] Registrieren Sie Dinge in AWS IoT mithilfe des AWS IoT Python SDK
Ich habe eine emotionale Analyse von Amazon Comprehend mit der AWS CLI durchgeführt.
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
[Linux] Ich habe versucht, die genetische Statistiksoftware PLINK zu verwenden
Ich habe versucht, EKG-Daten mit der K-Shape-Methode zu gruppieren
Ich habe versucht, mit AWS Lambda einen AMI zu erhalten
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren