

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.

# Demos mit dem AWS IoT Device Client erstellen
<a name="iot-tutorials-dc-intro"></a>

Die Tutorials in diesem Lernpfad führen Sie durch die Schritte zur Entwicklung von Demonstrationssoftware mithilfe des AWS IoT Device Client. Der AWS IoT Device Client bietet Software, die auf Ihrem IoT-Gerät ausgeführt wird, um Aspekte einer darauf aufbauenden IoT-Lösung zu testen und zu demonstrieren AWS IoT.

Ziel dieser Tutorials ist es, die Erkundung und das Experimentieren zu erleichtern, damit Sie sicher sein können, dass diese Lösung AWS IoT unterstützt, bevor Sie Ihre Gerätesoftware entwickeln.

**Was Sie in diesen Tutorials lernen werden:**
+ So bereiten Sie einen Raspberry Pi für die Verwendung als IoT-Gerät vor mit AWS IoT
+ So demonstrieren Sie AWS IoT Funktionen mithilfe des AWS IoT Geräteclients auf Ihrem Gerät

In diesem Lernpfad installieren Sie den AWS IoT Device Client auf Ihrem eigenen Raspberry Pi und erstellen die AWS IoT Ressourcen in der Cloud, um IoT-Lösungsideen zu demonstrieren. In den Tutorials in diesem Lernpfad werden zwar Features anhand eines Raspberry Pi demonstriert, aber sie erläutern die Ziele und Verfahren, um Sie bei der Anpassung an andere Geräte zu unterstützen.

## Voraussetzungen für die Erstellung von Demos mit dem AWS IoT Device Client
<a name="iot-dc-tutorial-overview"></a>

In diesem Abschnitt wird beschrieben, was Sie benötigen, bevor Sie mit den Tutorials in diesem Lernpfad beginnen.

**Um die Tutorials in diesem Lernpfad abzuschließen, benötigen Sie:**
+ 

**Ein AWS-Konto**  
Sie können Ihre vorhandenen verwenden AWS-Konto, sofern Sie über eine verfügen. Möglicherweise müssen Sie jedoch zusätzliche Rollen oder Berechtigungen hinzufügen, um die AWS IoT Funktionen nutzen zu können, die in diesen Tutorials verwendet werden.

  Wenn Sie eine neue erstellen müssen AWS-Konto, finden Sie weitere Informationen unter[Einrichten AWS-Konto](setting-up.md).
+ 

