Tutorial: Interaktion mit Device Shadow über die Beispiel-App und den MQTT-Testclient - 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: Interaktion mit Device Shadow über die Beispiel-App und den MQTT-Testclient

So interagieren Sie mitshadow.pyBeispiel-App, geben Sie einen Wert im Terminal für diedesiredWert. Sie können beispielsweise Farben angeben, die der Ampel ähneln undAWS IoTantwortet auf die Anforderung und aktualisiert die gemeldeten Werte.

In diesem Tutorial erfahren Sie Folgendes:
  • Verwenden dershadow.pyBeispiel-App, um die gewünschten Status anzugeben und den aktuellen Status des Schattens zu aktualisieren.

  • Bearbeiten Sie das Shadow-Dokument, um Delta-Ereignisse zu beobachten und wieshadow.pyBeispiel-App reagiert darauf.

  • Verwenden Sie den MQTT-Testclient, um Shadow-Themen zu abonnieren und Aktualisierungen zu beobachten, wenn Sie das Beispielprogramm ausführen.

Bevor Sie dieses Tutorial ausführen, benötigen Sie Folgendes:

Einrichten IhrerAWS-Konto, hat Ihr Raspberry Pi-Gerät konfiguriert und einAWS IoTSache und Politik. Sie müssen auch die erforderliche Software, das Device SDK, die Zertifikatsdateien installiert und das Beispielprogramm im Terminal ausgeführt haben. Weitere Informationen finden Sie in den vorherigen TutorialsTutorial: Vorbereiten Ihres Raspberry Pi zum Ausführen der Shadow-AnwendungundSchritt 1: Führen Sie die Beispiel-App shadow.py ausaus. Wenn Sie dies noch nicht getan haben, müssen Sie diese Tutorials ausführen.

Dieses Tutorial nimmt ungefähr 45 Minuten in Anspruch.

Schritt 1: Aktualisieren Sie die gewünschten und gemeldeten Werte mitshadow.pyBeispiel-App

Im vorherigen TutorialSchritt 1: Führen Sie die Beispiel-App shadow.py aushaben Sie gelernt, wie Sie eine Nachricht beobachten können, die im Shadow-Dokument veröffentlicht wurdeAWS IoTkonsole, wenn Sie einen gewünschten Wert eingeben, wie im Abschnitt beschriebenTutorial: Installieren des Device SDK und Ausführen der Beispielanwendung für Device Shadowsaus.

Im vorherigen Beispiel setzen wir die gewünschte Farbe aufyellowaus. Nachdem Sie jeden Wert eingegeben haben, fordert das Terminal Sie auf, einen anderen einzugebendesiredWert. Wenn Sie erneut denselben Wert eingeben (yellow) erkennt die App dies und fordert Sie auf, ein neues einzugebendesiredWert.

Enter desired value: yellow Local value is already 'yellow'. Enter desired value:

Sagen Sie nun, dass Sie die Farbe eingebengreenaus.AWS IoTreagiert auf die Anforderung und aktualisiert diereportedValue aufgreenaus. So passiert das Update, wenn derdesiredStaat ist nicht dasselbe wie derreportedStaat, verursacht ein Delta.

Wie dieshadow.pyBeispiel-App simuliert Device Shadow Interaktionen:
  1. Geben Sie eindesiredvalue (sagenyellow) im Terminal, um den gewünschten Status zu veröffentlichen.

  2. Wie derdesiredStaat ist nicht dasselbe wie derreportedstate (sag die Farbegreen) tritt ein Delta auf, und die App, die das Delta abonniert hat, erhält diese Nachricht.

  3. Die App reagiert auf die Nachricht und aktualisiert ihren Status aufdesiredwert,yellowaus.

  4. Die App veröffentlicht dann eine Update-Nachricht mit dem neuen gemeldeten Wert des Status des Geräts,yellowaus.

Im Folgenden werden die im Terminal angezeigten Nachrichten angezeigt, die zeigen, wie die Aktualisierungsanforderung veröffentlicht wird.

Enter desired value: green Changed local shadow value to 'green'. Updating reported shadow value to 'green'... Update request published. Finished updating reported shadow value to 'green'.

