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 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
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 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
-
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 #-Themenfilter abonniert hat. Falls nicht, abonnieren Sie den #-Themenfilter erneut.
-
Geben Sie im Terminalfenster diese Befehle ein, um den AWS IoT Device Client 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.
-
Wählen Sie in der AWS IoT Konsole im MQTT-Testclient die Registerkarte In einem Thema veröffentlichen.
-
Geben Sie in das Feld Name des Themas
test/dc/subtopic
ein. -
Überprüfen Sie unter Nachrichtennutzlast den Nachrichteninhalt.
-
Wählen Sie Veröffentlichen, um die MQTT-Nachricht zu veröffentlichen.
-
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
-
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. -
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
Diese Verfahren zeigen, wie der AWS IoT Device Client MQTT-Nachrichten mithilfe von Platzhalterzeichen abonnieren und protokollieren kann. Gehen Sie dazu wie folgt vor:
-
Aktualisieren Sie den Themenfilter, den der AWS IoT Device Client verwendet, um MQTT-Themen zu abonnieren.
-
Aktualisieren Sie die vom Gerät verwendete Richtlinie, um die neuen Abonnements zuzulassen.
-
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:
-
Öffnen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist,
~/dc-configs/dc-pubsub-custom-config.json
, um dassamples
-Objekt zu finden und zu bearbeiten. -
Suchen Sie im Texteditor das
samples
-Objekt und aktualisieren Sie densubscribe-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 mit einem MQTT-Platzhalterzeichen am Ende. Dies beschreibt ein Abonnement für alle MQTT-Themen, die mittest/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
-
Speichern Sie die geänderte Konfigurationsdatei als
~/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:
-
Ö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 dieiot::Subscribe
- undiot::Receive
-Richtlinienanweisungen in der Datei. -
Aktualisieren Sie in der
iot::Subscribe
-Richtlinienanweisung die Zeichenfolge im Ressourcenobjekt, indem Siesubtopic
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 sind das
+
(Pluszeichen) und das#
(Pfundzeichen). Eine Abonnementanfrage mit#
am Ende abonniert alle Themen, die mit der Zeichenfolge beginnen, die dem#
-Zeichen vorausgeht (zum Beispieltest/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 Verwenden von Platzhalterzeichen in MQTT und AWS IoT Core -Richtlinien.
-
Aktualisieren Sie in der
iot::Receive
-Richtlinienanweisung die Zeichenfolge im Ressourcenobjekt, indem Siesubtopic
durch*
ersetzten, sodass sie wie folgt aussieht:{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/
*
" ] } -
Speichern Sie das aktualisierte Richtliniendokument unter
~/policies/pubsub_wild_test_thing_policy.json
und schließen Sie den Editor. -
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
jetzt2
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 vontrue
.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
-
Überprüfen Sie im MQTT-Testclient die Abonnements. Wenn der MQTT-Testclient den
#
-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#
(ein Pfundzeichen) ein und wählen Sie dann Abonnieren aus, um es zu abonnieren. -
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
-
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. -
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
-
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. -
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
-
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. -
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 mitTutorial: Demonstrieren von Remote-Aktionen (Jobs) mit dem AWS IoT Device Client.