

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Tutorial: Ein Gerät AWS IoT Core mithilfe des AWS IoT Geräte-SDK verbinden
<a name="sdk-tutorials"></a>

In diesem Tutorial wird gezeigt, wie Sie ein Gerät anschließen, AWS IoT Core damit es Daten an und von dort senden und empfangen kann AWS IoT. Nachdem Sie dieses Tutorial abgeschlossen haben, wird Ihr Gerät so konfiguriert, dass es eine Verbindung herstellt, AWS IoT Core und Sie werden verstehen, wie Geräte miteinander kommunizieren AWS IoT.

**Topics**
+ [Voraussetzungen](#sdk-tutorials-prereq)
+ [Bereiten Sie Ihr Gerät vor für AWS IoT](#sdk-tutorials-prepare)
+ [Ansehen des MQTT-Protokolls](#sdk-tutorials-mqtt-review)
+ [Ansehen der Beispiel-App „pubsub.py“ des Device SDK](#sdk-tutorials-explore-sample)
+ [Connect dein Gerät und kommuniziere mit AWS IoT Core](#sdk-tutorials-experiment)
+ [Überprüfen Sie die Ergebnisse.](#sdk-tutorials-conclusion)
+ [Tutorial: Verwenden des AWS IoT Device SDK for Embedded C](iot-embedded-c-sdk.md)

## Voraussetzungen
<a name="sdk-tutorials-prereq"></a>

Stellen Sie vor Beginn dieses Tutorials sicher, dass Sie über Folgendes verfügen:
+ 

**[Erste Schritte mit AWS IoT Core Tutorials](iot-gs.md) abgeschlossen haben.**  
Wählen Sie im Abschnitt des besagten Tutorials, in dem Sie [Konfigurieren Ihres Geräts](configure-device.md) müssen, die Option [Verbinden eines Raspberry Pi oder eines anderes Gerätes](connecting-to-existing-device.md) für Ihr Gerät und verwenden Sie die Python-Sprachoptionen, um Ihr Gerät zu konfigurieren.
**Anmerkung**  
Lassen Sie das im besagten Tutorial verwendete Terminalfenster geöffnet, da Sie es auch in diesem Tutorial verwenden.
+ 

**Ein Gerät, auf dem das AWS IoT Device SDK v2 für Python ausgeführt werden kann.**  
Dieses Tutorial zeigt anhand AWS IoT Core von Python-Codebeispielen, für die ein relativ leistungsfähiges Gerät erforderlich ist, eine Verbindung zu einem Gerät herstellen. Wenn Sie mit ressourcenbeschränkten Geräten arbeiten, funktionieren diese Codebeispiele möglicherweise nicht. In diesem Fall haben Sie möglicherweise mehr Erfolg mit dem [Tutorial: Verwenden des AWS IoT Device SDK for Embedded C](iot-embedded-c-sdk.md) Tutorial.
+ 

**Sie haben die erforderlichen Informationen erhalten, um eine Verbindung mit dem Gerät herzustellen**  
Um Ihr Gerät zu verbinden AWS IoT, benötigen Sie Informationen zum Namen des Objekts, zum Hostnamen und zur Portnummer.
**Anmerkung**  
Sie können auch eine benutzerdefinierte Authentifizierung verwenden, um Geräte mit zu verbinden AWS IoT Core. Die Verbindungsdaten, die Sie an Ihre Autorisierungs-Lambda-Funktion übergeben, hängen vom verwendeten Protokoll ab.
  + **Name der Sache**: Der Name der AWS IoT Sache, zu der Sie eine Verbindung herstellen möchten. Sie müssen sich als Ihr Gerät als AWS IoT Ding registriert haben. Weitere Informationen finden Sie unter [Geräte verwalten mit AWS IoT](iot-thing-management.md).
  + **Hostname**: Der Hostname für den kontospezifischen IoT-Endpunkt.
  + **Portnummer**: Die Portnummer, zu der eine Verbindung hergestellt werden soll.

  Sie können die `configureEndpoint` Methode im AWS IoT Python-SDK verwenden, um den Hostnamen und die Portnummer zu konfigurieren.

  ```
  myAWSIoTMQTTClient.configureEndpoint("random.iot.region.amazonaws.com", 8883)
  ```

## Bereiten Sie Ihr Gerät vor für AWS IoT
<a name="sdk-tutorials-prepare"></a>

In [Erste Schritte mit AWS IoT Core Tutorials](iot-gs.md) haben Sie Ihr Gerät und Ihr AWS -Konto vorbereitet, sodass sie kommunizieren können. In diesem Abschnitt werden die Aspekte dieser Vorbereitung beschrieben, die für jede Geräteverbindung mit gelten AWS IoT Core.

Damit ein Gerät sich mit AWS IoT Core verbinden kann:

1. Benötigen Sie ein **AWS-Konto**.

   Das Verfahren unter [Einrichten AWS-Konto](setting-up.md) beschreibt, wie Sie eine erstellen, AWS-Konto falls Sie noch keine haben. 

1. In diesem Konto müssen Sie die folgenden **AWS IoT Ressourcen** für das Gerät in Ihrer Region AWS-Konto und Ihrer Region definiert haben.

   Das Verfahren unter [AWS IoT Ressourcen erstellen](create-iot-resources.md) beschreibt, wie Sie diese Ressourcen für das Gerät in Ihrem AWS-Konto und Ihrer Region erstellen.
   + Ein **Gerätezertifikat**, das bei AWS IoT registriert und zur Authentifizierung des Geräts aktiviert wurde.

     Das Zertifikat wird häufig mit einem **AWS IoT -Objekt** erstellt und an dieses angehängt. Ein Dingobjekt ist zwar nicht erforderlich, damit ein Gerät eine Verbindung herstellen kann AWS IoT, es stellt dem Gerät jedoch zusätzliche AWS IoT Funktionen zur Verfügung.
   + Eine dem Gerätezertifikat beigefügte **Richtlinie**, die es autorisiert, eine Verbindung herzustellen AWS IoT Core und alle gewünschten Aktionen auszuführen.

1. Eine **Internetverbindung**, die auf die Endpunkte des Geräts Ihres AWS-Konto s zugreifen kann.

   Die Geräteendpunkte werden unter beschrieben [AWS IoT Gerätedaten und Dienstendpunkte](iot-connect-devices.md#iot-connect-device-endpoints) und können auf der [Einstellungsseite der AWS IoT](https://console.aws.amazon.com/iot/home#/settings) Konsole eingesehen werden. 

1. **Kommunikationssoftware**, wie sie vom AWS IoT Gerät SDKs bereitgestellt wird. In diesem Tutorial wird das [AWS IoT Device SDK v2 für Python](https://github.com/aws/aws-iot-device-sdk-python-v2#aws-iot-device-sdk-v2-for-python) verwendet.

## Ansehen des MQTT-Protokolls
<a name="sdk-tutorials-mqtt-review"></a>

Bevor wir über die Beispiel-App sprechen, ist ein Verständnis des MQTT-Protokolls hilfreich. Das MQTT-Protokoll bietet einige Vorteile gegenüber anderen Netzwerk-Kommunikationsprotokollen wie HTTP, was es zu einer beliebten Wahl für IoT-Geräte macht. In diesem Abschnitt werden die wichtigsten Aspekte von MQTT beschrieben, die für dieses Tutorial gelten. Weitere Informationen über den Vergleich zwischen MQTT und HTTP finden Sie unter [Wählen Sie ein Anwendungsprotokoll für Ihre Gerätekommunikation](protocols.md#protocol-selection).

**MQTT verwendet ein publish/subscribe Kommunikationsmodell**  
Das MQTT-Protokoll verwendet ein publish/subscribe Kommunikationsmodell mit seinem Host. Dieses Modell unterscheidet sich von dem request/response Modell, das HTTP verwendet. Bei MQTT richten Geräte beim Host eine Sitzung ein, die durch eine eindeutige Client-ID identifiziert ist. Zum Senden von Daten veröffentlichen die Geräte durch Themen identifizierte Nachrichten an einen Message Broker auf dem Host. Zum Empfangen von Nachrichten vom Message Broker abonnieren Geräte Themen, indem sie Themenfilter in Subscriber-Anfragen an den Message Broker senden.

**MQTT unterstützt persistente Sitzungen**  
Der Message Broker empfängt Nachrichten von Geräten und veröffentlicht Nachrichten an Geräte, die diese abonniert haben. Mit [persistenten Sitzungen](mqtt.md#mqtt-persistent-sessions) – Sitzungen, die auch dann aktiv bleiben, wenn das initiierende Gerät getrennt ist – können Geräte Nachrichten abrufen, die während der Unterbrechung der Verbindung veröffentlicht wurden. Auf der Geräteseite unterstützt MQTT Quality-of-Service-Levels ([QoS](mqtt.md#mqtt-qos)), die sicherstellen, dass der Host vom Gerät gesendete Nachrichten empfängt.

## Ansehen der Beispiel-App „pubsub.py“ des Device SDK
<a name="sdk-tutorials-explore-sample"></a>

In diesem Abschnitt wird die Beispiel-App `pubsub.py` aus dem **AWS IoT Device SDK v2 für Python** beschrieben, die in diesem Tutorial verwendet wird. Hier werden wir uns ansehen, wie es eine Verbindung AWS IoT Core zum Veröffentlichen und Abonnieren von MQTT-Nachrichten herstellt. Im nächsten Abschnitt finden Sie einige Übungen, anhand derer Sie herausfinden können, wie ein Gerät eine Verbindung herstellt und mit ihm kommuniziert. AWS IoT Core

**Die `pubsub.py` Beispiel-App demonstriert diese Aspekte einer MQTT-Verbindung mit: AWS IoT Core**
+ [Kommunikationsprotokolle](#sdk-tutorials-explore-protocols)
+ [Persistente Sitzungen](#sdk-tutorials-explore-persistent)
+ [Quality of Service (Servicequalität)](#sdk-tutorials-explore-qos)
+ [Nachrichten veröffentlichen](#sdk-tutorials-explore-publish)
+ [Nachrichten abonnieren](#sdk-tutorials-explore-subscribe)
+ [Trennen und erneutes Anschließen des Geräts](#sdk-tutorials-explore-connect)

### Kommunikationsprotokolle
<a name="sdk-tutorials-explore-protocols"></a>

Das `pubsub.py`-Beispiel zeigt eine MQTT-Verbindung mit den Protokollen MQTT und MQTT über WSS. Die [AWS Common Runtime (AWS CRT)](https://github.com/awslabs/aws-crt-python#aws-crt-python) -Bibliothek bietet Unterstützung für Low-Level-Kommunikationsprotokolle und ist im AWS IoT Device SDK v2 für Python enthalten.

#### MQTT
<a name="sdk-tutorials-explore-mqtt"></a>

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

```
mqtt_connection = mqtt_connection_builder.mtls_from_path(
    endpoint=args.endpoint,
    cert_filepath=args.cert,
    pri_key_filepath=args.key,
    ca_filepath=args.ca_file,
    client_bootstrap=client_bootstrap,
    on_connection_interrupted=on_connection_interrupted,
    on_connection_resumed=on_connection_resumed,
    client_id=args.client_id,
    clean_session=False,
    keep_alive_secs=6
)
```

`endpoint`  
Ihr AWS-Konto IoT-Geräte-Endpunkt  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`cert_filepath`  
Der Pfad zur Zertifikatsdatei des Geräts  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`pri_key_filepath`  
Der Pfad zur privaten Schlüsseldatei des Geräts, die mit der zugehörigen Zertifikatsdatei erstellt wurde  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`ca_filepath`  
Der Pfad zur Root-CA-Datei Nur erforderlich, wenn der MQTT-Server ein Zertifikat verwendet, das sich noch nicht in Ihrem Trust Store befindet.  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`client_bootstrap`  
Das Common-Runtime-Objekt, das Socket-Kommunikationsaktivitäten verarbeitet  
In der Beispiel-App wird dieses Objekt vor dem Aufruf zum `mqtt_connection_builder.mtls_from_path` instanziiert. 

`on_connection_interrupted``on_connection_resumed`  
Die Callback-Funktionen, die aufgerufen werden, wenn die Verbindung des Geräts unterbrochen und wieder aufgenommen wird

`client_id`  
Die ID, die dieses Gerät eindeutig in der AWS-Region identifiziert  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`clean_session`  
Wahl der Option, eine neue persistente Sitzung zu starten oder, falls vorhanden, eine Verbindung zu einer bestehenden Sitzung wiederherzustellen

`keep_alive_secs`  
Der Keep-Alive-Wert in Sekunden, der in der `CONNECT`-Anfrage gesendet werden soll. In diesem Intervall wird automatisch ein Ping gesendet. Wenn der Server nach dem 1,5-fachen dieses Werts keinen Ping empfängt, wird davon ausgegangen, dass die Verbindung unterbrochen wurde.

#### MQTT über WSS
<a name="sdk-tutorials-explore-mqtt-wss"></a>

Das `pubsub.py`-Beispiel ruft `websockets_with_default_aws_signing` (hier gezeigt) in [https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py](https://github.com/awslabs/aws-crt-python/blob/89207bcf1387177034e02fe29e8e469ca45e39b7/awscrt/awsiot_mqtt_connection_builder.py) auf, zur Herstellung einer Verbindung mit AWS IoT Core mithilfe des MQTT-Protokolls über WSS. `websockets_with_default_aws_signing` erstellt mithilfe von [Signature V4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) eine MQTT-Verbindung über WSS zur Authentifizierung des Geräts her.

```
mqtt_connection = mqtt_connection_builder.websockets_with_default_aws_signing(
    endpoint=args.endpoint,
    client_bootstrap=client_bootstrap,
    region=args.signing_region,
    credentials_provider=credentials_provider,
    websocket_proxy_options=proxy_options,
    ca_filepath=args.ca_file,
    on_connection_interrupted=on_connection_interrupted,
    on_connection_resumed=on_connection_resumed,
    client_id=args.client_id,
    clean_session=False,
    keep_alive_secs=6
)
```

`endpoint`  
Ihr AWS-Konto IoT-Geräte-Endpunkt  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`client_bootstrap`  
Das Common-Runtime-Objekt, das Socket-Kommunikationsaktivitäten verarbeitet  
In der Beispiel-App wird dieses Objekt vor dem Aufruf zum `mqtt_connection_builder.websockets_with_default_aws_signing` instanziiert. 

`region`  
Die AWS Signaturregion, die von der Signature V4-Authentifizierung verwendet wird. In `pubsub.py` übergibt sie den in der Befehlszeile eingegebenen Parameter.  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`credentials_provider`  
Die zur Authentifizierung bereitgestellten AWS Anmeldeinformationen  
In der Beispiel-App wird dieses Objekt vor dem Aufruf zu `mqtt_connection_builder.websockets_with_default_aws_signing` instanziiert. 

`websocket_proxy_options`  
HTTP-Proxyoptionen, wenn Sie einen Proxyhost verwenden  
In der Beispiel-App wird dieser Wert vor dem Aufruf zu `mqtt_connection_builder.websockets_with_default_aws_signing` initialisiert.

`ca_filepath`  
Der Pfad zur Root-CA-Datei Nur erforderlich, wenn der MQTT-Server ein Zertifikat verwendet, das sich noch nicht in Ihrem Trust Store befindet.  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`on_connection_interrupted``on_connection_resumed`  
Die Callback-Funktionen, die aufgerufen werden, wenn die Verbindung des Geräts unterbrochen und wieder aufgenommen wird

`client_id`  
Die ID, die dieses Gerät eindeutig in der AWS-Region identifiziert.  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`clean_session`  
Wahl der Option, eine neue persistente Sitzung zu starten oder, falls vorhanden, eine Verbindung zu einer bestehenden Sitzung wiederherzustellen

`keep_alive_secs`  
Der Keep-Alive-Wert in Sekunden, der in der `CONNECT`-Anfrage gesendet werden soll. In diesem Intervall wird automatisch ein Ping gesendet. Wenn der Server nach dem 1,5-fachen dieses Werts keinen Ping empfängt, wird davon ausgegangen, dass die Verbindung unterbrochen wurde.

#### HTTPS
<a name="sdk-tutorials-explore-https"></a>

Was ist mit HTTPS? AWS IoT Core unterstützt Geräte, die HTTPS-Anfragen veröffentlichen. Aus Sicht der Programmierung senden Geräte HTTPS-Anfragen an AWS IoT Core , so wie jede andere Anwendung es tun würde. Ein Beispiel für ein Python-Programm, das eine HTTP-Nachricht von einem Gerät sendet, finden Sie im [HTTPS-Codebeispiel](http.md#codeexample) mit der `requests` Python-Bibliothek. In diesem Beispiel wird eine Nachricht AWS IoT Core über HTTPS an gesendet, sodass sie als MQTT-Nachricht AWS IoT Core interpretiert wird.

 AWS IoT Core Unterstützt zwar HTTPS-Anfragen von Geräten, aber überprüfen Sie unbedingt die Informationen darüber, [Wählen Sie ein Anwendungsprotokoll für Ihre Gerätekommunikation](protocols.md#protocol-selection) damit Sie eine fundierte Entscheidung darüber treffen können, welches Protokoll Sie für Ihre Gerätekommunikation verwenden möchten.

### Persistente Sitzungen
<a name="sdk-tutorials-explore-persistent"></a>

In der Beispiel-App bedeutet die Einstellung des `clean_session`-Parameters auf `False`, dass die Verbindung dauerhaft sein soll. In der Praxis bedeutet dies, dass die durch diesen Aufruf geöffnete Verbindung erneut eine Verbindung zu einer bestehenden persistenten Sitzung herstellt, sofern eine besteht. Andernfalls wird eine neue persistente Sitzung erstellt und eine Verbindung zu ihr hergestellt.

Bei einer persistenten Sitzung werden Nachrichten, die an das Gerät gesendet werden, vom Message Broker gespeichert, solange das Gerät nicht verbunden ist. Wenn ein Gerät die Verbindung zu einer persistenten Sitzung wieder aufnimmt, sendet der Message Broker alle von dem Gerät abonnierten gespeicherten Nachrichten an das Gerät.

Ohne eine persistente Sitzung empfängt das Gerät keine Nachrichten, die gesendet werden, während das Gerät nicht verbunden ist. Welche Option Sie verwenden, hängt von Ihrer App ab und davon, ob Nachrichten, die auftreten, während ein Gerät nicht angeschlossen ist, übermittelt werden müssen. Weitere Informationen finden Sie unter [Persistente MQTT-Sitzungen](mqtt.md#mqtt-persistent-sessions).

### Quality of Service (Servicequalität)
<a name="sdk-tutorials-explore-qos"></a>

Wenn das Gerät Nachrichten veröffentlicht und abonniert, kann die bevorzugte Dienstqualität (QoS) festgelegt werden. AWS IoT unterstützt die QoS-Stufen 0 und 1 für Veröffentlichungs- und Abonnementvorgänge. Weitere Informationen zu QoS-Stufen finden Sie AWS IoT unter[MQTT QoS-(Quality of Service)-Optionen](mqtt.md#mqtt-qos).

Die AWS CRT-Laufzeit für Python definiert diese Konstanten für die QoS-Stufen, die sie unterstützt:


**Servicequalitätsstufen von Python**  

| QoS-Stufe von MQTT | Vom SDK verwendeter symbolischer Python-Wert | Description | 
| --- | --- | --- | 
| QoS Stufe 0 | mqtt.QoS.AT\$1MOST\$1ONCE | Es wird nur ein Versuch zum Senden der Nachricht unternommen, unabhängig davon, ob sie empfangen wird oder nicht. Die Nachricht wird möglicherweise überhaupt nicht gesendet, z. B. wenn das Gerät nicht angeschlossen ist oder ein Netzwerkfehler vorliegt. | 
| QoS-Stufe 1 | mqtt.QoS.AT\$1LEAST\$1ONCE | Die Nachricht wird wiederholt gesendet, bis eine PUBACK-Bestätigung eingeht. | 

In der Beispiel-App werden die Veröffentlichungs- und Abonnementanfragen mit einer QoS-Stufe von 1 (`mqtt.QoS.AT_LEAST_ONCE`) gestellt. 
+ 

**QoS beim Veröffentlichen**  
Wenn ein Gerät eine Nachricht mit QoS Stufe 1 veröffentlicht, sendet es die Nachricht wiederholt, bis es eine `PUBACK`-Antwort vom Message Broker erhält. Wenn das Gerät nicht verbunden ist, wird die Nachricht in die Warteschlange gestellt, damit sie nach dem erneuten Herstellen der Verbindung gesendet werden kann.
+ 

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

### Nachrichten veröffentlichen
<a name="sdk-tutorials-explore-publish"></a>

Nach dem erfolgreichen Herstellen einer Verbindung zu AWS IoT Core können Geräte Nachrichten veröffentlichen. Das `pubsub.py`-Beispiel tut dies, indem es die `publish`-Operation des `mqtt_connection`-Objekts aufruft.

```
mqtt_connection.publish(
    topic=args.topic,
    payload=message,
    qos=mqtt.QoS.AT_LEAST_ONCE
)
```

`topic`  
Der Themenname der Nachricht, der die Nachricht identifiziert  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`payload`  
Die als Zeichenfolge formatierte Nachrichten-Payload (z. B. ein JSON-Dokument)  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.  
Ein JSON-Dokument ist ein gängiges Payload-Format, das auch von anderen AWS IoT Diensten erkannt wird. Das Datenformat der Nachrichten-Payload kann jedoch alles sein, worauf sich Herausgeber und Abonnenten einigen. Andere AWS IoT -Dienste erkennen jedoch für die meisten Operationen nur JSON und in einigen Fällen auch CBOR an.

`qos`  
Die QoS-Stufe für diese Nachricht

### Nachrichten abonnieren
<a name="sdk-tutorials-explore-subscribe"></a>

Um Nachrichten von AWS IoT und anderen Diensten und Geräten zu empfangen, abonnieren Geräte diese Nachrichten anhand ihres Themennamens. Geräte können einzelne Nachrichten abonnieren, indem sie einen [Themennamen](topics.md#topicnames) angeben, und eine Gruppe von Nachrichten, indem sie einen [Themenfilter](topics.md#topicfilters) angeben, der Platzhalterzeichen enthalten kann. Das `pubsub.py`-Beispiel verwendet den hier gezeigten Code, um Nachrichten zu abonnieren und die Callback-Funktionen zu registrieren, um die Nachricht nach dem Empfang zu verarbeiten.

```
subscribe_future, packet_id = mqtt_connection.subscribe(
    topic=args.topic,
    qos=mqtt.QoS.AT_LEAST_ONCE,
    callback=on_message_received
)
subscribe_result = subscribe_future.result()
```

`topic`  
Das zu abonnierende Thema. Dies kann ein Themenname oder ein Themenfilter sein.  
In der Beispiel-App wird dieser Wert von der Befehlszeile aus übergeben.

`qos`  
Ob der Message Broker diese Nachrichten speichern soll, während das Gerät nicht angeschlossen ist.  
Ein Wert von `mqtt.QoS.AT_LEAST_ONCE` (QoS Stufe 1) erfordert die Angabe einer persistenten Sitzung (`clean_session=False`), wenn die Verbindung hergestellt wird.

`callback`  
Die Funktion, die aufgerufen werden soll, um die abonnierte Nachricht zu verarbeiten.

Die `mqtt_connection.subscribe`-Funktion gibt eine Future- und eine Paket-ID zurück. Wenn die Anfrage nach einem Abonnement erfolgreich initiiert wurde, ist die zurückgegebene Paket-ID größer als 0. Um sicherzustellen, dass das Abonnement vom Message Broker empfangen und registriert wurde, müssen Sie warten, bis das Ergebnis des asynchronen Vorgangs zurückgegeben wird, wie im Codebeispiel gezeigt.

**Die Callback-Funktion**  
Der Callback im `pubsub.py`-Beispiel verarbeitet die abonnierten Nachrichten so, wie das Gerät sie empfängt.

```
def on_message_received(topic, payload, **kwargs):
    print("Received message from topic '{}': {}".format(topic, payload))
    global received_count
    received_count += 1
    if received_count == args.count:
        received_all_event.set()
```

`topic`  
Das Thema der Nachricht  
Dies ist der spezifische Themenname der empfangenen Nachricht, auch wenn Sie einen Themenfilter abonniert haben.

`payload`  
Die Nutzdaten der Nachricht  
Das Format dafür ist anwendungsspezifisch.

`kwargs`  
Mögliche zusätzliche Argumente, wie unter [https://awslabs.github.io/aws-crt-python/api/mqtt.html#awscrt.mqtt.Connection.subscribe](https://awslabs.github.io/aws-crt-python/api/mqtt.html#awscrt.mqtt.Connection.subscribe) beschrieben.

Im `pubsub.py`-Beispiel zeigt nur `on_message_received` das Thema und seine Payload an. Außerdem werden die eingegangenen Nachrichten gezählt, um das Programm zu beenden, nachdem das Limit erreicht wurde.

Ihre App würde das Thema und die Payload auswerten, um zu bestimmen, welche Aktionen ausgeführt werden sollen.

### Trennen und erneutes Anschließen des Geräts
<a name="sdk-tutorials-explore-connect"></a>

Das `pubsub.py`-Beispiel enthält Callback-Funktionen, die aufgerufen werden, wenn das Gerät getrennt wird und wenn die Verbindung wiederhergestellt wird. Welche Aktionen Ihr Gerät bei diesen Ereignissen ausführt, ist anwendungsspezifisch.

Wenn ein Gerät zum ersten Mal eine Verbindung herstellt, muss es Themen abonnieren, um empfangen zu können. Wenn die Sitzung eines Geräts beim erneuten Herstellen der Verbindung vorhanden ist, werden seine Abonnements wiederhergestellt, und alle gespeicherten Nachrichten aus diesen Abonnements werden nach dem erneuten Herstellen der Verbindung an das Gerät gesendet.

Wenn die Sitzung eines Geräts beim erneuten Herstellen der Verbindung nicht mehr besteht, muss das Gerät seine Abonnements erneut abonnieren. Persistente Sitzungen haben eine begrenzte Lebensdauer und können ablaufen, wenn das Gerät zu lange keine Verbindung hat.

## Connect dein Gerät und kommuniziere mit AWS IoT Core
<a name="sdk-tutorials-experiment"></a>

In diesem Abschnitt finden Sie einige Übungen, mit denen Sie die verschiedenen Aspekte der Verbindung Ihres Geräts mit AWS IoT Core kennenlernen können. Für diese Übungen verwenden Sie den [MQTT-Testclient](https://console.aws.amazon.com/iot/home#/test) in der AWS IoT -Konsole, um zu sehen, was Ihr Gerät veröffentlicht, und um Nachrichten auf Ihrem Gerät zu veröffentlichen. Diese Übungen verwenden das [https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py)-Beispiel aus dem [AWS IoT -Device SDK v2 für Python](https://github.com/aws/aws-iot-device-sdk-python-v2/tree/master/samples#sample-apps-for-the-aws-iot-device-sdk-v2-for-python) und bauen auf Ihren Erfahrungen mit [Erste Schritte mit AWS IoT Core Tutorials](iot-gs.md)-Tutorials auf. 

**Topics**
+ [Abonnieren von Themenfiltern mit Platzhaltern](#sdk-tutorials-experiment-wild)
+ [Abonnements mit Themenfiltern verarbeiten](#sdk-tutorials-experiment-process)
+ [Veröffentlichen von Nachrichten vom Gerät.](#sdk-tutorials-experiment-publish)

Für diese Übungen beginnen Sie mit dem `pubsub.py`-Beispielprogramm.

**Anmerkung**  
Bei diesen Übungen wird davon ausgegangen, dass Sie die [Erste Schritte mit AWS IoT Core Tutorials](iot-gs.md)-Tutorials abgeschlossen haben und das Terminalfenster für das Gerät aus diesem Tutorial verwenden.

### Abonnieren von Themenfiltern mit Platzhaltern
<a name="sdk-tutorials-experiment-wild"></a>

In dieser Übung ändern Sie die Befehlszeile, die verwendet wird, um `pubsub.py` zum Abonnieren eines Themenfilters mit Platzhaltern aufzurufen, und verarbeiten die empfangenen Nachrichten auf der Grundlage des Themas der Nachricht.

#### Ablauf der Übung
<a name="sdk-tutorials-experiment-wild-steps"></a>

Stellen Sie sich für diese Übung vor, dass das Gerät über eine Temperatursteuerung und eine Lichtsteuerung verfügt. Es verwendet diese Themennamen, um die Nachrichten zu diesen Themen zu identifizieren.

1. Bevor Sie mit der Übung beginnen, versuchen Sie, diesen Befehl aus den [Erste Schritte mit AWS IoT Core Tutorials](iot-gs.md)-Tutorials auf dem Gerät auszuführen, um sicherzustellen, dass alles für die Übung bereit ist.

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

   Sie sollten dieselbe Ausgabe wie im [Tutorial Erste Schritte](connecting-to-existing-device.md#gs-device-node-app-run) sehen.

1. Ändern Sie für diese Übung diese Befehlszeilen-Parameter.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/sdk-tutorials.html)

   Wenn Sie diese Änderungen an der ersten Befehlszeile vornehmen, wird diese Befehlszeile angezeigt. Geben Sie diesen Befehl in das Terminalfenster Ihres Geräts ein.

   ```
   python3 pubsub.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

   Das Programm sollte wie folgt aussehen:

   ```
   Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-24d7cdcc-cc01-458c-8488-2d05849691e1'...
   Connected!
   Subscribing to topic 'device/+/details'...
   Subscribed with QoS.AT_LEAST_ONCE
   Waiting for all messages to be received...
   ```

   Wenn Sie so etwas auf Ihrem Terminal sehen, ist Ihr Gerät bereit und wartet auf Nachrichten, bei denen die Themennamen mit `device` beginnen und mit `/detail` enden. Lassen Sie uns das also testen.

1. Hier sind ein paar Nachrichten, die Ihr Gerät möglicherweise empfängt.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/sdk-tutorials.html)

1. Senden Sie mit dem MQTT-Testclient in der AWS IoT Konsole die im vorherigen Schritt beschriebenen Nachrichten an Ihr Gerät.

   1. Öffnen Sie den [MQTT-Testclient](https://console.aws.amazon.com/iot/home#/test) in der AWS IoT Konsole.

   1. Geben Sie unter **Abonnieren eines Themas** im Feld **Abonnementthema** den Themenfilter **device/\$1/details** ein und wählen Sie anschließend **Thema Abonnieren** aus.

   1. Wählen Sie in der Spalte **Abonnements** des MQTT-Testclients **Gerät/\$1/Details** aus.

   1. Gehen Sie für jedes der Themen in der vorherigen Tabelle im MQTT-Testclient wie folgt vor:

      1. Geben Sie unter **Veröffentlichen** den Wert aus der Spalte **Themenname** in der Tabelle ein.

      1. Geben Sie in das Feld Nachrichten-Payload unter dem Themennamen den Wert aus der Spalte **Nachrichten-Payload** in der Tabelle ein.

      1. Sehen Sie sich das Terminalfenster an, in dem `pubsub.py` läuft, und wählen Sie im MQTT-Testclient die Option **Für Thema veröffentlichen**.

      Sie sollten im Terminalfenster sehen, dass die Nachricht von `pubsub.py` empfangen wurde.

#### Ergebnis der Übung
<a name="sdk-tutorials-experiment-wild-result"></a>

Damit hat `pubsub.py` die Nachrichten mithilfe eines Themenfilters mit Platzhaltern abonniert, sie empfangen und im Terminalfenster angezeigt. Beachten Sie, dass Sie einen einzelnen Themenfilter abonniert haben und die Callback-Funktion aufgerufen wurde, um Nachrichten mit zwei unterschiedlichen Themen zu verarbeiten.

### Abonnements mit Themenfiltern verarbeiten
<a name="sdk-tutorials-experiment-process"></a>

Aufbauend auf der vorherigen Übung ändern Sie die `pubsub.py` Beispiel-App, um die Nachrichtenthemen auszuwerten und die abonnierten Nachrichten auf der Grundlage des Themas zu verarbeiten.

#### Ablauf der Übung
<a name="sdk-tutorials-experiment-process-steps"></a>

**Um das Thema der Nachricht zu bewerten,**

1. Kopieren Sie `pubsub.py` in `pubsub2.py`.

1. Öffnen Sie `pubsub2.py` in Ihrem bevorzugten Texteditor oder IDE.

1. Suchen Sie in `pubsub2.py` nach der `on_message_received`-Funktion.

1. Fügen Sie in `on_message_received` den folgenden Code nach der Zeile ein, die mit `print("Received message` beginnt, und vor der Zeile, die mit `global received_count` beginnt.

   ```
       topic_parsed = False
       if "/" in topic:
           parsed_topic = topic.split("/")
           if len(parsed_topic) == 3:
               # this topic has the correct format
               if (parsed_topic[0] == 'device') and (parsed_topic[2] == 'details'):
                   # this is a topic we care about, so check the 2nd element
                   if (parsed_topic[1] == 'temp'):
                       print("Received temperature request: {}".format(payload))
                       topic_parsed = True
                   if (parsed_topic[1] == 'light'):
                       print("Received light request: {}".format(payload))
                       topic_parsed = True
       if not topic_parsed:
           print("Unrecognized message topic.")
   ```

1. Speichern Sie Ihre Änderungen und führen Sie das geänderte Programm mithilfe dieser Befehlszeile aus.

   ```
   python3 pubsub2.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. Öffnen Sie in der AWS IoT Konsole den [MQTT-Testclient](https://console.aws.amazon.com/iot/home#/test).

1. Geben Sie unter **Abonnieren eines Themas** im Feld **Abonnementthema** den Themenfilter **device/\$1/details** ein und wählen Sie anschließend **Thema Abonnieren** aus.

1. Wählen Sie in der Spalte **Abonnements** des MQTT-Testclients die Option **Gerät/\$1/Details** aus.

1. Gehen Sie für jedes der Themen in dieser Tabelle im MQTT-Testclient wie folgt vor:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/sdk-tutorials.html)

   1. Geben Sie unter **Veröffentlichen** den Wert aus der Spalte **Themenname** in der Tabelle ein.

   1. Geben Sie in das Feld Nachrichten-Payload unter dem Themennamen den Wert aus der Spalte **Nachrichten-Payload** in der Tabelle ein.

   1. Sehen Sie sich das Terminalfenster an, in dem `pubsub.py` läuft, und wählen Sie im MQTT-Testclient die Option **Für Thema veröffentlichen**.

   Sie sollten im Terminalfenster sehen, dass die Nachricht von `pubsub.py` empfangen wurde.

Sie sollten in Ihrem Terminalfenster etwas Ähnliches sehen.

```
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-af794be0-7542-45a0-b0af-0b0ea7474517'...
Connected!
Subscribing to topic 'device/+/details'...
Subscribed with QoS.AT_LEAST_ONCE
Waiting for all messages to be received...
Received message from topic 'device/light/details': b'{ "desiredLight": 100, "currentLight": 50 }'
Received light request: b'{ "desiredLight": 100, "currentLight": 50 }'
Received message from topic 'device/temp/details': b'{ "desiredTemp": 20, "currentTemp": 15 }'
Received temperature request: b'{ "desiredTemp": 20, "currentTemp": 15 }'
2 message(s) received.
Disconnecting...
Disconnected!
```

#### Ergebnis der Übung
<a name="sdk-tutorials-experiment-process-result"></a>

In dieser Übung haben Sie Code hinzugefügt, damit die Beispiel-App mehrere Nachrichten in der Callback-Funktion erkennt und verarbeitet. Damit könnte Ihr Gerät Nachrichten empfangen und darauf reagieren.

Ihr Gerät kann auch mehrere Nachrichten empfangen und verarbeiten, indem es verschiedene Nachrichten separat abonniert und jedem Abonnement eine eigene Callback-Funktion zuweist.

### Veröffentlichen von Nachrichten vom Gerät.
<a name="sdk-tutorials-experiment-publish"></a>

Sie können die Beispiel-App pubsub.py verwenden, um Nachrichten von Ihrem Gerät aus zu veröffentlichen. Nachrichten werden zwar so veröffentlicht, wie sie sind, aber die Nachrichten können nicht als JSON-Dokumente gelesen werden. In dieser Übung wird die Beispiel-App so modifiziert, dass sie JSON-Dokumente in der Nachrichten-Payload veröffentlichen kann, die dann gelesen werden können. AWS IoT Core

#### Ablauf der Übung
<a name="sdk-tutorials-experiment-publish-steps"></a>

In dieser Übung wird die folgende Nachricht zusammen mit dem `device/data`-Thema gesendet.

```
{
    "timestamp": 1601048303,
    "sensorId": 28,
    "sensorData": [
        {
        "sensorName": "Wind speed",
        "sensorValue": 34.2211224
        }
    ]
}
```

**So bereiten Sie Ihren MQTT-Testclient für die Überwachung der Nachrichten aus dieser Übung vor**

1. Geben Sie unter **Abonnieren eines Themas** im Feld **Abonnementthema** den Themenfilter **device/data** ein und wählen Sie anschließend **Thema Abonnieren** aus.

1. Wählen Sie in der Spalte **Abonnements** des MQTT-Testclients die Option **Gerät/Daten** aus.

1. Lassen Sie das Fenster des MQTT-Testclients geöffnet, um auf Nachrichten von Ihrem Gerät zu warten.

**Um JSON-Dokumente mit der Beispiel-App „pubsub.py“ zu senden,**

1. Kopieren Sie auf dem Gerät `pubsub.py` nach `pubsub3.py`.

1. Bearbeiten Sie `pubsub3.py`, um die Formatierung der zu veröffentlichenden Nachrichten zu ändern.

   1. Öffnen Sie `pubsub3.py` in einem Texteditor.

   1. Suchen Sie diese Codezeile:

      `message = "{} [{}]".format(message_string, publish_count)`

   1. Ändern Sie sie in:

      `message = "{}".format(message_string)`

   1. Suchen Sie diese Codezeile:

      `message_json = json.dumps(message)`

   1. Ändern Sie sie in:

      `message = "{}".json.dumps(json.loads(message))`

   1. Speichern Sie Ihre Änderungen.

1. Führen Sie auf dem Gerät diesen Befehl aus, um die Nachricht zweimal zu senden.

   ```
   python3 pubsub3.py  --ca_file ~/certs/Amazon-root-CA-1.pem  --cert ~/certs/device.pem.crt  --key ~/certs/private.pem.key  --topic device/data  --count 2 --message '{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}'  --endpoint your-iot-endpoint
   ```

1. Prüfen Sie im MQTT-Testclient, ob er das JSON-Dokument in der Nachrichten-Payload wie folgt interpretiert und formatiert hat:  
![\[Das Bild zeigt, wie eine JSON-Nachrichtennutzlast im MQTT-Client der Konsole angezeigt wird. AWS IoT\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/images/mqtt-test-client-output.png)

`pubsub3.py` abonniert standardmäßig auch die Nachrichten, die es sendet. Sie sollten sehen können, dass es die Nachrichten im Ausgabefenster der App empfangen hat. Das Terminalfenster sollte etwa folgendermaßen aussehen.

```
Connecting to a3qEXAMPLEsffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-5cff18ae-1e92-4c38-a9d4-7b9771afc52f'...
Connected!
Subscribing to topic 'device/data'...
Subscribed with QoS.AT_LEAST_ONCE
Sending 2 message(s)
Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}
Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}'
Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}
Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}'
2 message(s) received.
Disconnecting...
Disconnected!
```

#### Ergebnis der Übung
<a name="sdk-tutorials-experiment-publish-result"></a>

Auf diese Weise kann Ihr Gerät Nachrichten generieren, an die Sie senden können, AWS IoT Core um die grundlegende Konnektivität zu testen, und Gerätemeldungen AWS IoT Core zur Verarbeitung bereitstellen. Sie könnten diese App beispielsweise verwenden, um Testdaten von Ihrem Gerät zu senden, um AWS IoT Regelaktionen zu testen.

## Überprüfen Sie die Ergebnisse.
<a name="sdk-tutorials-conclusion"></a>

Die Beispiele in diesem Tutorial haben Ihnen praktische Erfahrungen mit den Grundlagen der Kommunikation zwischen Geräten vermittelt AWS IoT Core— ein wesentlicher Bestandteil Ihrer AWS IoT Lösung. Wenn Ihre Geräte in der Lage sind AWS IoT Core, mit ihnen zu kommunizieren, können sie Nachrichten an AWS Dienste und andere Geräte weiterleiten, auf denen sie reagieren können. Ebenso können AWS Dienste und andere Geräte Informationen verarbeiten, die dazu führen, dass Nachrichten an Ihre Geräte zurückgesendet werden.

Wenn Sie bereit sind, AWS IoT Core weiter zu forschen, probieren Sie diese Tutorials aus:
+ [Tutorial: Senden einer Amazon SNS-Benachrichtigung](iot-sns-rule.md)
+ [Tutorial: Gerätedaten in einer DynamoDB-Tabelle speichern](iot-ddb-rule.md)
+ [Tutorial: Formatieren einer Benachrichtigung mithilfe einer AWS Lambda Funktion](iot-lambda-rule.md)

# Tutorial: Verwenden des AWS IoT Device SDK for Embedded C
<a name="iot-embedded-c-sdk"></a>

In diesem Abschnitt wird beschrieben, wie Sie den ausführen AWS IoT Device SDK for Embedded C.

**Topics**
+ [Schritt 1: Installieren Sie das AWS IoT Device SDK for Embedded C](#install-embedded-c-sdk)
+ [Schritt 2: Konfigurieren der Beispielanwendung](#iot-c-sdk-app-config)
+ [Schritt 3: So laden Sie die Beispielanwendung herunter und führen sie aus](#iot-c-sdk-app-run)

## Schritt 1: Installieren Sie das AWS IoT Device SDK for Embedded C
<a name="install-embedded-c-sdk"></a>

Das AWS IoT Device SDK for Embedded C richtet sich im Allgemeinen an Geräte mit eingeschränkten Ressourcen, die eine optimierte Laufzeit in C-Sprache benötigen. Sie können das SDK auf jedem Betriebssystem verwenden und es auf jedem Prozessortyp hosten (z. B. MCUs und MPUs). Wenn Sie mehr Speicher- und Verarbeitungsressourcen zur Verfügung haben, empfehlen wir, dass Sie eines der AWS IoT Geräte- und Mobilgeräte der höheren Ordnung verwenden SDKs (z. B. C\$1\$1 JavaScript, Java und Python).

Im Allgemeinen AWS IoT Device SDK for Embedded C ist das für Systeme vorgesehen, die eingebettete Betriebssysteme verwenden MCUs oder MPUs Low-End-Betriebssysteme verwenden. Für das Programmierbeispiel in diesem Abschnitt gehen wir davon aus, dass Ihr Gerät Linux verwendet.

**Example**  

1. Laden Sie das von AWS IoT Device SDK for Embedded C [GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)auf Ihr Gerät herunter.

   ```
   git clone https://github.com/aws/aws-iot-device-sdk-embedded-c.git --recurse-submodules
   ```

   Dadurch wird ein Verzeichnis mit dem Namen `aws-iot-device-sdk-embedded-c` im aktuellen Verzeichnis erstellt.

1. Navigieren Sie zu diesem Verzeichnis und machen Sie sich mit der neuesten Version vertraut. Bitte sehen Sie sich [Github an. com/aws/aws-iot-device-sdk-embedded-C/tags](https://github.com/aws/aws-iot-device-sdk-embedded-C/tags)für das neueste Release-Tag.

   ```
   cd aws-iot-device-sdk-embedded-c
   git checkout latest-release-tag
   ```

1. Installieren Sie die OpenSSL-Version 1.1.0 oder höher. Die OpenSSL-Entwicklungsbibliotheken werden in der Regel „libssl-dev“ oder „openssl-devel“ genannt, wenn sie über einen Paketmanager installiert werden.

   ```
   sudo apt-get install libssl-dev
   ```

## Schritt 2: Konfigurieren der Beispielanwendung
<a name="iot-c-sdk-app-config"></a>

Das AWS IoT Device SDK for Embedded C beinhaltet Beispielanwendungen, die Sie ausprobieren können. Der Einfachheit halber wird in diesem Tutorial die `mqtt_demo_mutual_auth` Anwendung verwendet, die veranschaulicht, wie Sie eine Verbindung zum AWS IoT Core Message Broker herstellen und MQTT-Themen abonnieren und veröffentlichen.

1. Kopieren Sie das Zertifikat und den privaten Schlüssel, den Sie in [Erste Schritte mit AWS IoT Core Tutorials](iot-gs.md) erstellt haben, in das Verzeichnis `build/bin/certificates`.
**Anmerkung**  
Geräte- und CA-Stammzertifikate laufen ab oder können widerrufen werden. Wenn diese Zertifikate ablaufen oder widerrufen werden, müssen Sie ein neues CA-Zertifikat oder einen privaten Schlüssel und ein Gerätezertifikat auf Ihr Gerät kopieren.

1. Sie müssen das Beispiel mit Ihrem persönlichen AWS IoT Core Endpunkt, Ihrem privaten Schlüssel, Ihrem Zertifikat und Ihrem Root-CA-Zertifikat konfigurieren. Navigieren Sie zum `aws-iot-device-sdk-embedded-c/demos/mqtt/mqtt_demo_mutual_auth` Verzeichnis .

   Wenn Sie das AWS CLI installiert haben, können Sie diesen Befehl verwenden, um die Endpunkt-URL Ihres Kontos zu finden.

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

   Wenn Sie den nicht AWS CLI installiert haben, öffnen Sie Ihre [AWS IoT Konsole](https://console.aws.amazon.com/iot/home). Wählen Sie im Navigationsbereich **Verwalten** und dann **Objekte** aus. Wählen Sie das IoT-Objekt für Ihr Gerät und dann **Interagieren** aus. Ihr Endpunkt wird im Abschnitt **HTTPS** auf der Seite mit den Objektdetails angezeigt.

1. Öffnen Sie die Datei `demo_config.h` und aktualisieren Sie die Werte für Folgendes:  
AWS\$1IOT\$1ENDPUNKT  
Ihr persönlicher Endpunkt.  
CLIENT\$1CERT\$1PATH  
Der Dateipfad Ihres Zertifikats, zum Beispiel `certificates/device.pem.crt"`.  
CLIENT\$1PRIVATE\$1KEY\$1PATH  
Der Dateiname Ihres privaten Schlüssels, zum Beispiel `certificates/private.pem.key`.

   Zum Beispiel:

   ```
   // Get from demo_config.h
   // =================================================
   #define AWS_IOT_ENDPOINT               "my-endpoint-ats.iot.us-east-1.amazonaws.com"
   #define AWS_MQTT_PORT                  8883
   #define CLIENT_IDENTIFIER              "testclient"
   #define ROOT_CA_CERT_PATH              "certificates/AmazonRootCA1.crt"
   #define CLIENT_CERT_PATH               "certificates/my-device-cert.pem.crt"
   #define CLIENT_PRIVATE_KEY_PATH        "certificates/my-device-private-key.pem.key"
   // =================================================
   ```

1. Überprüfen Sie mit diesem Befehl, ob Sie es auf Ihrem Gerät CMake installiert haben.

   ```
   cmake --version
   ```

   Wenn die Versionsinformationen für den Compiler angezeigt werden, können Sie mit dem nächsten Abschnitt fortfahren.

   Wenn Sie eine Fehlermeldung erhalten oder keine Informationen angezeigt werden, müssen Sie das CMake-Paket mit diesem Befehl installieren.

   ```
   sudo apt-get install cmake
   ```

   Führen Sie den **cmake --version** Befehl erneut aus und vergewissern Sie CMake sich, dass er installiert wurde und dass Sie bereit sind, fortzufahren.

1. Überprüfen Sie mithilfe dieses Befehls, ob die Entwicklungstools auf Ihrem Gerät installiert sind.

   ```
   gcc --version
   ```

   Wenn die Versionsinformationen für den Compiler angezeigt werden, können Sie mit dem nächsten Abschnitt fortfahren.

   Wenn Sie eine Fehlermeldung erhalten oder keine Compilerinformationen angezeigt werden, müssen Sie das Paket `build-essential` mit diesem Befehl installieren.

   ```
   sudo apt-get install build-essential
   ```

   Führen Sie den Befehl **gcc --version** erneut aus und vergewissern Sie sich, dass die Build-Tools installiert wurden und Sie fortfahren können.

## Schritt 3: So laden Sie die Beispielanwendung herunter und führen sie aus
<a name="iot-c-sdk-app-run"></a>

In diesem Verfahren wird erklärt, wie Sie die `mqtt_demo_mutual_auth` Anwendung auf Ihrem Gerät generieren und sie mithilfe von mit der [AWS IoT Konsole](https://console.aws.amazon.com/iot/home) verbinden. AWS IoT Device SDK for Embedded C

**Um die Beispielanwendungen auszuführen AWS IoT Device SDK for Embedded C**

1. Navigieren Sie zu `aws-iot-device-sdk-embedded-c` und erstellen Sie ein Build-Verzeichnis.

   ```
   mkdir build && cd build
   ```

1. Geben Sie den folgenden CMake Befehl ein, um die zum Erstellen benötigten Makefiles zu generieren.

   ```
   cmake ..  
   ```

1. Geben Sie den folgenden Befehl ein, um die ausführbare App-Datei zu erstellen:

   ```
   make
   ```

1. Führen Sie die App `mqtt_demo_mutual_auth` mit diesem Befehl aus.

   ```
   cd bin
   ./mqtt_demo_mutual_auth
   ```

   Die Ausgabe sollte folgendermaßen oder ähnlich aussehen:   
![\[Befehlszeilenausgabe zum Ausführen der AWS IoT Device SDK for Embedded C Beispielanwendung.\]](http://docs.aws.amazon.com/de_de/iot/latest/developerguide/images/successful-run2.png)

Ihr Gerät ist jetzt AWS IoT mit dem verbunden AWS IoT Device SDK for Embedded C.

Sie können die AWS IoT Konsole auch verwenden, um die MQTT-Nachrichten anzuzeigen, die die Beispiel-App veröffentlicht. Weitere Informationen zur Verwendung des MQTT-Clients in der [AWS IoT -Konsole](https://console.aws.amazon.com/iot/home) finden Sie unter [MQTT-Nachrichten mit dem AWS IoT MQTT-Client anzeigen](view-mqtt-messages.md).