In derAWS IoT-Konsole spiegelt das Shadow-Dokument den aktualisierten Wert widergreenfür beidereportedunddesired-Felder, und die Versionsnummer wird um 1 erhöht. Wenn beispielsweise die vorherige Versionsnummer als 10 angezeigt wurde, wird die aktuelle Versionsnummer als 11 angezeigt.

Anmerkung

Durch das Löschen eines Schattens wird die Versionsnummer nicht auf 0 zurückgesetzt. Sie werden sehen, dass die Shadow-Version um 1 erhöht wird, wenn Sie eine Aktualisierungsanforderung veröffentlichen oder einen anderen Schatten mit demselben Namen erstellen.

Bearbeiten Sie das Schatten-Dokument, um Delta-Ereignisse zu beobachten

Dieshadow.pyBeispiel-App ist auch abonniertdeltaEreignisse und antwortet, wenn es eine Änderung desdesiredWert. So können Sie beispielsweise diedesiredWert auf die Farberedaus. Um dies zu tun, finden Sie imAWS IoTKonsole, bearbeiten Sie das Shadow-Dokument durch KlickenBearbeitenund setze dann diedesiredValue aufredim JSON, während diereportedValue aufgreenaus. Bevor Sie die Änderungen speichern, lassen Sie das Terminal auf dem Raspberry Pi geöffnet, da während der Änderung Nachrichten im Terminal angezeigt werden.

{ "desired": { "welcome": "aws-iot", "color": "red" }, "reported": { "welcome": "aws-iot", "color": "green" } }

Nachdem Sie den neuen Wert gespeichert haben, wird dershadow.pyDie Beispiel-App reagiert auf diese Änderung und zeigt Nachrichten im Terminal an, die das Delta anzeigen. Sie sollten dann die folgenden Meldungen unter der Aufforderung zur Eingabe desdesiredWert.

Enter desired value: Received shadow delta event. Delta reports that desired value is 'red'. Changing local value... Changed local shadow value to 'red'. Updating reported shadow value to 'red'... Finished updating reported shadow value to 'red'. Enter desired value: Update request published. Finished updating reported shadow value to 'red'.

Schritt 2: Anzeigen von Nachrichten aus dershadow.pyBeispiel-App im MQTT-Testclient

Sie können dasMQTT-Test-ClientimAWS IoTKonsoleum MQTT-Nachrichten zu überwachen, die in IhremAWS-Kontoaus. Wenn Sie reservierte MQTT-Themen abonnieren, die vom Device Shadow Shadow-Dienst verwendet werden, können Sie die Nachrichten beobachten, die die Themen beim Ausführen der Beispiel-App erhalten haben.