**Ein Raspberry Pi oder ein kompatibles IoT-Gerät**  
In den Tutorials wird ein [Raspberry Pi](https://www.raspberrypi.org/) verwendet, da er in verschiedenen Formfaktoren erhältlich ist, allgegenwärtig ist und es sich um ein relativ kostengünstiges Demonstrationsgerät handelt. Die Tutorials wurden auf dem [Raspberry Pi 3 Model B\$1](https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/), dem [Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) und auf einer Amazon EC2-Instance getestet, auf der Ubuntu Server 20.04 LTS (HVM) läuft. Um die Befehle zu verwenden AWS CLI und auszuführen, empfehlen wir, die neueste Version des Raspberry Pi-Betriebssystems ([Raspberry Pi OS (64-Bit)](https://www.raspberrypi.com/software/operating-systems/) oder OS Lite) zu verwenden. Frühere Versionen des Betriebssystems funktionieren möglicherweise, aber wir haben sie nicht getestet.
**Anmerkung**  
In den Tutorials werden die Ziele der einzelnen Schritte erklärt, um Ihnen zu helfen, sie an IoT-Hardware anzupassen, auf der wir sie noch nicht getestet haben. Sie beschreiben jedoch nicht speziell, wie Sie sie an andere Geräte anpassen können.
+ 

**Vertrautheit mit dem Betriebssystem des IoT-Geräts**  
Bei den Schritten in diesen Tutorials wird davon ausgegangen, dass Sie mit der Verwendung grundlegender Linux-Befehle und -Operationen über die von einem Raspberry Pi unterstützte Befehlszeilenschnittstelle vertraut sind. Wenn Sie mit diesen Vorgängen nicht vertraut sind, sollten Sie sich vielleicht mehr Zeit nehmen, um die Tutorials abzuschließen.

  Um diese Tutorials abzuschließen, sollten Sie bereits wissen, wie Sie:
  + grundlegende Geräteoperationen wie das Zusammenbauen und Anschließen von Komponenten, das Anschließen des Geräts an die erforderlichen Stromquellen und das Installieren und Entfernen von Speicherkarten sicher durchführen.
  + Systemsoftware und Dateien auf das Gerät hoch- und herunterladen. Wenn Ihr Gerät kein Wechselspeichergerät wie eine microSD-Karte verwendet, müssen Sie wissen, wie Sie eine Verbindung zu Ihrem Gerät herstellen und Systemsoftware und Dateien auf das Gerät hoch- und herunterladen.
  + Verbinden Sie Ihr Gerät mit den Netzwerken, in denen Sie es verwenden möchten.
  + Stellen Sie über ein SSH-Terminal oder ein ähnliches Programm von einem anderen Computer aus eine Verbindung zu Ihrem Gerät her.
  + Verwenden Sie eine Befehlszeilenschnittstelle, um Dateien und Verzeichnisse auf dem Gerät zu erstellen, zu kopieren, zu verschieben, umzubenennen und deren Berechtigungen festzulegen.
  + Installieren Sie neue Programme auf dem Gerät.
  + Übertragen Sie Dateien mit Tools wie FTP oder SCP zu und von Ihrem Gerät.
+ 

**Eine Entwicklungs- und Testumgebung für Ihre IoT-Lösung**  
In den Tutorials wird die erforderliche Software und Hardware beschrieben. In den Tutorials wird jedoch davon ausgegangen, dass Sie Operationen ausführen können, die möglicherweise nicht explizit beschrieben werden. Zu den Beispielen für solche Hardware und Operationen gehören:
  + 

**Ein lokaler Host-Computer zum Herunterladen und Speichern von Dateien**  
Für den Raspberry Pi ist dies normalerweise ein PC oder Laptop, der microSD-Speicherkarten lesen und auf sie schreiben kann. Der lokale Host-Computer muss:
    + mit dem Internet verbunden sein.
    + [AWS CLI](https://aws.amazon.com//cli/) installiert und konfiguriert haben.
    + Verfügen Sie über einen Webbrowser, der die AWS Konsole unterstützt.
  + 

**Eine Möglichkeit, Ihren lokalen Host-Computer mit Ihrem Gerät zu verbinden, um mit ihm zu kommunizieren, Befehle einzugeben und Dateien zu übertragen**  
Auf dem Raspberry Pi erfolgt dies häufig mithilfe von SSH und SCP vom lokalen Host-Computer aus.
  + 

**Ein Monitor und eine Tastatur zum Anschluss an Ihr IoT-Gerät**  
Diese können hilfreich sein, sind aber nicht erforderlich, um die Tutorials abzuschließen.
  + 

**Eine Möglichkeit für Ihren lokalen Host-Computer und Ihre IoT-Geräte, sich mit dem Internet zu verbinden**  
Dies kann eine verkabelte oder eine drahtlose Netzwerkverbindung zu einem Router oder Gateway sein, der mit dem Internet verbunden ist. Der lokale Host muss eine Verbindung zum Raspberry Pi herstellen können. Dazu müssen sie sich möglicherweise im selben lokalen Netzwerk befinden. Die Tutorials können Ihnen nicht zeigen, wie Sie dies für Ihr spezielles Gerät oder Ihre Gerätekonfiguration einrichten, aber sie zeigen, wie Sie diese Konnektivität testen können.
  + 

**Zugriff auf den Router Ihres lokalen Netzwerks, um die angeschlossenen Geräte anzuzeigen**  
Um die Tutorials in diesem Lernpfad abschließen zu können, müssen Sie in der Lage sein, die IP-Adresse Ihres IoT-Geräts zu ermitteln.

    In einem lokalen Netzwerk können Sie dazu auf die Admin-Oberfläche des Netzwerk-Routers zugreifen, mit dem Ihre Geräte verbunden sind. Wenn Sie Ihrem Gerät im Router eine feste IP-Adresse zuweisen können, können Sie die Wiederverbindung nach jedem Neustart des Geräts vereinfachen.

    Wenn Sie eine Tastatur und einen Monitor an das Gerät angeschlossen haben, kann **ifconfig** die IP-Adresse des Geräts angezeigt werden.

    Wenn keine dieser Optionen in Frage kommt, müssen Sie einen Weg finden, die IP-Adresse des Geräts nach jedem Neustart zu ermitteln. 

Wenn Sie alle Ihre Materialien haben, fahren Sie mit [Tutorial: Geräte für den AWS IoT Device Client vorbereiten](iot-dc-prepare-device.md) fort. 

**Topics**
+ [Voraussetzungen für die Erstellung von Demos mit dem AWS IoT Device Client](#iot-dc-tutorial-overview)
+ [Tutorial: Geräte für den AWS IoT Device Client vorbereiten](iot-dc-prepare-device.md)
+ [Tutorial: Installation und Konfiguration des AWS IoT Device Clients](iot-dc-install-dc.md)
+ [Tutorial: Demonstrieren Sie die MQTT-Nachrichtenkommunikation mit dem AWS IoT Device Client](iot-dc-testconn.md)
+ [Tutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client](iot-dc-runjobs.md)
+ [Tutorial: Aufräumen nach dem Ausführen der AWS IoT Device Client-Tutorials](iot-dc-cleanup.md)

# Tutorial: Geräte für den AWS IoT Device Client vorbereiten
<a name="iot-dc-prepare-device"></a>

Dieses Tutorial führt Sie durch die Initialisierung Ihres Raspberry Pi, um ihn auf die nachfolgenden Tutorials in diesem Lernpfad vorzubereiten.

Ziel dieses Tutorials ist es, die aktuelle Version des Betriebssystems des Geräts zu installieren und sicherzustellen, dass Sie im Kontext Ihrer Entwicklungsumgebung mit Ihrem Gerät kommunizieren können.

**Voraussetzungen**  
Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass die unter aufgeführten Elemente [Voraussetzungen für die Erstellung von Demos mit dem AWS IoT Device Client](iot-tutorials-dc-intro.md#iot-dc-tutorial-overview) verfügbar und einsatzbereit sind.

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

**In diesem Tutorial führen Sie die folgenden Aktivitäten durch:**
+ Installieren und aktualisieren Sie das Betriebssystem Ihres Geräts.
+ Installieren und überprüfen Sie alle zusätzliche Software, die für die Ausführung der Tutorials erforderlich ist.
+ Testen Sie die Konnektivität Ihres Geräts und installieren Sie die erforderlichen Zertifikate.

Nachdem Sie dieses Tutorial abgeschlossen haben, bereitet das nächste Tutorial Ihr Gerät auf die Demos vor, die den AWS IoT Device Client verwenden.

**Topics**
+ [Installieren und aktualisieren Sie das Betriebssystem des Geräts](iot-dc-prepare-device-sys.md)
+ [Installieren und verifizieren Sie die erforderliche Software auf Ihrem Gerät](iot-dc-prepare-device-sw.md)
+ [Testen Sie Ihr Gerät und speichern Sie das Amazon CA-Zertifikat](iot-dc-prepare-device-test.md)

# Installieren und aktualisieren Sie das Betriebssystem des Geräts
<a name="iot-dc-prepare-device-sys"></a>

Die Verfahren in diesem Abschnitt beschreiben, wie Sie die microSD-Karte initialisieren, die der Raspberry Pi für sein Systemlaufwerk verwendet. Die microSD-Karte des Raspberry Pi enthält die Betriebssystemsoftware (OS) sowie Speicherplatz für die Anwendungsdateien. Wenn Sie keinen Raspberry Pi verwenden, folgen Sie den Anweisungen des Geräts, um die Betriebssystemsoftware des Geräts zu installieren und zu aktualisieren.

Nachdem Sie diesen Abschnitt abgeschlossen haben, sollten Sie in der Lage sein, Ihr IoT-Gerät zu starten und über das Terminalprogramm auf Ihrem lokalen Host-Computer eine Verbindung herzustellen.

**Erforderliche Ausstattung:**
+ Ihre lokale Entwicklungs- und Testumgebung
+ Ein Raspberry Pi oder Ihr IoT-Gerät, das eine Verbindung zum Internet herstellen kann
+ Eine microSD-Speicherkarte mit einer Kapazität von mindestens 8 GB oder ausreichend Speicherplatz für das Betriebssystem und die erforderliche Software.
**Anmerkung**  
Wählen Sie für diese Übungen eine microSD-Karte, die so groß wie nötig, aber so klein wie möglich ist.  
Eine kleine SD-Karte lässt sich schneller sichern und aktualisieren. Auf dem Raspberry Pi benötigen Sie für diese Tutorials nicht mehr als eine microSD-Karte mit 8 GB. Wenn Sie mehr Speicherplatz für Ihre spezifische Anwendung benötigen, können Sie mit den kleineren Image-Dateien, die Sie in diesen Tutorials speichern, die Größe des Dateisystems auf einer größeren Karte ändern, sodass der gesamte unterstützte Speicherplatz der von Ihnen ausgewählten Karte genutzt wird.

**Optionale Ausstattung:**
+ Eine an den Raspberry Pi angeschlossene USB-Tastatur
+ Ein HDMI-Monitor und ein Kabel zum Anschließen des Monitors an den Raspberry Pi

**Topics**
+ [Herunterladen des Betriebssystems des Geräts auf die microSD-Karte](#iot-dc-prepare-device-sys-step1)
+ [Starten Ihres IoT-Geräts mit dem neuen Betriebssystem](#iot-dc-prepare-device-sys-step2)
+ [Verbinden Ihres Geräts mit Ihrem lokalen Host-Computer](#iot-dc-prepare-device-sys-step3)

## Herunterladen des Betriebssystems des Geräts auf die microSD-Karte
<a name="iot-dc-prepare-device-sys-step1"></a>

Bei diesem Verfahren wird der lokale Host-Computer verwendet, um das Betriebssystem des Geräts auf eine microSD-Karte zu laden.

**Anmerkung**  
Wenn Ihr Gerät kein Wechselspeichermedium für sein Betriebssystem verwendet, installieren Sie das Betriebssystem anhand des Verfahrens für dieses Gerät und fahren Sie fort mit [Starten Ihres IoT-Geräts mit dem neuen Betriebssystem](#iot-dc-prepare-device-sys-step2).

**So installieren Sie das Betriebssystem auf Ihrem Raspberry Pi:**

1. Laden Sie das Raspberry-Pi-Betriebssystem-Image, das Sie verwenden möchten, auf Ihren lokalen Host-Computer herunter und entpacken Sie es. Die neuesten Versionen sind unter [ https://www.raspberrypi.com/software/operating-systems/](https://www.raspberrypi.com/software/operating-systems/) erhältlich 

**Auswahl einer Version des Raspberry Pi OS**  
In diesem Tutorial wird die **Lite-Version des Raspberry Pi OS** verwendet, da dies die kleinste Version ist, die die Tutorials in diesem Lernpfad unterstützt. Diese Version des Raspberry Pi OS hat nur eine Befehlszeilenschnittstelle und keine grafische Benutzeroberfläche. Eine Version des neuesten Raspberry-Pi-Betriebssystems mit grafischer Benutzeroberfläche kann im Rahmen dieser Tutorials auch verwendet werden. Die in diesem Lernpfad beschriebenen Verfahren verwenden jedoch nur die Befehlszeilenschnittstelle zur Durchführung von Vorgängen auf dem Raspberry Pi.

1. Legen Sie die microSD-Karte in den lokalen Host-Computer ein.

1. Schreiben Sie die entpackte OS-Image-Datei mit einem SD-Karten-Imaging-Tool auf die microSD-Karte.

1. Nach dem Schreiben des Raspberry-Pi-OS-Images auf die microSD-Karte:

   1. Öffnen Sie die BOOT-Partition auf der microSD-Karte in einem Befehlszeilenfenster oder einem Datei-Explorer-Fenster. 

   1. Erstellen Sie in der BOOT-Partition der microSD-Karte im Stammverzeichnis eine leere Datei mit dem Namen `ssh` ohne Dateierweiterung und ohne Inhalt. Dadurch wird der Raspberry Pi angewiesen, die SSH-Kommunikation beim ersten Start zu aktivieren.

1. Werfen Sie die microSD-Karte aus und entfernen Sie sie sicher vom lokalen Host-Computer.

Ihre microSD-Karte ist nun einsatzbereit für [Starten Ihres IoT-Geräts mit dem neuen Betriebssystem](#iot-dc-prepare-device-sys-step2).

## Starten Ihres IoT-Geräts mit dem neuen Betriebssystem
<a name="iot-dc-prepare-device-sys-step2"></a>

Dieses Verfahren installiert die microSD-Karte und startet Ihren Raspberry Pi zum ersten Mal mit dem heruntergeladenen Betriebssystem.

**So starten Sie Ihr IoT-Gerät mit dem neuen Betriebssystem:**

1. Trennen Sie das Gerät von der Stromversorgung und legen Sie die microSD-Karte aus dem vorherigen Schritt, [Herunterladen des Betriebssystems des Geräts auf die microSD-Karte](#iot-dc-prepare-device-sys-step1), in den Raspberry Pi ein.

1. Verbinden Sie das Gerät mit einem kabelgebundenen Netzwerk.

1. Diese Tutorials interagieren mit Ihrem Raspberry Pi von Ihrem lokalen Host-Computer aus über ein SSH-Terminal.

   Wenn Sie auch direkt mit dem Gerät interagieren möchten, können Sie:

   1. Einen HDMI-Monitor anschließen, um die Konsolenmeldungen des Raspberry Pi anzusehen, bevor Sie das Terminalfenster auf Ihrem lokalen Host-Computer mit Ihrem Raspberry Pi verbinden können

   1. Eine USB-Tastatur anschließen, wenn Sie direkt mit dem Raspberry Pi interagieren möchten

1. Einen Raspberry Pi an die Stromversorgung anschließen und etwa eine Minute warten, bis er initialisiert ist

   Wenn Sie einen Monitor an Ihren Raspberry Pi angeschlossen haben, können Sie den Startvorgang darauf verfolgen.

1. 

   Finden Sie die IP-Adresse Ihres Geräts heraus:
   + Wenn Sie einen HDMI-Monitor an den Raspberry Pi angeschlossen haben, erscheint die IP-Adresse in den auf dem Monitor angezeigten Meldungen 
   + Wenn Sie Zugriff auf den Router haben, mit dem Ihr Raspberry Pi verbunden ist, können Sie dessen Adresse in der Admin-Oberfläche des Routers sehen.

Wenn Sie die IP-Adresse Ihres Raspberry Pi haben, sind Sie bereit für [Verbinden Ihres Geräts mit Ihrem lokalen Host-Computer](#iot-dc-prepare-device-sys-step3).

## Verbinden Ihres Geräts mit Ihrem lokalen Host-Computer
<a name="iot-dc-prepare-device-sys-step3"></a>

Bei diesem Verfahren wird das Terminalprogramm auf Ihrem lokalen Host-Computer verwendet, um eine Verbindung zu Ihrem Raspberry Pi herzustellen und das Standardpasswort zu ändern.

**So verbinden Sie Ihr Gerät mit Ihrem lokalen Host-Computer:**

1. 

   Öffnen Sie auf Ihrem lokalen Host-Computer das SSH-Terminalprogramm:
   + Windows: `PuTTY`
   + Linux/macOS: `Terminal`
**Anmerkung**  
PuTTY wird unter Windows nicht automatisch installiert. Wenn es sich nicht auf Ihrem Computer befindet, müssen Sie es möglicherweise herunterladen und installieren.

1. Verbinden Sie das Terminalprogramm mit der IP-Adresse Ihres Raspberry Pi und melden Sie sich mit den Standardanmeldeinformationen an.

   ```
   username: pi
   password: raspberry
   ```

1. Nachdem Sie sich bei Ihrem Raspberry Pi angemeldet haben, ändern Sie das Passwort für den Benutzer `pi`.

   ```
   passwd
   ```

   Folgen Sie den Eingabeaufforderungen, um das Passwort zu ändern.

   ```
   Changing password for pi.
   Current password: raspberry
   New password: YourNewPassword
   Retype new password: YourNewPassword
   passwd: password updated successfully
   ```

Nachdem Sie die Befehlszeilenaufforderung des Raspberry Pi im Terminalfenster angezeigt und das Passwort geändert haben, können Sie mit [Installieren und verifizieren Sie die erforderliche Software auf Ihrem Gerät](iot-dc-prepare-device-sw.md) fortfahren.

# Installieren und verifizieren Sie die erforderliche Software auf Ihrem Gerät
<a name="iot-dc-prepare-device-sw"></a>

Die Verfahren in diesem Abschnitt setzen mit [dem vorherigen Abschnitt](iot-dc-prepare-device-sys.md) fort, um das Betriebssystem Ihres Raspberry Pi auf den neuesten Stand zu bringen und die Software auf dem Raspberry Pi zu installieren, die im nächsten Abschnitt zur Erstellung und Installation des AWS IoT Geräteclients verwendet wird.

Nachdem Sie diesen Abschnitt abgeschlossen haben, verfügt Ihr Raspberry Pi über ein up-to-date Betriebssystem, die Software, die für die Tutorials in diesem Lernpfad erforderlich ist, und es wird für Ihren Standort konfiguriert.

**Erforderliche Ausstattung:**
+ Ihre lokale Entwicklungs- und Testumgebung aus [dem vorherigen Abschnitt](iot-dc-prepare-device-sys.md)
+ Der Raspberry Pi, den Sie im [vorherigen Abschnitt](iot-dc-prepare-device-sys.md) verwendet haben
+ Die microSD-Speicherkarte aus [dem vorherigen Abschnitt](iot-dc-prepare-device-sys.md)

**Anmerkung**  
Raspberry Pi Model 3\$1 und das Raspberry Pi Model 4 können alle in diesem Lernpfad beschriebenen Befehle ausführen. Wenn Ihr IoT-Gerät keine Software kompilieren oder ausführen kann AWS Command Line Interface, müssen Sie möglicherweise die erforderlichen Compiler auf Ihrem lokalen Host-Computer installieren, um die Software zu erstellen und sie dann auf Ihr IoT-Gerät zu übertragen. Weitere Informationen zum Installieren und Erstellen der Software für Ihr Gerät finden Sie in der Dokumentation für Ihre Gerätesoftware.

**Topics**
+ [Aktualisieren Sie die Betriebssystemsoftware](#iot-dc-prepare-device-sw-step1)
+ [Installieren der erforderlichen Anwendungen und Bibliotheken](#iot-dc-prepare-device-sw-step2)
+ [(Optional) Speichern des microSD-Karten-Images](#iot-dc-prepare-device-sw-step3)

## Aktualisieren Sie die Betriebssystemsoftware
<a name="iot-dc-prepare-device-sw-step1"></a>

Mit diesem Verfahren wird die Betriebssystemsoftware aktualisiert.

**So aktualisieren Sie die Betriebssystemsoftware auf dem Raspberry Pi:**

Führen Sie diese Schritte im Terminalfenster Ihres lokalen Host-Computers aus.

1. Geben Sie diese Befehle ein, um die Systemsoftware auf Ihrem Raspberry Pi zu aktualisieren.

   ```
   sudo apt-get -y update
   sudo apt-get -y upgrade
   sudo apt-get -y autoremove
   ```

1. Aktualisieren Sie die Gebietsschema- und Zeitzoneneinstellungen des Raspberry Pi (optional).

   Geben Sie diesen Befehl ein, um die Gebietsschema- und Zeitzoneneinstellungen des Geräts zu aktualisieren.

   ```
   sudo raspi-config
   ```

   1. So legen Sie das Gebietsschema des Geräts fest:

      1. Wählen Sie im Bildschirm **Raspberry Pi Software Configuration Tool (raspi-config)** Option **5**.

         **`5 Localisation Options Configure language and regional settings`**

         Verwenden Sie die Tab-Taste, um **<Select>** zu bewegen, und drücken Sie dann die space bar.

      1. Wählen Sie im Menü mit den Lokalisierungsoptionen die Option **L1** aus.

         **`L1 Locale Configure language and regional settings`**

         Verwenden Sie die Tab-Taste, um **<Select>** zu bewegen, und drücken Sie dann die space bar.

      1. Wählen Sie in der Liste der Gebietsschemaoptionen die Gebietsschemas aus, die Sie auf Ihrem Raspberry Pi installieren möchten, indem Sie mit den Pfeiltasten blättern und dann die gewünschten Gebietsschemas mit der space bar markieren. 

         In den Vereinigten Staaten ist **`en_US.UTF-8`** eine gute Wahl.

      1. Nachdem Sie die Gebietsschemas für Ihr Gerät ausgewählt haben, wählen Sie mit der Tab-Taste **<OK>**, und drücken Sie dann die space bar, um die Bestätigungsseite für die **Konfiguration der Gebietsschemas** aufzurufen.

   1. So legen Sie die Zeitzone des Geräts fest:

      1. Wählen Sie im Bildschirm **raspi-config** Option** 5**.

         **`5 Localisation Options Configure language and regional settings`**

         Verwenden Sie die Tab-Taste, um **<Select>** zu bewegen, und drücken Sie dann die space bar.

      1. Wählen Sie im Menü mit den Lokalisierungsoptionen mit der Pfeiltaste die Option **L2** aus:

         **`L2 time zone Configure time zone`**

         Verwenden Sie die Tab-Taste, um **<Select>** zu bewegen, und drücken Sie dann die space bar.

      1. Wählen Sie im Menü **Konfiguration von tzdata** Ihr geografisches Gebiet aus der Liste aus. 

         Verwenden Sie die Tab-Taste, um zu **<OK>** zu gehen, und drücken Sie dann die space bar.

      1. Wählen Sie in der Liste der Städte mit den Pfeiltasten eine Stadt in Ihrer Zeitzone aus.

         Um die Zeitzone festzulegen, verwenden Sie die Tab-Taste, um zu **<OK>** zu gehen, und drücken Sie dann die space bar.

   1. Wenn Sie mit der Aktualisierung der Einstellungen fertig sind, wechseln Sie mit der Tab-Taste zu **<Finish>**, und drücken Sie dann auf space bar, um die App **raspi-config** zu schließen.

1. Geben Sie diesen Befehl ein, um Ihren Raspberry Pi neu zu starten.

   ```
   sudo shutdown -r 0
   ```

1. Warten Sie, bis Ihr Raspberry Pi neu gestartet wird.

1. Nachdem Ihr Raspberry Pi neu gestartet wurde, verbinden Sie das Terminalfenster auf Ihrem lokalen Host-Computer erneut mit Ihrem Raspberry Pi.

Ihre Raspberry-Pi-Systemsoftware ist jetzt konfiguriert und Sie können mit [Installieren der erforderlichen Anwendungen und Bibliotheken](#iot-dc-prepare-device-sw-step2) fortfahren.

## Installieren der erforderlichen Anwendungen und Bibliotheken
<a name="iot-dc-prepare-device-sw-step2"></a>

Mit diesem Verfahren werden die Anwendungssoftware und die Bibliotheken installiert, die in den nachfolgenden Tutorials verwendet werden.

Wenn Sie einen Raspberry Pi verwenden oder die erforderliche Software auf Ihrem IoT-Gerät kompilieren können, führen Sie diese Schritte im Terminalfenster auf Ihrem lokalen Host-Computer aus. Wenn Sie Software für Ihr IoT-Gerät auf Ihrem lokalen Host-Computer kompilieren müssen, lesen Sie in der Softwaredokumentation für Ihr IoT-Gerät nach, wie Sie diese Schritte auf Ihrem Gerät ausführen.

**So installieren Sie die Anwendungssoftware und die Bibliotheken auf Ihrem Raspberry Pi:**

1. Geben Sie diesen Befehl ein, um die Anwendungssoftware und die Bibliotheken zu installieren.

   ```
   sudo apt-get -y install build-essential libssl-dev cmake unzip git python3-pip
   ```

1. Geben Sie diese Befehle ein, um zu bestätigen, dass die richtige Version der Software installiert wurde.

   ```
   gcc --version
   cmake --version
   openssl version
   git --version
   ```

1. 

   Vergewissern Sie sich, dass diese Versionen der Anwendungssoftware installiert sind:
   + `gcc`: 9.3.0 oder höher
   + `cmake`: 3.10.x oder höher
   + `OpenSSL`: 1.1.1 oder höher
   + `git`: 2.20.1 oder höher

Wenn Ihr Raspberry Pi über akzeptable Versionen der erforderlichen Anwendungssoftware verfügt, können Sie mit [(Optional) Speichern des microSD-Karten-Images](#iot-dc-prepare-device-sw-step3) fortfahren.

## (Optional) Speichern des microSD-Karten-Images
<a name="iot-dc-prepare-device-sw-step3"></a>

In den Tutorials in diesem Lernpfad werden Sie auf diese Verfahren stoßen, um eine Kopie des microSD-Karten-Images des Raspberry Pi in einer Datei auf Ihrem lokalen Host-Computer zu speichern. Sie werden zwar empfohlen, sind aber keine Pflichtaufgaben. Wenn Sie das microSD-Karten-Image an der empfohlenen Stelle speichern, können Sie die Verfahren überspringen, die dem Speichern in diesem Lernpfad vorausgehen. Dies kann Zeit sparen, wenn Sie etwas erneut versuchen müssen. Wenn Sie das microSD-Karten-Image nicht regelmäßig speichern, müssen Sie die Tutorials im Lernpfad möglicherweise von Anfang an neu beginnen, wenn Ihre microSD-Karte beschädigt ist oder wenn Sie versehentlich eine App oder deren Einstellungen falsch konfigurieren.

Die microSD-Karte Ihres Raspberry Pi verfügt jetzt über ein aktualisiertes Betriebssystem und die grundlegende Anwendungssoftware ist geladen. Sie können die Zeit sparen, die Sie für die Ausführung der vorherigen Schritte benötigen, indem Sie den Inhalt der microSD-Karte jetzt in einer Datei speichern. Wenn Sie das aktuelle Image des microSD-Karten-Images Ihres Geräts haben, können Sie von diesem Punkt aus beginnen, um ein Tutorial oder einen Vorgang fortzusetzen oder erneut zu versuchen, ohne die Software von Grund auf neu installieren und aktualisieren zu müssen.

**So speichern Sie das Image der microSD-Karte in einer Datei:**

1. Geben Sie diesen Befehl ein, um den Raspberry Pi herunterzufahren.

   ```
   sudo shutdown -h 0
   ```

1. Nachdem der Raspberry Pi vollständig heruntergefahren ist, trennen Sie ihn von der Stromversorgung.

1. Entfernen Sie die microSD-Karte aus dem Raspberry Pi.

1. Auf Ihrem lokalen Host-Computer: 

   1. Legen Sie die microSD-Karte ein.

   1. Speichern Sie das Image der microSD-Karte mithilfe des Imaging-Tools für die SD-Karte in eine Datei.

   1. Nachdem das Image der microSD-Karte gespeichert wurde, werfen Sie die Karte aus dem lokalen Host-Computer aus.

1. Trennen Sie den Raspberry Pi von der Stromversorgung und legen Sie die microSD-Karte in den Raspberry Pi ein.

1. Schließen Sie den Raspberry Pi an die Stromversorgung an.

1. Nachdem Sie etwa eine Minute gewartet haben, verbinden Sie erneut das Terminalfenster auf dem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden war, und melden Sie sich dann beim Raspberry Pi an.

# Testen Sie Ihr Gerät und speichern Sie das Amazon CA-Zertifikat
<a name="iot-dc-prepare-device-test"></a>

Die Verfahren in diesem Abschnitt sind die Fortsetzung [des vorherigen Abschnitts](iot-dc-prepare-device-sw.md) zur Installation des Zertifikats AWS Command Line Interface und des Zertifikats der Zertifizierungsstelle, mit dem AWS IoT Core Ihre Verbindungen authentifiziert wurden.

Nachdem Sie diesen Abschnitt abgeschlossen haben, wissen Sie, dass Ihr Raspberry Pi über die erforderliche Systemsoftware für die Installation des AWS IoT Device Clients verfügt und dass er über eine funktionierende Verbindung zum Internet verfügt.

**Erforderliche Ausstattung:**
+ Ihre lokale Entwicklungs- und Testumgebung aus [dem vorherigen Abschnitt](iot-dc-prepare-device-sw.md)
+ Der Raspberry Pi, den Sie im [vorherigen Abschnitt](iot-dc-prepare-device-sw.md) verwendet haben
+ Die microSD-Speicherkarte aus [dem vorherigen Abschnitt](iot-dc-prepare-device-sw.md)

**Topics**
+ [Installieren Sie das AWS Command Line Interface](#iot-dc-prepare-device-test-step1)
+ [Konfigurieren Sie Ihre AWS-Konto Anmeldedaten](#iot-dc-prepare-device-test-step2)
+ [Herunterladen des Amazon-Root-CA-Zertifikats](#iot-dc-prepare-device-test-step3)
+ [(Optional) Speichern des microSD-Karten-Images](#iot-dc-prepare-device-test-step4)

## Installieren Sie das AWS Command Line Interface
<a name="iot-dc-prepare-device-test-step1"></a>

Mit diesem Verfahren wird das AWS CLI auf Ihrem Raspberry Pi installiert.

Wenn Sie einen Raspberry Pi verwenden oder Software auf Ihrem IoT-Gerät kompilieren können, führen Sie diese Schritte im Terminalfenster auf Ihrem lokalen Host-Computer aus. Wenn Sie Software für Ihr IoT-Gerät auf Ihrem lokalen Host-Computer kompilieren müssen, lesen Sie in der Softwaredokumentation für Ihr IoT-Gerät nach, welche Bibliotheken dafür erforderlich sind.

**Um das AWS CLI auf Ihrem Raspberry Pi zu installieren**

1. Führen Sie den folgenden Befehl aus, um die AWS CLI herunterzuladen und zu installieren.

   ```
   export PATH=$PATH:~/.local/bin # configures the path to include the directory with the AWS CLI
   git clone https://github.com/aws/aws-cli.git # download the AWS CLI code from GitHub
   cd aws-cli && git checkout v2 # go to the directory with the repo and checkout version 2
   pip3 install -r requirements.txt # install the prerequisite software
   ```

1. Führen Sie diesen Befehl aus, um den zu installieren AWS CLI. Die Ausführung dieses Befehls kann bis zu 15 Minuten dauern.

   ```
   pip3 install . # install the AWS CLI 
   ```

1. Führen Sie diesen Befehl aus, um zu bestätigen, dass die richtige Version von installiert AWS CLI wurde.

   ```
   aws --version
   ```

   Die Version von AWS CLI sollte 2.2 oder höher sein.

Wenn die aktuelle Version AWS CLI angezeigt wird, können Sie fortfahren[Konfigurieren Sie Ihre AWS-Konto Anmeldedaten](#iot-dc-prepare-device-test-step2).

## Konfigurieren Sie Ihre AWS-Konto Anmeldedaten
<a name="iot-dc-prepare-device-test-step2"></a>

In diesem Verfahren erhalten Sie AWS-Konto Anmeldeinformationen und fügen sie für die Verwendung auf Ihrem Raspberry Pi hinzu.

**Um Ihre AWS-Konto Anmeldeinformationen zu Ihrem Gerät hinzuzufügen**

1. Besorgen Sie sich von Ihrem eine **Zugriffsschlüssel-ID** und **einen geheimen Zugriffsschlüssel** AWS-Konto , um sie AWS CLI auf Ihrem Gerät zu authentifizieren. 

   Wenn Sie AWS IAM noch nicht kennen, beschreibt das [ https://aws.amazon.com/premiumsupport/Knowledge-center/create-access-key/](https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/)den Prozess, der in der AWS Konsole ausgeführt werden muss, um AWS IAM-Anmeldeinformationen für die Verwendung auf Ihrem Gerät zu erstellen. 

1. Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, mit den Anmeldeinformationen **Zugriffsschlüssel-ID** und **Geheimer Zugriffsschlüssel** für Ihr Gerät folgendermaßen vor:

   1. Führen Sie die Configure-App mit diesem Befehl aus AWS :

      ```
      aws configure
      ```

   1. Geben Sie Ihre Anmeldeinformationen und Konfigurationsinformationen ein, wenn Sie dazu aufgefordert werden:

      ```
      AWS Access Key ID: your Access Key ID
      AWS Secret Access Key: your Secret Access Key
      Default region name: your AWS-Region code
      Default output format: json
      ```

1. Führen Sie diesen Befehl aus, um den Zugriff Ihres Geräts auf Ihren AWS IoT Core Endpunkt AWS-Konto zu testen.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   Es sollte Ihren AWS-Konto-spezifischen AWS IoT Datenendpunkt zurückgeben, wie in diesem Beispiel:

   ```
   {
       "endpointAddress": "a3EXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

Wenn Sie Ihren AWS-Konto-spezifischen AWS IoT Datenendpunkt sehen, verfügt Ihr Raspberry Pi über die Konnektivität und die erforderlichen Berechtigungen, um damit fortzufahren. [Herunterladen des Amazon-Root-CA-Zertifikats](#iot-dc-prepare-device-test-step3) 

**Wichtig**  
Ihre AWS-Konto Anmeldeinformationen sind jetzt auf der microSD-Karte in Ihrem Raspberry Pi gespeichert. Dies erleichtert Ihnen und der Software, die Sie in diesen Tutorials erstellen, future Interaktionen, sie werden jedoch standardmäßig auch in allen microSD-Kartenbildern gespeichert und dupliziert, die Sie nach diesem Schritt erstellen. AWS   
Um die Sicherheit Ihrer AWS-Konto Anmeldeinformationen zu gewährleisten, sollten Sie vor dem Speichern weiterer microSD-Kartenbilder erwägen, die Anmeldeinformationen zu löschen, indem Sie `aws configure` erneut ausführen und zufällige Zeichen für die **Access Key ID und den **Secret Access Key**** eingeben, um zu verhindern, dass Ihre AWS-Konto Anmeldeinformationen kompromittiert werden.  
Wenn Sie feststellen, dass Sie Ihre AWS-Konto Anmeldeinformationen versehentlich gespeichert haben, können Sie sie in der IAM-Konsole deaktivieren. AWS 

## Herunterladen des Amazon-Root-CA-Zertifikats
<a name="iot-dc-prepare-device-test-step3"></a>

Bei diesem Verfahren wird eine Kopie eines Zertifikats der Amazon Root Certificate Authority (CA) heruntergeladen und gespeichert. Durch das Herunterladen dieses Zertifikats wird es zur Verwendung in den nachfolgenden Tutorials gespeichert. Außerdem wird die Konnektivität Ihres Geräts mit AWS -Diensten getestet.

**So laden Sie das Amazon-Root-CA-Zertifikat herunter und speichern es:**

1. Führen Sie den folgenden Befehl aus, um ein Verzeichnis für das Zertifikat zu erstellen.

   ```
   mkdir ~/certs
   ```

1. Führen Sie diesen Befehl aus, um das Amazon-Root-CA-Zertifikat herunterzuladen.

   ```
   curl -o ~/certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. Führen Sie diese Befehle aus, um den Zugriff auf das Zertifikatsverzeichnis und die zugehörige Datei festzulegen.

   ```
   chmod 745 ~
   chmod 700 ~/certs
   chmod 644 ~/certs/AmazonRootCA1.pem
   ```

1. Führen Sie diesen Befehl aus, um die CA-Zertifikatsdatei im neuen Verzeichnis anzuzeigen.

   ```
   ls -l ~/certs
   ```

   Sie sollten einen Eintrag wie diesen sehen. Das Datum und die Uhrzeit werden unterschiedlich sein. Die Dateigröße und alle anderen Informationen sollten jedoch mit den hier abgebildeten übereinstimmen.

   ```
   -rw-r--r-- 1 pi pi 1188 Oct 28 13:02 AmazonRootCA1.pem
   ```

   Wenn die Dateigröße nicht `1188` beträgt, überprüfen Sie die **curl**-Befehlsparameter. Möglicherweise haben Sie eine falsche Datei heruntergeladen.

## (Optional) Speichern des microSD-Karten-Images
<a name="iot-dc-prepare-device-test-step4"></a>

Die microSD-Karte Ihres Raspberry Pi verfügt jetzt über ein aktualisiertes Betriebssystem und die grundlegende Anwendungssoftware ist geladen. 

**So speichern Sie das Image der microSD-Karte in einer Datei:**

1. Löschen Sie im Terminalfenster auf Ihrem lokalen Host-Computer Ihre AWS -Anmeldeinformationen.

   1. Führen Sie die AWS Configure-App mit diesem Befehl aus:

      ```
      aws configure
      ```

   1. Ersetzen Sie Ihre Anmeldeinformationen, wenn Sie dazu aufgefordert werden. Sie können den **Standardregionsnamen** und das **Standardausgabeformat** unverändert lassen, indem Sie die **Eingabetaste** drücken.

      ```
      AWS Access Key ID [****************YT2H]: XYXYXYXYX
      AWS Secret Access Key [****************9plH]: XYXYXYXYX
      Default region name [us-west-2]: 
      Default output format [json]:
      ```

1. Geben Sie diesen Befehl ein, um den Raspberry Pi herunterzufahren.

   ```
   sudo shutdown -h 0
   ```

1. Nachdem der Raspberry Pi vollständig heruntergefahren ist, trennen Sie ihn von der Stromversorgung.

1. Entfernen Sie die microSD-Karte aus Ihrem Gerät.

1. Auf Ihrem lokalen Host-Computer: 

   1. Legen Sie die microSD-Karte ein.

   1. Speichern Sie das Image der microSD-Karte mithilfe des Imaging-Tools für die SD-Karte in eine Datei.

   1. Nachdem das Image der microSD-Karte gespeichert wurde, werfen Sie die Karte aus dem lokalen Host-Computer aus.

1. Trennen Sie den Raspberry Pi von der Stromversorgung und legen Sie die microSD-Karte in den Raspberry Pi ein.

1. Schließen Sie das Gerät an die Stromversorgung an.

1. Starten Sie nach etwa einer Minute auf dem lokalen Host-Computer die Terminalfenstersitzung neu und melden Sie sich beim Gerät an.

   **Geben Sie Ihre AWS-Konto Anmeldeinformationen noch nicht erneut ein.**

Nachdem Sie Ihren Raspberry Pi neu gestartet und sich angemeldet haben, können Sie mit [Tutorial: Installation und Konfiguration des AWS IoT Device Clients](iot-dc-install-dc.md) fortfahren.

# Tutorial: Installation und Konfiguration des AWS IoT Device Clients
<a name="iot-dc-install-dc"></a>

Dieses Tutorial führt Sie durch die Installation und Konfiguration des AWS IoT Geräteclients und die Erstellung von AWS IoT Ressourcen, die Sie in dieser und anderen Demos verwenden werden.

**So beginnen Sie dieses Tutorial:**
+ Halten Sie Ihren lokalen Host-Computer und den Raspberry Pi aus [dem vorherigen Tutorial](iot-dc-prepare-device.md) bereit.

Dieses Tutorial kann bis zu 90 Minuten dauern.

**Wenn Sie mit diesem Thema fertig sind:**
+ Ihr IoT-Gerät kann in anderen AWS IoT Device Client-Demos verwendet werden.
+ Sie haben Ihr IoT-Gerät in AWS IoT Core bereitgestellt.
+ Sie haben den AWS IoT Geräteclient heruntergeladen und auf Ihrem Gerät installiert.
+ Sie haben ein Image der microSD-Karte Ihres Geräts gespeichert, das in nachfolgenden Tutorials verwendet werden kann.

**Erforderliche Ausstattung:**
+ Ihre lokale Entwicklungs- und Testumgebung aus [dem vorherigen Abschnitt](iot-dc-prepare-device-test.md)
+ Der Raspberry Pi, den Sie im [vorherigen Abschnitt](iot-dc-prepare-device-test.md) verwendet haben
+ Die microSD-Speicherkarte des Raspberry Pi, die Sie [im vorherigen Abschnitt](iot-dc-prepare-device-test.md) verwendet haben

**Topics**
+ [Laden Sie den AWS IoT Geräteclient herunter und speichern Sie ihn](iot-dc-install-download.md)
+ [Stellen Sie Ihren Raspberry Pi bereit in AWS IoT](iot-dc-install-provision.md)
+ [Konfigurieren Sie den AWS IoT Geräteclient, um die Konnektivität zu testen](iot-dc-install-configure.md)

# Laden Sie den AWS IoT Geräteclient herunter und speichern Sie ihn
<a name="iot-dc-install-download"></a>

Mit den Verfahren in diesem Abschnitt wird der AWS IoT Device Client heruntergeladen, kompiliert und auf Ihrem Raspberry Pi installiert. Nachdem Sie die Installation getestet haben, können Sie das Image der microSD-Karte des Raspberry Pi speichern, um es später zu verwenden, wenn Sie die Tutorials erneut ausprobieren möchten.

**Topics**
+ [Laden Sie den AWS IoT Geräteclient herunter und erstellen Sie ihn](#iot-dc-install-dc-download)
+ [Erstellen der in den Tutorials verwendeten Verzeichnisse](#iot-dc-install-dc-files)
+ [(Optional) Speichern des microSD-Karten-Images](#iot-dc-install-dc-save)

## Laden Sie den AWS IoT Geräteclient herunter und erstellen Sie ihn
<a name="iot-dc-install-dc-download"></a>

Mit diesem Verfahren wird der AWS IoT Device Client auf Ihrem Raspberry Pi installiert.

Führen Sie diese Befehle im Terminalfenster auf Ihrem lokalen Host-Computer aus, der mit Ihrem Raspberry Pi verbunden ist.

**Um den AWS IoT Device Client auf Ihrem Raspberry Pi zu installieren**

1. Geben Sie diese Befehle ein, um den AWS IoT Geräteclient herunterzuladen und auf Ihrem Raspberry Pi zu erstellen.

   ```
   cd ~
   git clone https://github.com/awslabs/aws-iot-device-client aws-iot-device-client
   mkdir ~/aws-iot-device-client/build && cd ~/aws-iot-device-client/build
   cmake ../
   ```

1. Führen Sie diesen Befehl aus, um den AWS IoT Geräteclient zu erstellen. Die Ausführung dieses Befehls kann bis zu 15 Minuten dauern.

   ```
   cmake --build . --target aws-iot-device-client
   ```

   Die Warnmeldungen, die beim Kompilieren des AWS IoT Geräteclients angezeigt werden, können ignoriert werden.

   Diese Tutorials wurden mit dem AWS IoT Device Client getestet**gcc**, auf dem der Device Client basiert, Version (Raspbian 10.2.1-6\$1rpi1) 10.2.1 20210110 auf der Version von Raspberry Pi OS (bullseye) auf, Version (Raspbian 8.3.0-6\$1rpi1) 8.3.0 auf **gcc** der Version des Raspberry Pi OS (Buster) vom 7. Mai 2021.

1. Nachdem AWS IoT der Geräteclient fertig gebaut wurde, testen Sie ihn, indem Sie diesen Befehl ausführen.

   ```
   ./aws-iot-device-client --help
   ```

Wenn Sie die Befehlszeilenhilfe für den AWS IoT Geräteclient sehen, wurde der AWS IoT Geräteclient erfolgreich erstellt und kann von Ihnen verwendet werden.

## Erstellen der in den Tutorials verwendeten Verzeichnisse
<a name="iot-dc-install-dc-files"></a>

Mit diesem Verfahren werden die Verzeichnisse auf dem Raspberry Pi erstellt, in denen die in den Tutorials in diesem Lernpfad verwendeten Dateien gespeichert werden.

**So erstellen Sie die in den Tutorials in diesem Lernpfad verwendeten Verzeichnisse:**

1. Führen Sie diese Befehle aus, um die erforderlichen Verzeichnisse zu erstellen.

   ```
   mkdir ~/dc-configs
   mkdir ~/policies
   mkdir ~/messages
   mkdir ~/certs/testconn
   mkdir ~/certs/pubsub
   mkdir ~/certs/jobs
   ```

1. Führen Sie diese Befehle aus, um die Berechtigungen für die neuen Verzeichnisse festzulegen.

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 700 ~/certs/pubsub
   chmod 700 ~/certs/jobs
   ```

Nachdem Sie diese Verzeichnisse erstellt und ihre Berechtigungen festgelegt haben, fahren Sie fort mit [(Optional) Speichern des microSD-Karten-Images](#iot-dc-install-dc-save).

## (Optional) Speichern des microSD-Karten-Images
<a name="iot-dc-install-dc-save"></a>

Zu diesem Zeitpunkt verfügt die microSD-Karte Ihres Raspberry Pi über ein aktualisiertes Betriebssystem, die grundlegende Anwendungssoftware und den AWS IoT Geräteclient. 

Wenn Sie diese Übungen und Tutorials erneut ausprobieren möchten, können Sie die vorherigen Verfahren überspringen, indem Sie das mit diesem Verfahren gespeicherte microSD-Karten-Image auf eine neue microSD-Karte schreiben und mit den Tutorials ab [Stellen Sie Ihren Raspberry Pi bereit in AWS IoT](iot-dc-install-provision.md) fortfahren.

**So speichern Sie das Image der microSD-Karte in einer Datei:**

Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, folgendermaßen vor:

1. Vergewissern Sie sich, dass Ihre AWS-Konto Anmeldeinformationen nicht gespeichert wurden.

   1. Führen AWS Sie die Configure-App mit diesem Befehl aus:

      ```
      aws configure
      ```

   1. Wenn Ihre Anmeldeinformationen gespeichert wurden (also in der Eingabeaufforderung angezeigt werden), geben Sie die Zeichenfolge **XYXYXYXYX** ein, wenn Sie dazu aufgefordert werden, wie hier gezeigt. Lassen Sie den **Namen der Standardregion** und das **Standardausgabeformat** leer.

      ```
      AWS Access Key ID [****************YXYX]: XYXYXYXYX
      AWS Secret Access Key [****************YXYX]: XYXYXYXYX
      Default region name: 
      Default output format:
      ```

1. Geben Sie diesen Befehl ein, um den Raspberry Pi herunterzufahren.

   ```
   sudo shutdown -h 0
   ```

1. Nachdem der Raspberry Pi vollständig heruntergefahren ist, trennen Sie ihn von der Stromversorgung.

1. Entfernen Sie die microSD-Karte aus Ihrem Gerät.

1. Auf Ihrem lokalen Host-Computer: 

   1. Legen Sie die microSD-Karte ein.

   1. Speichern Sie das Image der microSD-Karte mithilfe des Imaging-Tools für die SD-Karte in eine Datei.

   1. Nachdem das Image der microSD-Karte gespeichert wurde, werfen Sie die Karte aus dem lokalen Host-Computer aus.

Sie können mit dieser microSD-Karte in [Stellen Sie Ihren Raspberry Pi bereit in AWS IoT](iot-dc-install-provision.md) fortfahren.

# Stellen Sie Ihren Raspberry Pi bereit in AWS IoT
<a name="iot-dc-install-provision"></a>

Die Verfahren in diesem Abschnitt beginnen mit dem gespeicherten microSD-Image, auf dem der AWS IoT Geräteclient installiert ist, AWS CLI und erstellen die AWS IoT Ressourcen und Gerätezertifikate, in AWS IoT denen Ihr Raspberry Pi bereitgestellt wird.

## Installieren der microSD-Karte in Ihrem Raspberry Pi
<a name="iot-dc-install-dc-restore"></a>

Dieses Verfahren installiert die microSD-Karte mit der erforderlichen Software, die auf den Raspberry Pi geladen und konfiguriert ist, und konfiguriert Ihre, AWS-Konto sodass Sie mit den Tutorials in diesem Lernpfad fortfahren können.

Verwenden Sie eine microSD-Karte aus [(Optional) Speichern des microSD-Karten-Images](iot-dc-install-download.md#iot-dc-install-dc-save) mit der erforderlichen Software für die Übungen und Tutorials in diesem Lernpfad.

**So installieren Sie die microSD-Karte in Ihrem Raspberry Pi:**

1. Trennen Sie den Raspberry Pi von der Stromversorgung und legen Sie die microSD-Karte in den Raspberry Pi ein.

1. Schließen Sie den Raspberry Pi an die Stromversorgung an.

1. Starten Sie nach etwa einer Minute auf dem lokalen Host-Computer die Terminalfenstersitzung neu und melden Sie sich beim Raspberry Pi an.

1. Auf Ihrem lokalen Host-Computer, im Terminalfenster und mit den Anmeldeinformationen **Zugriffsschlüssel-ID** und **Geheimer Zugriffsschlüssel** für Ihren Raspberry Pi:

   1. Führen Sie die AWS Configure-App mit diesem Befehl aus:

      ```
      aws configure
      ```

   1. Geben Sie Ihre AWS-Konto Anmeldeinformationen und Konfigurationsinformationen ein, wenn Sie dazu aufgefordert werden:

      ```
      AWS Access Key ID [****************YXYX]: your Access Key ID
      AWS Secret Access Key [****************YXYX]: your Secret Access Key
      Default region name [us-west-2]: your AWS-Region code
      Default output format [json]: json
      ```

Nachdem Sie Ihre AWS-Konto Anmeldeinformationen wiederhergestellt haben, können Sie fortfahren[Stellen Sie Ihr Gerät bereit in AWS IoT Core](#iot-dc-install-dc-provision).

## Stellen Sie Ihr Gerät bereit in AWS IoT Core
<a name="iot-dc-install-dc-provision"></a>

Mit den Verfahren in diesem Abschnitt werden die AWS IoT Ressourcen erstellt, in denen Ihr Raspberry Pi bereitgestellt wird AWS IoT. Bei der Erstellung dieser Ressourcen werden Sie aufgefordert, verschiedene Informationen aufzuzeichnen. Diese Informationen werden von der AWS IoT Geräteclient-Konfiguration im nächsten Verfahren verwendet.

Damit Ihr Raspberry Pi verwendet werden kann AWS IoT, muss er bereitgestellt werden. Bei der Bereitstellung werden die AWS IoT Ressourcen erstellt und konfiguriert, die zur Unterstützung Ihres Raspberry Pi als IoT-Gerät erforderlich sind.

Wenn Ihr Raspberry Pi eingeschaltet ist und neu gestartet wird, verbinden Sie das Terminalfenster auf Ihrem lokalen Host-Computer mit dem Raspberry Pi und führen Sie diese Verfahren durch.

**Topics**
+ [Erstellen und Herunterladen der Gerätezertifikatsdateien](#iot-dc-install-dc-provision-certs)
+ [Ressourcen erstellen AWS IoT](#iot-dc-install-dc-provision-resources)

### Erstellen und Herunterladen der Gerätezertifikatsdateien
<a name="iot-dc-install-dc-provision-certs"></a>

Mit diesem Verfahren werden die Gerätezertifikatsdateien für diese Demo erstellt.

**So erstellen Sie die Gerätezertifikatsdateien für Ihren Raspberry Pi und laden sie herunter:**

1. Geben Sie im Terminalfenster auf Ihrem lokalen Host-Computer diese Befehle ein, um die Gerätezertifikatsdateien für Ihr Gerät zu erstellen.

   ```
   mkdir ~/certs/testconn
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/testconn/device.pem.crt" \
   --public-key-outfile "~/certs/testconn/public.pem.key" \
   --private-key-outfile "~/certs/testconn/private.pem.key"
   ```

   Die Ausgabe des Befehls ähnelt der folgenden: Notieren Sie sich den `certificateArn`-Wert zur späteren Verwendung.

   ```
   {
       "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
       "keyPair": {
           "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
           "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
       }
   }
   ```

1. Geben Sie die folgenden Befehle ein, um die Berechtigungen für das Zertifikatsverzeichnis und seine Dateien festzulegen.

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 644 ~/certs/testconn/*
   chmod 600 ~/certs/testconn/private.pem.key
   ```

1. Führen Sie diesen Befehl aus, um die Berechtigungen für Ihre Zertifikatsverzeichnisse und -dateien zu überprüfen.

   ```
   ls -l ~/certs/testconn
   ```

   Der Befehl sollte ähnliche Werte wie die hier angezeigten ausgeben, mit der Ausnahme, dass Datum und Uhrzeit unterschiedlich sein werden.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

Sie haben die Gerätezertifikatsdateien bereits auf Ihrem Raspberry Pi installiert und können mit [Ressourcen erstellen AWS IoT](#iot-dc-install-dc-provision-resources) fortfahren.

### Ressourcen erstellen AWS IoT
<a name="iot-dc-install-dc-provision-resources"></a>

Bei diesem Verfahren wird Ihr Gerät bereitgestellt, AWS IoT indem die Ressourcen erstellt werden, die Ihr Gerät für den Zugriff auf AWS IoT Funktionen und Dienste benötigt.

**Um Ihr Gerät bereitzustellen in AWS IoT**

1. Geben Sie im Terminalfenster auf Ihrem lokalen Host-Computer den folgenden Befehl ein, um die Adresse des Gerätedatenendpunkts für Ihr AWS-Konto abzurufen.

   ```
   aws iot describe-endpoint --endpoint-type IoT:Data-ATS
   ```

   Der Befehl aus den vorhergehenden Schritten gibt eine Antwort aus, die der folgenden ähnelt: Notieren Sie sich den `endpointAddress`-Wert zur späteren Verwendung.

   ```
   {
       "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Geben Sie diesen Befehl ein, um eine AWS IoT Ding-Ressource für Ihren Raspberry Pi zu erstellen.

   ```
   aws iot create-thing --thing-name "DevCliTestThing"
   ```

   Wenn Ihre AWS IoT Ding-Ressource erstellt wurde, gibt der Befehl eine Antwort wie diese zurück.

   ```
   {
       "thingName": "DevCliTestThing",
       "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/DevCliTestThing",
       "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. Im Terminalfenster:

   1. Öffnen Sie einen Texteditor, z. B. `nano`.

   1. Kopieren Sie dieses JSON-Richtliniendokument und fügen Sie es in Ihren geöffneten Texteditor ein.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish",
                      "iot:Subscribe",
                      "iot:Receive",
                      "iot:Connect"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```
**Anmerkung**  
Dieses Richtliniendokument gewährt allen Ressourcen großzügig die Erlaubnis, Verbindungen herzustellen, zu empfangen, zu veröffentlichen und zu abonnieren. Normalerweise gewähren Richtlinien nur bestimmten Ressourcen die Erlaubnis, bestimmte Aktionen auszuführen. Beim ersten Test der Gerätekonnektivität wird diese zu allgemeine und großzügige Richtlinie jedoch verwendet, um die Wahrscheinlichkeit eines Zugriffsproblems während dieses Tests zu minimieren. In den nachfolgenden Tutorials werden enger abgegrenzte Richtliniendokumente verwendet, um bessere Verfahren für die Richtliniengestaltung zu demonstrieren.

   1. Speichern Sie die Datei als **\$1/policies/dev\$1cli\$1test\$1thing\$1policy.json** in Ihrem Texteditor. 

1. Führen Sie diesen Befehl aus, um das Richtliniendokument aus den vorherigen Schritten zum Erstellen einer AWS IoT Richtlinie zu verwenden.

   ```
   aws iot create-policy \
   --policy-name "DevCliTestThingPolicy" \
   --policy-document "file://~/policies/dev_cli_test_thing_policy.json"
   ```

   Wenn die Richtlinie erstellt wurde, gibt der Befehl eine Antwort wie die folgende zurück:

   ```
   {
       "policyName": "DevCliTestThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy",
       "policyDocument": "{\n    \"Version\": \"2012-10-17\",		 	 	 \n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"iot:Publish\",\n                \"iot:Subscribe\",\n                \"iot:Receive\",\n                \"iot:Connect\"\n            ],\n            \"Resource\": [\n                \"*\"\n            ]\n        }\n    ]\n}\n",
       "policyVersionId": "1"
   }
   ```

1. Führen Sie diesen Befehl aus, um die Richtlinie an das Gerätezertifikat anzufügen. Ersetzen Sie `certificateArn` durch den `certificateArn`-Wert, den Sie zuvor gespeichert haben.

   ```
   aws iot attach-policy \
   --policy-name "DevCliTestThingPolicy" \
   --target "certificateArn"
   ```

   Bei erfolgreicher Ausführung gibt dieser Befehl nichts zurück.

1. Führen Sie diesen Befehl aus, um das Gerätezertifikat an die AWS IoT Ding-Ressource anzuhängen. Ersetzen Sie `certificateArn` durch den `certificateArn`-Wert, den Sie zuvor gespeichert haben.

   ```
   aws iot attach-thing-principal \
   --thing-name "DevCliTestThing" \
   --principal "certificateArn"
   ```

   Bei erfolgreicher Ausführung gibt dieser Befehl nichts zurück.

Nachdem Sie Ihr Gerät erfolgreich bereitgestellt haben AWS IoT, können Sie damit fortfahren[Konfigurieren Sie den AWS IoT Geräteclient, um die Konnektivität zu testen](iot-dc-install-configure.md).

# Konfigurieren Sie den AWS IoT Geräteclient, um die Konnektivität zu testen
<a name="iot-dc-install-configure"></a>

Die Verfahren in diesem Abschnitt konfigurieren den AWS IoT Device Client so, dass er eine MQTT-Nachricht von Ihrem Raspberry Pi veröffentlicht.

**Topics**
+ [Erstellen der Konfigurationsdatei](#iot-dc-install-dc-configure-step1)
+ [Öffnen des MQTT-Testclients](#iot-dc-install-dc-configure-step2)
+ [Führen Sie den Geräteclient aus AWS IoT](#iot-dc-install-dc-configure-step3)

## Erstellen der Konfigurationsdatei
<a name="iot-dc-install-dc-configure-step1"></a>

Dieses Verfahren erstellt die Konfigurationsdatei zum Testen des AWS IoT Geräteclients.

**Um die Konfigurationsdatei zum Testen des AWS IoT Geräteclients zu erstellen**
+ Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, folgendermaßen vor:

  1. Geben Sie diese Befehle ein, um ein Verzeichnis für die Konfigurationsdateien zu erstellen und die Berechtigungen für das Verzeichnis festzulegen:

     ```
     mkdir ~/dc-configs
     chmod 745 ~/dc-configs
     ```

  1. Öffnen Sie einen Texteditor, z. B. `nano`.

  1. Kopieren Sie dieses JSON-Dokument und fügen Sie es in Ihren geöffneten Texteditor ein.

     ```
     {
       "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
       "cert": "~/certs/testconn/device.pem.crt",
       "key": "~/certs/testconn/private.pem.key",
       "root-ca": "~/certs/AmazonRootCA1.pem",
       "thing-name": "DevCliTestThing",
       "logging": {
         "enable-sdk-logging": true,
         "level": "DEBUG",
         "type": "STDOUT",
         "file": ""
       },
       "jobs": {
         "enabled": false,
         "handler-directory": ""
       },
       "tunneling": {
         "enabled": false
       },
       "device-defender": {
         "enabled": false,
         "interval": 300
       },
       "fleet-provisioning": {
         "enabled": false,
         "template-name": "",
         "template-parameters": "",
         "csr-file": "",
         "device-key": ""
       },
       "samples": {
         "pub-sub": {
           "enabled": true,
           "publish-topic": "test/dc/pubtopic",
           "publish-file": "",
           "subscribe-topic": "test/dc/subtopic",
           "subscribe-file": ""
         }
       },
       "config-shadow": {
         "enabled": false
       },
       "sample-shadow": {
         "enabled": false,
         "shadow-name": "",
         "shadow-input-file": "",
         "shadow-output-file": ""
       }
     }
     ```

  1. Ersetzen Sie den *endpoint* Wert durch den Gerätedatenendpunkt für Ihren AWS-Konto , den Sie in gefunden haben[Stellen Sie Ihr Gerät bereit in AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

  1. Speichern Sie die Datei als **\$1/dc-configs/dc-testconn-config.json** in Ihrem Texteditor.

  1. Führen Sie diesen Befehl aus, um die Berechtigungen für die neue Konfigurationsdatei festzulegen.

     ```
     chmod 644 ~/dc-configs/dc-testconn-config.json
     ```

Nachdem Sie die Datei gespeichert haben, können Sie mit [Öffnen des MQTT-Testclients](#iot-dc-install-dc-configure-step2) fortfahren.

## Öffnen des MQTT-Testclients
<a name="iot-dc-install-dc-configure-step2"></a>

Dieses Verfahren bereitet den **MQTT-Testclient** in der AWS IoT Konsole darauf vor, die MQTT-Nachricht zu abonnieren, die der AWS IoT Geräteclient veröffentlicht, wenn er ausgeführt wird.

**So bereiten Sie den **MQTT-Testclient** darauf vor, alle MQTT-Nachrichten zu abonnieren:**

1. Wählen Sie auf Ihrem lokalen Host-Computer in der [AWS IoT -Konsole](https://console.aws.amazon.com//iot/home#/test) **MQTT-Testclient** aus.

1. Geben Sie auf der Registerkarte **Thema abonnieren** unter **Themenfilter** **\$1** (ein einzelnes Rautenzeichen) ein und wählen Sie **Abonnieren** aus, um alle MQTT-Themen zu abonnieren.

1. Vergewissern Sie sich, dass Sie unter der Bezeichnung **Abonnements** **\$1** (ein einzelnes Pfundzeichen) sehen.

Lassen Sie das Fenster mit dem **MQTT-Testclient** geöffnet, während Sie mit [Führen Sie den Geräteclient aus AWS IoT](#iot-dc-install-dc-configure-step3) fortfahren.

## Führen Sie den Geräteclient aus AWS IoT
<a name="iot-dc-install-dc-configure-step3"></a>

Dieses Verfahren führt den AWS IoT Geräteclient so aus, dass er eine einzelne MQTT-Nachricht veröffentlicht, die der **MQTT-Testclient** empfängt und anzeigt.

**Um eine MQTT-Nachricht vom Device Client aus zu senden AWS IoT**

1. Stellen Sie sicher, dass sowohl das Terminalfenster, das mit Ihrem Raspberry Pi verbunden ist, als auch das Fenster mit dem **MQTT-Testclient** sichtbar sind, während Sie dieses Verfahren ausführen.

1. Geben Sie im Terminalfenster diese Befehle ein, um den AWS IoT Geräteclient mithilfe der in [Erstellen der Konfigurationsdatei](#iot-dc-install-dc-configure-step1) erstellten Konfigurationsdatei auszuführen.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-testconn-config.json
   ```

   Im Terminalfenster zeigt der AWS IoT Geräteclient Informationsmeldungen und alle Fehler an, die bei der Ausführung auftreten.

   Wenn im Terminalfenster keine Fehler angezeigt werden, überprüfen Sie den **MQTT-Testclient**.

1. Im **MQTT-Testclient** finden Sie im Abonnementfenster die Nachricht *Hallo Welt\$1*, die an das `test/dc/pubtopic`-Nachrichtenthema gesendet wurde.

1. Wenn der AWS IoT Geräteclient keine Fehler anzeigt und Sie *Hello World\$1* sehen an die `test/dc/pubtopic` Nachricht im **MQTT-Testclient** gesendet, haben Sie eine erfolgreiche Verbindung nachgewiesen.

1. Geben Sie im Terminalfenster **^C** (Strg-C) ein, um den AWS IoT Geräteclient zu beenden.

Nachdem Sie nachgewiesen haben, dass der AWS IoT Device Client auf Ihrem Raspberry Pi korrekt läuft und mit ihm kommunizieren kann AWS IoT, können Sie mit dem fortfahren. [Tutorial: Demonstrieren Sie die MQTT-Nachrichtenkommunikation mit dem AWS IoT Device Client](iot-dc-testconn.md)

# Tutorial: Demonstrieren Sie die MQTT-Nachrichtenkommunikation mit dem AWS IoT Device Client
<a name="iot-dc-testconn"></a>

Dieses Tutorial zeigt, wie der AWS IoT Device Client MQTT-Nachrichten abonnieren und veröffentlichen kann, die häufig in IoT-Lösungen verwendet werden.

**So beginnen Sie dieses Tutorial:**
+ Sie haben Ihren lokalen Host-Computer und den Raspberry Pi so konfiguriert, wie [im vorherigen Abschnitt](iot-dc-install-dc.md) zu sehen.

  Wenn Sie das microSD-Karten-Image nach der Installation des AWS IoT Device Clients gespeichert haben, können Sie eine microSD-Karte mit diesem Image mit Ihrem Raspberry Pi verwenden.
+ Wenn Sie diese Demo schon einmal ausgeführt haben, überprüfen [Schritt 2: Bereinigen Sie Ihre Demos AWS-Konto nach dem Erstellen mit dem AWS IoT Device Client](iot-dc-cleanup.md#iot-dc-cleanup-cloud) Sie, ob Sie alle AWS IoT Ressourcen löschen sollten, die Sie in früheren Läufen erstellt haben, um doppelte Ressourcenfehler zu vermeiden.

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

**Wenn Sie mit diesem Thema fertig sind:**
+ Sie haben verschiedene Möglichkeiten demonstriert, wie Ihr IoT-Gerät MQTT-Nachrichten abonnieren AWS IoT und MQTT-Nachrichten veröffentlichen kann. AWS IoT

**Erforderliche Ausstattung:**
+ Ihre lokale Entwicklungs- und Testumgebung aus [dem vorherigen Abschnitt](iot-dc-install-dc.md)
+ Der Raspberry Pi, den Sie im [vorherigen Abschnitt](iot-dc-install-dc.md) verwendet haben
+ Die microSD-Speicherkarte des Raspberry Pi, die Sie [im vorherigen Abschnitt](iot-dc-install-dc.md) verwendet haben

**Topics**
+ [Bereiten Sie den Raspberry Pi vor, um die Kommunikation mit MQTT-Nachrichten zu demonstrieren](iot-dc-testconn-provision.md)
+ [Demonstrieren Sie das Veröffentlichen von Nachrichten mit dem AWS IoT Device Client](iot-dc-testconn-publish.md)
+ [Demonstrieren Sie das Abonnieren von Nachrichten mit dem Device Client AWS IoT](iot-dc-testconn-subscribe.md)

# Bereiten Sie den Raspberry Pi vor, um die Kommunikation mit MQTT-Nachrichten zu demonstrieren
<a name="iot-dc-testconn-provision"></a>

Dieses Verfahren erstellt die Ressourcen im AWS IoT und im Raspberry Pi, um die MQTT-Nachrichtenkommunikation mithilfe des AWS IoT Geräteclients zu demonstrieren.

**Topics**
+ [Erstellen der Zertifikatsdateien für die Demonstration der MQTT-Kommunikation](#iot-dc-testconn-provision-certs)
+ [Bereitstellen Ihres Geräts für die Demonstration der MQTT-Kommunikation](#iot-dc-testconn-provision-aws)
+ [Konfigurieren Sie die AWS IoT Device Client-Konfigurationsdatei und den MQTT-Testclient, um die MQTT-Kommunikation zu demonstrieren](#iot-dc-testconn-provision-dc-config)

## Erstellen der Zertifikatsdateien für die Demonstration der MQTT-Kommunikation
<a name="iot-dc-testconn-provision-certs"></a>

Mit diesem Verfahren werden die Gerätezertifikatsdateien für diese Demo erstellt.

**So erstellen Sie die Gerätezertifikatsdateien für Ihren Raspberry Pi und laden sie herunter:**



1. Geben Sie im Terminalfenster auf Ihrem lokalen Host-Computer den folgenden Befehl ein, um die Gerätezertifikatsdateien für Ihr Gerät zu erstellen.

   ```
   mkdir ~/certs/pubsub
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/pubsub/device.pem.crt" \
   --public-key-outfile "~/certs/pubsub/public.pem.key" \
   --private-key-outfile "~/certs/pubsub/private.pem.key"
   ```

   Die Ausgabe des Befehls ähnelt der folgenden: Speichern Sie den `certificateArn`-Wert zur späteren Verwendung.

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
   "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
   }
   }
   ```

1. Geben Sie die folgenden Befehle ein, um die Berechtigungen für das Zertifikatsverzeichnis und seine Dateien festzulegen.

   ```
   chmod 700 ~/certs/pubsub
   chmod 644 ~/certs/pubsub/*
   chmod 600 ~/certs/pubsub/private.pem.key
   ```

1. Führen Sie diesen Befehl aus, um die Berechtigungen für Ihre Zertifikatsverzeichnisse und -dateien zu überprüfen.

   ```
   ls -l ~/certs/pubsub
   ```

   Der Befehl sollte ähnliche Werte wie die hier angezeigten ausgeben, mit der Ausnahme, dass Datum und Uhrzeit unterschiedlich sein werden.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

1. Geben Sie diese Befehle ein, um die Verzeichnisse für die Protokolldateien zu erstellen.

   ```
   mkdir ~/.aws-iot-device-client
   mkdir ~/.aws-iot-device-client/log
   chmod 745 ~/.aws-iot-device-client/log
   echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log
   echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   chmod 600 ~/.aws-iot-device-client/log/*
   ```

## Bereitstellen Ihres Geräts für die Demonstration der MQTT-Kommunikation
<a name="iot-dc-testconn-provision-aws"></a>

In diesem Abschnitt werden die AWS IoT Ressourcen erstellt, in AWS IoT denen Ihr Raspberry Pi bereitgestellt wird. 

**So stellen Sie Ihr Gerät in AWS IoT bereit:**

1. Geben Sie im Terminalfenster auf Ihrem lokalen Host-Computer den folgenden Befehl ein, um die Adresse des Gerätedatenendpunkts für Ihr AWS-Konto abzurufen.

   ```
   aws iot describe-endpoint --endpoint-type IoT:Data-ATS
   ```

   Der Endpunktwert hat sich seit der letzten Ausführung dieses Befehls im vorhergehenden Tutorial nicht geändert. Wenn Sie den Befehl hier erneut ausführen, können Sie den Datenendpunktwert leicht finden und in die in diesem Tutorial verwendete Konfigurationsdatei einfügen.

   Der Befehl aus den vorhergehenden Schritten gibt eine Antwort aus, die der folgenden ähnelt: Notieren Sie sich den `endpointAddress`-Wert zur späteren Verwendung.

   ```
   {
   "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Geben Sie diesen Befehl ein, um eine neue Ding-Ressource AWS IoT für Ihren Raspberry Pi zu erstellen.

   ```
   aws iot create-thing --thing-name "PubSubTestThing"
   ```

   Da AWS IoT es sich bei einer Ding-Ressource um eine *virtuelle* Darstellung Ihres Geräts in der Cloud handelt, können wir mehrere Ding-Ressourcen erstellen, AWS IoT um sie für verschiedene Zwecke zu verwenden. Sie können alle von demselben physischen IoT-Gerät verwendet werden, um verschiedene Aspekte des Geräts darzustellen.

   In diesen Tutorials wird jeweils nur eine Objektressource verwendet, um den Raspberry Pi darzustellen. Auf diese Weise stellen sie in diesen Tutorials die verschiedenen Demos dar, sodass Sie, nachdem Sie die AWS IoT Ressourcen für eine Demo erstellt haben, zurückgehen und die Demo wiederholen können, indem Sie die Ressourcen verwenden, die Sie jeweils speziell erstellt haben.

   Wenn Ihre AWS IoT Ding-Ressource erstellt wurde, gibt der Befehl eine Antwort wie diese zurück.

   ```
   {
   "thingName": "PubSubTestThing",
   "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/PubSubTestThing",
   "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. Im Terminalfenster:

   1. Öffnen Sie einen Texteditor, z. B. `nano`.

   1. Kopieren Sie dieses JSON-Dokument und fügen Sie es in Ihren geöffneten Texteditor ein.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/PubSubTestThing"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic"
                  ]
              }
          ]
      }
      ```

   1. Ersetzen Sie im Editor in jedem `Resource` Abschnitt des Richtliniendokuments *us-west-2:57EXAMPLE833* durch Ihr AWS-Region, einen Doppelpunkt (:) und Ihre 12-stellige AWS-Konto Zahl.

   1. Speichern Sie die Datei als **\$1/policies/pubsub\$1test\$1thing\$1policy.json** in Ihrem Texteditor. 

1. Führen Sie diesen Befehl aus, um das Richtliniendokument aus den vorherigen Schritten zum Erstellen einer AWS IoT Richtlinie zu verwenden.

   ```
   aws iot create-policy \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_test_thing_policy.json"
   ```

   Wenn die Richtlinie erstellt wurde, gibt der Befehl eine Antwort wie die folgende zurück:

   ```
   {
                                       "policyName": "PubSubTestThingPolicy",
                                       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
                                       "policyDocument": "{\n\"Version\": \"2012-10-17\",		 	 	 \n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n",
                                       "policyVersionId": "1"
                                       }
   ```

1. Führen Sie diesen Befehl aus, um die Richtlinie an das Gerätezertifikat anzufügen. Ersetzen Sie `certificateArn` durch den `certificateArn`-Wert, den Sie in diesem Abschnitt bereits gespeichert haben.

   ```
   aws iot attach-policy \
   --policy-name "PubSubTestThingPolicy" \
   --target "certificateArn"
   ```

   Bei erfolgreicher Ausführung gibt dieser Befehl nichts zurück.

1. Führen Sie diesen Befehl aus, um das Gerätezertifikat an die AWS IoT -Objektressource anzuhängen. Ersetzen Sie `certificateArn` durch den `certificateArn`-Wert, den Sie in diesem Abschnitt bereits gespeichert haben.

   ```
   aws iot attach-thing-principal \
   --thing-name "PubSubTestThing" \
   --principal "certificateArn"
   ```

   Bei erfolgreicher Ausführung gibt dieser Befehl nichts zurück.

Nachdem Sie Ihr Gerät erfolgreich bereitgestellt haben AWS IoT, können Sie damit fortfahren[Konfigurieren Sie die AWS IoT Device Client-Konfigurationsdatei und den MQTT-Testclient, um die MQTT-Kommunikation zu demonstrieren](#iot-dc-testconn-provision-dc-config).

## Konfigurieren Sie die AWS IoT Device Client-Konfigurationsdatei und den MQTT-Testclient, um die MQTT-Kommunikation zu demonstrieren
<a name="iot-dc-testconn-provision-dc-config"></a>

Dieses Verfahren erstellt eine Konfigurationsdatei zum Testen des AWS IoT Geräteclients.

**Um die Konfigurationsdatei zum Testen des AWS IoT Geräteclients zu erstellen**

1. Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, folgendermaßen vor:

   1. Öffnen Sie einen Texteditor, z. B. `nano`.

   1. Kopieren Sie dieses JSON-Dokument und fügen Sie es in Ihren geöffneten Texteditor ein.

      ```
      {
        "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
        "cert": "~/certs/pubsub/device.pem.crt",
        "key": "~/certs/pubsub/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "PubSubTestThing",
        "logging": {
          "enable-sdk-logging": true,
          "level": "DEBUG",
          "type": "STDOUT",
          "file": ""
        },
        "jobs": {
          "enabled": false,
          "handler-directory": ""
        },
        "tunneling": {
          "enabled": false
        },
        "device-defender": {
          "enabled": false,
          "interval": 300
        },
        "fleet-provisioning": {
          "enabled": false,
          "template-name": "",
          "template-parameters": "",
          "csr-file": "",
          "device-key": ""
        },
        "samples": {
          "pub-sub": {
            "enabled": true,
            "publish-topic": "test/dc/pubtopic",
            "publish-file": "",
            "subscribe-topic": "test/dc/subtopic",
            "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
          }
        },
        "config-shadow": {
          "enabled": false
        },
        "sample-shadow": {
          "enabled": false,
          "shadow-name": "",
          "shadow-input-file": "",
          "shadow-output-file": ""
        }
      }
      ```

   1. Ersetzen Sie den *endpoint* Wert durch den Gerätedatenendpunkt für Ihren AWS-Konto , den Sie in gefunden haben[Stellen Sie Ihr Gerät bereit in AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

   1. Speichern Sie die Datei als **\$1/dc-configs/dc-pubsub-config.json** in Ihrem Texteditor.

   1. Führen Sie diesen Befehl aus, um die Berechtigungen für die neue Konfigurationsdatei festzulegen.

      ```
      chmod 644 ~/dc-configs/dc-pubsub-config.json
      ```

1. So bereiten Sie den **MQTT-Testclient** darauf vor, alle MQTT-Nachrichten zu abonnieren:

   1. Wählen Sie auf Ihrem lokalen Host-Computer in der [AWS IoT -Konsole](https://console.aws.amazon.com//iot/home#/test) **MQTT-Testclient** aus.

   1. Geben Sie auf der Registerkarte **Thema abonnieren** unter **Themenfilter** **\$1** (ein einzelnes Rautenzeichen) ein und wählen Sie **Abonnieren** aus.

   1. Vergewissern Sie sich, dass Sie unter der Bezeichnung **Abonnements** **\$1** (ein einzelnes Pfundzeichen) sehen.

   Lassen Sie das Fenster mit dem **MQTT-Testclient** geöffnet, während Sie mit diesem Tutorial fortfahren.

Nachdem Sie die Konfigurationsdatei gespeichert und den **MQTT-Testclient** konfiguriert haben, können Sie mit [Demonstrieren Sie das Veröffentlichen von Nachrichten mit dem AWS IoT Device Client](iot-dc-testconn-publish.md) fortfahren.

# Demonstrieren Sie das Veröffentlichen von Nachrichten mit dem AWS IoT Device Client
<a name="iot-dc-testconn-publish"></a>

Die Verfahren in diesem Abschnitt zeigen, wie der AWS IoT Device Client standardmäßige und benutzerdefinierte MQTT-Nachrichten senden kann.

Die Richtlinienanweisungen in der Richtlinie, die Sie im vorherigen Schritt für diese Übungen erstellt haben, geben dem Raspberry Pi die Erlaubnis, die folgenden Aktionen auszuführen:
+ 

**`iot:Connect`**  
Gibt dem genannten Client`PubSubTestThing`, Ihrem Raspberry Pi, auf dem der AWS IoT Geräteclient ausgeführt wird, die Möglichkeit, eine Verbindung herzustellen.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
        ]
      }
  ```
+ 

**`iot:Publish`**  
Erteilt dem Raspberry Pi die Erlaubnis, Nachrichten mit dem MQTT-Thema von `test/dc/pubtopic` zu veröffentlichen.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Publish"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
        ]
      }
  ```

  Die `iot:Publish`-Aktion erteilt die Erlaubnis zu Veröffentlichungen zu den MQTT-Themen, die im Resourcen-Array aufgeführt sind. Der *Inhalt* dieser Nachrichten wird nicht durch die Richtlinienanweisung geregelt.

## Veröffentlichen Sie die Standardnachricht mit dem AWS IoT Device Client
<a name="iot-dc-testconn-publish-default"></a>

Bei diesem Verfahren wird der AWS IoT Device Client so ausgeführt, dass er eine einzige Standard-MQTT-Nachricht veröffentlicht, die der **MQTT-Testclient** empfängt und anzeigt.

**Um die Standard-MQTT-Nachricht vom Device Client aus zu senden AWS IoT**

1. Stellen Sie sicher, dass sowohl das Terminalfenster auf Ihrem lokalen Host-Computer, das mit dem Raspberry Pi verbunden ist, als auch das Fenster mit dem **MQTT-Testclient** sichtbar sind, während Sie dieses Verfahren ausführen.

1. Geben Sie im Terminalfenster diese Befehle ein, um den AWS IoT Geräteclient mithilfe der in [Erstellen der Konfigurationsdatei](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1) erstellten Konfigurationsdatei auszuführen.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-config.json
   ```

   Im Terminalfenster zeigt der AWS IoT Geräteclient Informationsmeldungen und alle Fehler an, die bei der Ausführung auftreten.

   Wenn im Terminalfenster keine Fehler angezeigt werden, überprüfen Sie den **MQTT-Testclient**.

1. Im **MQTT-Testclient** finden Sie im Fenster **Abonnements** die Nachricht *Hallo Welt\$1*, die an das `test/dc/pubtopic`-Nachrichtenthema gesendet wurde.

1. Wenn der AWS IoT Geräteclient keine Fehler anzeigt und Sie *Hello World\$1* sehen an die `test/dc/pubtopic` Nachricht im **MQTT-Testclient** gesendet, haben Sie eine erfolgreiche Verbindung nachgewiesen.

1. Geben Sie im Terminalfenster **^C** (Strg-C) ein, um den AWS IoT Geräteclient zu beenden.

Nachdem Sie nachgewiesen haben, dass der AWS IoT Device Client die Standard-MQTT-Nachricht veröffentlicht hat, können Sie mit dem fortfahren. [Veröffentlichen Sie eine benutzerdefinierte Nachricht mit dem AWS IoT Device Client](#iot-dc-testconn-publish-custom)

## Veröffentlichen Sie eine benutzerdefinierte Nachricht mit dem AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom"></a>

Die Verfahren in diesem Abschnitt erstellen eine benutzerdefinierte MQTT-Nachricht und führen dann den AWS IoT Device Client aus, sodass er die benutzerdefinierte MQTT-Nachricht einmal veröffentlicht, damit der **MQTT-Testclient** sie empfangen und anzeigen kann.

### Erstellen Sie eine benutzerdefinierte MQTT-Nachricht für den Device Client AWS IoT
<a name="iot-dc-testconn-publish-custom-create"></a>

Führen Sie diese Schritte im Terminalfenster auf Ihrem lokalen Host-Computer aus, der mit Ihrem Raspberry Pi verbunden ist.

**Um eine benutzerdefinierte Nachricht für den AWS IoT Device Client zur Veröffentlichung zu erstellen**

1. Öffnen Sie im Terminalfenster einen Texteditor Ihrer Wahl, z. B. `nano`.

1. Kopieren Sie im Texteditor das folgende JSON-Dokument und fügen Sie es ein: Dies wird die MQTT-Nachrichtennutzlast sein, die der AWS IoT Geräteclient veröffentlicht.

   ```
   {
     "temperature": 28,
     "humidity": 80,
     "barometer": 1013,
     "wind": {
       "velocity": 22,
       "bearing": 255
     }
   }
   ```

1. Speichern Sie den Inhalt des Texteditors als **\$1/messages/sample-ws-message.json**. 

1. Geben Sie den folgenden Befehl ein, um die Berechtigungen der Nachrichtendatei festzulegen, die Sie gerade erstellt haben.

   ```
   chmod 600 ~/messages/*
   ```

**Um eine Konfigurationsdatei für den AWS IoT Geräteclient zu erstellen, die zum Senden der benutzerdefinierten Nachricht verwendet werden soll**

1. Öffnen Sie im Terminalfenster in einem Texteditor wie `nano` z. B. die vorhandene AWS IoT Geräteclient-Konfigurationsdatei:**\$1/dc-configs/dc-pubsub-config.json**. 

1. Bearbeiten Sie das `samples`-Objekt so, dass es folgendermaßen aussieht. Kein anderer Teil dieser Datei muss geändert werden.

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/subtopic",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

1. Speichern Sie den Inhalt des Texteditors als **\$1/dc-configs/dc-pubsub-custom-config.json**. 

1. Führen Sie diesen Befehl aus, um die Berechtigungen für die neue Konfigurationsdatei festzulegen.

   ```
   chmod 644 ~/dc-configs/dc-pubsub-custom-config.json
   ```

### Veröffentlichen Sie die benutzerdefinierte MQTT-Nachricht mit dem AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom-publish"></a>

Diese Änderung wirkt sich nur auf den *Inhalt* der MQTT-Nachrichtennutzlast aus, sodass die aktuelle Richtlinie weiterhin funktioniert. Wenn jedoch das *MQTT-Thema* (wie durch den `publish-topic`-Wert in `~/dc-configs/dc-pubsub-custom-config.json` definiert) geändert wurde, muss auch die `iot::Publish`-Richtlinienanweisung geändert werden, damit der Raspberry Pi unter dem neuen MQTT-Thema veröffentlichen kann.

**Um die MQTT-Nachricht vom Device Client aus zu senden AWS IoT**

1. Stellen Sie sicher, dass sowohl das Terminalfenster als auch das Fenster mit dem **MQTT-Testclient** sichtbar sind, während Sie dieses Verfahren ausführen. Stellen Sie außerdem sicher, dass Ihr **MQTT-Testclient** weiterhin den **\$1**-Themenfilter abonniert hat. Falls nicht, abonnieren Sie den **\$1**-Themenfilter erneut.

1. Geben Sie im Terminalfenster diese Befehle ein, um den AWS IoT Device Client mithilfe der in [Erstellen der Konfigurationsdatei](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1) erstellten Konfigurationsdatei auszuführen.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   Im Terminalfenster zeigt der AWS IoT Geräteclient Informationsmeldungen und alle Fehler an, die bei der Ausführung auftreten.

   Wenn im Terminalfenster keine Fehler angezeigt werden, überprüfen Sie den MQTT-Testclient.

1. Im **MQTT-Testclient** finden Sie im Fenster **Abonnements** die benutzerdefinierte Nachrichtennutzlast „Hallo Welt\$1“, die an das `test/dc/pubtopic`-Nachrichtenthema gesendet wurde.

1. Wenn der AWS IoT Geräteclient keine Fehler anzeigt und Sie die Nutzdaten für benutzerdefinierte Nachrichten sehen, die Sie zu der `test/dc/pubtopic` Nachricht im **MQTT-Testclient** veröffentlicht haben, haben Sie eine benutzerdefinierte Nachricht erfolgreich veröffentlicht.

1. Geben Sie im Terminalfenster **^C** (Strg-C) ein, um den Device Client zu beenden. AWS IoT 

Nachdem Sie nachgewiesen haben, dass der AWS IoT Device Client eine benutzerdefinierte Nachrichten-Payload veröffentlicht hat, können Sie damit fortfahren. [Demonstrieren Sie das Abonnieren von Nachrichten mit dem Device Client AWS IoT](iot-dc-testconn-subscribe.md)

# Demonstrieren Sie das Abonnieren von Nachrichten mit dem Device Client AWS IoT
<a name="iot-dc-testconn-subscribe"></a>

In diesem Abschnitt werden Sie zwei Arten von Nachrichtenabonnements demonstrieren:
+ Abonnement für ein einzelnes Thema
+ Abonnement für Wildcard-Themen

Die Richtlinienanweisungen in der Richtlinie, die Sie für diese Übungen erstellt haben, geben dem Raspberry Pi die Erlaubnis, die folgenden Aktionen auszuführen:
+ 

**`iot:Receive`**  
Erteilt dem AWS IoT Geräteclient die Erlaubnis, MQTT-Themen zu empfangen, die den `Resource` im Objekt genannten Themen entsprechen.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Receive"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic"
        ]
      }
  ```
+ 

**`iot:Subscribe`**  
Erteilt dem AWS IoT Geräteclient die Berechtigung, MQTT-Themenfilter zu abonnieren, die den `Resource` im Objekt genannten entsprechen.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Subscribe"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic"
        ]
      }
  ```

## Abonnieren eines einzelnen MQTT-Nachrichtenthemas
<a name="iot-dc-testconn-subscribe-simple-topic"></a>

Dieses Verfahren zeigt, wie der AWS IoT Device Client MQTT-Nachrichten abonnieren und protokollieren kann.

Listen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, den Inhalt der Datei von **\$1/dc-configs/dc-pubsub-custom-config.json** auf oder öffnen Sie die Datei in einem Texteditor, um den Inhalt zu überprüfen. Suchen Sie das `samples`-Objekt, das wie folgt aussehen sollte.

```
  "samples": {
    "pub-sub": {
      "enabled": true,
      "publish-topic": "test/dc/pubtopic",
      "publish-file": "~/messages/sample-ws-message.json",
      "subscribe-topic": "test/dc/subtopic",
      "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
```

Beachten Sie, dass der `subscribe-topic`-Wert das MQTT-Thema ist, das der AWS IoT Device Client bei der Ausführung abonniert. Der AWS IoT Device Client schreibt die Nachrichten-Payloads, die er von diesem Abonnement empfängt, in die `subscribe-file` im Wert angegebene Datei.

**Um ein MQTT-Nachrichtenthema vom Device Client aus zu abonnieren AWS IoT**

1. Stellen Sie sicher, dass sowohl das Terminalfenster als auch das Fenster mit dem MQTT-Testclient sichtbar sind, während Sie dieses Verfahren ausführen. Stellen Sie außerdem sicher, dass Ihr **MQTT-Testclient** weiterhin den **\$1**-Themenfilter abonniert hat. Falls nicht, abonnieren Sie den **\$1**-Themenfilter erneut.

1. Geben Sie im Terminalfenster diese Befehle ein, um den AWS IoT Device Client mithilfe der in [Erstellen der Konfigurationsdatei](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1) erstellten Konfigurationsdatei auszuführen.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   Im Terminalfenster zeigt der AWS IoT Geräteclient Informationsmeldungen und alle Fehler an, die bei der Ausführung auftreten.

   Wenn im Terminalfenster keine Fehler angezeigt werden, fahren Sie in der AWS IoT -Konsole fort.

1. Wählen Sie in der AWS IoT Konsole im **MQTT-Testclient** die Registerkarte In **einem Thema veröffentlichen**.

1. Geben Sie in das Feld **Name des Themas** **test/dc/subtopic** ein.

1. Überprüfen Sie unter **Nachrichtennutzlast** den Nachrichteninhalt.

1. Wählen Sie **Veröffentlichen**, um die MQTT-Nachricht zu veröffentlichen.

1. Achten Sie im Terminalfenster auf den Eintrag „*Nachricht empfangen*“ vom AWS IoT Geräteclient, der wie folgt aussieht.

   ```
   2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
   ```

1. Wenn Sie den Eintrag „*Nachricht empfangen*“ sehen, aus dem hervorgeht, dass die Nachricht empfangen wurde, geben Sie **^C** (Strg-C) ein, um den AWS IoT Geräteclient zu beenden.

1. Geben Sie diesen Befehl ein, um das Ende der Nachrichtenprotokolldatei und die Nachricht zu sehen, die Sie vom **MQTT-Testclient** aus veröffentlicht haben.

   ```
   tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```

Wenn Sie die Nachricht in der Protokolldatei angesehen haben, haben Sie nachgewiesen, dass der AWS IoT Device Client die von Ihnen über den MQTT-Testclient veröffentlichte Nachricht erhalten hat.

## Abonnieren mehrerer MQTT-Nachrichtenthemen mit Platzhalterzeichen
<a name="iot-dc-testconn-subscribe-wild-topic"></a>

Diese Verfahren zeigen, wie der AWS IoT Device Client MQTT-Nachrichten mithilfe von Platzhalterzeichen abonnieren und protokollieren kann. Gehen Sie dazu wie folgt vor:

1. Aktualisieren Sie den Themenfilter, den der AWS IoT Device Client verwendet, um MQTT-Themen zu abonnieren.

1. Aktualisieren Sie die vom Gerät verwendete Richtlinie, um die neuen Abonnements zuzulassen.

1. Führen Sie den AWS IoT Device Client aus und veröffentlichen Sie Nachrichten von der MQTT-Testkonsole aus.

**So erstellen Sie eine Konfigurationsdatei, um mehrere MQTT-Nachrichtenthemen mithilfe eines MQTT-Themenfilters mit Platzhaltern zu abonnieren:**

1. Öffnen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, **\$1/dc-configs/dc-pubsub-custom-config.json**, um das `samples`-Objekt zu finden und zu bearbeiten.

1. Suchen Sie im Texteditor das `samples`-Objekt und aktualisieren Sie den `subscribe-topic`-Wert so, dass er folgendermaßen aussieht: 

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/#",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

   Der neue `subscribe-topic`-Wert ist ein [MQTT-Themenfilter](topics.md#topicfilters) mit einem MQTT-Platzhalterzeichen am Ende. Dies beschreibt ein Abonnement für alle MQTT-Themen, die mit `test/dc/` beginnen. Der AWS IoT Geräteclient schreibt die Nachrichten-Payloads, die er von diesem Abonnement empfängt, in die unter genannte Datei. `subscribe-file`

1. Speichern Sie die geänderte Konfigurationsdatei als **\$1/dc-configs/dc-pubsub-wild-config.json** und schließen Sie den Editor.

**So ändern Sie die von Ihrem Raspberry Pi verwendete Richtlinie, um das Abonnieren und Empfangen mehrerer MQTT-Nachrichtenthemen zu ermöglichen:**

1. Öffnen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, in Ihrem bevorzugten Texteditor **\$1/policies/pubsub\$1test\$1thing\$1policy.json** zur Bearbeitung und suchen Sie dann die `iot::Subscribe`- und `iot::Receive`-Richtlinienanweisungen in der Datei.

1. Aktualisieren Sie in der `iot::Subscribe`-Richtlinienanweisung die Zeichenfolge im Ressourcenobjekt, indem Sie `subtopic` durch `*` ersetzten, sodass sie wie folgt aussieht:

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Subscribe"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*"
         ]
       }
   ```
**Anmerkung**  
Die [Platzhalterzeichen für den MQTT-Themenfilter](topics.md#topicfilters) sind das `+` (Pluszeichen) und das `#` (Pfundzeichen). Eine Abonnementanfrage mit `#` am Ende abonniert alle Themen, die mit der Zeichenfolge beginnen, die dem `#`-Zeichen vorausgeht (zum Beispiel `test/dc/` in diesem Fall).   
Der Ressourcenwert in der Richtlinienanweisung, die dieses Abonnement autorisiert, muss jedoch `*` (ein Sternchen) anstelle von `#` (ein Pfundzeichen) im Themenfilter ARN verwenden. Das liegt daran, dass der Richtlinienprozessor ein anderes Platzhalterzeichen verwendet als MQTT.  
Weitere Informationen zur Verwendung von Platzhalterzeichen für Themen und Themenfilter in Richtlinien finden Sie unter [Verwendung von Platzhalterzeichen in MQTT und Richtlinien AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

1. Aktualisieren Sie in der `iot::Receive`-Richtlinienanweisung die Zeichenfolge im Ressourcenobjekt, indem Sie `subtopic` durch `*` ersetzten, sodass sie wie folgt aussieht:

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Receive"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*"
         ]
       }
   ```

1. Speichern Sie das aktualisierte Richtliniendokument unter **\$1/policies/pubsub\$1wild\$1test\$1thing\$1policy.json** und schließen Sie den Editor.

1. Geben Sie diesen Befehl ein, um die Richtlinie für dieses Tutorial zu aktualisieren und die neuen Ressourcendefinitionen zu verwenden.

   ```
   aws iot create-policy-version \
   --set-as-default \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"
   ```

   Bei Erfolg gibt der Befehl ein Ergebnis wie dieses zurück: Beachten Sie, dass `policyVersionId` jetzt `2` ist, was darauf hindeutet, dass es sich um die zweite Version dieser Richtlinie handelt. 

   Wenn Sie die Richtlinie erfolgreich aktualisiert haben, können Sie mit dem nächsten Verfahren fortfahren.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
       "policyDocument": "{\n  \"Version\": \"2012-10-17\",		 	 	 \n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Connect\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Publish\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Subscribe\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Receive\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n      ]\n    }\n  ]\n}\n",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

   Wenn Sie die Fehlermeldung erhalten, dass zu viele Richtlinienversionen vorhanden sind, um eine neue zu speichern, geben Sie diesen Befehl ein, um die aktuellen Versionen der Richtlinie aufzulisten. Suchen Sie in der Liste, die dieser Befehl zurückgibt, nach einer Richtlinienversion, die Sie löschen können.

   ```
   aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
   ```

   Geben Sie diesen Befehl ein, um eine nicht mehr benötigte Version zu löschen. Beachten Sie, dass Sie die Standardversion der Richtlinie nicht löschen können. Die Standardversion der Richtlinie hat einen `isDefaultVersion`-Wert von `true`.

   ```
   aws iot delete-policy-version \
   --policy-name "PubSubTestThingPolicy" \
   --policy-version-id policyId
   ```

   Versuchen Sie diesen Schritt erneut, nachdem Sie eine Richtlinienversion gelöscht haben.

Mit der aktualisierten Konfigurationsdatei und der aktualisierten Richtlinie sind Sie bereit, Wildcard-Abonnements mit dem AWS IoT Device Client zu demonstrieren.

**Um zu demonstrieren, wie der AWS IoT Device Client mehrere MQTT-Nachrichtenthemen abonniert und empfängt**

1. Überprüfen Sie im **MQTT-Testclient** die Abonnements. Wenn der **MQTT-Testclient** den **\$1**-Themenfilter abonniert hat, fahren Sie mit dem nächsten Schritt fort. Falls nicht, geben Sie im **MQTT-Testclient** auf der Registerkarte **Thema abonnieren** im **Themenfilter** **\$1** (ein Pfundzeichen) ein und wählen Sie dann **Abonnieren** aus, um es zu abonnieren.

1. Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, diese Befehle ein, um den AWS IoT Device Client zu starten.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
   ```

1. Kehren Sie zum **MQTT-Testclient** zurück, während Sie sich die Ausgabe des AWS IoT Device Clients im Terminalfenster auf dem lokalen Host-Computer ansehen. Geben Sie auf der Registerkarte **In einem Thema veröffentlichen** unter **Themenname** **test/dc/subtopic** ein, und wählen Sie dann **Veröffentlichen** aus. 

1. Vergewissern Sie sich im Terminalfenster, dass die Nachricht empfangen wurde, indem Sie nach einer Nachricht suchen, wie z. B.:

   ```
   2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
   ```

1. Kehren Sie zum **MQTT-Testclient** zurück, während Sie sich die AWS IoT Geräteclient-Ausgabe im Terminalfenster des lokalen Host-Computers ansehen. Geben Sie auf der Registerkarte **In einem Thema veröffentlichen** unter **Themenname** **test/dc/subtopic2** ein, und wählen Sie dann **Veröffentlichen** aus. 

1. Vergewissern Sie sich im Terminalfenster, dass die Nachricht empfangen wurde, indem Sie nach einer Nachricht suchen, wie z. B.:

   ```
   2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
   ```

1. Wenn Sie die Meldungen sehen, die bestätigen, dass beide Nachrichten empfangen wurden, geben Sie **^C** (Strg-C) ein, um den AWS IoT Geräteclient zu beenden.

1. Geben Sie diesen Befehl ein, um das Ende der Nachrichtenprotokolldatei und die Nachricht zu sehen, die Sie vom **MQTT-Testclient** aus veröffentlicht haben.

   ```
   tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```
**Anmerkung**  
Die Protokolldatei enthält nur Nachrichtennutzlasten. Die Nachrichtenthemen werden nicht in der Protokolldatei für empfangene Nachrichten aufgezeichnet.  
Möglicherweise wird die vom AWS IoT Geräteclient veröffentlichte Nachricht auch im Empfangsprotokoll angezeigt. Das liegt daran, dass der Themenfilter mit Platzhaltern dieses Nachrichtenthema enthält und die Abonnementanforderung manchmal vom Message Broker verarbeitet werden kann, bevor die veröffentlichte Nachricht an Subscriber gesendet wird.

Die Einträge in der Protokolldatei belegen, dass die Nachrichten empfangen wurden. Sie können dieses Verfahren mit anderen Themennamen wiederholen. Alle Nachrichten, deren Themenname mit `test/dc/` beginnt, sollten empfangen und protokolliert werden. Nachrichten mit Themennamen, die mit einem anderen Text beginnen, werden ignoriert.

Nachdem Sie gezeigt haben, wie der AWS IoT Device Client MQTT-Nachrichten veröffentlichen und abonnieren kann, fahren Sie fort mit[Tutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client](iot-dc-runjobs.md).

# Tutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client
<a name="iot-dc-runjobs"></a>

In diesen Tutorials konfigurieren und implementieren Sie Jobs auf Ihrem Raspberry Pi, um nachzuweisen, dass Sie Fernoperationen an Ihre IoT-Geräte senden können.

**So beginnen Sie dieses Tutorial:**
+ Lassen Sie Ihren lokalen Host-Computer einen Raspberry Pi konfigurieren, wie [im vorherigen Abschnitt](iot-dc-testconn.md) zu sehen. 
+ Wenn Sie das Tutorial im vorherigen Abschnitt noch nicht abgeschlossen haben, können Sie dieses Tutorial ausprobieren, indem Sie den Raspberry Pi mit einer microSD-Karte verwenden, auf der das Bild gespeichert ist, das Sie nach der Installation des AWS IoT Device Clients gespeichert haben. [(Optional) Speichern des microSD-Karten-Images](iot-dc-install-download.md#iot-dc-install-dc-save)
+ Wenn Sie diese Demo schon einmal ausgeführt haben, überprüfen [Schritt 2: Bereinigen Sie Ihre Demos AWS-Konto nach dem Erstellen mit dem AWS IoT Device Client](iot-dc-cleanup.md#iot-dc-cleanup-cloud) Sie, ob Sie alle AWS IoT Ressourcen löschen sollten, die Sie in früheren Läufen erstellt haben, um doppelte Ressourcenfehler zu vermeiden.

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

**Wenn Sie mit diesem Thema fertig sind:**
+ Sie haben verschiedene Möglichkeiten demonstriert, wie Ihr IoT-Gerät die verwenden kann AWS IoT Core , um Fernoperationen auszuführen, die von verwaltet werden AWS IoT .

**Erforderliche Ausstattung:**
+ Ihre lokale Entwicklungs- und Testumgebung, die Sie in [einem vorherigen Abschnitt](iot-dc-install-dc.md) getestet haben
+ Der Raspberry Pi, den Sie im [vorherigen Abschnitt](iot-dc-install-dc.md) getestet haben
+ Die microSD-Speicherkarte des Raspberry Pi, die Sie in [einem vorherigen Abschnitt](iot-dc-install-dc.md) getestet haben

**Topics**
+ [Bereiten Sie den Raspberry Pi für die Ausführung von Jobs vor](iot-dc-runjobs-prepare.md)
+ [Erstellen Sie den Job AWS IoT mit dem AWS IoT Geräteclient und führen Sie ihn aus](iot-dc-runjobs-prepare-define.md)

# Bereiten Sie den Raspberry Pi für die Ausführung von Jobs vor
<a name="iot-dc-runjobs-prepare"></a>

Die Verfahren in diesem Abschnitt beschreiben, wie Sie Ihren Raspberry Pi für die Ausführung von Jobs mithilfe des AWS IoT Geräteclients vorbereiten.

**Anmerkung**  
Diese Verfahren sind gerätespezifisch. Wenn Sie die Verfahren in diesem Abschnitt mit mehr als einem Gerät gleichzeitig durchführen möchten, benötigt jedes Gerät eine eigene Richtlinie und ein eindeutiges, gerätespezifisches Zertifikat sowie einen ebensolchen Objektnamen. Um jedem Gerät seine eigenen Ressourcen zuzuweisen, führen Sie dieses Verfahren einmal für jedes Gerät durch und ändern Sie dabei die gerätespezifischen Elemente, wie in den Verfahren beschrieben.

**Topics**
+ [Bereitstellen Ihres Raspberry Pi, um Jobs zu demonstrieren](#iot-dc-runjobs-prepare-provision)
+ [Konfigurieren Sie den AWS IoT Geräteclient so, dass er den Job-Agent ausführt](#iot-dc-runjobs-prepare-config)

## Bereitstellen Ihres Raspberry Pi, um Jobs zu demonstrieren
<a name="iot-dc-runjobs-prepare-provision"></a>

Die Verfahren in diesem Abschnitt stellen Ihren Raspberry Pi bereit, AWS IoT indem Sie AWS IoT Ressourcen und Gerätezertifikate dafür erstellen. 

**Topics**
+ [Erstellen Sie Gerätezertifikatsdateien und laden Sie sie herunter, um AWS IoT Jobs zu demonstrieren](#iot-dc-runjobs-prepare-cert)
+ [Erstellen Sie AWS IoT Ressourcen, um AWS IoT Jobs zu demonstrieren](#iot-dc-runjobs-prepare-iot)

### Erstellen Sie Gerätezertifikatsdateien und laden Sie sie herunter, um AWS IoT Jobs zu demonstrieren
<a name="iot-dc-runjobs-prepare-cert"></a>

Mit diesem Verfahren werden die Gerätezertifikatsdateien für diese Demo erstellt.

Wenn Sie mehr als ein Gerät vorbereiten, muss dieses Verfahren auf jedem Gerät durchgeführt werden.

**So erstellen Sie die Gerätezertifikatsdateien für Ihren Raspberry Pi und laden sie herunter:**

Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, folgendermaßen vor:

1. Geben Sie den folgenden Befehl ein, um die Gerätezertifikatsdateien für Ihr Gerät zu erstellen.

   ```
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/jobs/device.pem.crt" \
   --public-key-outfile "~/certs/jobs/public.pem.key" \
   --private-key-outfile "~/certs/jobs/private.pem.key"
   ```

   Die Ausgabe des Befehls ähnelt der Folgenden: Speichern Sie den `certificateArn`-Wert zur späteren Verwendung.

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
   "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
   }
   }
   ```

1. Geben Sie die folgenden Befehle ein, um die Berechtigungen für das Zertifikatsverzeichnis und seine Dateien festzulegen.

   ```
   chmod 700 ~/certs/jobs
   chmod 644 ~/certs/jobs/*
   chmod 600 ~/certs/jobs/private.pem.key
   ```

1. Führen Sie diesen Befehl aus, um die Berechtigungen für Ihre Zertifikatsverzeichnisse und -dateien zu überprüfen.

   ```
   ls -l ~/certs/jobs
   ```

   Der Befehl sollte ähnliche Werte wie die hier angezeigten ausgeben, mit der Ausnahme, dass Datum und Uhrzeit unterschiedlich sein werden.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

Nachdem Sie die Gerätezertifikatsdateien auf Ihren Raspberry Pi heruntergeladen haben, können Sie mit [Bereitstellen Ihres Raspberry Pi, um Jobs zu demonstrieren](#iot-dc-runjobs-prepare-provision) fortfahren.

### Erstellen Sie AWS IoT Ressourcen, um AWS IoT Jobs zu demonstrieren
<a name="iot-dc-runjobs-prepare-iot"></a>

Erstellen Sie die AWS IoT Ressourcen für dieses Gerät.

Wenn Sie mehr als ein Gerät vorbereiten, muss dieses Verfahren auf jedem Gerät durchgeführt werden.



**So stellen Sie Ihr Gerät in AWS IoT bereit:**

Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, folgendermaßen vor:

1. Geben Sie den folgenden Befehl ein, um die Adresse des Gerätedatenendpunkts für Ihr AWS-Konto abzurufen.

   ```
   aws iot describe-endpoint --endpoint-type IoT:Data-ATS
   ```

   Der Endpunktwert hat sich seit der letzten Ausführung dieses Befehls nicht geändert. Wenn Sie den Befehl hier erneut ausführen, können Sie den Datenendpunktwert leicht finden und in die in diesem Tutorial verwendete Konfigurationsdatei einfügen.

   Die Ausgabe des **describe-endpoint**-Befehls ähnelt der folgenden: Notieren Sie sich den `endpointAddress`-Wert zur späteren Verwendung.

   ```
   {
   "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. *uniqueThingName*Ersetzen Sie es durch einen eindeutigen Namen für Ihr Gerät. Wenn Sie dieses Tutorial mit mehreren Geräten durchführen möchten, geben Sie jedem Gerät einen eigenen Namen. Beispiele: **TestDevice01**, **TestDevice02** usw.

   Geben Sie diesen Befehl ein, um eine neue Ding-Ressource AWS IoT für Ihren Raspberry Pi zu erstellen.

   ```
   aws iot create-thing --thing-name "uniqueThingName"
   ```

   Da AWS IoT es sich bei einer Ding-Ressource um eine *virtuelle* Darstellung Ihres Geräts in der Cloud handelt, können wir mehrere Ding-Ressourcen erstellen, AWS IoT um sie für verschiedene Zwecke zu verwenden. Sie können alle von demselben physischen IoT-Gerät verwendet werden, um verschiedene Aspekte des Geräts darzustellen.
**Anmerkung**  
Wenn Sie die Richtlinie für mehrere Geräte sichern möchten, können Sie `${iot:Thing.ThingName}` anstelle des statischen Objektnamens verwenden, `uniqueThingName`.

   In diesen Tutorials wird jeweils nur eine Objektressource pro Gerät verwendet. Auf diese Weise stellen sie in diesen Tutorials die verschiedenen Demos dar, sodass Sie, nachdem Sie die AWS IoT Ressourcen für eine Demo erstellt haben, zurückgehen und die Demos mit den Ressourcen wiederholen können, die Sie jeweils speziell erstellt haben.

   Wenn Ihre AWS IoT Ding-Ressource erstellt wurde, gibt der Befehl eine Antwort wie diese zurück. Notieren Sie sich den `thingArn`-Wert, damit er später verwendet werden kann, wenn Sie den Job für die Ausführung auf diesem Gerät erstellen.

   ```
   {
   "thingName": "uniqueThingName",
   "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/uniqueThingName",
   "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. Im Terminalfenster:

   1. Öffnen Sie einen Texteditor, z. B. `nano`.

   1. Kopieren Sie dieses JSON-Dokument und fügen Sie es in Ihren geöffneten Texteditor ein.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:DescribeJobExecution",
                      "iot:GetPendingJobExecutions",
                      "iot:StartNextPendingJobExecution",
                      "iot:UpdateJobExecution"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
                  ]
              }
          ]
      }
      ```

   1. Ersetzen Sie im Editor im `Resource` Abschnitt jeder Grundsatzerklärung *us-west-2:57EXAMPLE833* durch Ihr AWS-Region, einen Doppelpunkt (:) und Ihre 12-stellige AWS-Konto Zahl.

   1. Ersetzen *uniqueThingName* Sie es im Editor in jeder Richtlinienerklärung durch den Namen des Dings, den Sie der Ressource gegeben haben.

   1. Speichern Sie die Datei als **\$1/policies/jobs\$1test\$1thing\$1policy.json** in Ihrem Texteditor.

      Wenn Sie dieses Verfahren für mehrere Geräte ausführen, speichern Sie die Datei auf jedem Gerät unter diesem Dateinamen.

1. *uniqueThingName*Ersetzen Sie es durch den Ding-Namen für das Gerät und führen Sie dann diesen Befehl aus, um eine AWS IoT Richtlinie zu erstellen, die auf dieses Gerät zugeschnitten ist.

   ```
   aws iot create-policy \
   --policy-name "JobTestPolicyForuniqueThingName" \
   --policy-document "file://~/policies/jobs_test_thing_policy.json"
   ```

   Wenn die Richtlinie erstellt wurde, gibt der Befehl eine Antwort wie die folgende zurück:  
****  

   ```
   {
       "policyName": "JobTestPolicyForuniqueThingName",
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/JobTestPolicyForuniqueThingName",
       "policyDocument": "{\n\"Version\": \"2012-10-17\",\n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n",
       "policyVersionId": "1"
   }
   ```

1. *uniqueThingName*Ersetzen Sie es durch den Ding-Namen für das Gerät und `certificateArn` durch den `certificateArn` Wert, den Sie weiter oben in diesem Abschnitt für dieses Gerät gespeichert haben, und führen Sie dann diesen Befehl aus, um die Richtlinie an das Gerätezertifikat anzuhängen. 

   ```
   aws iot attach-policy \
   --policy-name "JobTestPolicyForuniqueThingName" \
   --target "certificateArn"
   ```

   Bei erfolgreicher Ausführung gibt dieser Befehl nichts zurück.

1.  *uniqueThingName*Ersetzen Sie es durch den Ding-Namen für das Gerät, `certificateArn` ersetzen Sie es durch den `certificateArn` Wert, den Sie weiter oben in diesem Abschnitt gespeichert haben, und führen Sie dann diesen Befehl aus, um das Gerätezertifikat an die AWS IoT Ding-Ressource anzuhängen.

   ```
   aws iot attach-thing-principal \
   --thing-name "uniqueThingName" \
   --principal "certificateArn"
   ```

   Bei erfolgreicher Ausführung gibt dieser Befehl nichts zurück.

Nachdem Sie Ihren Raspberry Pi erfolgreich bereitgestellt haben, können Sie diesen Abschnitt für einen anderen Raspberry Pi in Ihrem Test wiederholen oder, falls alle Geräte bereitgestellt wurden, mit [Konfigurieren Sie den AWS IoT Geräteclient so, dass er den Job-Agent ausführt](#iot-dc-runjobs-prepare-config) fortfahren.

## Konfigurieren Sie den AWS IoT Geräteclient so, dass er den Job-Agent ausführt
<a name="iot-dc-runjobs-prepare-config"></a>

Mit diesem Verfahren wird eine Konfigurationsdatei für den AWS IoT Geräteclient erstellt, um den Job-Agenten auszuführen:.

Hinweis: Wenn Sie mehr als ein Gerät vorbereiten, muss dieses Verfahren auf jedem Gerät durchgeführt werden.

**So erstellen Sie die Konfigurationsdatei zum Testen des AWS IoT Geräteclients:**

1. Gehen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, folgendermaßen vor:

   1. Öffnen Sie einen Texteditor, z. B. `nano`.

   1. Kopieren Sie dieses JSON-Dokument und fügen Sie es in Ihren geöffneten Texteditor ein.

      ```
      {
        "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
        "cert": "~/certs/jobs/device.pem.crt",
        "key": "~/certs/jobs/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "uniqueThingName",
        "logging": {
          "enable-sdk-logging": true,
          "level": "DEBUG",
          "type": "STDOUT",
          "file": ""
        },
        "jobs": {
          "enabled": true,
          "handler-directory": ""
        },
        "tunneling": {
          "enabled": false
        },
        "device-defender": {
          "enabled": false,
          "interval": 300
        },
        "fleet-provisioning": {
          "enabled": false,
          "template-name": "",
          "template-parameters": "",
          "csr-file": "",
          "device-key": ""
        },
        "samples": {
          "pub-sub": {
            "enabled": false,
            "publish-topic": "",
            "publish-file": "",
            "subscribe-topic": "",
            "subscribe-file": ""
          }
        },
        "config-shadow": {
          "enabled": false
        },
        "sample-shadow": {
          "enabled": false,
          "shadow-name": "",
          "shadow-input-file": "",
          "shadow-output-file": ""
        }
      }
      ```

   1. Ersetzen Sie den *endpoint* Wert durch den Endpunktwert für Ihre Gerätedaten AWS-Konto , den Sie in gefunden haben[Stellen Sie Ihr Gerät bereit in AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

   1. *uniqueThingName*Ersetzen Sie ihn durch den Namen des Objekts, den Sie für dieses Gerät verwendet haben.

   1. Speichern Sie die Datei als **\$1/dc-configs/dc-jobs-config.json** in Ihrem Texteditor.

1. Führen Sie diesen Befehl aus, um die Dateiberechtigungen der neuen Konfigurationsdatei festzulegen.

   ```
   chmod 644 ~/dc-configs/dc-jobs-config.json
   ```

Sie werden den **MQTT-Testclient** für diesen Test nicht verwenden. Das Gerät tauscht zwar auftragsbezogene MQTT-Nachrichten mit AWS IoT, aber Nachrichten über den Auftragsfortschritt werden nur mit dem Gerät ausgetauscht, auf dem der Job ausgeführt wird. Da Nachrichten über den Auftragsfortschritt nur mit dem Gerät ausgetauscht werden, auf dem der Job ausgeführt wird, können Sie sie nicht von einem anderen Gerät aus abonnieren, z. B. von der Konsole aus. AWS IoT 

Nachdem Sie die Konfigurationsdatei gespeichert haben, können Sie mit [Erstellen Sie den Job AWS IoT mit dem AWS IoT Geräteclient und führen Sie ihn aus](iot-dc-runjobs-prepare-define.md) fortfahren.

# Erstellen Sie den Job AWS IoT mit dem AWS IoT Geräteclient und führen Sie ihn aus
<a name="iot-dc-runjobs-prepare-define"></a>

Mit den Verfahren in diesem Abschnitt werden ein Jobdokument und eine AWS IoT Jobressource erstellt. Nachdem Sie die Auftragsressource erstellt haben, wird das Auftragsdokument an die angegebenen Auftragsziele AWS IoT gesendet, auf die ein Job-Agent das Auftragsdokument auf das Gerät oder den Client überträgt.

**Topics**
+ [Erstellen und speichern Sie das Jobdokument für den IoT-Job](#iot-dc-runjobs-prepare-define-jobdoc)
+ [Führen Sie einen Job AWS IoT für ein IoT-Gerät aus](#iot-dc-runjobs-prepare-define-job)

## Erstellen und speichern Sie das Jobdokument für den IoT-Job
<a name="iot-dc-runjobs-prepare-define-jobdoc"></a>

Mit diesem Verfahren wird ein einfaches Auftragsdokument erstellt, das in eine AWS IoT Auftragsressource aufgenommen werden kann. In diesem Jobdokument wird „Hallo Welt\$1“ auf dem Jobziel angezeigt.

**So erstellen und speichern Sie ein Jobdokument:**

1. Wählen Sie den Amazon-S3-Bucket aus, in dem Sie Ihr Jobdokument speichern möchten. Wenn Sie nicht über einen vorhandenen Amazon-S3-Bucket verfügen, den Sie verwenden können, müssen Sie einen erstellen. Weitere Informationen zum Erstellen von Amazon-S3-Buckets finden Sie unter[Erste Schritte mit Amazon S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/GetStartedWithS3.html).

1. Erstellen und Speichern des Jobdokuments für diesen Job

   1. Öffnen Sie auf Ihrem lokalen Host-Computer einen Texteditor.

   1. Kopieren Sie den folgenden Text und fügen Sie ihn in den Editor ein.

      ```
      {
          "operation": "echo",
          "args": ["Hello world!"]
      }
      ```

   1. Speichern Sie auf dem lokalen Host-Computer den Inhalt des Editors in einer Datei mit dem Namen **hello-world-job.json**.

   1. Vergewissern Sie sich, dass die Datei korrekt gespeichert wurde. Einige Texteditoren fügen `.txt` beim Speichern einer Textdatei automatisch an den Dateinamen an. Wenn Ihr Editor `.txt` an den Dateinamen angehängt hat, korrigieren Sie den Dateinamen, bevor Sie fortfahren.

1. Ersetzen Sie das *path\$1to\$1file* durch den Pfad zu**hello-world-job.json**, falls es sich nicht in Ihrem aktuellen Verzeichnis befindet, *s3\$1bucket\$1name* ersetzen Sie es durch den Amazon S3 S3-Bucket-Pfad zu dem von Ihnen ausgewählten Bucket und führen Sie dann diesen Befehl aus, um Ihr Jobdokument in den Amazon S3 S3-Bucket zu legen.

   ```
   aws s3api put-object \
   --key hello-world-job.json \
   --body path_to_file/hello-world-job.json --bucket s3_bucket_name
   ```

   Die URL des Auftragsdokuments, die das in Amazon S3 gespeicherte Jobdokument identifiziert, wird bestimmt, indem das *s3\$1bucket\$1name* und *AWS\$1region* in der folgenden URL ersetzt wird. Notieren Sie sich die resultierende URL, um sie später als *job\$1document\$1path*

   ```
   https://s3_bucket_name.s3.AWS_Region.amazonaws.com/hello-world-job.json
   ```
**Anmerkung**  
AWS Die Sicherheit verhindert, dass Sie diese URL außerhalb Ihres Browsers öffnen können AWS-Konto, z. B. mithilfe eines Browsers. Die URL wird standardmäßig von der AWS IoT Job-Engine verwendet, die Zugriff auf die Datei hat. In einer Produktionsumgebung müssen Sie sicherstellen, dass Ihre AWS IoT -Services berechtigt sind, auf die in Amazon S3 gespeicherten Jobdokumente zuzugreifen.

Nachdem Sie die URL des Jobdokuments gespeichert haben, fahren Sie fort mit [Führen Sie einen Job AWS IoT für ein IoT-Gerät aus](#iot-dc-runjobs-prepare-define-job).

## Führen Sie einen Job AWS IoT für ein IoT-Gerät aus
<a name="iot-dc-runjobs-prepare-define-job"></a>

Die Verfahren in diesem Abschnitt starten den AWS IoT Geräteclient auf Ihrem Raspberry Pi, um den Job-Agenten auf dem Gerät auszuführen und auf die Ausführung von Jobs zu warten. Außerdem wird eine Jobressource in erstellt AWS IoT, die den Job an Ihr IoT-Gerät sendet und dort ausgeführt wird.

**Anmerkung**  
Dieses Verfahren führt einen Job nur auf einem einzigen Gerät aus.

**So starten Sie den Job-Agenten auf Ihrem Raspberry Pi:**

1. Führen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, diesen Befehl aus, um den AWS IoT Geräteclient zu starten.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-jobs-config.json
   ```

1. Vergewissern Sie sich im Terminalfenster, dass der AWS IoT Geräteclient diese Meldungen anzeigt

   ```
   2021-11-15T18:45:56.708Z [INFO]  {Main.cpp}: Jobs is enabled
                         .
                         .
                         .
   2021-11-15T18:45:56.708Z [INFO]  {Main.cpp}: Client base has been notified that Jobs has started
   2021-11-15T18:45:56.708Z [INFO]  {JobsFeature.cpp}: Running Jobs!
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to startNextPendingJobExecution accepted and rejected
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to nextJobChanged events
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusAccepted for jobId +
   2021-11-15T18:45:56.738Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionAccepted with code {0}
   2021-11-15T18:45:56.739Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusRejected for jobId +
   2021-11-15T18:45:56.753Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToNextJobChanged with code {0}
   2021-11-15T18:45:56.760Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobRejected with code {0}
   2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobAccepted with code {0}
   2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionRejected with code {0}
   2021-11-15T18:45:56.777Z [DEBUG] {JobsFeature.cpp}: Publishing startNextPendingJobExecutionRequest
   2021-11-15T18:45:56.785Z [DEBUG] {JobsFeature.cpp}: Ack received for StartNextPendingJobPub with code {0}
   2021-11-15T18:45:56.785Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

1. Wenn Sie im Terminalfenster diese Meldung sehen, fahren Sie mit dem nächsten Verfahren fort und erstellen Sie die Jobressource. Beachten Sie, dass dies möglicherweise nicht der letzte Eintrag in der Liste ist.

   ```
   2021-11-15T18:45:56.785Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

**Um eine AWS IoT Jobressource zu erstellen**

1. Auf Ihrem lokalen Host-Computer:

   1. *job\$1document\$1url*Ersetzen Sie es durch die URL des Jobdokuments von[Erstellen und speichern Sie das Jobdokument für den IoT-Job](#iot-dc-runjobs-prepare-define-jobdoc).

   1. *thing\$1arn*Ersetzen Sie es durch den ARN der Ding-Ressource, die Sie für Ihr Gerät erstellt haben, und führen Sie dann diesen Befehl aus.

      ```
      aws iot create-job \
      --job-id hello-world-job-1 \
      --document-source "job_document_url" \
      --targets "thing_arn" \
      --target-selection SNAPSHOT
      ```

      Bei Erfolg gibt der Befehl ein Ergebnis wie dieses zurück:

      ```
      {
        "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
        "jobId": "hello-world-job-1"
      }
      ```

1. Im Terminalfenster sollten Sie eine Ausgabe vom AWS IoT Geräteclient wie folgt sehen.

   ```
   2021-11-15T18:02:26.688Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Job ids differ
   2021-11-15T18:10:24.890Z [INFO]  {JobsFeature.cpp}: Executing job: hello-world-job-1
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status!
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Assuming executable is in PATH
   2021-11-15T18:10:24.890Z [INFO]  {JobsFeature.cpp}: About to execute: echo Hello world!
   2021-11-15T18:10:24.890Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken 3TEWba9Xj6 in the updateJobExecution promises map
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process now running
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process about to call execvp
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Parent process now running, child PID is 16737
   2021-11-15T18:10:24.891Z [DEBUG] {16737}: Hello world!
   2021-11-15T18:10:24.891Z [DEBUG] {JobEngine.cpp}: JobEngine finished waiting for child process, returning 0
   2021-11-15T18:10:24.891Z [INFO]  {JobsFeature.cpp}: Job exited with status: 0
   2021-11-15T18:10:24.891Z [INFO]  {JobsFeature.cpp}: Job executed successfully!
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status!
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details
   2021-11-15T18:10:24.892Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success
   2021-11-15T18:10:24.892Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken GmQ0HTzWGg in the updateJobExecution promises map
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0}
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken 3TEWba9Xj6 from the updateJobExecution promises map
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1
   2021-11-15T18:10:24.917Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0}
   2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken GmQ0HTzWGg from the updateJobExecution promises map
   2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1
   2021-11-15T18:10:25.861Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

1. Während der AWS IoT Geräteclient läuft und auf einen Job wartet, können Sie einen anderen Job einreichen, indem Sie den `job-id` Wert ändern und den **create-job** aus Schritt 1 stammenden Vorgang erneut ausführen.

Wenn Sie mit der Ausführung der Jobs fertig sind, geben Sie im Terminalfenster ^C (Strg-C) ein, um den AWS IoT Device Client zu beenden.

# Tutorial: Aufräumen nach dem Ausführen der AWS IoT Device Client-Tutorials
<a name="iot-dc-cleanup"></a>

Die Verfahren in diesem Tutorial führen Sie Schritt für Schritt durch das Entfernen der Dateien und Ressourcen, die Sie während der Durchführung der Tutorials in diesem Lernpfad erstellt haben.

**Topics**
+ [Schritt 1: Bereinigen Ihrer Geräte nach dem Erstellen von Demos mit dem AWS IoT Device Client](#iot-dc-cleanup-devices)
+ [Schritt 2: Bereinigen Sie Ihre Demos AWS-Konto nach dem Erstellen mit dem AWS IoT Device Client](#iot-dc-cleanup-cloud)

## Schritt 1: Bereinigen Ihrer Geräte nach dem Erstellen von Demos mit dem AWS IoT Device Client
<a name="iot-dc-cleanup-devices"></a>

In diesem Tutorial werden zwei Optionen beschrieben, wie Sie die microSD-Karte bereinigen können, nachdem Sie die Demos in diesem Lernpfad erstellt haben. Wählen Sie die Option aus, die das von Ihnen benötigte Sicherheitsniveau bietet.

Beachten Sie, dass durch das Reinigen der microSD-Karte des Geräts keine AWS IoT Ressourcen entfernt werden, die Sie erstellt haben. Um die AWS IoT Ressourcen zu bereinigen, nachdem Sie die microSD-Karte des Geräts gereinigt haben, sollten Sie das Tutorial unter [Schritt 2: Bereinigen Sie Ihre Demos AWS-Konto nach dem Erstellen mit dem AWS IoT Device Client](#iot-dc-cleanup-cloud) lesen.

### Option 1: Bereinigen durch Umschreiben der microSD-Karte
<a name="iot-dc-cleanup-devices-flash"></a>

Die einfachste und gründlichste Methode, die microSD-Karte nach Abschluss der Tutorials in diesem Lernpfad zu bereinigen, besteht darin, die microSD-Karte mit einer gespeicherten Image-Datei zu überschreiben, die Sie bei der ersten Vorbereitung Ihres Geräts erstellt haben.

Bei diesem Verfahren wird der lokale Hostcomputer verwendet, um ein gespeichertes microSD-Karten-Image auf eine microSD-Karte zu schreiben.

**Anmerkung**  
Wenn Ihr Gerät kein Wechselspeichermedium für sein Betriebssystem verwendet, lesen Sie das Verfahren für dieses Gerät.

**So schreiben Sie ein neues Image auf die microSD-Karte**

1. Suchen Sie auf Ihrem lokalen Hostcomputer das gespeicherte microSD-Karten-Image, das Sie auf Ihre microSD-Karte schreiben möchten. 

1. Legen Sie die microSD-Karte in Ihren Hostcomputer ein.

1. Schreiben Sie die ausgewählte Image-Datei mit einem SD-Karten-Imaging-Tool auf die microSD-Karte.

1. Nachdem Sie das Raspberry Pi OS-Image auf die microSD-Karte geschrieben haben, werfen Sie die microSD-Karte aus und entfernen Sie sie sicher vom lokalen Hostcomputer.

Ihre microSD-Karte ist nun einsatzbereit.

### Option 2: Bereinigen durch Löschen von Benutzerverzeichnissen
<a name="iot-dc-cleanup-devices-dirs"></a>

Um die microSD-Karte nach Abschluss der Tutorials zu bereinigen, ohne das microSD-Karten-Image neu zu schreiben, können Sie die Benutzerverzeichnisse einzeln löschen. Dies ist nicht so gründlich wie das Neuschreiben der microSD-Karte aus einem gespeicherten Image, da dabei keine Systemdateien entfernt werden, die möglicherweise installiert wurden.

Wenn das Entfernen der Benutzerverzeichnisse für Ihre Bedürfnisse ausreichend ist, können Sie wie folgt vorgehen.

**So löschen Sie die Benutzerverzeichnisse dieses Lernpfads von Ihrem Gerät**

1. Führen Sie diese Befehle aus, um die Benutzerverzeichnisse, Unterverzeichnisse und alle zugehörigen Dateien, die in diesem Lernpfad erstellt wurden, im mit Ihrem Gerät verbundenen Terminalfenster zu löschen.
**Anmerkung**  
Nachdem Sie diese Verzeichnisse und Dateien gelöscht haben, können Sie die Demos nicht mehr ausführen, ohne die Tutorials erneut abzuschließen.

   ```
   rm -Rf ~/dc-configs
   rm -Rf ~/policies
   rm -Rf ~/messages
   rm -Rf ~/certs
   rm -Rf ~/.aws-iot-device-client
   ```

1. Führen Sie diese Befehle aus, um die Quellverzeichnisse und Dateien der Anwendung im Terminalfenster zu löschen, das mit Ihrem Gerät verbunden ist.
**Anmerkung**  
Mit diesen Befehlen werden keine Programme deinstalliert. Sie entfernen nur die Quelldateien, die zu ihrer Erstellung und Installation verwendet wurden. Nachdem Sie diese Dateien gelöscht haben, funktionieren der Geräteclient AWS CLI und der AWS IoT Geräteclient möglicherweise nicht mehr.

   ```
   rm -Rf ~/aws-cli
   rm -Rf ~/aws
   rm -Rf ~/aws-iot-device-client
   ```

## Schritt 2: Bereinigen Sie Ihre Demos AWS-Konto nach dem Erstellen mit dem AWS IoT Device Client
<a name="iot-dc-cleanup-cloud"></a>

Diese Verfahren helfen Ihnen dabei, die AWS Ressourcen zu identifizieren und zu entfernen, die Sie während der Durchführung der Tutorials in diesem Lernpfad erstellt haben.

### AWS IoT Ressourcen bereinigen
<a name="iot-dc-cleanup-cloud-iot"></a>

Dieses Verfahren hilft Ihnen dabei, die AWS IoT Ressourcen zu identifizieren und zu entfernen, die Sie beim Durchlaufen der Tutorials auf diesem Lernpfad erstellt haben.


**AWS IoT Ressourcen, die auf diesem Lernpfad erstellt wurden**  

| Tutorial | Objektressource | Richtlinienressource | 
| --- | --- | --- | 
|  [Tutorial: Installation und Konfiguration des AWS IoT Device Clients](iot-dc-install-dc.md)  |  **DevCliTestThing**  | DevCliTestThingPolicy | 
|  [Tutorial: Demonstrieren Sie die MQTT-Nachrichtenkommunikation mit dem AWS IoT Device Client](iot-dc-testconn.md)  |  **PubSubTestThing**  | PubSubTestThingPolicy | 
|  [Tutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client](iot-dc-runjobs.md)  | benutzerdefiniert (es können mehrere vorhanden sein) |  *benutzerdefiniert* (es können mehrere vorhanden sein)  | 

**Um die AWS IoT Ressourcen zu löschen, gehen Sie für jede einzelne Ressource, die Sie erstellt haben, wie folgt vor**

1. Ersetzen Sie `thing_name` durch den Namen der Objektressource, die Sie löschen möchten, und führen Sie dann diesen Befehl aus, um die Zertifikate aufzulisten, die an die Objektressource vom lokalen Hostcomputer aus angehängt sind.

   ```
   aws iot list-thing-principals --thing-name thing_name
   ```

   Dieser Befehl gibt eine Antwort wie diese zurück, in der die Zertifikate aufgeführt sind, die an `thing_name` angehängt sind. In den meisten Fällen wird die Liste nur ein Zertifikat enthalten.

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:cert/23853eea3cf0edc7f8a69c74abeafa27b2b52823cab5b3e156295e94b26ae8ac"
       ]
   }
   ```

1. Gehen Sie wie folgt für jedes Zertifikat vor, das im vorherigen Befehl aufgeführt wurde:

   1. Ersetzen Sie `certificate_ID` durch die Zertifikat-ID aus dem vorherigen Befehl. Die Zertifikat-ID besteht aus den alphanumerischen Zeichen, die auf `cert/` in dem vom vorherigen Befehl zurückgegebenen ARN folgen. Führen Sie dann diesen Befehl aus, um das Zertifikat zu deaktivieren.

      ```
      aws iot update-certificate --new-status INACTIVE --certificate-id certificate_ID
      ```

      Bei Erfolg gibt dieser Befehl nichts zurück.

   1. Ersetzen Sie `certificate_ARN` durch den Zertifikat-ARN aus der zuvor zurückgegebenen Zertifikatsliste, und führen Sie dann diesen Befehl aus, um die mit diesem Zertifikat verknüpften Richtlinien aufzulisten.

      ```
      aws iot list-attached-policies --target certificate_ARN
      ```

      Dieser Befehl gibt eine Antwort wie diese zurück, in der die Richtlinien aufgeführt sind, die an das Zertifikat angehängt sind. In den meisten Fällen wird die Liste nur eine Richtlinie enthalten.

      ```
      {
          "policies": [
              {
                  "policyName": "DevCliTestThingPolicy",
                  "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy"
              }
          ]
      }
      ```

   1. Gehen Sie für jede dem Zertifikat angefügte Richtlinie wie folgt vor:

      1. Ersetzen Sie `policy_name` durch den `policyName`-Wert aus dem vorherigen Befehl, ersetzen Sie `certificate_ARN` durch den ARN des Zertifikats, und führen Sie dann diesen Befehl aus, um die Richtlinie vom Zertifikat zu trennen.

         ```
         aws iot detach-policy --policy-name policy_name --target certificate_ARN
         ```

         Bei Erfolg gibt dieser Befehl nichts zurück.

      1. Ersetzen Sie `policy_name` durch den `policyName`-Wert, und führen Sie dann diesen Befehl aus, um zu überprüfen, ob die Richtlinie an weitere Zertifikate angehängt ist.

         ```
         aws iot list-targets-for-policy --policy-name policy_name
         ```

         Wenn der Befehl eine leere Liste wie diese zurückgibt, ist die Richtlinie an keine Zertifikate angehängt, und Sie können die Richtlinienversionen weiterhin auflisten. Wenn der Richtlinie immer noch Zertifikate angehängt sind, fahren Sie mit dem Schritt **detach-thing-principal** fort.

         ```
         {
             "targets": []
         }
         ```

      1. Ersetzen Sie `policy_name` durch den `policyName`-Wert, und führen Sie dann diesen Befehl aus, um nach Richtlinienversionen zu suchen. Um die Richtlinie zu löschen, darf sie nur eine Version haben.

         ```
         aws iot list-policy-versions --policy-name policy_name
         ```

         Wenn die Richtlinie nur eine Version hat, wie in diesem Beispiel, können Sie mit dem Schritt **delete-policy** fortfahren und die Richtlinie jetzt löschen.

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "1",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:02:46.778000+00:00"
                 }
             ]
         }
         ```

         Wenn die Richtlinie mehr als eine Version hat, wie in diesem Beispiel, müssen die Richtlinienversionen mit einem `isDefaultVersion`-Wert von `false` gelöscht werden, bevor die Richtlinie gelöscht werden kann.

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "2",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:52:04.423000+00:00"
                 },
                 {
                     "versionId": "1",
                     "isDefaultVersion": false,
                     "createDate": "2021-11-18T01:30:18.083000+00:00"
                 }
             ]
         }
         ```

         Wenn Sie eine Richtlinienversion löschen müssen, ersetzen Sie `policy_name` durch den `policyName`-Wert, ersetzen Sie `version_ID` durch den `versionId`-Wert aus dem vorherigen Befehl, und führen Sie dann diesen Befehl aus, um eine Richtlinienversion zu löschen.

         ```
         aws iot delete-policy-version --policy-name policy_name --policy-version-id version_ID
         ```

         Bei Erfolg gibt dieser Befehl nichts zurück.

         Nachdem Sie eine Richtlinienversion gelöscht haben, wiederholen Sie diesen Schritt, bis die Richtlinie nur noch eine Richtlinienversion hat.

      1. Ersetzen Sie `policy_name` durch den `policyName`-Wert, und führen Sie dann diesen Befehl aus, um die Richtlinie zu löschen.

         ```
         aws iot delete-policy --policy-name policy_name
         ```

   1. Ersetzen Sie `thing_name` durch den Objektnamen, ersetzen Sie `certificate_ARN` durch den ARN des Zertifikats, und führen Sie dann diesen Befehl aus, um das Zertifikat von der Objektressource zu trennen.

      ```
      aws iot detach-thing-principal --thing-name thing_name --principal certificate_ARN
      ```

      Bei Erfolg gibt dieser Befehl nichts zurück.

   1. Ersetzen Sie `certificate_ID` durch die Zertifikat-ID aus dem vorherigen Befehl. Die Zertifikat-ID besteht aus den alphanumerischen Zeichen, die auf `cert/` in dem vom vorherigen Befehl zurückgegebenen ARN folgen. Führen Sie dann diesen Befehl aus, um die Zertifikatressource zu löschen.

      ```
      aws iot delete-certificate --certificate-id certificate_ID
      ```

      Bei Erfolg gibt dieser Befehl nichts zurück.

1. Ersetzen Sie `thing_name` durch den Namen des Objekts, und führen Sie dann diesen Befehl aus, um das Objekt zu löschen.

   ```
   aws iot delete-thing --thing-name thing_name
   ```

   Bei Erfolg gibt dieser Befehl nichts zurück. 

### AWS Ressourcen bereinigen
<a name="iot-dc-cleanup-cloud-aws"></a>

Dieses Verfahren hilft Ihnen dabei, andere AWS Ressourcen zu identifizieren und zu entfernen, die Sie während der Durchführung der Tutorials in diesem Lernpfad erstellt haben.


**Andere AWS Ressourcen, die auf diesem Lernpfad erstellt wurden**  

| Tutorial | Ressourcentyp | Name oder ID der Ressource | 
| --- | --- | --- | 
|  [Tutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client](iot-dc-runjobs.md)  | Amazon S3-Objekt | hello-world-job.json | 
|  [Tutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client](iot-dc-runjobs.md)  |  AWS IoT Ressourcen für Jobs  | benutzerdefiniert | 

**Um die in diesem Lernpfad erstellten AWS Ressourcen zu löschen**

1. So löschen Sie die Aufträge, die in diesem Lernpfad erstellt wurden

   1. Führen Sie diesen Befehl aus, um die Jobs in Ihrem aufzulisten AWS-Konto.

      ```
      aws iot list-jobs
      ```

      Der Befehl gibt eine Liste der AWS IoT Jobs in Ihrem zurück AWS-Konto und AWS-Region das sieht so aus.

      ```
      {
          "jobs": [
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-2",
                  "jobId": "hello-world-job-2",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:40:36.825000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:40:41.375000+00:00",
                  "completedAt": "2021-11-16T23:40:41.375000+00:00"
              },
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
                  "jobId": "hello-world-job-1",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:35:26.381000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:35:29.239000+00:00",
                  "completedAt": "2021-11-16T23:35:29.239000+00:00"
              }
          ]
      }
      ```

   1. Ersetzen Sie jeden Job, den Sie aus der Liste als einen Job erkennen, den Sie in diesem Lernpfad erstellt haben, `jobId` durch den `jobId` Wert des zu löschenden Jobs und führen Sie dann diesen Befehl aus, um einen AWS IoT Job zu löschen.

      ```
      aws iot delete-job --job-id jobId
      ```

      Wenn der Befehl erfolgreich ist, wird nichts zurückgegeben.

1. So löschen Sie die Auftragsdokumente, die Sie in diesem Lernpfad in einem Amazon S3-Bucket gespeichert haben.

   1. Ersetzen Sie `bucket` durch den Namen des Buckets, den Sie verwendet haben, und führen Sie dann diesen Befehl aus, um die Objekte im Amazon S3-Bucket aufzulisten, den Sie verwendet haben.

      ```
      aws s3api list-objects --bucket bucket
      ```

      Der Befehl gibt eine Liste der Amazon S3-Objekte in Ihrem Bucket zurück, die so aussieht:

      ```
      {
          "Contents": [
              {
                  "Key": "hello-world-job.json",
                  "LastModified": "2021-11-18T03:02:12+00:00",
                  "ETag": "\"868c8bc3f56b5787964764d4b18ed5ef\"",
                  "Size": 54,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "iot_job_firmware_update.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"7c68c591949391791ecf625253658c61\"",
                  "Size": 66,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "order66.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"bca60d5380b88e1a70cc27d321caba72\"",
                  "Size": 29,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              }
          ]
      }
      ```

   1. Ersetzen Sie für jedes Objekt, das Sie in der Liste als ein Objekt erkennen, das Sie in diesem Lernpfad erstellt haben, `bucket` durch den Bucketnamen und `key` mit dem Schlüsselwert des zu löschenden Objekts, und führen Sie dann diesen Befehl aus, um ein Amazon S3-Objekt zu löschen.

      ```
       aws s3api delete-object --bucket bucket --key key
      ```

      Wenn der Befehl erfolgreich ist, wird nichts zurückgegeben.

Nachdem Sie alle AWS Ressourcen und Objekte gelöscht haben, die Sie während des Abschlusses dieses Lernpfads erstellt haben, können Sie von vorne beginnen und die Tutorials wiederholen.