Verwenden von Schatten in Geräten - 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.

Verwenden von Schatten in Geräten

In diesem Abschnitt wird die Gerätekommunikation mit Schatten mithilfe von MQTT-Nachrichten beschrieben, der bevorzugten Methode für Geräte zur Kommunikation mit dem AWS IoT Geräteschatten-Service.

Die Schattenkommunikation emuliert ein Anforderungs-/Antwortmodell mithilfe des Kommunikationsmodells „Veröffentlichen/Abonnieren“ von MQTT. Jede Schattenaktion besteht aus einem Anforderungsthema, einem Thema für erfolgreiche Antworten (accepted) und einem Thema für Fehlerantworten (rejected).

Informationen dazu, ob Apps und Services feststellen können, ob ein Gerät verbunden ist, finden Sie unter Erkennen, dass ein Gerät verbunden ist.

Wichtig

Da MQTT ein Veröffentlichen-/Abonnieren-Kommunikationsmodell verwendet, müssen Sie die Antwortthemen abonnieren, bevor Sie ein Anfrage-Thema veröffentlichen. Wenn Sie dies nicht tun, erhalten Sie keine Antwort auf die Anfrage, die Sie veröffentlichen.

Wenn Sie eine AWS IoT Device SDK zum Aufrufen der Geräteschatten-Dienst-APIs verwenden, wird dies für Sie erledigt.

Die Beispiele in diesem Abschnitt verwenden eine abgekürzte Form des Themas, in dem sich die entweder auf einen benannten oder einen unbenannten Schatten beziehen ShadowTopicPrefix kann, wie in dieser Tabelle beschrieben.

Schatten können benannt oder unbenannt sein (klassisch). Die jeweils verwendeten Themen unterscheiden sich nur durch das Themenpräfix. In dieser Tabelle wird das Themenpräfix angezeigt, das von jedem Schattentyp verwendet wird.

ShadowTopicPrefix Wert Schattentyp
$aws/things/thingName/shadow Unbenannter (klassischer) Schatten
$aws/things/thingName/shadow/name/shadowName Benannter Schatten
Wichtig

Stellen Sie sicher, dass die Verwendung der Schatten durch Ihre App oder Ihren Service konsistent ist und von den entsprechenden Implementierungen auf Ihren Geräten unterstützt wird. Bedenken Sie beispielsweise, wie Schatten erstellt, aktualisiert und gelöscht werden. Berücksichtigen Sie auch, wie Updates auf dem Gerät und in den Apps oder Services behandelt werden, die über einen Schatten auf das Gerät zugreifen. Ihr Design sollte klar angeben, wie der Zustand des Geräts aktualisiert und gemeldet wird und wie Ihre Apps und Services mit dem Gerät und seinen Schatten interagieren.

Um ein vollständiges Thema zu erstellen, wählen Sie ShadowTopicPrefix als Schattentyp aus, auf den Sie verweisen möchten. Ersetzen Sie thingName und shadowName mit den entsprechenden Werten, wenn zutreffend. Fügen Sie anschließend den Themen-Stub an wie in der folgenden Tabelle dargestellt. Denken Sie daran, dass bei Themen zwischen Groß- und Kleinschreibung unterschieden wird.

Weitere Informationen zu den reservierten Themen für Schatten finden Sie unter Schatten-Themen.

Initialisieren des Geräts bei der ersten Verbindung mit AWS IoT

Nachdem sich ein Gerät bei registriert hat AWS IoT, sollte es diese MQTT-Nachrichten für die unterstützten Schatten abonnieren.

Thema Bedeutung Aktion, die ein Gerät ausführen sollte, wenn dieses Thema empfangen wird

ShadowTopicPrefix/delete/accepted

Die delete Anforderung wurde akzeptiert und der Schatten wurde AWS IoT gelöscht.

Die Aktionen, die für den gelöschten Schatten erforderlich sind, z. B. das Beenden der Veröffentlichung von Aktualisierungen.

ShadowTopicPrefix/delete/rejected

Die delete Anforderung wurde von abgelehnt AWS IoT und der Schatten wurde nicht gelöscht. Der Nachrichtentext enthält die Fehlerinformationen.

Reagieren Sie auf die Fehlermeldung im Nachrichtentext.

ShadowTopicPrefix/get/accepted

Die get Anforderung wurde von akzeptiert AWS IoTund der Nachrichtentext enthält das aktuelle Schattendokument.

Die Aktionen, die erforderlich sind, um das Statusdokument im Nachrichtentext zu verarbeiten.

ShadowTopicPrefix/get/rejected

Die get Anforderung wurde von abgelehnt AWS IoTund der Nachrichtentext enthält die Fehlerinformationen.

Reagieren Sie auf die Fehlermeldung im Nachrichtentext.

ShadowTopicPrefix/update/accepted

Die update Anforderung wurde von akzeptiert AWS IoTund der Nachrichtentext enthält das aktuelle Schattendokument.

Bestätigen Sie, dass die aktualisierten Daten im Nachrichtentext mit dem Gerätestatus übereinstimmen.

ShadowTopicPrefix/update/rejected

