

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

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 Schatten zu interagieren. Im Gegensatz zu dem in verwendeten Beispiel[Verwenden von Schatten in Geräten](device-shadow-comms-device.md), das ein publish/subscribe communications model, this example uses the request/response Kommunikationsmodell der REST-API verwendet. 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 Ihre App oder Ihr Dienst zeitnahe Benachrichtigungen über Änderungen des Gerätestatus benötigt, sollten Sie die Protokolle MQTT oder MQTT über WSS in Betracht ziehen, die das publish/subscribe Kommunikationsmodell unterstützen, wie unter beschrieben. [Verwenden von Schatten in Geräten](device-shadow-comms-device.md)

**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 bei der Verbindung zu AWS IoT
<a name="device-shadow-comms-app-first-connect"></a>

Wenn die App zum ersten Mal eine Verbindung herstellt AWS IoT, sollte sie eine HTTP-GET-Anfrage an den URLs Schatten senden, den sie verwendet, um den aktuellen Status der Schatten abzurufen, die sie verwendet. 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
<a name="device-shadow-comms-app-while-connected"></a>

Solange die App oder der Dienst verbunden ist AWS IoT, kann sie den aktuellen Status regelmäßig abfragen, indem sie eine HTTP-GET-Anfrage an die URLs von ihr verwendeten Shadows sendet.

Wenn ein Endbenutzer mit der App oder dem Dienst interagiert, um den Status des Geräts zu ändern, kann die App oder der Dienst eine HTTP-POST-Anfrage an den URLs Shadow senden, mit dem sie den `desired` Status des Shadows aktualisiert. 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
<a name="thing-connection"></a>

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 (Themen, die mit \$1 beginnen) gesendet werden, werden vom AWS IoT Device Shadow-Dienst ignoriert. Sie werden jedoch von abonnierten Clients und von der AWS IoT Rules Engine verarbeitet, sodass Sie eine LWT-Nachricht erstellen müssen, die an ein nicht reserviertes Thema gesendet wird, und eine Regel, die die MQTT-LWT-Nachricht als Shadow-Update-Nachricht für das reservierte Update-Thema des Shadows erneut veröffentlicht. `ShadowTopicPrefix/update` 

**So senden Sie dem Device Shadow-Service eine LWT-Nachricht**

1. 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/update` verö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"
               }
           }
        ]
      }
   }
   ```

1. Wenn das Gerät eine Verbindung herstellt AWS IoT, registriert es eine LWT-Nachricht zu einem nicht reservierten Thema, damit die Regel zur erneuten Veröffentlichung diese erkennt. In diesem Beispiel ist dieses Thema `my/things/myLightBulb/update`, und die verbundene Eigenschaft wird auf `false` festgelegt.

   ```
   {
       "state": {        
           "reported": {
               "connected":"false"
           }
       }
   }
   ```

1. 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 seiner `connected`-Eigenschaft auf `true`.

   ```
   {
        "state": {        
           "reported": {
               "connected":"true"
           }
       }
   }
   ```

1. 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 seiner `connected`-Eigenschaft auf `false`.

   ```
   {
       "state": {        
           "reported": {
               "connected":"false"
           }
       }
   }
   ```

1. 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. Es wird empfohlen, [Lebenszyklusereignisse](life-cycle-events.md) zu verwenden, um die Genauigkeit der Erkennung des Verbindungsstatus zu verbessern, da diese Ereignisse Attribute zur Verwaltung von Ereignissen bereitstellen. out-of-order