Wenn Sie den MQTT-Testclient noch nicht verwendet haben, können Sie dies überprüfenMQTTNachrichten mit dem AWS IoT MQTT Client anzeigenaus. So können Sie die Verwendung der erlernen, wie Sie dieMQTT-Test-ClientimAWS IoTKonsoleum MQTT-Nachrichten anzuzeigen, während sie den Message Broker durchlaufen.

  1. Öffnen Sie den MQTT-Testclient

    Öffnen SieMQTT-Testclient imAWS IoTKonsolein einem neuen Fenster, damit Sie die von den MQTT-Themen empfangenen Nachrichten beobachten können, ohne die Konfiguration Ihres MQTT-Test-Clients zu verlieren. Der MQTT-Testclient behält keine Abonnements oder Nachrichtenprotokolle bei, wenn Sie ihn verlassen, um auf eine andere Seite in der Konsole zu gelangen. Für diesen Abschnitt des Tutorials können Sie das Shadow-Dokument IhrerAWS IoTDing und der MQTT-Test-Client öffnen sich in separaten Fenstern, um die Interaktion mit Device Shadows leichter zu beobachten.

  2. Abonnieren Sie die reservierten MQTT Shadow-Themen

    Sie können den MQTT-Test-Client verwenden, um die Namen der reservierten MQTT-Themen des Device Shadow einzugeben und diese zu abonnieren, um Updates zu erhalten, wenn Sie dieshadow.pyBeispiel-App. So abonnieren Sie die Themen:

    1. In derMQTT-Test-ClientimAWS IoTKonsole, wählenAbonnieren eines Themasaus.

    2. In derThemenfilter, geben Sie ein:$aws/things/ things/thingName/shadow/update/ #aus. Hierthingnameist der Name der -Ressource, die Sie zuvor erstellt haben (z. B.My_light_bulb) enthalten.

    3. Behalten Sie die Standardwerte für die zusätzlichen Konfigurationseinstellungen bei und wählen Sie dannAbonnierenaus.

    Durch die Verwendung des#Platzhalter im Themen-Abonnement können Sie mehrere MQTT-Themen gleichzeitig abonnieren und alle Nachrichten beobachten, die zwischen dem Gerät und seinem Schatten ausgetauscht werden, in einem einzigen Fenster. Weitere Informationen zu den Platzhalterzeichen und ihrer Verwendung finden Sie unterMQTTThemenaus.

  3. Führen Sie Folgendes aus:shadow.pyBeispielprogramm und Beobachtung von Nachrichten

    Wenn Sie das Programm getrennt haben, führen Sie in Ihrem Befehlszeilenfenster des Raspberry Pi die Beispiel-App erneut aus und sehen Sie sich die Nachrichten imMQTT-Test-ClientimAWS IoTKonsoleaus.

    1. Führen Sie den folgenden Befehl aus, um das Beispielprogramm neu zu starten. Ersetzenyour-iot-thing-Nameundyour-iot-endpointmit den Namen derAWS IoTSache, die Sie vorher erstellt haben (z. B.My_light_bulb) und den Endpunkt, um mit dem Gerät zu interagieren.

      cd ~/aws-iot-device-sdk-python-v2/samples python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --thing_name your-iot-thing-name

      Dieshadow.pyDie Beispiel-App wird dann ausgeführt und ruft den aktuellen Schattenstatus ab. Wenn Sie den Schatten gelöscht oder die aktuellen Status gelöscht haben, legt das Programm den aktuellen Wert aufoffund fordert Sie dann auf, eindesiredWert.

      Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'... Connected! Subscribing to Delta events... Subscribing to Update responses... Subscribing to Get responses... Requesting current shadow state... Launching thread to read user input... Finished getting initial shadow state. Shadow document lacks 'color' property. Setting defaults... Changed local shadow value to 'off'. Updating reported shadow value to 'off'... Update request published. Finished updating reported shadow value to 'off'... Enter desired value:

      Wenn das Programm hingegen ausgeführt wurde und Sie es neu gestartet haben, wird der neueste Farbwert im Terminal angezeigt. Im MQTT-Testclient sehen Sie ein Update der Themen$aws/things/ things/thingName/shadow/getund$aws/things/ things/thingName/shadow/get/akzeptiertaus.

      Angenommen, die neueste gemeldete Farbe wargreenaus. Im Folgenden werden die Inhalte des$aws/things/ things/thingName/shadow/get/akzeptiertJSON-Datei enthält.

      { "state": { "desired": { "welcome": "aws-iot", "color": "green" }, "reported": { "welcome": "aws-iot", "color": "green" } }, "metadata": { "desired": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620161643 } }, "reported": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620161643 } } }, "version": 10, "timestamp": 1620173908 }
    2. Geben Sie eindesiredWert im Terminal, wieyellowaus. Dieshadow.pyBeispiel-App antwortet und zeigt die folgenden Nachrichten im Terminal an, die die Änderung imreportedValue aufyellowaus.

      Enter desired value: yellow Changed local shadow value to 'yellow'. Updating reported shadow value to 'yellow'... Update request published. Finished updating reported shadow value to 'yellow'.

      In derMQTT-Test-ClientimAWS IoTKonsole, unterAbonnementssehen Sie, dass die folgenden Themen eine Nachricht erhalten haben:

      • $aws/things/ things/thingName/shadow/update: zeigt, dass beidedesiredundupdatedWerte ändern sich in die Farbeyellowaus.

      • $aws/things/ things/thingName/shadow/update/documents: zeigt die aktuellen Werte desdesiredundreportedZustände und ihre Metadaten und Versionsinformationen.

      • $aws/things/ things/thingName/shadow/update/documents: zeigt die vorherigen und aktuellen Werte desdesiredundreportedZustände und ihre Metadaten und Versionsinformationen.

      Wie das Dokument$aws/things/ things/thingName/shadow/update/documentsenthält auch Informationen, die in den beiden anderen Themen enthalten sind, wir können sie überprüfen, um die Statusinformationen anzuzeigen. Der vorherige Status zeigt den gemeldeten Wert an, der aufgreen, seine Metadaten und Versionsinformationen sowie der aktuelle Status, der den gemeldeten Wert anzeigt, aktualisiert aufyellowaus.

      { "previous": { "state": { "desired": { "welcome": "aws-iot", "color": "green" }, "reported": { "welcome": "aws-iot", "color": "green" } }, "metadata": { "desired": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297898 } }, "reported": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297898 } } }, "version": 10 }, "current": { "state": { "desired": { "welcome": "aws-iot", "color": "yellow" }, "reported": { "welcome": "aws-iot", "color": "yellow" } }, "metadata": { "desired": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297904 } }, "reported": { "welcome": { "timestamp": 1617297888 }, "color": { "timestamp": 1617297904 } } }, "version": 11 }, "timestamp": 1617297904 }
    3. Nun, wenn du einen anderen eingibstdesiredWert sehen Sie weitere Änderungen an derreportedWerte und Nachrichtenaktualisierungen, die von diesen Themen empfangen wurden. Die Versionsnummer erhöht sich ebenfalls um 1. Wenn Sie z. B. den Wert eingebengreengibt der vorherige Status den Wert anyellowund der aktuelle Status meldet den Wertgreenaus.

  4. Schatten-Dokument bearbeiten, um Delta-Ereignisse zu beobachten

    Um Änderungen am Delta-Thema zu beobachten, bearbeiten Sie das Shadow-Dokument imAWS IoTconsole. So können Sie beispielsweise diedesiredWert auf die Farberedaus. Um dies zu tun, finden Sie imAWS IoT-Konsole, Wählen SieBearbeitenund setze dann diedesiredWert auf Rot im JSON, während derreportedWert aufgreenaus. Bevor Sie die Änderung speichern, lassen Sie das Terminal geöffnet, da die Delta-Nachricht im Terminal angezeigt wird.

    { "desired": { "welcome": "aws-iot", "color": "red" }, "reported": { "welcome": "aws-iot", "color": "green" } }

    Dieshadow.pyDie Beispiel-App reagiert auf diese Änderung und zeigt Nachrichten im Terminal an, die das Delta anzeigen. Im MQTT-Testclient wird derupdatethemen haben eine Nachricht erhalten, in der Änderungen an derdesiredundreported-Werte.

    Sie sehen auch, dass das Thema$aws/things/thingName/shadow/update/deltahat eine Nachricht erhalten. Um die Nachricht zu sehen, wählen Sie dieses Thema aus, das unterAbonnementsaus.

    { "version": 13, "timestamp": 1617318480, "state": { "color": "red" }, "metadata": { "color": { "timestamp": 1617318480 } } }

Schritt 3: Beheben Sie Fehler bei Device Shadow Shadow-Interaktionen

Wenn Sie die Shadow-Beispiel-App ausführen, treten möglicherweise Probleme bei der Beobachtung von Interaktionen mit dem Device Shadow Shadow-Dienst auf.

Wenn das Programm erfolgreich ausgeführt wurde und Sie aufgefordert werden, einedesired-Wert sollten Sie in der Lage sein, die Device Shadow Shadow-Interaktionen zu beobachten, indem Sie das Shadow-Dokument und den MQTT-Testclient wie zuvor beschrieben verwenden. Wenn Sie die Interaktionen jedoch nicht sehen können, können Sie folgende Punkte überprüfen:

  • Überprüfe den Namen des Dings und seinen Schatten imAWS IoTKonsole

    Wenn Sie die Nachrichten im Shadow-Dokument nicht sehen, überprüfen Sie den Befehl und stellen Sie sicher, dass er mit dem Ding-Namen imAWS IoTKonsoleaus. Sie können auch überprüfen, ob Sie einen klassischen Schatten haben, indem Sie Ihre Ding-Ressource auswählen und dann auswählenShadowsaus. Dieses Tutorial konzentriert sich hauptsächlich auf Interaktionen mit dem klassischen Schatten.

    Sie können auch bestätigen, dass das verwendete Gerät mit dem Internet verbunden ist. In derAWS IoTKonsoleauswählen, was Sie vorher erstellt haben, und wählen Sie dannInteragierenaus. Auf der Seite mit den Thing-Details sollte hier eine Meldung angezeigt werden, die besagt:This thing already appears to be connected.

  • Überprüfen Sie die reservierten MQTT-Themen, die Sie abonniert haben

    Wenn die Nachrichten im MQTT-Testclient nicht angezeigt werden, überprüfen Sie, ob die Themen, die Sie abonniert haben, korrekt formatiert sind. MQTT Device Shadow Shadow-Themen haben ein Format$aws/things/thingName/shadow/und vielleicht habenupdate,get, oderdeleteFolgen Sie je nach Aktionen, die Sie im Schatten durchführen möchten. In diesem Tutorial wird das Thema verwendet$aws/things/thingName/schatten/ #stellen Sie also sicher, dass Sie es korrekt eingegeben haben, wenn Sie das Thema imThemenfilter-Abschnitt des Test-Clients.

    Stellen Sie bei der Eingabe des Themennamens sicher, dassthingNameist der gleiche wie der Name desAWS IoTSache, die Sie zuvor erstellt haben. Sie können auch zusätzliche MQTT-Themen abonnieren, um festzustellen, ob ein Update erfolgreich durchgeführt wurde. Zum Beispiel können Sie das Thema abonnieren$aws/things/thingName/shadow/update/rejectedum eine Nachricht zu erhalten, wenn eine Aktualisierungsanfrage fehlgeschlagen ist, damit Sie Verbindungsprobleme debuggen können. Weitere Informationen zu den reservierten Themen finden Sie unterSchatten-ThemenundDevice MQTT Shadow-Themenaus.

