

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.

# Beibehalten des Gerätestatus mit Geräteschatten, während das Gerät offline ist
<a name="iot-shadows-tutorial"></a>

In diesen Tutorials erfahren Sie, wie Sie den AWS IoT Device Shadow-Dienst verwenden, um die Statusinformationen eines Geräts zu speichern und zu aktualisieren. Das Schattendokument, bei dem es sich um ein JSON-Dokument handelt, zeigt die Änderung des Gerätestatus auf der Grundlage der von einem Gerät, einer lokalen App oder einem Dienst veröffentlichten Nachrichten. In diesem Tutorial zeigt das Schattendokument die Änderung der Farbe einer Glühbirne. In diesen Tutorials wird auch gezeigt, wie der Schatten diese Informationen auch dann speichert, wenn das Gerät nicht mit dem Internet verbunden ist, und die neuesten Statusinformationen an das Gerät zurückgibt, wenn es wieder online ist und diese Informationen anfordert.

Wir empfehlen Ihnen, diese Tutorials in der Reihenfolge anzusehen, in der sie hier gezeigt werden. Beginnen Sie dabei mit den AWS IoT -Ressourcen, die Sie erstellen müssen, und der erforderlichen Hardwarekonfiguration, damit Sie die Konzepte schrittweise erlernen können. Diese Tutorials zeigen, wie Sie ein Raspberry Pi-Gerät für die Verwendung mit konfigurieren und anschließen AWS IoT. Wenn Sie nicht über die erforderliche Hardware verfügen, können Sie diesen Tutorials folgen, indem Sie sie an ein Gerät Ihrer Wahl anpassen oder [ein virtuelles Gerät mit Amazon EC2 erstellen](creating-a-virtual-thing.md).

**Übersicht über Tutorial-Szenario**  
Das Szenario für diese Tutorials ist eine lokale App oder ein Dienst, der die Farbe einer Glühbirne ändert und deren Daten in reservierten Schattenthemen veröffentlicht. Diese Tutorials ähneln der Geräteschatten-Funktionalität, die im [interaktiven Tutorial „Erste Schritte](interactive-demo.md)“ beschrieben wurde, und sind auf einem Raspberry Pi-Gerät implementiert. Die Tutorials in diesem Abschnitt konzentrieren sich auf einen einzelnen, klassischen Schatten und zeigen, wie Sie benannte Schatten oder mehrere Geräte unterbringen können.

In den folgenden Tutorials erfahren Sie, wie Sie den AWS IoT Device Shadow-Dienst verwenden.
+ 

**[Tutorial: Ihren Raspberry Pi für die Ausführung der Schattenanwendung vorbereiten](create-resources-shadow.md)**  
Dieses Tutorial zeigt, wie Sie ein Raspberry Pi-Gerät für die Verbindung einrichten AWS IoT. Außerdem erstellen Sie ein AWS IoT Richtliniendokument und eine Ding-Ressource, laden die Zertifikate herunter und hängen dann die Richtlinie an diese Ding-Ressource an. Für dieses Tutorial brauchen Sie ungefähr 30 Minuten.
+ 

**[Tutorial: Installation des Geräte-SDK und Ausführen der Beispielanwendung für Geräteschatten](lightbulb-shadow-application.md)**  
Dieses Tutorial zeigt, wie Sie die erforderlichen Tools, Software und das AWS IoT Geräte-SDK für Python installieren und anschließend die Shadow-Beispielanwendung ausführen. Dieses Tutorial baut auf den unter [Verbinden eines Raspberry Pi oder eines anderes Gerätes](connecting-to-existing-device.md) vorgestellten Konzepten auf und nimmt 20 Minuten in Anspruch.
+ 

**[Tutorial: Interaktion mit Geräteschatten mithilfe der Beispiel-App und des MQTT-Testclients](interact-lights-device-shadows.md)**  
Dieses Tutorial zeigt, wie Sie mithilfe der `shadow.py` Beispiel-App und der **AWS IoT Konsole** die Interaktion zwischen AWS IoT Device Shadows und den Zustandsänderungen der Glühbirne beobachten. Das Tutorial zeigt auch, wie Sie MQTT-Nachrichten an die reservierten Geräteschattenthemen senden. Für dieses Tutorial brauchen Sie ungefähr 45 Minuten.

**AWS IoT Device Shadow-Übersicht**  
Ein Device Shadow ist eine persistente, virtuelle Darstellung eines Geräts, das von einer [Dingressource](iot-thing-management.md) verwaltet wird, die Sie in der AWS IoT Registrierung erstellen. Das Shadow-Dokument ist ein JSON- oder JavaScript Notationsdokument, das zum Speichern und Abrufen der aktuellen Statusinformationen für ein Gerät verwendet wird. Sie können den Shadow verwenden, um den Status eines Geräts über MQTT-Themen oder HTTP-REST abzurufen und festzulegen APIs, unabhängig davon, ob das Gerät mit dem Internet verbunden ist.

Das Schattendokument enthält eine `state`-Eigenschaft, die die folgenden Aspekte des Gerätezustands beschreibt.
+ `desired`: Apps geben die gewünschten Status der Geräteeigenschaften an, indem sie das `desired`-Objekt aktualisieren.
+ `reported`: Geräte melden ihren aktuellen Status im `reported`-Objekt.
+ `delta`: AWS IoT meldet Unterschiede zwischen dem gewünschten und dem gemeldeten Status im `delta` Objekt.

Hier sehen Sie ein Beispiel für ein Schattenstatusdokument.

```
{
  "state": {
    "desired": {
      "color": "green"
      },
    "reported": {
      "color": "blue"
      },
    "delta": {
      "color": "green"
      }
   }
}
```

