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.py
Beispiel-App, geben Sie einen Wert im Terminal für diedesired
Wert. 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 der
shadow.py
Beispiel-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 wie
shadow.py
Beispiel-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.
In diesem Tutorial werden Sie:
- Schritt 1: Aktualisieren Sie die gewünschten und gemeldeten Werte mitshadow.pyBeispiel-App
- Schritt 2: Anzeigen von Nachrichten aus dershadow.pyBeispiel-App im MQTT-Testclient
- Schritt 3: Beheben Sie Fehler bei Device Shadow Shadow-Interaktionen
- Schritt 4: Überprüfen Sie die Ergebnisse und nächsten Schritte
Dieses Tutorial nimmt ungefähr 45 Minuten in Anspruch.
Schritt 1: Aktualisieren Sie die gewünschten und gemeldeten Werte mitshadow.py
Beispiel-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 aufyellow
aus. Nachdem Sie jeden Wert eingegeben haben, fordert das Terminal Sie auf, einen anderen einzugebendesired
Wert. Wenn Sie erneut denselben Wert eingeben (yellow
) erkennt die App dies und fordert Sie auf, ein neues einzugebendesired
Wert.
Enter desired value: yellow Local value is already 'yellow'. Enter desired value:
Sagen Sie nun, dass Sie die Farbe eingebengreen
aus.AWS IoTreagiert auf die Anforderung und aktualisiert diereported
Value aufgreen
aus. So passiert das Update, wenn derdesired
Staat ist nicht dasselbe wie derreported
Staat, verursacht ein Delta.
Wie dieshadow.py
Beispiel-App simuliert Device Shadow Interaktionen:
-
Geben Sie ein
desired
value (sagenyellow
) im Terminal, um den gewünschten Status zu veröffentlichen. -
Wie der
desired
Staat ist nicht dasselbe wie derreported
state (sag die Farbegreen
) tritt ein Delta auf, und die App, die das Delta abonniert hat, erhält diese Nachricht. -
Die App reagiert auf die Nachricht und aktualisiert ihren Status auf
desired
wert,yellow
aus. -
Die App veröffentlicht dann eine Update-Nachricht mit dem neuen gemeldeten Wert des Status des Geräts,
yellow
aus.
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 widergreen
für beidereported
unddesired
-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.py
Beispiel-App ist auch abonniertdelta
Ereignisse und antwortet, wenn es eine Änderung desdesired
Wert. So können Sie beispielsweise diedesired
Wert auf die Farbered
aus. Um dies zu tun, finden Sie imAWS IoTKonsole, bearbeiten Sie das Shadow-Dokument durch KlickenBearbeitenund setze dann diedesired
Value aufred
im JSON, während diereported
Value aufgreen
aus. 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.py
Die 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 desdesired
Wert.
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.py
Beispiel-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.
-
Öffnen Sie den MQTT-Testclient
Öffnen SieMQTT-Testclient imAWS IoTKonsole
in 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. -
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 die
shadow.py
Beispiel-App. So abonnieren Sie die Themen:In derMQTT-Test-ClientimAWS IoTKonsole, wählenAbonnieren eines Themasaus.
In derThemenfilter, geben Sie ein:$aws/things/ things/
thingName
/shadow/update/ #aus. Hierthingname
ist der Name der -Ressource, die Sie zuvor erstellt haben (z. B.My_light_bulb
) enthalten.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.
-
Führen Sie Folgendes aus:
shadow.py
Beispielprogramm und Beobachtung von NachrichtenWenn 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.
-
Führen Sie den folgenden Befehl aus, um das Beispielprogramm neu zu starten. Ersetzen
your-iot-thing-Name
undyour-iot-endpoint
mit 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_nameyour-iot-thing-name
Die
shadow.py
Die 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 aufoff
und fordert Sie dann auf, eindesired
Wert.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 war
green
aus. 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 }
-
Geben Sie ein
desired
Wert im Terminal, wieyellow
aus. Dieshadow.py
Beispiel-App antwortet und zeigt die folgenden Nachrichten im Terminal an, die die Änderung imreported
Value aufyellow
aus.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 beidedesired
undupdated
Werte ändern sich in die Farbeyellow
aus. -
$aws/things/ things/
thingName
/shadow/update/documents: zeigt die aktuellen Werte desdesired
undreported
Zustände und ihre Metadaten und Versionsinformationen. -
$aws/things/ things/
thingName
/shadow/update/documents: zeigt die vorherigen und aktuellen Werte desdesired
undreported
Zustä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 aufyellow
aus.{ "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 }
-
-
Nun, wenn du einen anderen eingibst
desired
Wert sehen Sie weitere Änderungen an derreported
Werte und Nachrichtenaktualisierungen, die von diesen Themen empfangen wurden. Die Versionsnummer erhöht sich ebenfalls um 1. Wenn Sie z. B. den Wert eingebengreen
gibt der vorherige Status den Wert anyellow
und der aktuelle Status meldet den Wertgreen
aus.
-
-
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 die
desired
Wert auf die Farbered
aus. Um dies zu tun, finden Sie imAWS IoT-Konsole, Wählen SieBearbeitenund setze dann diedesired
Wert auf Rot im JSON, während derreported
Wert aufgreen
aus. 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" } }
Die
shadow.py
Die Beispiel-App reagiert auf diese Änderung und zeigt Nachrichten im Terminal an, die das Delta anzeigen. Im MQTT-Testclient wird derupdate
themen haben eine Nachricht erhalten, in der Änderungen an derdesired
undreported
-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
, oderdelete
Folgen 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, dass
thingName
ist 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 der
shadow.py
Beispiel-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 wie
shadow.py
Beispiel-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.