Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Dimostra di esserti iscritto ai messaggi con Device Client AWS IoT
In questa sezione verranno illustrati due tipi di sottoscrizione ai messaggi:
-
Sottoscrizione ad argomento singolo
-
Sottoscrizione ad argomento con caratteri jolly
Queste istruzioni di policy nella policy creata per questi esercizi consentono a Raspberry Pi di eseguire queste azioni:
-
iot:Receive
Fornisce al AWS IoT Device Client l'autorizzazione a ricevere argomenti MQTT che corrispondono a quelli nominati nell'
Resource
oggetto.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
-
iot:Subscribe
Fornisce al AWS IoT Device Client l'autorizzazione a sottoscrivere i filtri degli argomenti MQTT che corrispondono a quelli nominati nell'
Resource
oggetto.{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }
Iscriviti a un singolo argomento del messaggio MQTT
Questa procedura dimostra come AWS IoT Device Client può sottoscrivere e registrare i messaggi MQTT.
Nella finestra del terminale del computer host locale connesso al Raspberry Pi, elenca il contenuto di ~/dc-configs/dc-pubsub-custom-config.json
oppure aprire il file in un editor di testo per esaminarne il contenuto. Individua l'oggetto samples
, che dovrebbe essere simile a questo.
"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"
Nota che il valore subscribe-topic
è l'argomento MQTT che AWS IoT Device Client sottoscriverà quando viene eseguito. Il AWS IoT Device Client scrive i payload dei messaggi che riceve da questo abbonamento nel file indicato nel valore. subscribe-file
Per sottoscrivere un argomento relativo a un messaggio MQTT dal Device Client AWS IoT
-
Assicurati che sia la finestra terminale che la finestra con il client MQTT di test siano visibili durante l'esecuzione di questa procedura. Inoltre, assicurati che il tuo client MQTT di test abbia una sottoscrizione ancora attiva per il filtro di argomenti #. Se non lo è, effettua nuovamente la sottoscrizione al filtro argomento#.
-
Nella finestra del terminale, inserisci questi comandi per eseguire il AWS IoT Device Client utilizzando il file di configurazione creato in. Creare il file di configurazione
cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
Nella finestra del terminale, il AWS IoT Device Client visualizza i messaggi informativi e gli eventuali errori che si verificano durante l'esecuzione.
Se nella finestra del terminale non vengono visualizzati errori, continuare nella console AWS IoT .
-
Nella AWS IoT console, nel client di test MQTT, scegliete la scheda Pubblica su un argomento.
-
Alla voce Topic name (Nome argomento), inserisci
test/dc/subtopic
-
Alla voce Message Payload (Payload del messaggio), esamina i contenuti del messaggio.
-
Per pubblicare il messaggio MQTT, scegli Publish (Pubblica).
-
Nella finestra del terminale, controllate la voce relativa al messaggio ricevuto dal AWS IoT Device Client che assomiglia a questa.
2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
-
Dopo aver visualizzato la voce relativa al messaggio ricevuto che indica che il messaggio è stato ricevuto, digita
^C
(Ctrl-C) per interrompere il AWS IoT Device Client. -
Inserisci questo comando per visualizzare la fine del file di log dei messaggi e visualizzare il messaggio pubblicato dal client MQTT di test.
tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
Visualizzando il messaggio nel file di log, è stato dimostrato che AWS IoT Device Client ha ricevuto il messaggio pubblicato dal client di test MQTT.
Sottoscrivi a più argomenti del messaggio MQTT utilizzando caratteri jolly
Queste procedure dimostrano come il AWS IoT Device Client può sottoscrivere e registrare i messaggi MQTT utilizzando caratteri jolly. Per fare ciò, dovrai:
-
Aggiornate il filtro degli argomenti utilizzato da AWS IoT Device Client per sottoscrivere gli argomenti MQTT.
-
Aggiornare la policy utilizzata dal dispositivo per consentire le nuove sottoscrizioni.
-
Esegui il AWS IoT Device Client e pubblica messaggi dalla console di test MQTT.
Per creare un file di configurazione per la sottoscrizione a più argomenti di messaggio MQTT utilizzando un filtro argomento MQTT con caratteri jolly
-
Nella finestra del terminale del computer host locale connesso al Raspberry Pi, apri
~/dc-configs/dc-pubsub-custom-config.json
per modificare e localizzare l'oggettosamples
. -
Nell'editor di testo, individua l'oggetto
samples
e aggiorna il valoresubscribe-topic
in modo che somigli a questo."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"Il nuovo valore
subscribe-topic
è un filtro di argomento MQTT con un carattere jolly MQTT alla fine. Descrive una sottoscrizione a tutti gli argomenti MQTT che iniziano contest/dc/
. Il AWS IoT Device Client scrive i payload dei messaggi che riceve da questo abbonamento nel file indicato in.subscribe-file
-
Salva il file di configurazione modificato come
~/dc-configs/dc-pubsub-wild-config.json
ed esci dall'editor.
Per modificare la policy utilizzata da Raspberry Pi per consentire la sottoscrizione e la ricezione di più argomenti di messaggio MQTT
-
Nella finestra del terminale del computer host locale connesso al tuo Raspberry Pi, nel tuo editor di testo preferito, apri
~/policies/pubsub_test_thing_policy.json
per la modifica e quindi individua le istruzioni di policyiot::Subscribe
eiot::Receive
nel file. -
Nell'istruzione di policy
iot::Subscribe
, aggiorna la stringa nell'oggetto Risorsa per sostituiresubtopic
con*
, in modo tale che l'indirizzo sia simile al seguente.{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/
*
" ] }Nota
I caratteri jolly del filtro di argomento MQTT sono il
+
(segno più) e il#
(segno cancelletto). Una richiesta di sottoscrizione con un#
alla fine sottoscrive tutti gli argomenti che iniziano con la stringa che precede il carattere#
(ad esempio,test/dc/
in questo caso).Tuttavia, il valore della risorsa nell'istruzione di policy che autorizza questa sottoscrizione deve utilizzare un
*
(un asterisco) al posto di#
(segno del cancelletto) nel filtro argomento ARN. Questo perché il processore di policy utilizza un carattere jolly diverso da quello utilizzato da MQTT.Per ulteriori informazioni sull'utilizzo di caratteri jolly per argomenti e filtri di argomento nelle policy, consulta Utilizzo di caratteri jolly in policy MQTT e AWS IoT Core.
-
Nell'istruzione di policy
iot::Receive
, aggiorna la stringa nell'oggetto Risorsa per sostituiresubtopic
con*
, in modo tale che l'indirizzo sia simile al seguente.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/
*
" ] } -
Salva il documento della policy aggiornato con nome
~/policies/pubsub_wild_test_thing_policy.json
ed esci dall'editor. -
Inserisci questo comando per aggiornare la policy di questo tutorial per utilizzare le nuove definizioni delle risorse.
aws iot create-policy-version \ --set-as-default \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"
Se il comando viene eseguito correttamente, verrà visualizzata una risposta simile alla seguente. Nota che
policyVersionId
ora è2
, indicando che questa è la seconda versione di questa policy.Se hai aggiornato correttamente la policy, puoi passare alla procedura successiva.
{ "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 }
Se si verifica un errore che contiene troppe versioni di policy per salvarne una nuova, inserisci questo comando per elencare le versioni attuali della policy. Esamina l'elenco restituito da questo comando per trovare una versione della policy che è possibile eliminare.
aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
Inserisci questo comando per eliminare una versione che non serve più. Attenzione: non puoi eliminare la versione di default della policy. La versione della policy di default è quella con un valore
isDefaultVersion
ditrue
.aws iot delete-policy-version \ --policy-name "PubSubTestThingPolicy" \ --policy-version-id
policyId
Dopo aver eliminato una versione della policy, riprova questo passaggio.
Con il file di configurazione e la policy aggiornati, sei pronto a dimostrare gli abbonamenti wild card con Device Client. AWS IoT
Per dimostrare come AWS IoT Device Client sottoscrive e riceve più argomenti relativi ai messaggi MQTT
-
Nel client MQTT di test, controlla le sottoscrizioni. Se il client MQTT di test è sottoscritto al filtro dell'argomento
#
, passare alla fase successiva. In caso contrario, in MQTT test client (Client MQTT di test), nella scheda Subscribe to a topic (Sottoscrivi un argomento), in Topic filter (Filtro argomenti) inserisci#
(un cancelletto), quindi scegli Subscribe (Sottoscrivi) per sottoscriverlo. -
Nella finestra del terminale del computer host locale connesso a Raspberry Pi, inserisci questi comandi per avviare AWS IoT Device Client.
cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
-
Mentre guardate l'output del AWS IoT Device Client nella finestra del terminale sul computer host locale, tornate al client di test MQTT. Nella scheda Publish to a topic (Pubblica in un argomento), in Topic name (Nome argomento), inserisci
test/dc/subtopic
e quindi scegli Publish (Pubblica). -
Nella finestra del terminale, conferma che il messaggio è stato ricevuto cercando un messaggio come:
2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
-
Mentre guardate l'output del AWS IoT Device Client nella finestra del terminale del computer host locale, tornate al client di test MQTT. Nella scheda Publish to a topic (Pubblica in un argomento), in Topic name (Nome argomento), inserisci
test/dc/subtopic2
e quindi scegli Publish (Pubblica). -
Nella finestra del terminale, conferma che il messaggio è stato ricevuto cercando un messaggio come:
2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
-
Dopo aver visualizzato i messaggi che confermano la ricezione di entrambi i messaggi, digitate
^C
(Ctrl-C) per fermare il AWS IoT Device Client. -
Inserisci questo comando per visualizzare la fine del file di log dei messaggi e visualizzare il messaggio pubblicato dal client MQTT di test.
tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
Nota
Il file di log contiene solo payload del messaggio. Gli argomenti del messaggio non vengono registrati nel file di registro dei messaggi ricevuti.
Potresti anche vedere il messaggio pubblicato dal AWS IoT Device Client nel registro ricevuto. Questo perché il filtro degli argomenti jolly include l'argomento del messaggio e, a volte, la richiesta di sottoscrizione può essere elaborata dal broker messaggi prima che il messaggio pubblicato venga inviato agli iscritti.
Le voci nel file di registro dimostrano che i messaggi sono stati ricevuti. È possibile ripetere questa procedura utilizzando altri nomi di argomenti. Tutti i messaggi con un nome argomento che iniziano per test/dc/
devono essere ricevuti e registrati. I messaggi con nomi di argomenti che iniziano con qualsiasi altro testo vengono ignorati.
Dopo aver dimostrato come AWS IoT Device Client può pubblicare e sottoscrivere messaggi MQTT, continua con. Tutorial: dimostrazione di azioni remote (processi) con AWS IoT Device Client