Um das Shadow-Dokument eines Geräts zu aktualisieren, können Sie die [reservierten MQTT-Themen](reserved-topics.md#reserved-topics-shadow), den [Device Shadow-REST APIs](device-shadow-rest-api.md)`GET`, der die`UPDATE`, und `DELETE` -Operationen mit HTTP unterstützt, und die [AWS IoT CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot-data/index.html) verwenden.

Nehmen wir im vorherigen Beispiel an, Sie möchten die `desired` Farbe in `yellow` ändern. Senden Sie dazu eine Anfrage an die [UpdateThingShadow](device-shadow-rest-api.md#API_UpdateThingShadow) API oder veröffentlichen Sie eine Nachricht zum Thema [Aktualisieren](device-shadow-mqtt.md#update-pub-sub-topic)`$aws/things/THING_NAME/shadow/update`.

```
{
  "state": {
    "desired": {
      "color": yellow
    }
  }
}
```

Aktualisierungen betreffen lediglich die in der Anfrage angegebenen Felder. Veröffentlichen Sie nach erfolgreicher Aktualisierung von Device Shadow den neuen `desired` Status im `delta` Thema,`$aws/things/THING_NAME/shadow/delta`. AWS IoT Das Schattendokument sieht in diesem Fall so aus:

```
{
  "state": {
    "desired": {
      "color": yellow
    },
    "reported": {
      "color": green
    },
    "delta": {
      "color": yellow
      }
  }
}
```

Der neue Status wird dann dem AWS IoT Device Shadow unter Verwendung des `Update` Themas `$aws/things/THING_NAME/shadow/update` mit der folgenden JSON-Nachricht gemeldet: 

```
{
  "state": {
    "reported": {
      "color": yellow
    }
  }
}
```

Wenn Sie die aktuellen Statusinformationen abrufen möchten, senden Sie eine Anfrage an die [GetThingShadow](device-shadow-rest-api.md#API_GetThingShadow) API oder veröffentlichen Sie eine MQTT-Nachricht im Thema [Get](device-shadow-mqtt.md#get-pub-sub-topic)`$aws/things/THING_NAME/shadow/get`.

Weitere Informationen zur Verwendung des Geräteschattendienstes finden Sie in [AWS IoT Device Shadow-Dienst](iot-device-shadows.md).

Weitere Informationen zur Verwendung von Geräteschatten in Geräten, Apps und Diensten finden Sie unter [Verwenden von Schatten in Geräten](device-shadow-comms-device.md) und [Verwenden von Schatten in Apps und Services](device-shadow-comms-app.md).

Informationen zur Interaktion mit AWS IoT Schatten finden Sie unter[Interaktion mit Schatten](device-shadow-data-flow.md).

Informationen zu den reservierten MQTT-Themen und zu HTTP-REST APIs finden Sie unter [MQTT-Themen für Geräteschatten](device-shadow-mqtt.md) und[Geräteschatten-REST-API](device-shadow-rest-api.md).

# Tutorial: Ihren Raspberry Pi für die Ausführung der Schattenanwendung vorbereiten
<a name="create-resources-shadow"></a>

Dieses Tutorial zeigt, wie Sie ein Raspberry Pi-Gerät einrichten und konfigurieren und die AWS IoT Ressourcen erstellen, die ein Gerät benötigt, um eine Verbindung herzustellen und MQTT-Nachrichten auszutauschen.

**Anmerkung**  
Wenn Sie [Erstellen Sie ein virtuelles Gerät mit Amazon EC2](creating-a-virtual-thing.md) planen, können Sie diese Seite überspringen und mit [Konfigurieren Ihres Geräts](configure-device.md) weitermachen. Sie werden diese Ressourcen erstellen, wenn Sie Ihr virtuelles Objekt erstellen. Wenn Sie anstelle des Raspberry Pi ein anderes Gerät verwenden möchten, können Sie versuchen, diese Anleitungen zu befolgen, indem Sie sie an ein Gerät Ihrer Wahl anpassen.

**In diesem Kurs lernen Sie Folgendes:**
+ Richten Sie ein Raspberry Pi-Gerät ein und konfigurieren Sie es für die Verwendung mit AWS IoT.
+ Erstellen Sie ein AWS IoT Richtliniendokument, das Ihr Gerät zur Interaktion mit AWS IoT Diensten autorisiert.
+ Erstellen Sie eine Ding-Ressource in AWS IoT den X.509-Gerätezertifikaten und hängen Sie dann das Richtliniendokument an.

  Das Objekt ist die virtuelle Darstellung Ihres Geräts in der AWS IoT Registrierung. Das Zertifikat authentifiziert Ihr Gerät gegenüber AWS IoT Core, und das Richtliniendokument autorisiert Ihr Gerät zur Interaktion mit Core. AWS IoT

**So führen Sie dieses Tutorial aus**  
Um die `shadow.py` Beispielanwendung für Geräteschatten auszuführen, benötigen Sie ein Raspberry Pi-Gerät, das eine Verbindung zu AWS IoT herstellt. Wir empfehlen, dass Sie dieses Tutorial in der Reihenfolge folgen, in der es hier vorgestellt wird. Beginnen Sie mit der Einrichtung des Raspberry Pi und seines Zubehörs, erstellen Sie dann eine Richtlinie und fügen Sie die Richtlinie einer von Ihnen erstellten Objekt-Ressource hinzu. Anschließend können Sie diesem Tutorial folgen, indem Sie die vom Raspberry Pi unterstützte grafische Benutzeroberfläche (GUI) verwenden, um die AWS IoT Konsole im Webbrowser des Geräts zu öffnen. Dadurch ist es auch einfacher, die Zertifikate direkt auf Ihren Raspberry Pi herunterzuladen, um eine Verbindung herzustellen. AWS IoT

**Stellen Sie vor Beginn dieses Tutorials sicher, dass Sie über Folgendes verfügen:**
+ Ein AWS-Konto. Wenn dies nicht der Fall ist, führen Sie die unter [Einrichten AWS-Konto](setting-up.md) beschriebenen Schritte aus, bevor Sie fortfahren. Sie benötigen Ihre AWS-Konto AWS IoT Handkonsole, um dieses Tutorial abzuschließen. 
+ Der Raspberry Pi und das notwendige Zubehör. Sie benötigen:
  + Ein [Raspberry Pi 3 Modell B](https://www.raspberrypi.com/products/) oder ein neueres Modell. Dieses Tutorial funktioniert möglicherweise auf früheren Versionen des Raspberry Pi, aber wir haben es nicht getestet.
  + [Raspberry Pi OS (32-Bit)](https://www.raspberrypi.com/software/operating-systems/) oder höher. Wir empfehlen die neueste Version des Raspberry Pi OS zu verwenden. Frühere Versionen des Betriebssystems funktionieren möglicherweise, aber wir haben es nicht getestet.
  + Eine Ethernet- oder WLAN-Verbindung.
  + Tastatur, Maus, Monitor, Kabel und Netzteile.

Für dieses Tutorial brauchen Sie ungefähr 30 Minuten.

## Schritt 1: Einrichten und Konfigurieren des Raspberry Pi-Geräts
<a name="setup-device-shadow"></a>

In diesem Abschnitt konfigurieren wir ein Raspberry Pi-Gerät für die Verwendung mit AWS IoT.

**Wichtig**  
Die Anpassung dieser Anweisungen an andere Geräte und Betriebssysteme kann eine Herausforderung sein. Sie müssen Ihr Gerät gut genug verstehen, um diese Anweisungen interpretieren und auf Ihr Gerät anwenden zu können. Wenn Sie auf Schwierigkeiten stoßen, können Sie alternativ eine der anderen Geräteoptionen ausprobieren, z. B. [Erstellen Sie ein virtuelles Gerät mit Amazon EC2](creating-a-virtual-thing.md) oder[Verwenden Sie Ihren Windows- oder Linux-PC oder Mac als Gerät AWS IoT](using-laptop-as-device.md). 

Sie müssen Ihren Raspberry Pi so konfigurieren, dass er das Betriebssystem (OS) starten, eine Verbindung zum Internet herstellen und Ihnen die Interaktion mit ihm über eine Befehlszeilenschnittstelle ermöglicht. Sie können auch die vom Raspberry Pi unterstützte grafische Benutzeroberfläche (GUI) verwenden, um die AWS IoT Konsole zu öffnen und den Rest dieses Tutorials auszuführen.

**So richten Sie den Raspberry Pi ein**

1. Setzen Sie die SD-Karte in den MicroSD-Kartensteckplatz im Raspberry Pi ein. Auf einigen SD-Karten ist ein Installationsmanager vorinstalliert, der Sie nach dem Booten der Karte mit einem Menü zur Installation des Betriebssystems auffordert. Sie können auch den Raspberry Pi-Imager verwenden, um das Betriebssystem auf Ihrer Karte zu installieren.

1. Schließen Sie ein HDMI TV oder einen HDMI-Monitor an das HDMI-Kabel an, das an den HDMI-Anschluss des Raspberry Pi angeschlossen ist. 

1. Schließe Sie Tastatur und Maus an die USB-Anschlüsse des Raspberry Pi an und schließen Sie dann den Netzadapter an, um die Platine zu starten.

Wenn nach dem Start des Raspberry Pi der Installationsmanager auf der SD-Karte vorinstalliert war, erscheint ein Menü zur Installation des Betriebssystems. Wenn Sie Probleme bei der Installation des Betriebssystems haben, können Sie die folgenden Schritte ausführen. Weitere Informationen zum Einrichten von Raspberry Pi finden Sie unter [Einrichten Ihres Raspberry Pi](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/).

**Wenn Sie Probleme beim Einrichten des Raspberry Pi haben:**
+ Überprüfen Sie, ob Sie die SD-Karte eingelegt haben, bevor Sie das Board starten. Wenn Sie die SD-Karte nach dem Booten des Boards einstecken, wird das Installationsmenü möglicherweise nicht angezeigt.
+ Vergewissern Sie sich, dass das TV oder der Monitor eingeschaltet und der richtige Eingang ausgewählt ist.
+ Stellen Sie sicher, dass Sie Raspberry Pi-kompatible Software verwenden.

Nachdem Sie das Raspberry Pi-Betriebssystem installiert und konfiguriert haben, öffnen Sie den Webbrowser des Raspberry Pi und navigieren Sie zur AWS IoT Core Konsole, um mit den restlichen Schritten in diesem Tutorial fortzufahren.

Wenn Sie die AWS IoT Core Konsole öffnen können, ist Ihr Raspberry Pi bereit und Sie können fortfahren[Tutorial: Bereitstellen Ihres Geräts in AWS IoT](shadow-provision-cloud.md).

Wenn Sie Probleme haben oder zusätzliche Hilfe benötigen, finden Sie weitere Informationen unter [Hilfe für Ihren Raspberry Pi erhalten](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/5).

# Tutorial: Bereitstellen Ihres Geräts in AWS IoT
<a name="shadow-provision-cloud"></a>

In diesem Abschnitt werden die AWS IoT Core Ressourcen erstellt, die in Ihrem Tutorial verwendet werden.

**Topics**
+ [Schritt 1: Erstellen Sie eine AWS IoT Richtlinie für den Device Shadow](#create-policy-shadow)
+ [Schritt 2: Erstellen Sie eine Objekt-Ressource und fügen Sie die Richtlinie dem Objekt hinzu](#create-thing-shadow)
+ [Schritt 3: Überprüfen Sie die Ergebnisse und die nächsten Schritte](#resources-shadow-review)

## Schritt 1: Erstellen Sie eine AWS IoT Richtlinie für den Device Shadow
<a name="create-policy-shadow"></a>

X.509-Zertifikate authentifizieren Ihr Gerät mit. AWS IoT Core AWS IoT Dem Zertifikat sind Richtlinien beigefügt, die es dem Gerät ermöglichen, AWS IoT Operationen wie das Abonnieren oder Veröffentlichen von reservierten MQTT-Themen auszuführen, die vom Device Shadow-Dienst verwendet werden. Ihr Gerät legt sein Zertifikat vor, wenn es eine Verbindung herstellt und Nachrichten an sendet. AWS IoT Core

In diesem Verfahren erstellen Sie eine Richtlinie, die es Ihrem Gerät ermöglicht, die zur Ausführung des Beispielprogramms erforderlichen AWS IoT -Vorgänge auszuführen. Wir empfehlen, dass Sie eine Richtlinie erstellen, die nur Berechtigungen gewährt, die zum Ausführen einer Aufgabe erforderlich sind. Sie erstellen zuerst die AWS IoT Richtlinie und hängen sie dann an das Gerätezertifikat an, das Sie später erstellen werden.

**Um eine AWS IoT Richtlinie zu erstellen**

1. Wählen Sie im linken Menü **Sicher** und dann **Richtlinien** aus. Wenn in Ihrem Konto bereits Richtlinien vorhanden sind, wählen Sie **Erstellen** aus. Andernfalls wählen Sie auf der Seite **Sie haben noch keine Richtlinie erstellt** die Option **Richtlinie erstellen** aus.

1. Auf der Seite **Create a policy (Richtlinie erstellen)**:

   1. Geben Sie im Feld **Name** einen Namen für die Richtlinie ein (z. B. **My\$1Device\$1Shadow\$1policy**). Verwenden Sie keine personenbezogenen Informationen in Ihren Richtliniennamen.

   1. In dem Richtliniendokument beschreiben Sie die Aktionen „Verbinden“, „Abonnieren“, „Empfangen“ und „Veröffentlichen“, die dem Gerät die Erlaubnis geben, die reservierten MQTT-Themen zu veröffentlichen und zu abonnieren.

      Kopieren Sie die folgende Beispielrichtlinie und fügen Sie sie in Ihr Richtliniendokument ein. `thingname`Ersetzen Sie es durch den Namen der Sache, die Sie erstellen werden (z. B.`My_light_bulb`), `region` durch die AWS IoT Region, in der Sie die Dienste nutzen, und `account` durch Ihre AWS-Konto Nummer. Weitere Informationen zu AWS IoT Richtlinien finden Sie unter[AWS IoT Core Richtlinien](iot-policies.md).  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/get/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thingname/shadow/update/delta"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/get/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/get/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/accepted",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/rejected",
                      "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/thingname/shadow/update/delta"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": "iot:Connect",
                  "Resource": "arn:aws:iot:us-east-1:123456789012:client/test-*"
              }
          ]
      }
      ```

## Schritt 2: Erstellen Sie eine Objekt-Ressource und fügen Sie die Richtlinie dem Objekt hinzu
<a name="create-thing-shadow"></a>

Geräte, mit denen eine Verbindung besteht, AWS IoT können durch *Ding-Ressourcen* in der AWS IoT Registrierung dargestellt werden. Eine *Objekt-Ressource* steht für ein bestimmtes Gerät oder eine logische Einheit, z. B. die Glühbirne in diesem Tutorial.

Um zu erfahren, wie Sie ein Ding in erstellen AWS IoT, folgen Sie den unter beschriebenen Schritten[Dies erstellt ein Objekt](create-iot-resources.md#create-aws-thing). Hier sind einige wichtige Dinge, die Sie beachten sollten, wenn Sie die Schritte in diesem Tutorial befolgen:

1. Wählen Sie **Ein einzelnes Objekt erstellen** und geben Sie im Feld **Name** einen Namen für das Objekt ein, der `thingname` entspricht (z. B. `My_light_bulb`), den Sie bei der Erstellung der Richtlinie zuvor angegeben haben.

   Es ist nicht möglich, einen Objektnamen nach dem Erstellen umzubenennen. Wenn Sie dem Objekt einen anderen Namen als `thingname` gegeben haben, erstellen Sie ein neues Objekt mit dem Namen `thingname` und löschen Sie das alte Objekt.
**Anmerkung**  
Verwenden Sie keine personenbezogenen Informationen in Ihren Objektnamen. Der Name des Objekts kann in unverschlüsselten Mitteilungen und Berichten vorkommen.

1. Wir empfehlen, dass Sie alle Zertifikatsdateien auf der Seite **Zertifikat erstellt\$1** in ein Verzeichnis herunterladen, in dem Sie sie leicht finden können. Sie müssen diese Dateien installieren, um die Beispielanwendung ausführen zu können.

   Wir empfehlen Ihnen, die Dateien in ein `certs` Unterverzeichnis in Ihrem `home` Verzeichnis auf dem Raspberry Pi herunterzuladen und sie jeweils mit einem einfacheren Namen zu benennen, wie in der folgenden Tabelle vorgeschlagen.  
**Namen der Zertifikatsdateien**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/shadow-provision-cloud.html)

1. Nachdem Sie das Zertifikat aktiviert haben, mit dem Verbindungen hergestellt werden sollen AWS IoT, wählen Sie **Richtlinie anhängen** und stellen Sie sicher, dass Sie die Richtlinie, die Sie zuvor erstellt haben (z. B.**My\$1Device\$1Shadow\$1policy**), an das Ding anhängen.

   Nachdem Sie ein Ding erstellt haben, können Sie sehen, dass Ihre Dingressource in der Liste der Dinge in der AWS IoT Konsole angezeigt wird.

## Schritt 3: Überprüfen Sie die Ergebnisse und die nächsten Schritte
<a name="resources-shadow-review"></a>

**In diesem Kurs haben Sie Folgendes gelernt:**
+ Einrichten und Konfigurieren des Raspberry Pi-Geräts.
+ Erstellen Sie ein AWS IoT Richtliniendokument, das Ihr Gerät zur Interaktion mit AWS IoT Diensten autorisiert.
+ Erstellen einer Objekt-Ressource und des zugehörigen X.509-Gerätezertifikats und Anhängen des Richtliniendokuments.

**Nächste Schritte**  
Sie können jetzt das AWS IoT Geräte-SDK für Python installieren, die `shadow.py` Beispielanwendung ausführen und Device Shadows verwenden, um den Status zu steuern. Weitere Informationen darüber, wie Sie dieses Tutorial ausführen, finden Sie unter [Tutorial: Installation des Geräte-SDK und Ausführen der Beispielanwendung für Geräteschatten](lightbulb-shadow-application.md).

# Tutorial: Installation des Geräte-SDK und Ausführen der Beispielanwendung für Geräteschatten
<a name="lightbulb-shadow-application"></a>

In diesem Abschnitt wird gezeigt, wie Sie die erforderliche Software und das AWS IoT Device SDK für Python installieren und die `shadow.py` Beispielanwendung ausführen können, um das Shadow-Dokument zu bearbeiten und den Status des Shadows zu kontrollieren. 

**In diesem Kurs lernen Sie Folgendes:**
+ Verwenden Sie die installierte Software und AWS IoT das Geräte-SDK für Python, um die Beispiel-App auszuführen.
+ Lernen, wie die Eingabe eines Werts mithilfe der Beispiel-App den gewünschten Wert in der AWS IoT Konsole veröffentlicht.
+ Prüfen der `shadow.py` Beispiel-App an und wie sie das MQTT-Protokoll verwendet, um den Status des Schattens zu aktualisieren.

**Bevor Sie dieses Tutorial ausführen:**  
Sie müssen Ihr Raspberry Pi-Gerät eingerichtet AWS-Konto, konfiguriert und eine AWS IoT Sache und Richtlinie erstellt haben, die dem Gerät die Erlaubnis geben, die MQTT-reservierten Themen des Device Shadow-Dienstes zu veröffentlichen und zu abonnieren. Weitere Informationen finden Sie unter [Tutorial: Ihren Raspberry Pi für die Ausführung der Schattenanwendung vorbereiten](create-resources-shadow.md).

Sie müssen auch Git, Python und das AWS IoT Device SDK für Python installiert haben. Dieses Tutorial baut auf den im Tutorial [Verbinden eines Raspberry Pi oder eines anderes Gerätes](connecting-to-existing-device.md) vorgestellten Konzepten auf. Wenn Sie dieses Tutorial noch nicht ausprobiert haben, empfehlen wir Ihnen, die in diesem Tutorial beschriebenen Schritte zu befolgen, um die Zertifikatsdateien und das Geräte-SDK zu installieren, und dann zu diesem Tutorial zurückzukehren, um die `shadow.py` Beispiel-App auszuführen.

**Topics**
+ [Schritt 1: shadow.py-Beispiel-App ausführen](#run-sample-application-shadows)
+ [Schritt 2: Geräte-SDK-Beispiel-App shadow.py prüfen](#review-shadow-sample-code)
+ [Schritt 3: Probleme mit der `shadow.py`-Beispiel-App beheben](#shadow-sample-app-troubleshoot)
+ [Schritt 4: Ergebnisse überprüfen und nächste Schritte](#sample-app-shadow-review)

Für dieses Tutorial brauchen Sie ungefähr 20 Minuten.

## Schritt 1: shadow.py-Beispiel-App ausführen
<a name="run-sample-application-shadows"></a>

Bevor Sie die `shadow.py` Beispiel-App ausführen, benötigen Sie zusätzlich zu den Namen und dem Speicherort der installierten Zertifikatsdateien die folgenden Informationen.


**Werte für Anwendungsparameter**  

|  Parameter  |  Wo der Wert gefunden werden kann  | 
| --- | --- | 
| your-iot-thing-name |  Name der AWS IoT Sache, die Sie zuvor erstellt haben[Schritt 2: Erstellen Sie eine Objekt-Ressource und fügen Sie die Richtlinie dem Objekt hinzu](shadow-provision-cloud.md#create-thing-shadow). Um diesen Wert zu finden, wählen Sie in der [AWS IoT Konsole](https://console.aws.amazon.com/iot/home) **Verwalten** und dann **Objekte** aus.  | 
| your-iot-endpoint |   Der *your-iot-endpoint* Wert hat das Format:`endpoint_id-ats.iot.region.amazonaws.com`, zum Beispiel`a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`. So finden Sie diesen Wert: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/lightbulb-shadow-application.html)  | 

**Installieren und Ausführen der Beispiel-App**

1. Navigieren Sie zum Verzeichnis der Beispiel-App.

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
   ```

1. Ersetzen Sie im Befehlszeilenfenster *your-iot-endpoint* und *your-iot-thing-name* wie angegeben und führen Sie diesen Befehl aus.

   ```
   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_name your-iot-thing-name
   ```

1. Beachten Sie, dass die Beispiel-App:

   1. Stellt eine Verbindung zum AWS IoT-Dienst für Ihr Konto her.

   1. `Delta`-Ereignisse und `Update` und `Get`-Antworten abonniert.

   1. Sie dazu auffordert, einen gewünschten Wert in das Terminal einzugeben.

   1. Die Ausgabe sieht ähnlich aus wie:

   ```
   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 contains reported value 'off'.
   Enter desired value:
   ```

**Anmerkung**  
Wenn Sie Probleme beim Ausführen der `shadow.py`-Beispiel-App haben, überprüfen Sie [Schritt 3: Probleme mit der `shadow.py`-Beispiel-App beheben](#shadow-sample-app-troubleshoot). Um zusätzliche Informationen zu erhalten, die Ihnen bei der Behebung des Problems helfen könnten, fügen Sie den `--verbosity debug` Parameter zur Befehlszeile hinzu, sodass die Beispiel-App detaillierte Meldungen darüber anzeigt, was sie tut.

**Geben Sie Werte ein und beobachten Sie die Aktualisierungen im Schattendokument**  
Sie können Werte in das Terminal eingeben, um den `desired`-Wert anzugeben, wodurch auch der `reported`-Wert aktualisiert wird. Angenommen, Sie geben die Farbe `yellow` im Terminal ein. Der `reported`-Wert wird ebenfalls auf die Farbe `yellow` aktualisiert. Im Folgenden werden die im Terminal angezeigten Meldungen angezeigt:

```
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'.
```

Wenn Sie diese Aktualisierungsanforderung veröffentlichen, AWS IoT wird ein klassischer Standard-Shadow für die Ding-Ressource erstellt. Sie können die Aktualisierungsanforderung beobachten, die Sie für die `desired` Werte `reported` und in der AWS IoT Konsole veröffentlicht haben, indem Sie sich das Shadow-Dokument für die von Ihnen erstellte Ding-Ressource ansehen (z. B.`My_light_bulb`). Um das Update im Schattendokument zu sehen:

1. Wählen Sie in der AWS IoT Konsole „**Verwalten**“ und anschließend „**Dinge**“ aus.

1. Wählen Sie in der angezeigten Liste das Objekt aus, das Sie erstellt haben, wählen Sie **Schatten** und anschließend **Klassischer Schatten**.

Das Schattendokument sollte wie folgt aussehen und für die `reported`- und `desired`-Werte die Farbe `yellow` anzeigen. Sie sehen diese Werte im Abschnitt **Schattenstatus** des Dokuments.

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

Sie sehen auch einen Abschnitt mit den **Metadaten**, der die Zeitstempelinformationen und die Versionsnummer der Anfrage enthält.

Sie können die Version des Statusdokuments verwenden, um sicherzustellen, dass Sie die neueste Version eines Geräteschattendokuments aktualisieren. Wenn Sie eine weitere Aktualisierungsanfrage senden, wird die Versionsnummer um 1 erhöht. Geben Sie bei einer Aktualisierungsanfrage eine Version an, lehnt der Service die Anfrage mit einem Konflikt-Antwortcode HTTP 409 ab, wenn die aktuelle Version des Statusdokuments nicht der angegebenen Version entspricht. 

```
{
"metadata": {
  "desired": {
    "welcome": {
      "timestamp": 1620156892
    },
    "color": {
      "timestamp": 1620156893
    }
  },
  "reported": {
    "welcome": {
      "timestamp": 1620156892
    },
    "color": {
      "timestamp": 1620156893
    }
  }
},
"version": 10
}
```

Um mehr über das Schattendokument zu erfahren und Änderungen an den Statusinformationen einzusehen, fahren Sie mit dem nächsten Tutorial [Tutorial: Interaktion mit Geräteschatten mithilfe der Beispiel-App und des MQTT-Testclients](interact-lights-device-shadows.md) fort, wie im [Schritt 4: Ergebnisse überprüfen und nächste Schritte](#sample-app-shadow-review) Abschnitt dieses Tutorials beschrieben. Optional können Sie im folgenden Abschnitt auch mehr über den `shadow.py`-Beispielcode und dessen Verwendung des MQTT-Protokolls erfahren.

## Schritt 2: Geräte-SDK-Beispiel-App shadow.py prüfen
<a name="review-shadow-sample-code"></a>

In diesem Abschnitt wird die `shadow.py`-Beispiel-App aus dem **AWS IoT -Geräte-SDK v2 für Python** beschrieben, die in diesem Tutorial verwendet wird. Hier werden wir uns ansehen, wie es AWS IoT Core mithilfe des MQTT- und MQTT-über-WSS-Protokolls eine Verbindung herstellt. Die [AWS Common Runtime (AWS-CRT)](https://github.com/awslabs/aws-crt-python#aws-crt-python) -Bibliothek bietet Unterstützung für Low-Level-Kommunikationsprotokolle und ist im AWS IoT Device SDK v2 für Python enthalten.

Dieses Tutorial verwendet zwar MQTT und MQTT über WSS, AWS IoT unterstützt aber Geräte, die HTTPS-Anfragen veröffentlichen. Ein Beispiel für ein Python-Programm, das eine HTTP-Nachricht von einem Gerät sendet, finden Sie im [HTTPS-Codebeispiel](http.md#codeexample) unter Verwendung der Python `requests`-Bibliothek. 

Informationen darüber, wie Sie eine fundierte Entscheidung darüber treffen können, welches Protokoll Sie für die Kommunikation mit Ihrem Gerät verwenden möchten, finden Sie unter [Wählen Sie ein Anwendungsprotokoll für Ihre Gerätekommunikation](protocols.md#protocol-selection).

**MQTT**  
Das `shadow.py` Beispiel ruft `mtls_from_path` (hier gezeigt) in [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py), um AWS IoT Core mithilfe des MQTT-Protokolls eine Verbindung herzustellen. `mtls_from_path`verwendet X.509-Zertifikate und TLS v1.2 zur Authentifizierung des Geräts. Die AWS-CRT-Bibliothek verarbeitet die untergeordneten Details dieser Verbindung.

```
mqtt_connection = mqtt_connection_builder.mtls_from_path(
  endpoint=args.endpoint,
  cert_filepath=args.cert,
  pri_key_filepath=args.key,
  ca_filepath=args.ca_file,
  client_bootstrap=client_bootstrap,
  on_connection_interrupted=on_connection_interrupted,
  on_connection_resumed=on_connection_resumed,
  client_id=args.client_id,
  clean_session=False,
  keep_alive_secs=6
)
```
+ `endpoint`ist Ihr AWS IoT Endpunkt, den Sie über die Befehlszeile eingegeben haben, und `client_id` ist die ID, die dieses Gerät in der eindeutig identifiziert. AWS-Region
+ `cert_filepath`, `pri_key_filepath` und `ca_filepath` sind die Pfade zu den Zertifikats- und privaten Schlüsseldateien des Geräts sowie zur Root-CA-Datei. 
+ `client_bootstrap` ist das allgemeine Runtime-Objekt, das Socket-Kommunikationsaktivitäten verarbeitet und vor dem Aufruf von `mqtt_connection_builder.mtls_from_path` instanziiert wird.
+ `on_connection_interrupted` und `on_connection_resumed` sind Callback-Funktionen, die aufgerufen werden, wenn die Verbindung des Geräts unterbrochen und wieder aufgenommen wird.
+ `clean_session` gibt an, ob eine neue, persistente Sitzung gestartet werden soll oder ob, falls eine vorhanden ist, die Verbindung zu einer bestehenden wiederhergestellt werden soll. `keep_alive_secs` ist der Keep-Alive-Wert in Sekunden, der in der `CONNECT`-Anfrage gesendet werden soll. In diesem Intervall wird automatisch ein Ping gesendet. Der Server geht davon aus, dass die Verbindung unterbrochen ist, wenn er nach dem 1,5-fachen dieses Werts keinen Ping erhält.

Das `shadow.py` Beispiel ruft auch `websockets_with_default_aws_signing` in [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py) auf, um mithilfe des MQTT-Protokolls über WSS eine Verbindung zu AWS IoT Core herzustellen. MQTT über WSS verwendet ebenfalls dieselben Parameter wie MQTT und verwendet diese zusätzlichen Parameter:
+ `region`ist die AWS Signaturregion, die von der Signature V4-Authentifizierung verwendet `credentials_provider` wird, und sind die AWS Anmeldeinformationen, die für die Authentifizierung bereitgestellt werden. Die Region wird von der Befehlszeile aus übergeben, und das `credentials_provider`-Objekt wird unmittelbar vor dem Aufruf von `mqtt_connection_builder.websockets_with_default_aws_signing` instanziiert.
+ `websocket_proxy_options` sind die HTTP-Proxyoptionen, wenn ein Proxyhost verwendet wird. In der `shadow.py` Beispiel-App wird dieser Wert unmittelbar vor dem Aufruf von `mqtt_connection_builder.websockets_with_default_aws_signing` instanziiert.

**Abonnieren von Shadow-Themen und -Ereignissen**  
Das `shadow.py`-Beispiel versucht, eine Verbindung herzustellen, und wartet, bis die Verbindung vollständig hergestellt ist. Wenn es nicht verbunden ist, werden Befehle in die Warteschlange gestellt. Sobald die Verbindung hergestellt ist, abonniert das Beispiel Delta-Ereignisse und Aktualisierungs- und Abrufnachrichten und veröffentlicht Nachrichten mit einer QoS-Stufe (Quality of Service) von 1 (`mqtt.QoS.AT_LEAST_ONCE`). 

Wenn ein Gerät eine Nachricht mit QoS Level 1 abonniert, speichert der Message Broker die Nachrichten, die das Gerät abonniert hat, bis sie an das Gerät gesendet werden können. Der Message Broker sendet die Nachrichten erneut, bis er eine `PUBACK`-Antwort vom Gerät erhält. 

Weitere Informationen zum MQTT-Protokoll finden Sie unter [Ansehen des MQTT-Protokolls](sdk-tutorials.md#sdk-tutorials-mqtt-review) und [MQTT](mqtt.md).

Weitere Informationen zur Verwendung von MQTT, MQTT über WSS, persistente Sitzungen und QoS-Stufen, die in diesem Tutorial verwendet werden, finden Sie unter [Ansehen der Beispiel-App „pubsub.py“ des Device SDK](sdk-tutorials.md#sdk-tutorials-explore-sample).

## Schritt 3: Probleme mit der `shadow.py`-Beispiel-App beheben
<a name="shadow-sample-app-troubleshoot"></a>

Wenn Sie die `shadow.py`-Beispiel-App ausführen, sollten im Terminal einige Meldungen und eine Aufforderung zur Eingabe eines `desired`-Werts angezeigt werden. Wenn das Programm einen Fehler ausgibt, können Sie zum Debuggen des Fehlers zunächst überprüfen, ob Sie den richtigen Befehl für Ihr System ausgeführt haben.

In einigen Fällen weist die Fehlermeldung möglicherweise auf Verbindungsprobleme hin und sieht ähnlich aus wie: `Host name was invalid for dns resolution` oder `Connection was closed unexpectedly`. In solchen Fällen können Sie Folgendes überprüfen:
+ 

**Die Endpunktadresse im Befehl**  
Das `endpoint`-Argument in dem Befehl, den Sie zum Ausführen der Beispiel-App eingegeben haben (z. B. `a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com`). Diesen Wert können Sie auch in der **AWS IoT Konsole** prüfen.

  Um zu überprüfen, ob Sie den richtigen Wert verwendet haben:

  1. Wählen Sie in der **AWS IoT -Konsole** **Verwalten** und danach **Objekte**.

  1. Wählen Sie das Objekt aus, das Sie für Ihre Beispiel-App erstellt haben (z. B. **My\$1Light\$1Bulb**), und wählen Sie dann **Interagieren**.

  Ihr Endpunkt wird im Abschnitt **HTTPS** auf der Seite mit den Objekt-Details angezeigt. Sie sollten auch eine Meldung sehen, die besagt: `This thing already appears to be connected.`
+ 

**Aktivierung des Zertifikats überprüfen**  
Zertifikate authentifizieren Ihr Gerät mit AWS IoT Core.

  Um zu überprüfen, ob Ihr Zertifikat aktiv ist:

  1. Wählen Sie in der **AWS IoT -Konsole** **Verwalten** und danach **Objekte**.

  1. Wählen Sie das Objekt aus, das Sie für Ihre Beispiel-App erstellt haben (z. B. **My\$1Light\$1Bulb**), und wählen Sie dann **Sicherheit**.

  1. Wählen Sie das Zertifikat aus und wählen Sie dann auf der Detailseite des Zertifikats die Option „Zertifikat auswählen“ und dann auf der Detailseite des Zertifikats die Option **Aktionen** aus.

  Wenn in der Dropdownliste **Aktivieren** nicht verfügbar ist und Sie nur **Deaktivieren** auswählen können, ist Ihr Zertifikat aktiv. Wenn nicht, wählen Sie **Aktivieren** und führen Sie das Beispielprogramm erneut aus.

  Wenn das Programm immer noch nicht ausgeführt wird, überprüfen Sie die Namen der Zertifikatsdateien im `certs`-Ordner.
+ 

**Überprüfen der mit der Objekt-Ressource verknüpften Richtlinie**  
Zertifikate authentifizieren zwar Ihr Gerät, aber AWS IoT Richtlinien gestatten es dem Gerät, bestimmte AWS IoT Vorgänge auszuführen, wie z. B. das Abonnieren oder Veröffentlichen von MQTT-Themen, die für MQTT reserviert sind.

  Um zu überprüfen, ob die richtige Richtlinie angehängt ist:

  1. Suchen Sie das Zertifikat wie zuvor beschrieben und wählen Sie dann **Richtlinien** aus.

  1. Wählen Sie die angezeigte Richtlinie aus und überprüfen Sie, ob sie die Aktionen `connect`, `subscribe`, `receive` und `publish` beschreibt, die dem Gerät die Erlaubnis geben, die reservierten MQTT-Themen zu veröffentlichen und zu abonnieren.

     Eine Beispielrichtlinie finden Sie unter [Schritt 1: Erstellen Sie eine AWS IoT Richtlinie für den Device Shadow](shadow-provision-cloud.md#create-policy-shadow).

  Wenn Ihnen Fehlermeldungen angezeigt werden, die auf Probleme beim Herstellen einer Verbindung hinweisen AWS IoT, kann dies an den Berechtigungen liegen, die Sie für die Richtlinie verwenden. In diesem Fall empfehlen wir, mit einer Richtlinie zu beginnen, die vollen Zugriff auf AWS IoT Ressourcen gewährt, und dann das Beispielprogramm erneut auszuführen. Sie können entweder die aktuelle Richtlinie bearbeiten oder die aktuelle Richtlinie auswählen, **Trennen** auswählen und dann eine weitere Richtlinie erstellen, die vollen Zugriff gewährt, und diese an Ihre Objekt-Ressource anhängen. Sie können die Richtlinie später nur auf die Aktionen und Richtlinien beschränken, die Sie zur Ausführung des Programms benötigen.  
****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:*"
            ],
            "Resource": "*"
        }
    ]
  }
  ```
+ 

**Überprüfen der Installation Ihres Geräte-SDKs**  
Wenn das Programm immer noch nicht ausgeführt wird, können Sie das Geräte-SDK erneut installieren, um sicherzustellen, dass Ihre SDK-Installation vollständig und korrekt ist.

## Schritt 4: Ergebnisse überprüfen und nächste Schritte
<a name="sample-app-shadow-review"></a>

**In diesem Kurs haben Sie gelernt, wie Sie:**
+ Installieren Sie die erforderliche Software, Tools und das AWS IoT Geräte-SDK für Python.
+ Die Beispiel-App `shadow.py` das MQTT-Protokoll zum Abrufen und Aktualisieren des aktuellen Status des Schattens verwendet.
+ Führen Sie die Beispiel-App für Device Shadows aus und beobachten Sie die Aktualisierung des Shadow-Dokuments in der AWS IoT Konsole. Sie haben darüber hinaus gelernt, Probleme und Fehler bei der Ausführung des Programms zu beheben.

**Nächste Schritte**  
Sie können jetzt die `shadow.py`-Beispielanwendung ausführen und Geräteschatten verwenden, um den Status zu kontrollieren. Sie können die Aktualisierungen des Schattendokuments in der AWS IoT -Konsole verfolgen und Delta-Ereignisse beobachten, auf die die Beispiel-App reagiert. Mit dem MQTT-Testclient können Sie die reservierten Schattenthemen abonnieren und die Nachrichten beobachten, die die Themen bei der Ausführung des Beispielprogramms erhalten. Weitere Informationen darüber, wie Sie dieses Tutorial ausführen, finden Sie unter [Tutorial: Interaktion mit Geräteschatten mithilfe der Beispiel-App und des MQTT-Testclients](interact-lights-device-shadows.md).

# Tutorial: Interaktion mit Geräteschatten mithilfe der Beispiel-App und des MQTT-Testclients
<a name="interact-lights-device-shadows"></a>

Um mit der `shadow.py`-Beispiel-App zu interagieren, geben Sie im Terminal einen Wert für den `desired`-Wert ein. Sie können beispielsweise Farben angeben, die den Ampeln ähneln und AWS IoT auf die Anfrage reagieren und die gemeldeten Werte aktualisieren.

**In diesem Kurs lernen 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 Schattendokument, um Delta-Ereignisse und die Reaktion der `shadow.py`-Beispiel-App auf diese Ereignisse zu beobachten.
+ Verwenden Sie den MQTT-Testclient, um Schattenthemen zu abonnieren und Updates zu beobachten, wenn Sie das Beispielprogramm ausführen.

**Für dieses Tutorial benötigen Sie Folgendes:**  
Richten Sie Ihr Raspberry Pi-Gerät ein AWS-Konto, konfigurieren Sie es und erstellen Sie eine AWS IoT Sache und Richtlinie. Sie müssen auch die erforderliche Software, das Geräte-SDK und die Zertifikatsdateien installiert haben und das Beispielprogramm im Terminal ausführen. Weitere Informationen finden Sie in den vorherigen Tutorials [Tutorial: Ihren Raspberry Pi für die Ausführung der Schattenanwendung vorbereiten](create-resources-shadow.md) und [Schritt 1: shadow.py-Beispiel-App ausführen](lightbulb-shadow-application.md#run-sample-application-shadows). Sie müssen diese Tutorials abschließen, wenn das noch nicht geschehen ist.

**Topics**
+ [Schritt 1: Die gewünschten und gemeldeten Werte mithilfe der `shadow.py`-Beispiel-App aktualisieren](#update-desired-shadow-sample)
+ [Schritt 2: Nachrichten aus der `shadow.py`-Beispiel-App im MQTT-Testclient anzeigen](#shadow-sample-view-msg)
+ [Schritt 3: Fehlerbehebung bei Interaktionen mit Geräteschatten](#shadow-observe-messages-troubleshoot)
+ [Schritt 4: Überprüfen der Ergebnisse und nächste Schritte](#sample-shadow-review)

Für dieses Tutorial brauchen Sie ungefähr 45 Minuten.

## Schritt 1: Die gewünschten und gemeldeten Werte mithilfe der `shadow.py`-Beispiel-App aktualisieren
<a name="update-desired-shadow-sample"></a>

Im vorherigen Tutorial haben Sie gelernt[Schritt 1: shadow.py-Beispiel-App ausführen](lightbulb-shadow-application.md#run-sample-application-shadows), wie Sie eine Nachricht beobachten können, die im Shadow-Dokument in der AWS IoT Konsole veröffentlicht wurde, wenn Sie einen gewünschten Wert eingeben, wie im Abschnitt beschrieben[Tutorial: Installation des Geräte-SDK und Ausführen der Beispielanwendung für Geräteschatten](lightbulb-shadow-application.md).

Im vorherigen Beispiel haben wir die gewünschte Farbe auf `yellow` eingestellt. Nachdem Sie jeden Wert eingegeben haben, fordert Sie das Terminal auf, einen anderen `desired`-Wert einzugeben. Wenn Sie erneut denselben Wert eingeben (`yellow`), erkennt die App dies und fordert Sie auf, einen neuen `desired`-Wert einzugeben.

```
Enter desired value:
yellow
Local value is already 'yellow'.
Enter desired value:
```

Nehmen wir nun an, dass Sie die Farbe eingeben`green`. AWS IoT antwortet auf die Anfrage und aktualisiert den `reported` Wert auf`green`. Auf diese Weise erfolgt die Aktualisierung, wenn sich der `desired`-Status vom `reported`-Status unterscheidet, was zu einem Delta führt.

**So simuliert die `shadow.py`-Beispiel-App Geräteschatten-Interaktionen:**

1. Geben Sie einen `desired`-Wert (sagen wir `yellow`) in das Terminal ein, um den gewünschten Status zu veröffentlichen.

1. Da sich der `desired`-Status vom `reported`-Status unterscheidet (sagen wir die Farbe `green`), tritt ein Delta auf, und die App, die das Delta abonniert hat, empfängt diese Nachricht. 

1. Die App reagiert auf die Nachricht und aktualisiert ihren Status auf den `desired`-Wert `yellow`.

1. Die App veröffentlicht dann eine Aktualisierungsnachricht mit dem neuen gemeldeten Wert des Gerätestatus, `yellow`.

Im Folgenden werden die im Terminal angezeigten Meldungen angezeigt, aus denen hervorgeht, 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 der AWS IoT Konsole spiegelt das Shadow-Dokument den aktualisierten Wert von sowohl `green` für die `reported` `desired` Felder als auch wider, und die Versionsnummer wird um 1 erhöht. Wenn die vorherige Versionsnummer beispielsweise als 10 angezeigt wurde, wird die aktuelle Versionsnummer als 11 angezeigt.

**Anmerkung**  
Durch das Löschen eines Schattens wird seine Versionsnummer nicht sofort auf null zurückgesetzt. Sie werden feststellen, dass die Schattenversion um 1 erhöht wird, wenn Sie eine Aktualisierungsanforderung veröffentlichen oder einen anderen Schatten mit demselben Namen erstellen.

**Das Schattendokument berbeiten, um Delta-Ereignisse zu beobachten**  
Die `shadow.py`-Beispiel-App hat auch `delta`-Ereignisse abonniert und reagiert, wenn sich der `desired`-Wert ändert. Sie können den `desired`-Wert beispielsweise in die Farbe `red` ändern. Bearbeiten Sie dazu in der AWS IoT Konsole das Shadow-Dokument, indem Sie auf **Bearbeiten** klicken und dann den `desired` Wert `red` in der JSON-Datei auf festlegen, während Sie den `reported` Wert auf `green` beibehalten. Bevor Sie die Änderungen speichern, lassen Sie das Terminal auf dem Raspberry Pi geöffnet, da im Terminal Meldungen angezeigt werden, wenn die Änderung erfolgt.

```
{
"desired": {
  "welcome": "aws-iot",
  "color": "red"
},
"reported": {
  "welcome": "aws-iot",
  "color": "green"
}
}
```

Nachdem Sie den neuen Wert gespeichert haben, reagiert die `shadow.py`-Beispiel-App auf diese Änderung und zeigt im Terminal Meldungen an, die auf das Delta hinweisen. Sie sollten dann die folgenden Meldungen unter der Aufforderung zur Eingabe des `desired`-Werts sehen.

```
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: Nachrichten aus der `shadow.py`-Beispiel-App im MQTT-Testclient anzeigen
<a name="shadow-sample-view-msg"></a>

Sie können den **MQTT-Testclient** in der **AWS IoT Konsole** verwenden, um MQTT-Nachrichten zu überwachen, die zu Ihrem AWS-Kontoübermittelt werden. Wenn Sie reservierte MQTT-Themen abonnieren, die vom Geräteschattendienst verwendet werden, können Sie die Nachrichten beobachten, die von den Themen beim Ausführen der Beispiel-App empfangen wurden.

Wenn Sie den MQTT-Testclient noch nicht verwendet haben, können Sie sich [MQTT-Nachrichten mit dem AWS IoT MQTT-Client anzeigen](view-mqtt-messages.md) ansehen. Auf diese Weise lernen Sie, wie Sie den **MQTT-Testclient** in der **AWS IoT Konsole** verwenden, um MQTT-Nachrichten anzuzeigen, während sie durch den Message Broker laufen.

1. 

**Öffnen des MQTT-Testclients**

   Öffnen Sie den [MQTT-Testclient in der AWS IoT -Konsole](https://console.aws.amazon.com//iot/home#/test) in einem neuen Fenster, damit Sie die von den MQTT-Themen empfangenen Nachrichten beobachten können, ohne die Konfiguration Ihres MQTT-Testclients zu verlieren. Der MQTT-Testclient speichert keine Abonnements oder Nachrichtenprotokolle, wenn Sie ihn verlassen, um zu einer anderen Seite in der Konsole zu wechseln. In diesem Abschnitt des Tutorials können Sie das Shadow-Dokument Ihres Dings und AWS IoT den MQTT-Testclient in separaten Fenstern öffnen, um die Interaktion mit Device Shadows einfacher beobachten zu können.

1. 

**Abonnieren der reservierten MQTT-Schatten-Themen**

   Sie können den MQTT-Testclient verwenden, um die Namen der reservierten MQTT-Themen von Geräteschatten einzugeben und sie zu abonnieren, um Updates zu erhalten, wenn Sie die `shadow.py`-Beispiel-App ausführen. So abonnieren Sie MQTT-Themen:

   1. Wählen Sie im **MQTT-Testclient** in der **AWS IoT Konsole** die Option **Thema abonnieren** aus.

   1.  Geben Sie im Abschnitt **Themenfilter Folgendes** ein: **\$1aws/things/ *thingname* /shadow/update/** \$1. Hier ist `thingname` der Name der Objekt-Ressource, die Sie zuvor erstellt haben (z. B. `My_light_bulb`).

   1. Behalten Sie die Standardwerte für die zusätzlichen Konfigurationseinstellungen bei und wählen Sie dann **Abonnieren**.

   Durch die Verwendung des Platzhalters **\$1** im Themenabonnement können Sie mehrere MQTT-Themen gleichzeitig abonnieren und alle Nachrichten, die zwischen dem Gerät und seinem Schatten ausgetauscht werden, in einem einzigen Fenster beobachten. Weitere Informationen über Platzhalterzeichen und ihre Verwendung finden Sie unter [MQTT-Themen](topics.md).

1. 

**Ausführen des `shadow.py`-Beispielprogramms und Beobachten der Meldungen**

   Wenn Sie in Ihrem Befehlszeilenfenster des Raspberry Pi das Programm getrennt haben, führen Sie die Beispiel-App erneut aus und sehen Sie sich die Meldungen im **MQTT-Testclient** in der **AWS IoT Konsole** an.

   1. Geben Sie den folgenden Befehl ein, um das Beispielprogramm neu zu starten. Ersetzen Sie *your-iot-thing-name* und durch die Namen des Objekts, das Sie zuvor erstellt haben (z. B.), und durch den AWS IoT Endpunkt, `My_light_bulb` der *your-iot-endpoint* mit dem Gerät interagieren soll. 

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples/service-clients
      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_name your-iot-thing-name
      ```

      Die `shadow.py`-Beispiel-App wird dann ausgeführt und ruft den aktuellen Schattenstatus ab. Wenn Sie den Schatten oder den aktuellen Status gelöscht haben, setzt das Programm den aktuellen Wert auf `off` und fordert Sie dann auf, einen `desired`-Wert einzugeben.

      ```
      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 jedoch ausgeführt wurde und Sie es neu gestartet haben, wird der letzte Farbwert im Terminal gemeldet. **Im MQTT-Testclient werden Sie ein Update zu den Themen **\$1aws/things/ /shadow/get und *thingname* \$1aws/things/**/sehen. *thingname* shadow/get/accepted**

      Nehmen wir an, die zuletzt gemeldete Farbe war `green`. Im **Folgenden *thingname* wird shadow/get/accepted** der Inhalt der JSON-Datei \$1aws/things//gezeigt.

      ```
      {
      "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
      }
      ```

   1. Geben Sie einen `desired`-Wert in das Terminal ein, z. B. `yellow`. Die `shadow.py`-Beispiel-App reagiert und zeigt im Terminal die folgenden Meldungen an, die die Änderung des `reported`-Werts auf `yellow` zeigen.

      ```
      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'.
      ```

      Im **MQTT-Testclient** in der **AWS IoT Konsole** sehen Sie unter **Abonnements**, dass die folgenden Themen eine Nachricht erhalten haben:
      + **\$1aws/things/ *thingname* /shadow/update: zeigt, dass sich beide Werte in der Farbe** ändern. `desired` `updated` `yellow`
      + **\$1aws/things/*thingname*/shadow/update/accepted**: zeigt die aktuellen Werte der Zustände und deren Metadaten und Versionsinformationen an. `desired` `reported`
      + **\$1aws/things/*thingname*/shadow/update/documents**: zeigt die vorherigen und aktuellen Werte der Zustände und deren Metadaten und Versionsinformationen an. `desired` `reported`

      Da das Dokument **\$1aws/things/*thingname*/shadow/update/documents**auch Informationen enthält, die in den anderen beiden Themen enthalten sind, können wir es überprüfen, um die Statusinformationen einzusehen. Der vorherige Status zeigt den auf `green` festgelegten Wert, seine Metadaten und Versionsinformationen sowie den aktuellen Status `yellow`, auf den der gemeldete Wert aktualisiert wurde.

      ```
      {
      "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
      }
      ```

   1. Wenn Sie nun einen anderen `desired`-Wert eingeben, sehen Sie weitere Änderungen an den `reported`-Werten und Nachrichtenaktualisierungen, die in diesen Themen eingegangen sind. Die Versionsnummer wird ebenfalls um 1 erhöht. Wenn Sie beispielsweise den Wert `green` eingeben, meldet der vorherige Status den Wert `yellow` und der aktuelle Status meldet den Wert `green`.

1. 

**Bearbeiten des Schattendokuments, um Delta-Ereignisse zu beobachten**

   Um Änderungen am Delta-Thema zu beobachten, bearbeiten Sie das Schattendokument in der AWS IoT -Konsole. Sie können den `desired`-Wert beispielsweise in die Farbe `red` ändern. Wählen Sie dazu in der AWS IoT Konsole **Bearbeiten** und setzen Sie dann den `desired` Wert im JSON-Format auf Rot, während Sie den Wert auf beibehalten. `reported` `green` Lassen Sie das Terminal geöffnet, bevor Sie die Änderung speichern, da die Deltameldung im Terminal angezeigt wird.

   ```
   {
   "desired": {
     "welcome": "aws-iot",
     "color": "red"
   },
   "reported": {
     "welcome": "aws-iot",
     "color": "green"
   }
   }
   ```

   Die `shadow.py`-Beispiel-App reagiert auf diese Änderung und zeigt im Terminal Meldungen an, die auf das Delta hinweisen. Im MQTT-Testclient haben die `update`-Themen eine Nachricht erhalten, die Änderungen an den `desired`- und `reported`-Werten anzeigt.

   Sie sehen auch, dass das Thema **\$1aws/things//*thingname***eine Nachricht erhalten hat. shadow/update/delta Um die Nachricht zu sehen, wählen Sie dieses Thema aus, das unter **Abonnements** aufgeführt ist.

   ```
   {
   "version": 13,
   "timestamp": 1617318480,
   "state": {
     "color": "red"
   },
   "metadata": {
     "color": {
       "timestamp": 1617318480
     }
   }
   }
   ```

## Schritt 3: Fehlerbehebung bei Interaktionen mit Geräteschatten
<a name="shadow-observe-messages-troubleshoot"></a>

Wenn Sie die Schatten-Beispiel-App ausführen, können Probleme bei der Beobachtung von Interaktionen mit dem Geräteschattendienst auftreten. 

Wenn das Programm erfolgreich ausgeführt wird und Sie zur Eingabe eines `desired`-Werts auffordert werden, sollten Sie in der Lage sein, die Geräteschatten-Interaktionen mithilfe des Schattendokuments und des MQTT-Testclients wie zuvor beschrieben zu beobachten. Wenn Sie die Interaktionen jedoch nicht sehen können, können Sie Folgendes überprüfen:
+ 

**Überprüfe den Namen des Dings und seinen Schatten in der Konsole AWS IoT**  
Wenn Sie die Meldungen im Schattendokument nicht sehen, überprüfen Sie den Befehl und stellen Sie sicher, dass er mit dem Namen des Objekts in der **AWS IoT Konsole** übereinstimmt. Sie können auch überprüfen, ob Sie einen klassischen Schatten haben, indem Sie Ihre Objekt-Ressource und dann **Schatten** auswählen. Dieses Tutorial konzentriert sich hauptsächlich auf Interaktionen mit dem klassischen Schatten.

   Sie können auch überprüfen, ob das von Ihnen verwendete Gerät mit dem Internet verbunden ist. Wählen Sie in der **AWS IoT Konsole** das Objekt aus, das Sie zuvor erstellt haben, und wählen Sie dann **Interagieren** aus. Auf der Seite mit den Objekt-Details solltest Sie hier eine Meldung sehen, die besagt: `This thing already appears to be connected.` 
+ 

**Überprüfen der reservierten abonnierten MQTT-Themen**  
Wenn Sie die Nachrichten nicht im MQTT-Testclient sehen, überprüfen Sie, ob die Themen, die Sie abonniert haben, richtig formatiert sind. MQTT Device Shadow-Themen haben das Format **\$1aws/things/ *thingname* /shadow/** und können diesem Format folgen, oder `delete` folgen, je nachdem `update``get`, welche Aktionen Sie mit dem Shadow ausführen möchten. **Dieses Tutorial verwendet das Thema **\$1aws/things/ *thingname* /shadow/ \$1**. Stellen Sie also sicher, dass Sie es richtig eingegeben haben, wenn Sie das Thema im Themenfilterbereich des Testclients abonniert haben.**

  Achten Sie bei der Eingabe des Themennamens darauf, dass der mit dem Namen der Sache *thingname* übereinstimmt, die Sie zuvor erstellt haben. AWS IoT Sie können auch zusätzliche MQTT-Themen abonnieren, um zu sehen, ob ein Update erfolgreich durchgeführt wurde. Sie können beispielsweise das Thema **\$1aws/things/*thingname*/**abonnieren, um eine Nachricht shadow/update/rejected zu erhalten, wenn eine Aktualisierungsanforderung fehlschlägt, sodass Sie Verbindungsprobleme debuggen können. Weitere Informationen zu den reservierten Themen finden Sie unter [Schatten-Themen](reserved-topics.md#reserved-topics-shadow) und [MQTT-Themen für Geräteschatten](device-shadow-mqtt.md).

## Schritt 4: Überprüfen der Ergebnisse und nächste Schritte
<a name="sample-shadow-review"></a>

**In diesem Kurs haben Sie gelernt, wie Sie:**
+ Die `shadow.py`-Beispiel-App verwenden, um die gewünschten Status anzugeben und den aktuellen Status des Schattens zu aktualisieren.
+ Bearbeiten Sie das Schattendokument, um Delta-Ereignisse und die Reaktion der `shadow.py`-Beispiel-App auf diese Ereignisse zu beobachten.
+ Verwenden Sie den MQTT-Testclient, um Schattenthemen zu abonnieren und Updates zu beobachten, wenn Sie das Beispielprogramm ausführen.

**Nächste Schritte**  
Sie können zusätzliche reservierte MQTT-Themen abonnieren, um Aktualisierungen der Schattenanwendung zu beobachten. Wenn Sie beispielsweise nur das Thema **\$1aws/things/*thingname*/**abonnieren, werden Ihnen nur die aktuellen Statusinformationen angezeigtshadow/update/accepted, wenn ein Update erfolgreich durchgeführt wurde.

Sie können auch zusätzliche Schattenthemen abonnieren, um Probleme zu beheben oder mehr über die Geräteschatten-Interaktionen zu erfahren sowie mögliche Probleme mit den Geräteschatten-Interaktionen zu debuggen. Weitere Informationen erhalten Sie unter [Schatten-Themen](reserved-topics.md#reserved-topics-shadow) und [MQTT-Themen für Geräteschatten](device-shadow-mqtt.md).

Sie können Ihre Anwendung auch erweitern, indem Sie Named Shadows verwenden oder zusätzliche Hardware verwenden, die mit dem Raspberry Pi verbunden ist, LEDs und Zustandsänderungen anhand von Nachrichten beobachten, die vom Terminal gesendet werden.

Weitere Informationen zum Geräteschattendienst und zur Verwendung des Dienstes in Geräten, Apps und Diensten finden Sie unter [AWS IoT Device Shadow-Dienst](iot-device-shadows.md), [Verwenden von Schatten in Geräten](device-shadow-comms-device.md) und [Verwenden von Schatten in Apps und Services](device-shadow-comms-app.md).