Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Tutorial: Ein Gerät mitAWS IoT Core demAWS IoT Device SDK verbinden
In diesem Tutorial wird gezeigt, wie Sie ein Gerät anschließen,AWS IoT Core damit es Daten an und von senden und empfangen kannAWS IoT. Nachdem Sie dieses Tutorial abgeschlossen haben, wird Ihr Gerät so konfiguriert, dass es eine Verbindung herstellt,AWS IoT Core und Sie werden verstehen, wie Geräte mit ihnen kommunizierenAWS IoT.
In diesem Tutorial werden Sie:
Für dieses Tutorial brauchen Sie ungefähr eine Stunde.
Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:
-
AbgeschlossenErste Schritte mit AWS IoT Core
Wählen Sie in dem Abschnitt dieses TutorialsKonfigurieren Ihres Geräts, in dem Sie dieVerbinden eines Raspberry Pi oder eines anderes Gerätes Option für Ihr Gerät auswählen müssen, und verwenden Sie die Python-Sprachoptionen, um Ihr Gerät zu konfigurieren.
Öffnen Sie das Terminalfenster, das Sie in diesem Tutorial verwenden, da Sie es auch in diesem Tutorial verwenden werden.
-
Ein Gerät, auf dem dasAWS IoT Device SDK v2 für Python ausgeführt werden kann.
In diesem Tutorial wirdAWS IoT Core anhand von Python-Codebeispielen, für die ein relativ leistungsstarkes Gerät erforderlich ist, eine Verbindung zu einem Gerät hergestellt.
Wenn Sie mit Geräten mit eingeschränkten Ressourcen arbeiten, funktionieren diese Codebeispiele möglicherweise nicht auf ihnen. In diesem Fall haben Sie möglicherweise mehr Erfolg mit einemTutorial: Verwenden der AWS IoT Device SDK for Embedded C Tutorial.
Bereite dein Gerät vor fürAWS IoT
InErste Schritte mit AWS IoT Core haben Sie Ihr Gerät und IhrAWS Konto so vorbereitet, dass sie miteinander kommunizieren können. In diesem Abschnitt werden die Aspekte dieser Vorbereitung beschrieben, die für alle Geräte gelten, mit denen eine Verbindung hergestellt wirdAWS IoT Core.
Für ein Gerät, mit dem eine Verbindung hergestellt werden sollAWS IoT Core:
-
Sie benötigen ein AWS-Konto.
Das Verfahren unterRichten Sie Ihre ein AWS-Konto beschreibt, wie Sie eine erstellen,AWS-Konto wenn Sie noch keines haben.
-
In diesem Konto müssen Sie die folgenden AWS IoTRessourcen für das Gerät in IhrerAWS-Konto und Region definiert haben.
Das Verfahren unterAWS IoT Ressourcen erstellen beschreibt, wie Sie diese Ressourcen für das Gerät in IhrerAWS-Konto und Region erstellen.
-
Ein Gerätezertifikat, das für die Authentifizierung des Geräts registriertAWS IoT und aktiviert wurde.
Das Zertifikat wird oft mit einem Dingobjekt erstellt und anAWS IoT dieses angehängt. Ein Dingobjekt ist zwar nicht erforderlich, damit ein Gerät eine Verbindung herstellen kannAWS IoT, es stellt dem Gerät jedoch zusätzlicheAWS IoT Funktionen zur Verfügung.
-
Eine an das Gerätezertifikat angehängte Richtlinie, die es autorisiert, eine Verbindung herzustellenAWS IoT Core und alle von Ihnen gewünschten Aktionen auszuführen.
-
-
Eine Internetverbindung, die auf die EndpunkteAWS-Konto Ihres Geräts zugreifen kann.
Die Geräteendpunkte sind in der Einstellungsseite derAWS IoT Konsole beschriebenAWS IoT Gerätedaten und Dienstendpunkte und können dort eingesehen
werden. -
Kommunikationssoftware wie dieAWS IoT Device SDKs bieten. In diesem Tutorial wird das AWS IoTDevice SDK v2 für Python
verwendet.
Überprüfen des MQTT-Protokolls
Bevor wir über die Beispiel-App sprechen, hilft es, das MQTT-Protokoll zu verstehen. Das MQTT-Protokoll bietet einige Vorteile gegenüber anderen Netzwerkkommunikationsprotokollen wie HTTP, was es zu einer beliebten Wahl für IoT-Geräte macht. In diesem Abschnitt werden die wichtigsten Aspekte von MQTT beschrieben, die für dieses Tutorial gelten. Hinweise darüber, wie MQTT im Vergleich zu HTTP abschneidet, finden Sie unterAuswahl eines Protokolls für Ihre Gerätekommunikation.
MQTT verwendet ein Kommunikationsmodell zum Publizieren und Abonnieren
Das MQTT-Protokoll verwendet ein Publish/Subscribe-Kommunikationsmodell mit seinem Host. Dieses Modell unterscheidet sich von dem Anforderungs-/Antwortmodell, das HTTP verwendet. Mit MQTT richten Geräte eine Sitzung mit dem Host ein, der durch eine eindeutige Client-ID identifiziert wird. Um Daten zu senden, veröffentlichen Geräte nach Themen identifizierte Nachrichten an einen Nachrichtenbroker im Host. Um Nachrichten vom Message Broker zu empfangen, abonnieren Geräte Themen, indem sie Themenfilter in Abonnementanfragen an den Message Broker senden.
MQTT unterstützt persistente Sessions
Der Message Broker empfängt Nachrichten von Geräten und veröffentlicht Nachrichten auf Geräten, die sie abonniert haben. Bei persistenten Sitzungen — Sitzungen, die auch dann aktiv bleiben, wenn das initiierende Gerät getrennt wird — können Geräte Nachrichten abrufen, die veröffentlicht wurden, während sie getrennt wurden. Auf der Geräteseite unterstützt MQTT Quality of Service Levels (QoS), die sicherstellen, dass der Host vom Gerät gesendete Nachrichten empfängt.
Sehen Sie sich die pubsub.py Device SDK-Beispiel-App an
In diesem Abschnitt wird die in diesem Tutorial verwendetepubsub.py
Beispiel-App aus dem AWS IoTDevice SDK v2 für Python beschrieben. Hier werden wir überprüfen, wie es funktioniert, MQTT-NachrichtenAWS IoT Core zu veröffentlichen und zu abonnieren. Im nächsten Abschnitt werden einige Übungen vorgestellt, mit denen Sie herausfinden können, wie ein Gerät eine Verbindung herstellt und mit dem es kommuniziertAWS IoT Core.
Diepubsub.py Beispiel-App demonstriert diese Aspekte einer MQTT-Verbindung mitAWS IoT Core:
Kommunikationsprotokolle
Daspubsub.py
Beispiel demonstriert eine MQTT-Verbindung mit den Protokollen MQTT und MQTT über WSS. Die AWSCommon Runtime (AWSCRT)
MQTT
Diepubsub.py
Beispielaufrufemtls_from_path
(hier gezeigt) in der mqtt_connection_builder
mtls_from_path
verwendet X.509-Zertifikate und TLS v1.2, um das Gerät zu authentifizieren. DieAWS CRT-Bibliothek verarbeitet die untergeordneten Details dieser Verbindung.
mqtt_connection = mqtt_connection_builder.mtls_from_path( endpoint=args.endpoint, cert_filepath=args.cert, pri_key_filepath=args.key, ca_filepath=args.ca_file, client_bootstrap=client_bootstrap, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpoint
Der EndpunktAWS-Konto Ihres IoT-Geräts
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
cert_filepath
Der Pfad zur Zertifikatsdatei des Geräts
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
pri_key_filepath
Der Pfad zur privaten Schlüsseldatei des Geräts, die mit der Zertifikatsdatei erstellt wurde
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
ca_filepath
Der Pfad zur Root-CA-Datei Nur erforderlich, wenn der MQTT-Server ein Zertifikat verwendet, das sich noch nicht in Ihrem Trust Store befindet.
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
client_bootstrap
Das gemeinsame Laufzeitobjekt, das die Socket-Kommunikationsaktivitäten abwickelt
In der Beispiel-App wird dieses Objekt vor dem Aufruf von instanziiert
mqtt_connection_builder.mtls_from_path
.on_connection_interrupted
on_connection_resumed
Die Callback-Funktion ruft an, wenn die Verbindung des Geräts unterbrochen und wieder aufgenommen wird
client_id
Die ID, die dieses Gerät eindeutig identifiziert, in derAWS-Region
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
clean_session
Ob eine neue persistente Sitzung gestartet werden soll oder, falls eine vorhanden ist, die Verbindung zu einer vorhandenen erneut hergestellt werden soll
keep_alive_secs
Der Keep-Alive-Wert in Sekunden, um die
CONNECT
Anfrage zu senden. In diesem Intervall wird automatisch ein Ping gesendet. Wenn der Server nach dem 1,5-fachen dieses Werts keinen Ping empfängt, geht er davon aus, dass die Verbindung unterbrochen wurde.
MQTT über WSS
Diepubsub.py
Beispielaufrufewebsockets_with_default_aws_signing
(hier gezeigt) in der, mqtt_connection_builder
websockets_with_default_aws_signing
erstellt eine MQTT-Verbindung über WSS und verwendet Signature V4, um das Gerät zu authentifizieren.
mqtt_connection = mqtt_connection_builder.websockets_with_default_aws_signing( endpoint=args.endpoint, client_bootstrap=client_bootstrap, region=args.signing_region, credentials_provider=credentials_provider, websocket_proxy_options=proxy_options, ca_filepath=args.ca_file, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpoint
Der EndpunktAWS-Konto Ihres IoT-Geräts
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
client_bootstrap
Das gemeinsame Laufzeitobjekt, das die Socket-Kommunikationsaktivitäten abwickelt
In der Beispiel-App wird dieses Objekt vor dem Aufruf von instanziiert
mqtt_connection_builder.websockets_with_default_aws_signing
.region
DieAWS Signaturregion, die für die Signature V4-Authentifizierung verwendet wird. In
pubsub.py
übergibt es den in der Befehlszeile eingegebenen Parameter.In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
credentials_provider
Die zur Authentifizierung bereitgestelltenAWS Anmeldeinformationen
In der Beispiel-App wird dieses Objekt vor dem Aufruf von instanziiert
mqtt_connection_builder.websockets_with_default_aws_signing
.websocket_proxy_options
HTTP-Proxy-Optionen, wenn Sie einen Proxy-Host verwenden
In der Beispiel-App wird dieser Wert vor dem Aufruf von initialisiert
mqtt_connection_builder.websockets_with_default_aws_signing
.ca_filepath
Der Pfad zur Root-CA-Datei Nur erforderlich, wenn der MQTT-Server ein Zertifikat verwendet, das sich noch nicht in Ihrem Trust Store befindet.
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
on_connection_interrupted
on_connection_resumed
Die Callback-Funktion ruft an, wenn die Verbindung des Geräts unterbrochen und wieder aufgenommen wird
client_id
Die ID, die dieses Gerät eindeutig identifiziert, in derAWS-Region.
In der Beispiel-App wird dieser Wert über die Befehlszeile übergeben.
clean_session
Ob eine neue persistente Sitzung gestartet werden soll oder, falls eine vorhanden ist, die Verbindung zu einer vorhandenen erneut hergestellt werden soll
keep_alive_secs
Der Keep-Alive-Wert in Sekunden, um die
CONNECT
Anfrage zu senden. In diesem Intervall wird automatisch ein Ping gesendet. Wenn der Server nach dem 1,5-fachen dieses Werts keinen Ping empfängt, geht er davon aus, dass die Verbindung unterbrochen wurde.
HTTPS
Was ist mit HTTPS? AWS IoT Coreunterstützt Geräte, die HTTPS-Anfragen veröffentlichen. Aus Sicht der Programmierung senden Geräte HTTPS-Anfragen anAWS IoT Core wie jede andere Anwendung. Ein Beispiel für ein Python-Programm, das eine HTTP-Nachricht von einem Gerät sendet, finden Sie im HTTPS-Codebeispiel unter Verwendung derrequests
Python-Bibliothek. In diesem Beispiel wirdAWS IoT Core mithilfe von HTTPS eine Nachricht gesendet, sodass sie als MQTT-NachrichtAWS IoT Core interpretiert wird.
EsAWS IoT Core unterstützt zwar HTTPS-Anfragen von Geräten, überprüfen Sie jedoch unbedingt die Informationen dazu,Auswahl eines Protokolls für Ihre Gerätekommunikation damit Sie eine fundierte Entscheidung darüber treffen können, welches Protokoll für die Kommunikation mit Ihrem Gerät verwendet werden soll.
Dauerhafte Sitzungen
Wenn Sie in der Beispiel-App denclean_session
Parameter auf setzen,False
bedeutet dies, dass die Verbindung dauerhaft sein sollte. In der Praxis bedeutet dies, dass die durch diesen Anruf eröffnete Verbindung erneut eine Verbindung zu einer bestehenden persistenten Sitzung herstellt, falls eine besteht. Andernfalls wird eine neue persistente Sitzung erstellt und eine Verbindung zu dieser hergestellt.
Bei einer persistenten Sitzung werden Nachrichten, die an das Gerät gesendet werden, vom Message Broker gespeichert, solange das Gerät nicht verbunden ist. Wenn ein Gerät erneut eine Verbindung zu einer persistenten Sitzung herstellt, sendet der Message Broker alle gespeicherten Nachrichten, die es abonniert hat, an das Gerät.
Ohne eine persistente Sitzung empfängt das Gerät keine Nachrichten, die gesendet werden, während das Gerät nicht verbunden ist. Welche Option Sie verwenden, hängt von Ihrer Anwendung ab und davon, ob Nachrichten, die auftreten, während ein Gerät nicht angeschlossen ist, übermittelt werden müssen. Weitere Informationen finden Sie unter Persistente MQTT-Sitzungen.
Servicequalität
Wenn das Gerät Nachrichten veröffentlicht und abonniert, kann die bevorzugte Servicequalität (QoS) festgelegt werden. AWS IoTunterstützt die QoS-Stufen 0 und 1 für Veröffentlichungs- und Abonnementvorgänge. Weitere Informationen zu QoS-Stufen inAWS IoT finden Sie unterMQTT QoS-(Quality of Service)-Optionen.
DieAWS CRT-Laufzeit für Python definiert diese Konstanten für die QoS-Stufen, die sie unterstützt:
Qualitätsstufen der Python-Dienste | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
MQTT-QoS-Ebene | Symbolischer Wert von Python, der vom SDK verwendet wird | Beschreibung | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
QoS-Stufe 0 | mqtt.QoS.AT_MOST_ONCE |
Es wird nur ein Versuch unternommen, die Nachricht zu senden, unabhängig davon, ob sie empfangen wurde oder nicht. Die Nachricht wird möglicherweise überhaupt nicht gesendet, z. B. wenn das Gerät nicht angeschlossen ist oder ein Netzwerkfehler vorliegt. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
QoS-Stufe 1 | mqtt.QoS.AT_LEAST_ONCE |
Die Nachricht wird wiederholt gesendet, bis einePUBACK Bestätigung eingeht. |
In der Beispiel-App werden die Veröffentlichungs- und Abonnementanforderungen mit einer QoS-Stufe von 1 (mqtt.QoS.AT_LEAST_ONCE
) gestellt.
-
QoS bei Veröffentlichung
Wenn ein Gerät eine Nachricht mit QoS-Stufe 1 veröffentlicht, sendet es die Nachricht wiederholt, bis es eine
PUBACK
Antwort vom Nachrichtenbroker erhält. Wenn das Gerät nicht angeschlossen ist, wird die Nachricht in die Warteschlange gestellt, um gesendet zu werden, nachdem die Verbindung erneut hergestellt wurde. -
QoS beim Abonnieren
Wenn ein Gerät eine Nachricht mit QoS-Stufe 1 abonniert, speichert der Message Broker die Nachrichten, die das Gerät abonniert hat, bis sie an das Gerät gesendet werden können. Der Nachrichtenbroker sendet die Nachrichten erneut, bis er eine
PUBACK
Antwort vom Gerät erhält.
Nachricht veröffentlichen
Nach erfolgreichem Verbindungsaufbau zuAWS IoT Core können Geräte Nachrichten veröffentlichen. Daspubsub.py
Beispiel tut dies, indem es diepublish
Operation desmqtt_connection
Objekts aufruft.
mqtt_connection.publish( topic=args.topic, payload=message, qos=mqtt.QoS.AT_LEAST_ONCE )
topic
Der Themenname der Nachricht, der die Nachricht identifiziert
In der Beispiel-App wird dies über die Befehlszeile übergeben.
payload
Die als Zeichenfolge formatierte Nachrichten-Payload (z. B. ein JSON-Dokument)
In der Beispiel-App wird dies über die Befehlszeile übergeben.
Ein JSON-Dokument ist ein gängiges Payload-Format, das von anderenAWS IoT Diensten erkannt wird. Das Datenformat der Nachrichten-Payload kann jedoch alles sein, worauf sich Herausgeber und Abonnenten einigen. AndereAWS IoT Dienste erkennen jedoch nur JSON und in einigen Fällen CBOR für die meisten Operationen.
qos
Die QoS-Stufe für diese Nachricht
Nachrichtenabonnement
Um Nachrichten vonAWS IoT und anderen Diensten und Geräten zu erhalten, abonnieren Geräte diese Nachrichten mit ihrem Themennamen. Geräte können einzelne Nachrichten abonnieren, indem sie einen Themennamen angeben, und eine Gruppe von Nachrichten, indem sie einen Themenfilter angeben, der Platzhalterzeichen enthalten kann. Daspubsub.py
Beispiel verwendet den hier gezeigten Code, um Nachrichten zu abonnieren und die Callback-Funktionen zu registrieren, um die Nachricht nach dem Empfang zu verarbeiten.
subscribe_future, packet_id = mqtt_connection.subscribe( topic=args.topic, qos=mqtt.QoS.AT_LEAST_ONCE, callback=on_message_received ) subscribe_result = subscribe_future.result()
topic
Das zu abonnierende Thema. Dies kann ein Themenname oder ein Themenfilter sein.
In der Beispiel-App wird dies über die Befehlszeile übergeben.
qos
Ob der Message Broker diese Nachrichten speichern soll, während das Gerät nicht angeschlossen ist.
Bei einem Wert von
mqtt.QoS.AT_LEAST_ONCE
(QoS-Stufe 1) muss beim Herstellen der Verbindung eine persistente Sitzung angegeben werden (clean_session=False
).callback
Die Funktion, die aufgerufen werden muss, um die abonnierte Nachricht zu verarbeiten.
Diemqtt_connection.subscribe
Funktion gibt eine Future- und eine Paket-ID zurück. Wenn die Abonnementanfrage erfolgreich initiiert wurde, ist die zurückgegebene Paket-ID größer als 0. Um sicherzustellen, dass das Abonnement vom Message Broker empfangen und registriert wurde, müssen Sie warten, bis das Ergebnis des asynchronen Vorgangs zurückgegeben wird, wie im Codebeispiel gezeigt.
Die Callback-Funktion
Der Callback impubsub.py
Beispiel verarbeitet die abonnierten Nachrichten so, wie das Gerät sie empfängt.
def on_message_received(topic, payload, **kwargs): print("Received message from topic '{}': {}".format(topic, payload)) global received_count received_count += 1 if received_count == args.count: received_all_event.set()
topic
-
Das Thema der Nachricht
Dies ist der spezifische Themenname der empfangenen Nachricht, auch wenn Sie einen Themenfilter abonniert haben.
payload
-
Die Nachrichten-Nutzlastgröße
Das Format dafür ist anwendungsspezifisch.
kwargs
Mögliche zusätzliche Argumente wie unter beschrieben
mqtt.Connection.subscribe
.
Zeigt impubsub.py
Beispielon_message_received
nur das Thema und seine Nutzlast an. Es zählt auch die eingegangenen Nachrichten, um das Programm zu beenden, nachdem das Limit erreicht ist.
Ihre App würde das Thema und die Nutzlast auswerten, um zu bestimmen, welche Aktionen ausgeführt werden müssen.
Trennen und Wiederverbinden des Geräts
Daspubsub.py
Beispiel enthält Callback-Funktionen, die aufgerufen werden, wenn das Gerät getrennt wird und wenn die Verbindung wieder hergestellt wird. Welche Aktionen Ihr Gerät bei diesen Ereignissen ergreift, ist anwendungsspezifisch.
Wenn ein Gerät zum ersten Mal eine Verbindung herstellt, muss es Themen abonnieren, um sie empfangen zu können. Wenn die Sitzung eines Geräts bei der erneuten Verbindung besteht, werden seine Abonnements wiederhergestellt, und alle gespeicherten Nachrichten aus diesen Abonnements werden nach der erneuten Verbindung an das Gerät gesendet.
Wenn die Sitzung eines Geräts bei der erneuten Verbindung nicht mehr besteht, muss es seine Abonnements erneut abonnieren. Dauerhafte Sitzungen haben eine begrenzte Lebensdauer und können ablaufen, wenn das Gerät zu lange getrennt wird.
Connect dein Gerät und kommuniziere mitAWS IoT Core
In diesem Abschnitt werden einige Übungen vorgestellt, mit denen Sie verschiedene Aspekte der Verbindung Ihres Geräts mit kennenlernen könnenAWS IoT Core. Für diese Übungen verwenden Sie den MQTT-Testclientpubsub.py
In diesem Abschnitt werden Sie:
Für diese Übungen beginnen Sie mit dempubsub.py
Beispielprogramm.
Anmerkung
Bei diesen Übungen wird davon ausgegangen, dass Sie dieErste Schritte mit AWS IoT Core Tutorials abgeschlossen haben und das Terminalfenster für Ihr Gerät aus diesem Tutorial verwenden.
Wildcard-Themenfilter abonnieren
In dieser Übung ändern Sie die Befehlszeile, die für den Aufruf verwendet wird,pubsub.py
um einen Platzhalter-Themenfilter zu abonnieren und die empfangenen Nachrichten basierend auf dem Thema der Nachricht zu verarbeiten.
Ablauf der -Hochspannung
Stellen Sie sich für diese Übung vor, dass Ihr Gerät eine Temperatursteuerung und eine Lichtsteuerung enthält. Es verwendet diese Themennamen, um die Nachrichten über sie zu identifizieren.
-
Bevor Sie mit der Übung beginnen, versuchen Sie, diesen Befehl in denErste Schritte mit AWS IoT Core Tutorials auf Ihrem Gerät auszuführen, um sicherzustellen, dass alles für die Übung bereit ist.
cd ~/aws-iot-device-sdk-python-v2/samples python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint
your-iot-endpoint
Sie sollten dieselbe Ausgabe wie im Tutorial Erste Schritte sehen.
-
Ändern Sie für diese Übung diese Befehlszeilenparameter.
Action
Befehlszeilenparameter
Auswirkung
hinzufügen
--message
""
So konfigurieren
pubsub.py
, dass nur zugehörthinzufügen
--count
2
Beenden Sie das Programm, nachdem Sie zwei Nachrichten erhalten haben
Änderung
--topic
device/+/details
Definieren Sie den Themenfilter, den Sie abonnieren möchten
Wenn Sie diese Änderungen an der ursprünglichen Befehlszeile vornehmen, wird diese Befehlszeile angezeigt. Geben Sie diesen Befehl in das Terminalfenster Ihres Geräts ein.
python3 pubsub.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint
your-iot-endpoint
Das Programm sollte wie folgt aussehen:
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-24d7cdcc-cc01-458c-8488-2d05849691e1'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received...
Wenn Sie auf Ihrem Terminal so etwas sehen, ist Ihr Gerät bereit und wartet auf Nachrichten, bei denen die Themennamen mit beginnen
device
und mit enden/detail
. Also, lassen Sie uns das testen. -
Hier sind ein paar Nachrichten, die Ihr Gerät möglicherweise empfängt.
Topic-Name
Nachrichten-Nutzlastgröße
device/temp/details
{ "desiredTemp": 20, "currentTemp": 15 }
device/light/details
{ "desiredLight": 100, "currentLight": 50 }
-
Senden Sie mithilfe des MQTT-Testclients in derAWS IoT Konsole die im vorherigen Schritt beschriebenen Nachrichten an Ihr Gerät.
-
Öffnen Sie den MQTT-Testclient
in derAWS IoT Konsole. -
Geben Sie unter Thema abonnieren im Feld Abonnementthema den Themenfilter: ein
device/+/details
, und wählen Sie dann Thema abonnieren aus. -
Wählen Sie in der Spalte Abonnements des MQTT-Testclients die Option device/+/details.
-
Gehen Sie für jedes der Themen in der vorherigen Tabelle im MQTT-Testclient wie folgt vor:
-
Geben Sie unter Veröffentlichen den Wert aus der Spalte Themenname in der Tabelle ein.
-
Geben Sie in das Nachrichten-Payload-Feld unter dem Themennamen den Wert aus der Spalte Nachrichten-Payload in der Tabelle ein.
-
Sehen Sie sich das Terminalfenster an, in dem
pubsub.py
es läuft, und wählen Sie im MQTT-Testclient die Option Zum Thema veröffentlichen.
Sie sollten
pubsub.py
im Terminalfenster sehen, dass die Nachricht von empfangen wurde. -
-
Trainingsergebnis
Damit hatpubsub.py
, die Nachrichten mithilfe eines Wildcard-Themenfilters abonniert, empfangen und im Terminalfenster angezeigt. Beachten Sie, dass Sie einen einzelnen Themenfilter abonniert haben und die Callback-Funktion aufgerufen wurde, um Nachrichten mit zwei unterschiedlichen Themen zu verarbeiten.
Themenfilter-Abonnements verarbeiten
Auf der Grundlage der vorherigen Übung ändern Sie diepubsub.py
Beispiel-App, um die Nachrichtenthemen auszuwerten und die abonnierten Nachrichten auf der Grundlage des Themas zu verarbeiten.
Ablauf der -Hochspannung
Um das Thema der Nachricht zu bewerten
-
Kopieren Sie
pubsub.py
inpubsub2.py
. -
Öffnen Sie
pubsub2.py
in Ihrem bevorzugten Texteditor oder Ihrer bevorzugten IDE. -
Suchen Sie in
pubsub2.py
nach deron_message_received
Funktion. -
Fügen Sie in
on_message_received
den folgenden Code nach der Zeile ein, die mit beginnt,print("Received message
und vor der Zeile, die mit beginntglobal received_count
.topic_parsed = False if "/" in topic: parsed_topic = topic.split("/") if len(parsed_topic) == 3: # this topic has the correct format if (parsed_topic[0] == 'device') and (parsed_topic[2] == 'details'): # this is a topic we care about, so check the 2nd element if (parsed_topic[1] == 'temp'): print("Received temperature request: {}".format(payload)) topic_parsed = True if (parsed_topic[1] == 'light'): print("Received light request: {}".format(payload)) topic_parsed = True if not topic_parsed: print("Unrecognized message topic.")
-
Speichern Sie Ihre Änderungen und führen Sie das geänderte Programm mit dieser Befehlszeile aus.
python3 pubsub2.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint
your-iot-endpoint
-
Öffnen Sie in derAWS IoT Konsole den MQTT-Testclient
. -
Geben Sie unter Thema abonnieren im Feld Abonnementthema den Themenfilter: ein
device/+/details
, und wählen Sie dann Thema abonnieren aus. -
Wählen Sie in der Spalte Abonnements des MQTT-Testclients die Option device/+/details.
-
Gehen Sie für jedes der Themen in dieser Tabelle im MQTT-Testclient wie folgt vor:
Topic-Name
Nachrichten-Nutzlastgröße
device/temp/details
{ "desiredTemp": 20, "currentTemp": 15 }
device/light/details
{ "desiredLight": 100, "currentLight": 50 }
-
Geben Sie unter Veröffentlichen den Wert aus der Spalte Themenname in der Tabelle ein.
-
Geben Sie in das Nachrichten-Payload-Feld unter dem Themennamen den Wert aus der Spalte Nachrichten-Payload in der Tabelle ein.
-
Sehen Sie sich das Terminalfenster an, in dem
pubsub.py
es läuft, und wählen Sie im MQTT-Testclient die Option Zum Thema veröffentlichen.
Sie sollten
pubsub.py
im Terminalfenster sehen, dass die Nachricht von empfangen wurde. -
Sie sollten in Ihrem Terminalfenster etwas Ähnliches sehen.
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-af794be0-7542-45a0-b0af-0b0ea7474517'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received... Received message from topic 'device/light/details': b'{ "desiredLight": 100, "currentLight": 50 }' Received light request: b'{ "desiredLight": 100, "currentLight": 50 }' Received message from topic 'device/temp/details': b'{ "desiredTemp": 20, "currentTemp": 15 }' Received temperature request: b'{ "desiredTemp": 20, "currentTemp": 15 }' 2 message(s) received. Disconnecting... Disconnected!
Trainingsergebnis
In dieser Übung haben Sie Code hinzugefügt, damit die Beispiel-App mehrere Nachrichten in der Callback-Funktion erkennt und verarbeitet. Damit könnte Ihr Gerät Nachrichten empfangen und darauf reagieren.
Eine andere Möglichkeit für Ihr Gerät, mehrere Nachrichten zu empfangen und zu verarbeiten, besteht darin, verschiedene Nachrichten separat zu abonnieren und jedem Abonnement eine eigene Rückruffunktion zuzuweisen.
Veröffentlichen Sie Nachrichten von Ihrem Gerät
Sie können die Beispiel-App pubsub.py verwenden, um Nachrichten von Ihrem Gerät zu veröffentlichen. Nachrichten werden zwar so veröffentlicht, wie sie sind, aber die Nachrichten können nicht als JSON-Dokumente gelesen werden. In dieser Übung wird die Beispiel-App so geändert, dass sie JSON-Dokumente in der Nachrichten-Payload veröffentlichen kann, von denen gelesen werden kannAWS IoT Core.
Ablauf der -Hochspannung
In dieser Übung wird die folgende Nachricht mit demdevice/data
Thema gesendet.
{ "timestamp": 1601048303, "sensorId": 28, "sensorData": [ { "sensorName": "Wind speed", "sensorValue": 34.2211224 } ] }
Um Ihren MQTT-Testclient darauf vorzubereiten, die Nachrichten aus dieser Übung zu überwachen
-
Geben Sie unter Thema abonnieren im Feld Abonnementthema den Themenfilter: ein
device/data
, und wählen Sie dann Thema abonnieren aus. -
Wählen Sie in der Spalte Abonnements des MQTT-Testclients die Option Gerät/Daten aus.
-
Lassen Sie das Fenster des MQTT-Testclients geöffnet, um auf Nachrichten von Ihrem Gerät zu warten.
So senden Sie JSON-Dokumente mit der Beispiel-App pubsub.py
-
Kopieren Sie auf Ihrem Gerät
pubsub.py
zupubsub3.py
. -
Bearbeiten Sie
pubsub3.py
, um zu ändern, wie die veröffentlichten Nachrichten formatiert werden.-
Öffnen Sie
pubsub3.py
in einem Texteditor. -
Suchen Sie diese Codezeile:
message = "{} [{}]".format(message_string, publish_count)
-
Ändere es in:
message = "{}".format(message_string)
-
Suchen Sie diese Codezeile:
message_json = json.dumps(message)
-
Ändere es in:
message = "{}".json.dumps(json.loads(message))
-
Speichern Sie Ihre Änderungen.
-
-
Führen Sie diesen Befehl auf Ihrem Gerät aus, um die Nachricht zweimal zu senden.
python3 pubsub3.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --topic device/data --count 2 --message '{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' --endpoint
your-iot-endpoint
-
Überprüfen Sie im MQTT-Testclient, ob das JSON-Dokument in der Nachrichten-Payload interpretiert und formatiert wurde, z. B. wie folgt:
Abonniert standardmäßigpubsub3.py
auch die gesendeten Nachrichten. Sie sollten sehen, dass die Nachrichten in der Ausgabe der App empfangen wurden. Das Terminalfenster sollte wie folgt aussehen.
Connecting to a3qEXAMPLEsffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-5cff18ae-1e92-4c38-a9d4-7b9771afc52f'... Connected! Subscribing to topic 'device/data'... Subscribed with QoS.AT_LEAST_ONCE Sending 2 message(s) Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' 2 message(s) received. Disconnecting... Disconnected!
Trainingsergebnis
Damit kann Ihr Gerät Nachrichten generieren, an die Sie senden können,AWS IoT Core um die grundlegende Konnektivität zu testen, und GerätenachrichtenAWS IoT Core zur Verarbeitung bereitstellen. Sie könnten diese App beispielsweise verwenden, um Testdaten von Ihrem Gerät zu senden, umAWS IoT Regelaktionen zu testen.
Überprüfen Sie die Ergebnisse
Die Beispiele in diesem Tutorial haben Ihnen praktische Erfahrungen mit den Grundlagen der Kommunikation mit Geräten vermitteltAWS IoT Core — ein grundlegender Bestandteil IhrerAWS IoT Lösung. Wenn Ihre Geräte in der Lage sindAWS IoT Core, mit ihnen zu kommunizieren, können sie Nachrichten anAWS Dienste und andere Geräte weitergeben, auf die sie reagieren können. Ebenso könnenAWS Dienste und andere Geräte Informationen verarbeiten, die dazu führen, dass Nachrichten an Ihre Geräte zurückgesendet werden.
Wenn Sie bereit sind,AWS IoT Core weitere Informationen zu erhalten, probieren Sie diese Tutorials aus: