Demonstrieren Sie das Abonnieren von Nachrichten mit dem Device Client AWS IoT - AWS IoT Core

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

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 Berechtigung, MQTT Themen zu empfangen, die den im Resource 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 im Resource Objekt genannten Filtern entsprechen.

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

Abonnieren Sie ein einzelnes MQTT Nachrichtenthema

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 ~/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 abonniert, wenn er ausgeführt wird. Der AWS IoT Geräteclient schreibt die Nachrichten-Payloads, die er von diesem Abonnement empfängt, in die im subscribe-file Wert angegebene Datei.

Um ein MQTT Nachrichtenthema vom AWS IoT Device Client aus zu abonnieren
  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 MQTTTestclient weiterhin den #-Themenfilter abonniert hat. Falls nicht, abonnieren Sie den #-Themenfilter erneut.

  2. Geben Sie im Terminalfenster diese Befehle ein, um den AWS IoT Geräteclient mithilfe der in Erstellen der Konfigurationsdatei 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.

  3. Wählen Sie in der AWS IoT Konsole im MQTTTestclient die Registerkarte In einem Thema veröffentlichen aus.

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

  5. Überprüfen Sie unter Nachrichtennutzlast den Nachrichteninhalt.

  6. Wählen Sie Veröffentlichen, um die MQTT Nachricht zu veröffentlichen.

  7. Achten Sie im Terminalfenster auf den Eintrag „Nachricht erhalten“ 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
  8. 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.

  9. Geben Sie diesen Befehl ein, um das Ende der Nachrichtenlogdatei und die Nachricht zu sehen, die Sie vom MQTTTestclient veröffentlicht haben.

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

Durch das Anzeigen der Nachricht in der Protokolldatei haben Sie nachgewiesen, dass der AWS IoT Device Client die von Ihnen veröffentlichte Nachricht vom MQTT Testclient erhalten hat.

Abonnieren Sie mehrere MQTT Nachrichtenthemen mithilfe von Platzhalterzeichen

Diese Verfahren veranschaulichen, 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 zum Abonnieren von MQTT Themen verwendet.

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

  3. Führen Sie den AWS IoT Geräteclient aus und veröffentlichen Sie Nachrichten von der MQTT Testkonsole aus.

Um eine Konfigurationsdatei zum Abonnieren mehrerer MQTT Nachrichtenthemen mithilfe eines Themenfilters mit Platzhaltern MQTT zu erstellen
  1. Öffnen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, ~/dc-configs/dc-pubsub-custom-config.json, um das samples-Objekt zu finden und zu bearbeiten.

  2. 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 MQTTThemenfilter mit einem MQTT Platzhalterzeichen am Ende. Dies beschreibt ein Abonnement für alle MQTT Themen, die mit beginnentest/dc/. Der AWS IoT Geräteclient schreibt die Nachrichtennutzdaten, die er von diesem Abonnement empfängt, in subscribe-file die unter angegebene Datei.

  3. Speichern Sie die geänderte Konfigurationsdatei als ~/dc-configs/dc-pubsub-wild-config.json und schließen Sie den Editor.

Um die von Ihrem Raspberry Pi verwendete Richtlinie so zu ändern, dass Sie mehrere MQTT Nachrichtenthemen abonnieren und empfangen können
  1. Öffnen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, in Ihrem bevorzugten Texteditor ~/policies/pubsub_test_thing_policy.json zur Bearbeitung und suchen Sie dann die iot::Subscribe- und iot::Receive-Richtlinienanweisungen in der Datei.

  2. 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 MQTTPlatzhalterzeichen für den Themenfilter sind das + (Pluszeichen) und das # (Rautenzeichen). Eine Abonnementanfrage mit # am Ende abonniert alle Themen, die mit der Zeichenfolge beginnen, die dem #-Zeichen vorausgeht (zum Beispiel test/dc/ in diesem Fall).

    Für den Ressourcenwert in der Richtlinienanweisung, die dieses Abonnement autorisiert, muss im Themenfilter jedoch ein * (ein Sternchen) anstelle des # (ein Pfundzeichen) verwendet werden. ARN Das liegt daran, dass der Richtlinienprozessor ein anderes Platzhalterzeichen verwendet als MQTT verwendet.

    Weitere Informationen zur Verwendung von Platzhalterzeichen für Themen und Themenfilter in Richtlinien finden Sie unter Verwendung von Platzhalterzeichen in und -Richtlinien MQTT AWS IoT Core.

  3. 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/*" ] }
  4. Speichern Sie das aktualisierte Richtliniendokument unter ~/policies/pubsub_wild_test_thing_policy.json und schließen Sie den Editor.

  5. 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 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 MQTTTestclient die Abonnements. Wenn der MQTTTestclient den Filter „Im # Thema“ abonniert hat, fahren Sie mit dem nächsten Schritt fort. Falls nicht, geben Sie im MQTTTestclient auf der Registerkarte Thema abonnieren im Themenfilter # (ein Rautenzeichen) ein, und wählen Sie dann Abonnieren aus, um ihn zu abonnieren.

  2. 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
  3. Kehren Sie zum MQTTTestclient zurück, während Sie sich die Ausgabe des AWS IoT Geräteclients im Terminalfenster auf dem lokalen Hostcomputer 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.

  4. 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
  5. Kehren Sie zum MQTTTestclient zurück, während Sie sich die Ausgabe des AWS IoT Geräteclients 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.

  6. 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
  7. Wenn Sie die Meldungen sehen, die bestätigen, dass beide Nachrichten empfangen wurden, drücken Sie ^C (Strg-C), um den AWS IoT Geräteclient zu beenden.

  8. Geben Sie diesen Befehl ein, um das Ende der Nachrichtenlogdatei und die Nachricht zu sehen, die Sie vom MQTTTestclient 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 sehen Sie die vom AWS IoT Geräteclient veröffentlichte Nachricht auch im empfangenen Protokoll. 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 mitTutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client.