Die update Anforderung wurde von abgelehnt AWS IoTund der Nachrichtentext enthält die Fehlerinformationen.

Reagieren Sie auf die Fehlermeldung im Nachrichtentext.

ShadowTopicPrefix/update/delta

Das Schattendokument wurde durch eine Anfrage an aktualisiert AWS IoTund der Nachrichtentext enthält die angeforderten Änderungen.

Aktualisieren Sie den Gerätestatus so, dass er mit dem gewünschten Status im Nachrichtentext übereinstimmt.

ShadowTopicPrefix/update/documents

Eine Aktualisierung des Schattens wurde kürzlich abgeschlossen, und der Nachrichtentext enthält das aktuelle Schattendokument.

Bestätigen Sie, dass der aktualisierte Status im Nachrichtentext mit dem Gerätestatus übereinstimmt.

Nach dem Abonnieren der Nachrichten in der obigen Tabelle für jeden Schatten sollte das Gerät testen, ob die Schatten, die es unterstützt, bereits erstellt wurden, indem es ein /get-Thema in jedem Schatten veröffentlicht. Wenn eine /get/accepted-Nachricht empfangen wird, enthält der Nachrichtentext das Schattendokument, mit dem das Gerät seinen Status initialisieren kann. Wenn eine /get/rejected-Nachricht empfangen wird, sollte der Schatten erstellt werden, indem eine /update-Nachricht mit dem aktuellen Gerätestatus veröffentlicht wird.

Nehmen wir zum Beispiel an, Sie haben ein Objekt My_IoT_Thing, das keine klassischen oder benannten Schatten hat. Wenn Sie jetzt eine /get-Anfrage zum reservierten Thema $aws/things/My_IoT_Thing/shadow/get veröffentlichen, erhält das $aws/things/My_IoT_Thing/shadow/get/rejected Thema einen Fehler, da das Objekt keine Schatten hat. Um diesen Fehler zu beheben, veröffentlichen Sie zunächst eine /update-Nachricht, indem Sie das $aws/things/My_IoT_Thing/shadow/update Thema mit dem aktuellen Gerätestatus verwenden, z. B. die folgende Payload.

{ "state": { "reported": { "welcome": "aws-iot", "color": "yellow" } } }

Für das Objekt wird jetzt ein klassischer Schatten erstellt, und die Nachricht wird auf dem $aws/things/My_IoT_Thing/shadow/update/accepted-Thema veröffentlicht. Wenn Sie zu dem Thema $aws/things/My_IoT_Thing/shadow/get veröffentlichen, wird eine Antwort auf das $aws/things/My_IoT_Thing/shadow/get/accepted-Thema mit dem Gerätestatus zurückgegeben.

Bei benannten Schatten müssen Sie zuerst den benannten Schatten erstellen oder ein Update mit dem Schatten-Namen veröffentlichen, bevor Sie die GET-Anfrage verwenden können. Um beispielsweise einen benannten Schatten namedShadow1 zu erstellen, müssen Sie zunächst die Informationen zum Gerätestatus für das Thema veröffentlichen$aws/things/My_IoT_Thing/shadow/name/namedShadow1/update. Um die Statusinformationen abzurufen, verwenden Sie die /get-Anfrage für den benannten Schatten, $aws/things/My_IoT_Thing/shadow/name/namedShadow1/get.

Verarbeiten von Nachrichten, während das Gerät mit verbunden ist AWS IoT

Während ein Gerät mit verbunden ist AWS IoT, kann es /update/delta-Nachrichten empfangen und sollte den Gerätestatus wie folgt mit den Änderungen in seinen Schatten übereinstimmen:

  1. Lesen aller empfangenen /update/delta-Nachrichten und entsprechende Anpassung des Gerätestatus.

  2. Veröffentlichen einer /update-Nachricht mit einem reported-Nachrichtentext, der den aktuellen Status des Geräts hat, wenn sich der Gerätestatus ändert.

Solange ein Gerät angeschlossen ist, sollte es diese Meldungen veröffentlichen, wenn angezeigt.

Indikation Thema Nutzlast

Der Zustand des Geräts hat sich geändert.

ShadowTopicPrefix/update

Ein Schattendokument mit der reported-Eigenschaft.

Das Gerät wird möglicherweise nicht mit dem Schatten synchronisiert.

ShadowTopicPrefix/get

(empty)

Eine Aktion auf dem Gerät zeigt an, dass ein Schatten vom Gerät nicht mehr unterstützt wird, z. B. wenn das Gerät entfernt oder ersetzt wird.

ShadowTopicPrefix/delete

(empty)

Verarbeiten von Nachrichten, wenn das Gerät erneut eine Verbindung zu herstellt AWS IoT

Wenn ein Gerät mit einem oder mehreren Schatten eine Verbindung zu herstellt AWS IoT, sollte es seinen Status mit dem aller Schatten synchronisieren, die es unterstützt:

  1. Lesen aller empfangenen /update/delta-Nachrichten und entsprechende Anpassung des Gerätestatus.

  2. Veröffentlichen einer /update-Nachricht mit einem reported-Nachrichtentext, der den aktuellen Status des Geräts hat.