

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.

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