Schritt 4: Überprüfen Sie die Ergebnisse und nächsten Schritte

In diesem Tutorial haben Sie Folgendes gelernt:
  • Verwenden dershadow.pyBeispiel-App, um die gewünschten Status anzugeben und den aktuellen Status des Schattens zu aktualisieren.

  • Bearbeiten Sie das Shadow-Dokument, um Delta-Ereignisse zu beobachten und wieshadow.pyBeispiel-App reagiert darauf.

  • Verwenden Sie den MQTT-Testclient, um Shadow-Themen zu abonnieren und Aktualisierungen zu beobachten, wenn Sie das Beispielprogramm ausführen.

Nächste Schritte

Sie können zusätzliche reservierte MQTT-Themen abonnieren, um Aktualisierungen der Shadow-Anwendung zu beobachten. Zum Beispiel, wenn Sie das Thema nur abonnieren$aws/things/thingName/shadow/update/documentswerden nur die aktuellen Statusinformationen angezeigt, wenn ein Update erfolgreich durchgeführt wurde.

Sie können auch zusätzliche Shadow-Themen abonnieren, um Probleme zu debuggen oder mehr über die Device Shadow Shadow-Interaktionen zu erfahren und auch Probleme mit den Device Shadow Shadow-Interaktionen zu beheben. Weitere Informationen finden Sie unter Schatten-Themen und Device MQTT Shadow-Themen.

Sie können Ihre Anwendung auch erweitern, indem Sie benannte Schatten verwenden oder zusätzliche Hardware verwenden, die mit dem Raspberry Pi verbunden ist, für die LEDs und Änderungen an ihrem Zustand mithilfe von Nachrichten beobachten, die vom Terminal gesendet werden.

Weitere Informationen zum Device Shadow Shadow-Dienst und zur Verwendung des Dienstes in Geräten, Apps und Diensten finden Sie unterAWS IoT Device Shadow-Dienst,Verwenden von Schatten in Geräten, undVerwenden von Schatten in Apps und Servicesaus.