

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.

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