

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
<a name="device-shadow-comms-device"></a>

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

Shadow-Kommunikation emuliert ein request/response Modell, das das Publish/Subscribe-Kommunikationsmodell von MQTT verwendet. 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 [Erkennt, ob ein Gerät angeschlossen ist](device-shadow-comms-app.md#thing-connection).

**Wichtig**  
Da MQTT ein publish/subscribe Kommunikationsmodell verwendet, sollten Sie die Antwortthemen abonnieren, *bevor* Sie ein Anforderungsthema veröffentlichen. Wenn Sie dies nicht tun, erhalten Sie keine Antwort auf die Anfrage, die Sie veröffentlichen.   
Wenn Sie einen [AWS IoT Device SDK](iot-sdks.md)zum Aufrufen des Device Shadow-Dienstes verwenden APIs, wird dies für Sie erledigt.

Die Beispiele in diesem Abschnitt verwenden eine verkürzte Form des Themas, wobei sich der Begriff 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 | 
| --- | --- | 
| \$1aws/things/thingName/shadow | Unbenannter (klassischer) Schatten | 
| \$1aws/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](reserved-topics.md#reserved-topics-shadow).

## Initialisierung des Geräts bei der ersten Verbindung zu AWS IoT
<a name="device-shadow-comms-device-first-connect"></a>

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


| Thema | Bedeutung | Aktion, die ein Gerät ausführen sollte, wenn dieses Thema empfangen wird | 
| --- | --- | --- | 
|  `ShadowTopicPrefix/delete/accepted`  |  Die `delete` Anfrage wurde akzeptiert und der Shadow 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` Anfrage wurde von abgelehnt AWS IoT und der Shadow wurde nicht gelöscht. Der Nachrichtentext enthält die Fehlerinformationen.   |  Reagieren Sie auf die Fehlermeldung im Nachrichtentext.  | 
|  `ShadowTopicPrefix/get/accepted`  |  Die `get` Anfrage wurde von akzeptiert AWS IoT, und der Nachrichtentext enthält das aktuelle Shadow-Dokument.   |  Die Aktionen, die erforderlich sind, um das Statusdokument im Nachrichtentext zu verarbeiten.  | 
|  `ShadowTopicPrefix/get/rejected`  |  Die `get` Anfrage wurde von abgelehnt AWS IoT, und der Nachrichtentext enthält die Fehlerinformationen.   |  Reagieren Sie auf die Fehlermeldung im Nachrichtentext.  | 
|  `ShadowTopicPrefix/update/accepted`  |  Die `update` Anfrage wurde von akzeptiert AWS IoT, und 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` Anfrage wurde von abgelehnt AWS IoT, und 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 IoT, und 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`.

## Nachrichten werden verarbeitet, während das Gerät angeschlossen ist AWS IoT
<a name="device-shadow-comms-device-while-connected"></a>

Solange ein Gerät verbunden ist AWS IoT, kann es **/update/delta-Meldungen** empfangen und sollte den Gerätestatus an die Änderungen in seinem Schatten anpassen, indem es:

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

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

## Nachrichten werden verarbeitet, wenn das Gerät wieder eine Verbindung herstellt mit AWS IoT
<a name="device-shadow-comms-device-reconnect"></a>

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

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

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