Tutorial: Ein Gerät mitAWS IoT Core demAWS IoT Device SDK verbinden - AWS IoT Core

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Kommunikationsprotokolle

Daspubsub.py Beispiel demonstriert eine MQTT-Verbindung mit den Protokollen MQTT und MQTT über WSS. Die AWSCommon Runtime (AWSCRT) -Bibliothek bietet Unterstützung für das Low-Level-Kommunikationsprotokoll und ist imAWS IoT Device SDK v2 für Python enthalten.

MQTT

Diepubsub.py Beispielaufrufemtls_from_path (hier gezeigt) in der mqtt_connection_builder, umAWS IoT Core mithilfe des MQTT-Protokolls eine Verbindung herzustellen. mtls_from_pathverwendet 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 instanziiertmqtt_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 dieCONNECT 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_builderum eine Verbindung mit derAWS IoT Core Verwendung des MQTT-Protokolls über WSS herzustellen. websockets_with_default_aws_signingerstellt 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 instanziiertmqtt_connection_builder.websockets_with_default_aws_signing.

region

DieAWS Signaturregion, die für die Signature V4-Authentifizierung verwendet wird. Inpubsub.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 instanziiertmqtt_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 initialisiertmqtt_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 dieCONNECT 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 einePUBACK 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 einePUBACK 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 vonmqtt.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-Testclient in derAWS IoT Konsole, um zu sehen, was Ihr Gerät veröffentlicht, und um Nachrichten auf Ihrem Gerät zu veröffentlichen. Diese Übungen verwenden das pubsub.pyBeispiel aus dem AWS IoTDevice SDK v2 for Python und bauen auf Ihren Erfahrungen mitErste Schritte mit AWS IoT Core Tutorials auf.

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.

  1. 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.

  2. Ändern Sie für diese Übung diese Befehlszeilenparameter.

    Action

    Befehlszeilenparameter

    Auswirkung

    hinzufügen

    --message ""

    So konfigurierenpubsub.py, dass nur zugehört

    hinzufü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 beginnendevice und mit enden/detail. Also, lassen Sie uns das testen.

  3. 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 }

  4. Senden Sie mithilfe des MQTT-Testclients in derAWS IoT Konsole die im vorherigen Schritt beschriebenen Nachrichten an Ihr Gerät.

    1. Öffnen Sie den MQTT-Testclient in derAWS IoT Konsole.

    2. Geben Sie unter Thema abonnieren im Feld Abonnementthema den Themenfilter: eindevice/+/details, und wählen Sie dann Thema abonnieren aus.

    3. Wählen Sie in der Spalte Abonnements des MQTT-Testclients die Option device/+/details.

    4. Gehen Sie für jedes der Themen in der vorherigen Tabelle im MQTT-Testclient wie folgt vor:

      1. Geben Sie unter Veröffentlichen den Wert aus der Spalte Themenname in der Tabelle ein.

      2. Geben Sie in das Nachrichten-Payload-Feld unter dem Themennamen den Wert aus der Spalte Nachrichten-Payload in der Tabelle ein.

      3. Sehen Sie sich das Terminalfenster an, in dempubsub.py es läuft, und wählen Sie im MQTT-Testclient die Option Zum Thema veröffentlichen.

      Sie solltenpubsub.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
  1. Kopieren Sie pubsub.py in pubsub2.py.

  2. Öffnen Siepubsub2.py in Ihrem bevorzugten Texteditor oder Ihrer bevorzugten IDE.

  3. Suchen Sie inpubsub2.py nach deron_message_received Funktion.

  4. Fügen Sie inon_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.")
  5. 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
  6. Öffnen Sie in derAWS IoT Konsole den MQTT-Testclient.

  7. Geben Sie unter Thema abonnieren im Feld Abonnementthema den Themenfilter: eindevice/+/details, und wählen Sie dann Thema abonnieren aus.

  8. Wählen Sie in der Spalte Abonnements des MQTT-Testclients die Option device/+/details.

  9. 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 }

    1. Geben Sie unter Veröffentlichen den Wert aus der Spalte Themenname in der Tabelle ein.

    2. Geben Sie in das Nachrichten-Payload-Feld unter dem Themennamen den Wert aus der Spalte Nachrichten-Payload in der Tabelle ein.

    3. Sehen Sie sich das Terminalfenster an, in dempubsub.py es läuft, und wählen Sie im MQTT-Testclient die Option Zum Thema veröffentlichen.

    Sie solltenpubsub.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
  1. Geben Sie unter Thema abonnieren im Feld Abonnementthema den Themenfilter: eindevice/data, und wählen Sie dann Thema abonnieren aus.

  2. Wählen Sie in der Spalte Abonnements des MQTT-Testclients die Option Gerät/Daten aus.

  3. 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
  1. Kopieren Sie auf Ihrem Gerätpubsub.py zupubsub3.py.

  2. Bearbeiten Siepubsub3.py, um zu ändern, wie die veröffentlichten Nachrichten formatiert werden.

    1. Öffnen Sie pubsub3.py in einem Texteditor.

    2. Suchen Sie diese Codezeile:

      message = "{} [{}]".format(message_string, publish_count)

    3. Ändere es in:

      message = "{}".format(message_string)

    4. Suchen Sie diese Codezeile:

      message_json = json.dumps(message)

    5. Ändere es in:

      message = "{}".json.dumps(json.loads(message))

    6. Speichern Sie Ihre Änderungen.

  3. 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
  4. Überprüfen Sie im MQTT-Testclient, ob das JSON-Dokument in der Nachrichten-Payload interpretiert und formatiert wurde, z. B. wie folgt:

    
                                Bild, das zeigt, wie eine JSON-Nachrichten-Payload im MQTT-Client derAWS IoT Konsole angezeigt wird.

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: