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.
Verwenden von Schatten in Apps und Services
In diesem Abschnitt wird beschrieben, wie eine App oder ein Dienst mit dem AWS IoT Device Shadow-Dienst interagiert. In diesem Beispiel wird davon ausgegangen, dass die App oder der Service nur mit dem Schatten und darüber dem Gerät interagiert. In diesem Beispiel sind keine Verwaltungsaktionen enthalten, z. B. das Erstellen oder Löschen von Schatten.
In diesem Beispiel wird die REST-API des AWS IoT Device Shadow-Dienstes verwendet, um mit Shadows zu interagieren. Im Gegensatz zu dem in verwendeten BeispielVerwenden von Schatten in Geräten, das ein publish/subscribe Kommunikationsmodell verwendet, verwendet dieses Beispiel das request/response Kommunikationsmodell der REST-API. Das bedeutet, dass die App oder der Dienst eine Anfrage stellen muss, bevor sie eine Antwort von erhalten kann AWS IoT. Ein Nachteil dieses Modells ist jedoch, dass es keine Benachrichtigungen unterstützt. Wenn für Ihre App oder Ihr Dienst zeitnahe Benachrichtigungen über Änderungen des Gerätestatus erforderlich sind, ziehen Sie die Protokolle MQTT oder MQTT over WSS in Betracht, die das publish/subscribe Kommunikationsmodell unterstützen, wie unter beschrieben. Verwenden von Schatten in Geräten
Wichtig
Stellen Sie sicher, dass die Verwendung der Schatten Ihrer App oder Ihres Services mit den entsprechenden Implementierungen in Ihren Geräten konsistent ist und von diesen unterstützt wird. Berücksichtigen Sie beispielsweise, wie Schatten erstellt, aktualisiert und gelöscht werden und wie Updates auf dem Gerät und in den Apps oder Services, die auf den Schatten zugreifen, gehandhabt werden. In Ihrem Design sollte klar angegeben werden, wie der Zustand des Geräts aktualisiert und gemeldet wird und wie Ihre Apps und Services mit dem Gerät und seinen Schatten interagieren.
Die URL der REST-API für einen benannten Schatten lautet:
https://endpoint/things/thingName/shadow?name=shadowName
und für einen unbenannten Schatten:
https://endpoint/things/thingName/shadow
Wobei:
- Endpunkt
-
Der vom CLI-Befehl zurückgegebene Endpunkt:
aws iot describe-endpoint --endpoint-type IOT:Data-ATS - thingName
-
Der Name des Objekts, zu dem der Schatten gehört
- shadowName
-
Der Name des benannten Schattens. Dieser Parameter wird mit unbenannten Schatten nicht verwendet.
Initialisierung der App oder des Dienstes beim Herstellen einer Verbindung zu AWS IoT
Wenn die App zum ersten Mal eine Verbindung herstellt AWS IoT, sollte sie eine HTTP GET-Anfrage an die URLs der Shadows senden, die sie verwendet, um den aktuellen Status der verwendeten Shadows abzurufen. Dies ermöglicht es, die App oder den Service mit dem Schatten zu synchronisieren.
Der Verarbeitungsstatus ändert sich, während die App oder der Dienst verbunden ist AWS IoT
Während die App oder der Dienst verbunden ist AWS IoT, kann sie den aktuellen Status in regelmäßigen Abständen abfragen, indem sie eine HTTP GET-Anfrage an die URLs der verwendeten Shadows sendet.
Wenn ein Endbenutzer mit der App oder dem Service interagiert, um den Status des Geräts zu ändern, kann die App oder der Service eine HTTP-POST-Anforderung an die URLs der Schatten senden, mit denen der desired-Status des Schattens aktualisiert wird. Diese Anforderung gibt die Änderung zurück, die akzeptiert wurde, aber Sie müssen möglicherweise den Schatten abfragen, indem Sie HTTP-GET-Anforderungen vornehmen, bis das Gerät den Schatten mit seinem neuen Status aktualisiert hat.
Erkennt, ob ein Gerät angeschlossen ist
Um festzustellen, ob ein Gerät derzeit verbunden ist, schließen Sie eine connected-Eigenschaft in das Schattendokument ein und verwenden eine MQTT Last Will and Testament (LWT)-Meldung, um die connected-Eigenschaft auf false festzulegen, wenn ein Gerät aufgrund eines Fehlers getrennt wird.
Anmerkung
MQTT-LWT-Nachrichten, die an AWS IoT reservierte Themen gesendet werden (Themen, die mit $ beginnen), werden vom AWS IoT Device Shadow-Dienst ignoriert. Sie werden jedoch von abonnierten Clients und von der AWS IoT Regel-Engine verarbeitet. Sie müssen also eine LWT-Nachricht erstellen, die an ein nicht reserviertes Thema gesendet wird, und eine Regel, die die MQTT-LWT-Nachricht als Shadow-Aktualisierungsnachricht im reservierten Aktualisierungsthema des Shadows erneut veröffentlicht. ShadowTopicPrefix/update
So senden Sie dem Device Shadow-Service eine LWT-Nachricht
-
Erstellen Sie eine Regel, die die MQTT LWT-Nachricht im reservierten Thema erneut veröffentlicht. Das folgende Beispiel ist eine Regel, die auf Nachrichten zu dem
my/things/myLightBulb/update-Thema wartet und sie erneut in$aws/things/myLightBulb/shadow/updateveröffentlicht.{ "rule": { "ruleDisabled": false, "sql": "SELECT * FROM 'my/things/myLightBulb/update'", "description": "Turn my/things/ into $aws/things/", "actions": [ { "republish": { "topic": "$$aws/things/myLightBulb/shadow/update", "roleArn": "arn:aws:iam:123456789012:role/aws_iot_republish" } } ] } } -
Wenn das Gerät eine Verbindung zu einem nicht reservierten Thema herstellt AWS IoT, registriert es eine LWT-Nachricht, die von der Regel zur erneuten Veröffentlichung erkannt wird. In diesem Beispiel ist dieses Thema
my/things/myLightBulb/update, und die verbundene Eigenschaft wird auffalsefestgelegt.{ "state": { "reported": { "connected":"false" } } } -
Nach der Verbindung veröffentlicht das Gerät eine Nachricht zu seinem Shadow-Update-Thema,
$aws/things/myLightBulb/shadow/update, um seinen aktuellen Status zu melden, einschließlich der Einstellung seinerconnected-Eigenschaft auftrue.{ "state": { "reported": { "connected":"true" } } } -
Bevor das Gerät die Verbindung ordnungsgemäß trennt, veröffentlicht es eine Nachricht zu seinem Schattenaktualisierungsthema,
$aws/things/myLightBulb/shadow/update, um seinen neuesten Status zu melden, einschließlich der Einstellung seinerconnected-Eigenschaft auffalse.{ "state": { "reported": { "connected":"false" } } } -
Wenn das Gerät aufgrund eines Fehlers die Verbindung trennt, veröffentlicht der AWS IoT Message Broker die LWT-Nachricht des Geräts im Namen des Geräts. Die Regel zum erneuten Veröffentlichen erkennt diese Nachricht und veröffentlicht die Schattenaktualisierungsmeldung, um die
connected-Eigenschaft des Geräteschattens zu aktualisieren.
Anmerkung
Aufgrund der asynchronen Verarbeitung von Verbindungsabbrüchen kann nicht garantiert werden, dass LWT-Nachrichten bei der Wiederherstellung der Verbindung in der richtigen Reihenfolge versendet werden. Wir empfehlen, Lebenszyklusereignisse zu verwenden, um die Genauigkeit der Erkennung des Verbindungsstatus zu verbessern, da diese Ereignisse Attribute für die Verwaltung von Ereignissen bereitstellen, die nicht in der richtigen Reihenfolge liegen.