

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.

# Simulieren der Device Shadow-Servicekommunikation
<a name="using-device-shadows"></a>

In diesem Thema wird veranschaulicht, wie der Device Shadow-Service als Vermittler fungiert und es Geräten und Apps ermöglicht, einen Schatten zum Aktualisieren, Speichern und Abrufen des Status eines Geräts zu verwenden.

Um die in diesem Thema beschriebene Interaktion zu demonstrieren und sie weiter zu untersuchen, benötigen Sie ein AWS-Konto und ein System, auf dem Sie das ausführen können AWS CLI. Wenn Sie diese nicht haben, können Sie die Interaktion immer anhand der Codebeispiele untersuchen.

In diesem Beispiel steht die AWS IoT Konsole für das Gerät. Das AWS CLI steht für die App oder den Dienst, der über den Shadow auf das Gerät zugreift. Die AWS CLI Schnittstelle ist der API sehr ähnlich, mit AWS IoT der eine App möglicherweise kommuniziert. Das Gerät in diesem Beispiel ist eine intelligente Glühlampe, und die App zeigt den Status der Glühlampe an und kann ihren Status ändern.

## Einrichten der Simulation
<a name="using-device-shadows-setup"></a>

Diese Verfahren initialisieren die Simulation, indem Sie die [AWS IoT -Konsole](https://console.aws.amazon.com/iot/home) öffnen, die Ihr Gerät simuliert, und das Befehlszeilenfenster, das Ihre App simuliert.

**So richten Sie Ihre Simulationsumgebung ein:**

1. Sie benötigen eine AWS-Konto , um die Beispiele aus diesem Thema selbst ausführen zu können. Wenn Sie noch keine haben AWS-Konto, erstellen Sie eine, wie unter beschrieben[Einrichten AWS-Konto](setting-up.md).

1. Öffnen Sie die [AWS IoT -Konsole](https://console.aws.amazon.com/iot/home) und wählen Sie im linken Menü **Test**, um den **MQTT-Client** zu öffnen.

1. Öffnen Sie in einem anderen Fenster ein Terminalfenster auf einem System, auf dem das AWS CLI installiert ist.

Sie sollten zwei Fenster geöffnet haben: eines mit der AWS IoT Konsole auf der **Testseite** und eines mit einer Befehlszeilenaufforderung.

## Initialisieren des Geräts
<a name="using-device-shadows-init-device"></a>

In dieser Simulation arbeiten wir mit einem Dingobjekt mit dem Namen SimShadow1 und seinem Schatten mit dem Namen *SimShadow1*. *mySimulatedThing* 

**Erstellen des Objekts und seiner IoT-Richtlinie**  
Um ein Objekt zu erstellen, gehen Sie in der **AWS IoT Konsole** wie folgt vor:

1. Wählen Sie **Verwalten** und dann **Things**. 

1. Klicken Sie auf die Schaltfläche **Erstellen**, wenn Dinge aufgelistet sind, andernfalls klicken Sie auf Einzelne Sache **registrieren, um eine einzelne Sache** zu erstellen. AWS IoT 

1. Geben Sie den Namen `mySimulatedThing` ein, behalten Sie die Standardeinstellungen für andere Einstellungen bei und klicken Sie dann auf **Weiter**.

1. Generieren Sie mithilfe der Zertifikatserstellung mit nur einem Klick die Zertifikate, mit denen die Verbindung des Geräts mit AWS IoT authentifiziert wird. Klicken Sie auf **Aktivieren**, um das Zertifikat zu aktivieren.

1. Sie können die Richtlinie `My_IoT_Policy` anhängen, die dem Gerät die Erlaubnis erteilt, die reservierten MQTT-Themen zu veröffentlichen und zu abonnieren. Genauere Anweisungen zum Erstellen AWS IoT eines Dings und zum Erstellen dieser Richtlinie finden Sie unter[Dies erstellt ein Objekt](create-iot-resources.md#create-aws-thing).

**Erstellen Sie einen benannten Schatten für das Objekt.**  
Sie können einen benannten Schatten für ein Objekt erstellen, indem Sie eine Aktualisierungsanfrage für das Thema `$aws/things/mySimulatedThing/shadow/name/simShadow1/update`, wie unten beschrieben, veröffentlichen.

Oder, um einen benannten Schatten zu erstellen:

1. Wählen Sie in der **AWS IoT -Konsole** Ihr Objekt in der Liste der angezeigten Objekte aus und wählen Sie dann **Schatten**.

1. Wählen Sie **Schatten hinzufügen**, geben Sie den Namen `simShadow1` ein und wählen Sie dann **Erstellen**, um den benannten Schatten hinzuzufügen.

**Abonnieren und veröffentlichen Sie reservierte MQTT-Themen**  
Abonnieren Sie in der Konsole die reservierten MQTT-Schatten-Themen. Diese Themen sind die Antworten auf die Aktionen `get`, `update` und `delete`, damit Ihr Gerät bereit ist, die Antworten zu empfangen, nachdem es eine Aktion veröffentlicht hat. 

**So abonnieren Sie ein MQTT-Thema im **MQTT-Client**:**

1. Wählen Sie im **MQTT-Client** die Option **In einem Thema veröffentlichen** aus.

1. Geben Sie `get`, `update`, und `delete` Themen ein, die Sie abonnieren möchten. Kopieren Sie jeweils ein Thema aus der folgenden Liste, fügen Sie es in das Feld **Themenfilter** ein und klicken Sie dann auf **Abonnieren**. Die Themen müssten dann unter **Abonnements** aufgeführt werden. 
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta`
   + `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents`

   An diesem Punkt ist Ihr simuliertes Gerät bereit, die Themen zu erhalten, wie sie von AWS IoT veröffentlicht werden.

**So abonnieren Sie ein MQTT-Thema im **MQTT-Client**:**  
Nachdem ein Gerät sich selbst initialisiert und die Antwortthemen abonniert hat, sollte Abfragen nach den unterstützten Schatten durchführen. Diese Simulation unterstützt nur einen Schatten, nämlich den Schatten, der ein Dingobjekt namens *SimShadow1* unterstützt. *mySimulatedThing*

**So rufen Sie den aktuellen Schattenstatus vom **MQTT-Client** ab:**

1. Wählen Sie im **MQTT-Client** die Option **Publish to a topic (In einem Thema veröffentlichen)** aus.

1. Geben Sie unter **Veröffentlichen** folgendes Thema ein und löschen Sie alle Inhalte aus dem Nachrichtentextfenster, in dem Sie das Thema für GET eingegeben haben. Sie können dann **In Thema veröffentlichen** auswählen, um die Anfrage zu veröffentlichen. `$aws/things/mySimulatedThing/shadow/name/simShadow1/get`.

   Wenn Sie den benannten Schatten nicht erstellt haben, `simShadow1`, erhalten Sie eine Nachricht im `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected` Thema, und der `code` ist `404`, wie in diesem Beispiel, und da der Schatten nicht erstellt wurde, erstellen wir ihn als Nächstes.

   ```
   {
     "code": 404,
     "message": "No shadow exists with name: 'simShadow1'"
   }
   ```

**So erstellen Sie einen Schatten mit dem aktuellen Status des Geräts:**

1. Wählen Sie im **MQTT-Client** die Option **In einem Thema veröffentlichen** aus.

   ```
   $aws/things/mySimulatedThing/shadow/name/simShadow1/update
   ```

1. Geben Sie im Nachrichtentextfenster, in dem Sie das Thema eingegeben haben, dieses Schattendokument ein, um anzuzeigen, dass das Gerät seine ID und seine aktuelle Farbe in RGB-Werten meldet. Wählen Sie **Veröffentlichen**, um die Anfrage zu veröffentlichen.

   ```
   {
     "state": {
       "reported": {
         "ID": "SmartLamp21",
         "ColorRGB": [
           128,
           128,
           128
         ]
       }
     },
     "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6"
   }
   ```

Wenn Sie eine Nachricht zum Thema erhalten: 
+ `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted`: Das bedeutet, dass der Schatten erstellt wurde und der Nachrichtentext das aktuelle Schattendokument enthält.
+ `$aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected`: Überprüfen Sie den Fehler im Nachrichtentext.
+ `$aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted`: Der Schatten ist bereits vorhanden und der Nachrichtentext hat den aktuellen Schattenstatus, wie in diesem Beispiel. Damit können Sie Ihr Gerät einstellen oder bestätigen, dass es mit dem Schattenstatus übereinstimmt.

  ```
  {
    "state": {
      "reported": {
        "ID": "SmartLamp21",
        "ColorRGB": [
          128,
          128,
          128
        ]
      }
    },
    "metadata": {
      "reported": {
        "ID": {
          "timestamp": 1591140517
        },
        "ColorRGB": [
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          }
        ]
      }
    },
    "version": 3,
    "timestamp": 1591140517,
    "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6"
  }
  ```

## Senden einer Aktualisierung von der App
<a name="using-device-shadows-app-update"></a>

In diesem Abschnitt wird anhand von demonstriert AWS CLI , wie eine App mit einem Schatten interagieren kann.

**Um den aktuellen Status des Schattens mit dem zu ermitteln AWS CLI**  
Geben Sie in der Befehlszeile den folgenden Befehl ein.

```
aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
```

Auf Windows-Plattformen können Sie `con` anstelle von `/dev/stdout` verwenden.

```
aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
```

Da der Schatten vorhanden ist und vom Gerät initialisiert wurde, um seinen aktuellen Zustand wiederzugeben, sollte das folgende Schattendokument zurückgegeben werden.

```
{
  "state": {
    "reported": {
      "ID": "SmartLamp21",
      "ColorRGB": [
        128,
        128,
        128
      ]
    }
  },
  "metadata": {
    "reported": {
      "ID": {
        "timestamp": 1591140517
      },
      "ColorRGB": [
        {
          "timestamp": 1591140517
        },
        {
          "timestamp": 1591140517
        },
        {
          "timestamp": 1591140517
        }
      ]
    }
  },
  "version": 3,
  "timestamp": 1591141111
}
```

Die App kann diese Antwort verwenden, um die Darstellung des Gerätestatus zu initialisieren.

Wenn die App den Status aktualisiert, z. B. wenn ein Endbenutzer die Farbe unserer intelligenten Glühlampe zu Gelb ändert, sendet die App einen **update-thing-shadow**-Befehl. Dieser Befehl entspricht der `UpdateThingShadow`-REST-API.

**So aktualisieren Sie einen Schatten aus einer App:**  
Geben Sie in der Befehlszeile den folgenden Befehl ein.

------
#### [ AWS CLI v2.x ]

```
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \
    --cli-binary-format raw-in-base64-out \
    --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
```

------
#### [ AWS CLI v1.x ]

```
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \
    --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
```

------

Wenn dieser Befehl erfolgreich ist, sollte das folgende Schattendokument zurückgegeben werden.

```
{
  "state": {
    "desired": {
      "ColorRGB": [
        255,
        255,
        0
      ]
    }
  },
  "metadata": {
    "desired": {
      "ColorRGB": [
        {
          "timestamp": 1591141596
        },
        {
          "timestamp": 1591141596
        },
        {
          "timestamp": 1591141596
        }
      ]
    }
  },
  "version": 4,
  "timestamp": 1591141596,
  "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab"
}
```

## Reaktion auf eine Aktualisierung im Gerät
<a name="using-device-shadows-device-update"></a>

Wenn Sie zum **MQTT-Client** in der AWS Konsole zurückkehren, sollten Sie die Meldungen sehen, die AWS IoT veröffentlicht wurden, um den im vorherigen Abschnitt ausgegebenen Aktualisierungsbefehl widerzuspiegeln.

**So zeigen Sie die Aktualisierungsmeldungen im **MQTT-Client an**:**  
Wählen Sie im **MQTT-Client** aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta in der Spalte **Abonnements** die Option **\$1** aus. Wenn der Themenname abgeschnitten wird, können Sie ihn anhalten, um das vollständige Thema anzuzeigen. Im Themenprotokoll zu diesem Thema sollten Sie eine `/delta` Meldung sehen, die dieser ähnelt.

```
{
  "version": 4,
  "timestamp": 1591141596,
  "state": {
    "ColorRGB": [
      255,
      255,
      0
    ]
  },
  "metadata": {
    "ColorRGB": [
      {
        "timestamp": 1591141596
      },
      {
        "timestamp": 1591141596
      },
      {
        "timestamp": 1591141596
      }
    ]
  },
  "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab"
}
```

Ihr Gerät verarbeitet den Inhalt dieser Nachricht, um den Gerätestatus so festzulegen, dass er mit dem `desired`-Status in der Nachricht übereinstimmt.

Nachdem das Gerät den Status aktualisiert hat, sodass er dem `desired` Status in der Nachricht entspricht, muss es den neuen gemeldeten Status AWS IoT durch Veröffentlichung einer Aktualisierungsnachricht an den neuen Status zurücksenden. Dieses Verfahren simuliert dies im **MQTT-Client**.

**So aktualisieren Sie den Schatten vom Gerät aus:**

1. Wählen Sie im **MQTT-Client** die Option **Publish to a topic (In einem Thema veröffentlichen)** aus.

1. Geben Sie im Nachrichtentextfenster im Themenfeld über dem Nachrichtentext das Schattenthema ein, gefolgt von der `/update`-Aktion: `$aws/things/mySimulatedThing/shadow/name/simShadow1/update` und geben Sie im Nachrichtentext dieses aktualisierte Shadow-Dokument ein, das den aktuellen Status des Geräts beschreibt. Wählen Sie **Veröffentlichen**, um den aktualisierten Gerätestatus zu veröffentlichen.

   ```
   {
     "state": {
       "reported": {
         "ColorRGB": [255,255,0]
         }
     },
     "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
   }
   ```

   Wenn die Nachricht erfolgreich von empfangen wurde AWS IoT, sollten Sie im **\$1 aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted** message log des **MQTT-Clients** eine neue Antwort mit dem aktuellen Status des Shadows sehen, wie in diesem Beispiel.

   ```
   {
     "state": {
       "reported": {
         "ColorRGB": [
           255,
           255,
           0
         ]
       }
     },
     "metadata": {
       "reported": {
         "ColorRGB": [
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           }
         ]
       }
     },
     "version": 5,
     "timestamp": 1591142747,
     "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
   }
   ```

Eine erfolgreiche Aktualisierung des gemeldeten Status des Geräts führt auch AWS IoT dazu, dass eine umfassende Beschreibung des Shadow-Status in einer Nachricht an das `update/documents` Thema gesendet wird, z. B. dieser Nachrichtentext, der auf das Shadow-Update zurückzuführen ist, das das Gerät im vorherigen Verfahren durchgeführt hat.

```
{
  "previous": {
    "state": {
      "desired": {
        "ColorRGB": [
          255,
          255,
          0
        ]
      },
      "reported": {
        "ID": "SmartLamp21",
        "ColorRGB": [
          128,
          128,
          128
        ]
      }
    },
    "metadata": {
      "desired": {
        "ColorRGB": [
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          }
        ]
      },
      "reported": {
        "ID": {
          "timestamp": 1591140517
        },
        "ColorRGB": [
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          },
          {
            "timestamp": 1591140517
          }
        ]
      }
    },
    "version": 4
  },
  "current": {
    "state": {
      "desired": {
        "ColorRGB": [
          255,
          255,
          0
        ]
      },
      "reported": {
        "ID": "SmartLamp21",
        "ColorRGB": [
          255,
          255,
          0
        ]
      }
    },
    "metadata": {
      "desired": {
        "ColorRGB": [
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          },
          {
            "timestamp": 1591141596
          }
        ]
      },
      "reported": {
        "ID": {
          "timestamp": 1591140517
        },
        "ColorRGB": [
          {
            "timestamp": 1591142747
          },
          {
            "timestamp": 1591142747
          },
          {
            "timestamp": 1591142747
          }
        ]
      }
    },
    "version": 5
  },
  "timestamp": 1591142747,
  "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
}
```

## Beobachten Sie das Update in der App
<a name="using-device-shadows-view-result"></a>

Die App kann jetzt den Schatten nach dem aktuellen Status abfragen, wie vom Gerät gemeldet.

**Um den aktuellen Status des Schattens abzurufen, verwenden Sie den AWS CLI**

1. Geben Sie in der Befehlszeile den folgenden Befehl ein.

   ```
   aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout
   ```

   Auf Windows-Plattformen können Sie `con` anstelle von `/dev/stdout` verwenden.

   ```
   aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
   ```

1. Da der Schatten gerade vom Gerät aktualisiert wurde, um seinen aktuellen Zustand wiederzugeben, sollte er das folgende Schattendokument zurückgeben.

   ```
   {
     "state": {
       "desired": {
         "ColorRGB": [
           255,
           255,
           0
         ]
       },
       "reported": {
         "ID": "SmartLamp21",
         "ColorRGB": [
           255,
           255,
           0
         ]
       }
     },
     "metadata": {
       "desired": {
         "ColorRGB": [
           {
             "timestamp": 1591141596
           },
           {
             "timestamp": 1591141596
           },
           {
             "timestamp": 1591141596
           }
         ]
       },
       "reported": {
         "ID": {
           "timestamp": 1591140517
         },
         "ColorRGB": [
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           },
           {
             "timestamp": 1591142747
           }
         ]
       }
     },
     "version": 5,
     "timestamp": 1591143269
   }
   ```

## Über die Simulation hinaus
<a name="using-device-shadows-next-steps"></a>

Experimentieren Sie mit der Interaktion zwischen der AWS CLI (für die App) und der Konsole (für das Gerät), um Ihre IoT-Lösung zu modellieren.