Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Tutorial: Connessione di un dispositivo AWS IoT Core tramite il AWS IoT dispositivo SDK

Modalità Focus
Tutorial: Connessione di un dispositivo AWS IoT Core tramite il AWS IoT dispositivo SDK - AWS IoT Core

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à.

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à.

Questo tutorial mostra come connettere un dispositivo a AWS IoT Core cui inviare e ricevere dati da AWS IoT e verso. Dopo aver completato questo tutorial, il dispositivo sarà configurato per la connessione AWS IoT Core e capirai come comunicano i AWS IoT dispositivi.

Prerequisiti

Prima di iniziare il tutorial, assicurati di disporre:

  • Aver completato Guida introduttiva ai AWS IoT Core tutorial

    Nella sezione di quel tutorial in cui è necessario Configurazione del dispositivo, seleziona l’opzione Connettere un Raspberry Pi o altro dispositivo per il tuo dispositivo e usa le opzioni del linguaggio Python per configurare il tuo dispositivo.

    Nota

    Assicurati di tenere aperta la finestra terminale che usi in quel tutorial perché la userai anche in questo.

  • Un dispositivo in grado di eseguire AWS IoT Device SDK v2 for Python.

    Questo tutorial mostra come connettere un dispositivo AWS IoT Core utilizzando esempi di codice Python, che richiedono un dispositivo relativamente potente. Se lavori con dispositivi con vincoli di risorse, questi esempi di codice potrebbero non funzionare su di essi. In tal caso, potresti avere più successo con il Tutorial: Utilizzo del SDK per dispositivi AWS IoT per Embedded C tutorial.

  • Hai ottenuto le informazioni richieste per la connessione al dispositivo

    Per connettere il dispositivo a AWS IoT, è necessario disporre di informazioni sul nome dell'oggetto, sul nome host e sul numero di porta.

    Nota

    Puoi anche utilizzare l'autenticazione personalizzata a cui connettere i dispositivi AWS IoT Core. I dati di connessione trasmessi alla funzione Lambda dell'autorizzatore dipendono dal protocollo utilizzato.

    • Nome dell'oggetto: il nome dell' AWS IoT oggetto a cui vuoi connetterti. Devi prima esserti registrato come AWS IoT dispositivo. Per ulteriori informazioni, consulta Gestione dei dispositivi con AWS IoT.

    • Nome host: il nome host per l'endpoint IoT specifico dell'account.

    • Numero di porta: il numero di porta a cui connettersi.

    Puoi usare il configureEndpoint metodo in AWS IoT Python SDK per configurare il nome host e il numero di porta.

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

Prepara il tuo dispositivo per AWS IoT

In Guida introduttiva ai AWS IoT Core tutorial, hai preparato il tuo dispositivo e account AWS in modo che potessero comunicare. Questa sezione esamina gli aspetti di tale preparazione che si applicano alla connessione di qualsiasi dispositivo con AWS IoT Core.

Affinché un dispositivo si connetta a AWS IoT Core:

  1. È necessario disporre di un Account AWS.

    La procedura riportata di seguito Configurare Account AWS descrive come crearne una Account AWS se non ne hai già una.

  2. In quell'account, devi avere le seguenti AWS IoT risorse definite per il dispositivo nella tua Account AWS regione.

    La procedura in Crea AWS IoT risorse descrive come creare queste risorse per il dispositivo nell’account Account AWS e regione.

    • Un certificato del dispositivo registrato con AWS IoT e attivato per autenticare il dispositivo.

      Il certificato viene spesso creato con un oggetto AWS IoT e collegato a esso. Sebbene un oggetto non sia necessario per la connessione di un dispositivo AWS IoT, rende disponibili AWS IoT funzionalità aggiuntive per il dispositivo.

    • Una politica allegata al certificato del dispositivo che lo autorizza a connettersi AWS IoT Core e a eseguire tutte le azioni desiderate.

  3. Una connessione a Internet che può accedere all’account Account AWS degli endpoint del dispositivo.

    Gli endpoint del dispositivo sono descritti AWS IoT dati del dispositivo e endpoint di servizio e possono essere visualizzati nella pagina delle impostazioni della AWS IoT console.

  4. Software di comunicazione SDKs fornito dal AWS IoT dispositivo. Questo tutorial utilizza AWS IoT Device SDK v2 per Python.

Rivedi il protocollo MQTT

Prima di parlare dell'app di esempio, è utile comprendere il MQTT protocollo. Il MQTT protocollo offre alcuni vantaggi rispetto ad altri protocolli di comunicazione di rete, ad esempioHTTP, il che lo rende una scelta popolare per i dispositivi IoT. Questa sezione esamina gli aspetti MQTT chiave relativi a questo tutorial. Per informazioni sulla MQTT comparazione conHTTP, vediScelta di un protocollo applicativo per la comunicazione del dispositivo.

MQTTutilizza un modello di comunicazione pubblica/sottoscrizione

Il MQTT protocollo utilizza un publish/subscribe communication model with its host. This model differs from the request/response modello che utilizza. HTTP ConMQTT, i dispositivi stabiliscono una sessione con l'host identificata da un ID client univoco. Per inviare dati, i dispositivi pubblicano i messaggi identificati da argomenti al broker messaggi nell'host. Per ricevere messaggi dal broker di messaggi, i dispositivi sottoscrivono agli argomenti inviando al broker messaggi i filtri argomento nelle richieste di sottoscrizione al broker di messaggi.

MQTTsupporta sessioni persistenti

Il broker di messaggi riceve i messaggi dai dispositivi e pubblica i messaggi ai dispositivi che hanno effettuato una sottoscrizione. Con le sessioni persistenti che rimangono attive anche quando il dispositivo di avvio è disconnesso, i dispositivi possono recuperare i messaggi pubblicati mentre erano disconnessi. Sul lato dispositivo, MQTT supporta i livelli di qualità del servizio (QoS) che garantiscono che l'host riceva i messaggi inviati dal dispositivo.

Consulta l'app di SDK esempio per dispositivi pubsub.py

Questa sezione esamina l'app di pubsub.py esempio di AWS IoT Device SDK v2 for Python utilizzata in questo tutorial. Qui esamineremo come si collega per AWS IoT Core pubblicare e sottoscrivere MQTT i messaggi. La sezione successiva presenta alcuni esercizi per aiutarti a scoprire in che modo un dispositivo si connette e comunica. AWS IoT Core

Protocolli di comunicazione

L'pubsub.pyesempio mostra una MQTT connessione che utilizza i protocolli MQTT and MQTT overWSS. La libreria AWS common runtime (AWS CRT) fornisce il supporto del protocollo di comunicazione di basso livello ed è inclusa nel AWS IoT Device SDK v2 for Python.

MQTT

Le chiamate pubsub.py di esempio mtls_from_path (mostrate qui) sono quelle con mqtt_connection_buildercui stabilire una connessione AWS IoT Core utilizzando il protocollo. MQTT mtls_from_pathutilizza i certificati X.509 e la TLS versione 1.2 per autenticare il dispositivo. La AWS CRT libreria gestisce i dettagli di livello inferiore di tale connessione.

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

L'endpoint Account AWS del tuo dispositivo IoT

Nell'app di esempio, il valore viene passato dalla riga di comando.

cert_filepath

Il percorso del certificato del file del dispositivo

Nell'app di esempio, il valore viene passato dalla riga di comando.

pri_key_filepath

Il percorso al file della chiave privata del dispositivo creata con il relativo file di certificato

Nell'app di esempio, il valore viene passato dalla riga di comando.

ca_filepath

Il percorso del file Root CA. Richiesto solo se il MQTT server utilizza un certificato che non è già presente nel tuo trust store.

Nell'app di esempio, il valore viene passato dalla riga di comando.

client_bootstrap

L'oggetto runtime comune che gestisce le attività di comunicazione socket

Nell'app di esempio, questo oggetto viene istanziato appena prima della chiamata a mqtt_connection_builder.mtls_from_path.

on_connection_interrupted
on_connection_resumed

Le funzioni di richiamata da richiamare quando la connessione del dispositivo viene interrotta e ripresa

client_id

L'ID che identifica il dispositivo in modo univoco nella Regione AWS

Nell'app di esempio, il valore viene passato dalla riga di comando.

clean_session

Se avviare una nuova sessione persistente o, se presente, riconnettersi a una esistente

keep_alive_secs

Il valore keep alive, in secondi, per inviare la richiesta CONNECT. Un ping verrà inviato automaticamente a questo intervallo. Se il server non riceve un ping dopo 1,5 volte questo valore, presuppone che la connessione sia stata persa.

MQTTfinito WSS

Le chiamate di pubsub.py esempio websockets_with_default_aws_signing (mostrate qui) in mqtt_connection_buildercui stabilire una connessione AWS IoT Core utilizzando il MQTT protocollo overWSS. websockets_with_default_aws_signingcrea una MQTT connessione WSS utilizzando Signature V4 per autenticare il dispositivo.

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

L'endpoint Account AWS del tuo dispositivo IoT

Nell'app di esempio, il valore viene passato dalla riga di comando.

client_bootstrap

L'oggetto runtime comune che gestisce le attività di comunicazione socket

Nell'app di esempio, questo oggetto viene istanziato appena prima della chiamata a mqtt_connection_builder.websockets_with_default_aws_signing.

region

La regione di AWS firma utilizzata dall'autenticazione Signature V4. Nello stato pubsub.py, passa il parametro inserito nella riga di comando.

Nell'app di esempio, il valore viene passato dalla riga di comando.

credentials_provider

Le AWS credenziali fornite da utilizzare per l'autenticazione

Nell'app di esempio, questo oggetto viene istanziato appena prima della chiamata a mqtt_connection_builder.websockets_with_default_aws_signing.

websocket_proxy_options

HTTPopzioni proxy, se si utilizza un host proxy

Nell'app di esempio, questo valore viene inizializzato appena prima della chiamata a mqtt_connection_builder.websockets_with_default_aws_signing.

ca_filepath

Il percorso del file Root CA. Richiesto solo se il MQTT server utilizza un certificato che non è già presente nel tuo trust store.

Nell'app di esempio, il valore viene passato dalla riga di comando.

on_connection_interrupted
on_connection_resumed

Le funzioni di richiamata da richiamare quando la connessione del dispositivo viene interrotta e ripresa

client_id

L'ID che identifichi il dispositivo in modo univoco nella Regione AWS.

Nell'app di esempio, il valore viene passato dalla riga di comando.

clean_session

Se avviare una nuova sessione persistente o, se presente, riconnettersi a una esistente

keep_alive_secs

Il valore keep alive, in secondi, per inviare la richiesta CONNECT. Un ping verrà inviato automaticamente a questo intervallo. Se il server non riceve un ping dopo 1,5 volte questo valore, presuppone che la connessione venga persa.

HTTPS

Che direHTTPS? AWS IoT Core supporta dispositivi che pubblicano HTTPS richieste. Dal punto di vista della programmazione, i dispositivi inviano HTTPS le richieste AWS IoT Core come qualsiasi altra applicazione. Per un esempio di programma Python che invia un HTTP messaggio da un dispositivo, vedi l'esempio di HTTPS codice che utilizza la libreria di Python. requests Questo esempio invia un messaggio a AWS IoT Core using HTTPS such che lo AWS IoT Core interpreta come messaggio. MQTT

Sebbene AWS IoT Core supporti HTTPS le richieste provenienti dai dispositivi, assicuratevi di esaminare le informazioni Scelta di un protocollo applicativo per la comunicazione del dispositivo in merito in modo da poter prendere una decisione informata sul protocollo da utilizzare per le comunicazioni tra i dispositivi.

Sessioni persistenti

Nell'app di esempio, l’impostazione del parametro clean_session di False indica che la connessione deve essere persistente. In pratica, ciò significa che la connessione aperta da questa chiamata si riconnette a una sessione persistente esistente, se esiste. In caso contrario, crea e si connette a una nuova sessione persistente.

Con una sessione persistente, i messaggi inviati al dispositivo vengono archiviati dal broker di messaggi mentre il dispositivo non è connesso. Quando un dispositivo si riconnette a una sessione persistente, il broker di messaggi invia al dispositivo tutti i messaggi archiviati a cui è stato sottoscritto.

Senza una sessione persistente, il dispositivo non riceverà messaggi inviati mentre il dispositivo non è connesso. L'opzione da utilizzare dipende dall'applicazione e se i messaggi che si verificano mentre un dispositivo non è connesso devono essere comunicati. Per ulteriori informazioni, consulta Sessioni persistenti MQTT.

Qualità del servizio

Quando il dispositivo pubblica e sottoscrive messaggi, è possibile impostare la qualità del servizio (QoS) preferita. AWS IoT supporta i livelli QoS 0 e 1 per le operazioni di pubblicazione e sottoscrizione. Per ulteriori informazioni sui livelli QoS in AWS IoT, vedere. Opzioni di qualità del servizio MQTT (QoS)

Il AWS CRT runtime per Python definisce queste costanti per i livelli QoS che supporta:

Livelli della qualità del servizio di Python
MQTTLivello QoS Valore simbolico Python usato da SDK Descrizione
QoS livello 0 mqtt.QoS.AT_MOST_ONCE Verrà effettuato un solo tentativo di inviare il messaggio, che sia ricevuto o meno. Il messaggio potrebbe non venire inviato, ad esempio se il dispositivo non è connesso o si verifica un errore di rete.
QoS livello 1 mqtt.QoS.AT_LEAST_ONCE Il messaggio viene inviato ripetutamente finché non si riceve un riconoscimento PUBACK.

Nell'app di esempio, le richieste di pubblicazione e sottoscrizione vengono effettuate con un livello QoS di 1 (mqtt.QoS.AT_LEAST_ONCE).

  • QoS in fase di pubblicazione

    Quando un dispositivo pubblica un messaggio con QoS livello 1, invia il messaggio ripetutamente fino a quando non riceve una risposta PUBACK dal broker di messaggi. Se il dispositivo non è connesso, il messaggio viene messo in coda per essere inviato dopo la riconnessione.

  • QoS in abbonamento

    Quando un dispositivo sottoscrive un messaggio con QoS livello 1, il broker di messaggi salva i messaggi a cui il dispositivo è sottoscritto fino a quando non possono essere inviati al dispositivo. Il broker di messaggi restituisce i messaggi fino a quando non riceve una risposta PUBACK dal dispositivo.

Pubblicazione di messaggi

Dopo aver stabilito con successo una connessione a AWS IoT Core, i dispositivi possono pubblicare messaggi. L’esempio pubsub.py fa ciò chiamando l'operazione publish dell'oggetto mqtt_connection.

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

Nome dell'argomento del messaggio che identifica il messaggio

Nell'app di esempio, ciò viene passato dalla riga di comando.

payload

Il payload del messaggio formattato come stringa (ad esempio, un JSON documento)

Nell'app di esempio, ciò viene passato dalla riga di comando.

Un JSON documento è un formato di payload comune e riconosciuto da altri AWS IoT servizi; tuttavia, il formato dei dati del payload del messaggio può essere qualsiasi cosa concordata tra editori e abbonati. Altri AWS IoT servizi, tuttavia, riconoscono JSON solo e, in alcuni casiCBOR, la maggior parte delle operazioni.

qos

Il livello QoS per questo messaggio

Abbonamento messaggi

Per ricevere messaggi da AWS IoT e altri servizi e dispositivi, i dispositivi si iscrivono a tali messaggi in base al nome dell'argomento. I dispositivi possono sottoscrivere singoli messaggi specificando un nome argomento e a un gruppo di messaggi specificando un filtro di argomenti che può includere caratteri jolly. L’esempio pubsub.py utilizza il codice mostrato qui per iscriversi ai messaggi e registrare le funzioni di callback per elaborare il messaggio dopo che è stato ricevuto.

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

L'argomento a cui effettuare la sottoscrizione. Può trattarsi di un nome di argomento o di un filtro dell’argomento.

Nell'app di esempio, ciò viene passato dalla riga di comando.

qos

Se il broker di messaggi deve archiviare questi messaggi mentre il dispositivo è disconnesso.

Valore di mqtt.QoS.AT_LEAST_ONCE (QoS livello 1), richiede una sessione persistente da specificare (clean_session=False) quando viene creata la connessione.

callback

La funzione da chiamare per elaborare il messaggio sottoscritto.

La funzione mqtt_connection.subscribe restituisce un futuro e un ID pacchetto. Se la richiesta di sottoscrizione è stata avviata correttamente, l'ID del pacchetto restituito è maggiore di 0. Per assicurarsi che la sottoscrizione sia stata ricevuta e registrata dal broker di messaggi, è necessario attendere la restituzione del risultato dell'operazione asincrona, come illustrato nell'esempio del codice.

La funzione di callback

Il callback nei processi di esempio pubsub.py elabora i messaggi sottoscritti quando il dispositivo li riceve.

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

L'argomento del messaggio

Questo è il nome dell'argomento specifico del messaggio ricevuto, anche se è stato sottoscritto un filtro dell’argomento.

payload

Payload del messaggio

Il formato è specifico per l'applicazione.

kwargs

Possibili argomenti aggiuntivi come descritto in mqtt.Connection.subscribe.

Nell’esempio pubsub.py, on_message_received visualizza solo l'argomento e il relativo payload. Conta inoltre i messaggi ricevuti per terminare il programma dopo il raggiungimento del limite.

La tua app valuterà l'argomento e il payload per determinare quali operazioni eseguire.

Disconnessione e riconnessione del dispositivo

L’esempio pubsub.py include funzioni di callback che vengono chiamate quando il dispositivo viene disconnesso e quando la connessione viene ristabilita. Le operazioni intraprese dal dispositivo su questi eventi sono specifiche dell'applicazione.

Quando un dispositivo si connette per la prima volta, deve sottoscrivere gli argomenti da ricevere. Se la sessione di un dispositivo è presente durante la riconnessione, le relative sottoscrizioni vengono ripristinate e tutti i messaggi memorizzati da tali sottoscrizioni vengono inviati al dispositivo dopo la riconnessione.

Se la sessione di un dispositivo non esiste più quando si riconnette, è necessario sottoscrivere nuovamente alle sottoscrizioni. Le sessioni persistenti hanno una durata limitata e possono scadere quando il dispositivo viene disconnesso per troppo tempo.

Connect il dispositivo e comunica con AWS IoT Core

Questa sezione presenta alcuni esercizi che consentono di esplorare diversi aspetti della connessione del dispositivo a AWS IoT Core. Per questi esercizi, utilizzerai il client di MQTT test nella AWS IoT console per vedere cosa pubblica il tuo dispositivo e per pubblicare messaggi sul tuo dispositivo. Questi esercizi utilizzano l'pubsub.pyesempio di AWS IoT Device SDK v2 for Python e si basano sulla tua esperienza Guida introduttiva ai AWS IoT Core tutorial con i tutorial.

Per questi esercizi, inizierai dal programma di esempio pubsub.py.

Nota

Questi esercizi presuppongono che tu abbia completato i tutorial Guida introduttiva ai AWS IoT Core tutorial e abbia utilizzato la finestra del terminale per il dispositivo da quel tutorial.

Iscriviti ai filtri per argomenti jolly

In questo esercizio, modificherai la riga di comando utilizzata per chiamare pubsub.py per sottoscrivere un filtro dell’argomento con caratteri jolly ed elaborare i messaggi ricevuti in base all'argomento del messaggio.

Procedura dell’esercizio

Per questo esercizio, immagina che il dispositivo contenga un controllo della temperatura e un controllo della luce. Utilizza questi nomi di argomenti per identificare i messaggi che li riguardano.

  1. Prima di iniziare l'esercizio, prova a eseguire questo comando dai tutorial Guida introduttiva ai AWS IoT Core tutorial sul tuo dispositivo per assicurarti che tutto sia pronto per l'esercizio.

    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

    Dovresti vedere lo stesso output che hai visto nel Tutorial sulle nozioni di base.

  2. Per questo esercizio, modifica questi parametri della riga di comando.

    Azione

    Parametri della riga di comando

    Effetto

    aggiungi

    --message ""

    Configura pubsub.py solo per l’ascolto

    aggiungi

    --count 2

    Termina il programma dopo aver ricevuto due messaggi

    modifica

    --topic device/+/details

    Definisci il filtro degli argomenti a cui sottoscrivere

    L'esecuzione di queste modifiche alla riga di comando iniziale si traduce in questa riga di comando. Inserisci questo comando nella finestra del terminale per il tuo dispositivo.

    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

    Il programma dovrebbe mostrare qualcosa del genere:

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

    Se vedi qualcosa di simile sul tuo terminale, il tuo dispositivo è pronto e ascolta i messaggi in cui i nomi degli argomenti iniziano con device e terminano con /detail. Quindi, è il momento di provare.

  3. Di seguito sono riportati un paio di messaggi che il dispositivo potrebbe ricevere.

    Nome argomento

    Payload del messaggio

    device/temp/details

    { "desiredTemp": 20, "currentTemp": 15 }

    device/light/details

    { "desiredLight": 100, "currentLight": 50 }

  4. Utilizzando il client di MQTT test nella AWS IoT console, invia i messaggi descritti nel passaggio precedente al dispositivo.

    1. Apri il client di MQTT test nella AWS IoT console.

    2. In Subscribe to a topic (Sottoscrivi un argomento) nel campo Subscription topic field (Argomento sottoscrizione), inserisci il filtro dell’argomento: device/+/details, quindi scegli Subscribe to topic (Sottoscrivi nell’argomento).

    3. Nella colonna Abbonamenti del client di MQTT test, scegli device/+/details.

    4. Per ciascuno degli argomenti della tabella precedente, effettuate le seguenti operazioni nel client di test: MQTT

      1. In Publish (Pubblica), inserisci il valore dalla colonna Topic name (Nome argomento) nella tabella.

      2. Nel campo del payload del messaggio sotto il nome dell'argomento, inserisci il valore della colonna Message payload (Payload del messaggio) nella tabella.

      3. Guardate la finestra del terminale in cui pubsub.py è in esecuzione e, nel client di MQTT test, scegliete Pubblica su argomento.

      Dovresti vedere che il messaggio è stato ricevuto da pubsub.py nella finestra del terminale.

Risultato dell'esercizio

Con questo pubsub.py sottoscritto ai messaggi utilizzando un filtro argomento jolly, li ha ricevuti e visualizzati nella finestra del terminale. Si noti come si è sottoscritto a un singolo filtro dell’argomento e la funzione di callback è stata chiamata per elaborare i messaggi con due argomenti distinti.

Processo sottoscrizioni filtro dell’argomento

Basandosi sull'esercizio precedente, modifica l’app di esempio pubsub.py per valutare gli argomenti dei messaggi ed elaborare i messaggi sottoscritti in base all'argomento.

Procedura dell’esercizio

Per valutare l'argomento del messaggio
  1. Copia pubsub.py su pubsub2.py.

  2. Apri pubsub2.py nel tuo editor di testo preferito oppureIDE.

  3. In pubsub2.py, trova la funzione on_message_received.

  4. In on_message_received, inserisci il codice seguente dopo la riga che inizia con print("Received message e prima della riga che inizia con global received_count.

    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.")
  5. Salva le modifiche ed esegui il programma modificato utilizzando questa riga di comando.

    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
  6. Nella AWS IoT console, apri il client MQTT di test.

  7. In Subscribe to a topic (Sottoscrivi un argomento) nel campo Subscription topic field (Argomento sottoscrizione), inserisci il filtro dell’argomento: device/+/details, quindi scegli Subscribe to topic (Sottoscrivi nell’argomento).

  8. Nella colonna Abbonamenti del client di MQTT test, scegli device/+/details.

  9. Per ciascuno degli argomenti di questa tabella, procedi come segue nel client di test: MQTT

    Nome argomento

    Payload del messaggio

    device/temp/details

    { "desiredTemp": 20, "currentTemp": 15 }

    device/light/details

    { "desiredLight": 100, "currentLight": 50 }

    1. In Publish (Pubblica), inserisci il valore dalla colonna Topic name (Nome argomento) nella tabella.

    2. Nel campo del payload del messaggio sotto il nome dell'argomento, inserisci il valore della colonna Message payload (Payload del messaggio) nella tabella.

    3. Guardate la finestra del terminale in cui pubsub.py è in esecuzione e, nel client di MQTT test, scegliete Pubblica su argomento.

    Dovresti vedere che il messaggio è stato ricevuto da pubsub.py nella finestra del terminale.

Dovrebbe essere visualizzato un elemento simile a quello nella finestra del terminale.

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!

Risultato dell'esercizio

In questo esercizio è stato aggiunto il codice in modo che l'app di esempio riconosca ed elabori più messaggi nella funzione di callback. Con questo, il tuo dispositivo potrebbe ricevere messaggi e agire su di essi.

Un altro modo per consentire al tuo dispositivo di ricevere e processare diversi messaggi separatamente e assegnare ogni abbonamento alla propria funzione di callback.

Pubblica messaggi dal tuo dispositivo

È possibile utilizzare l'app di esempio pubsub.py per pubblicare messaggi dal dispositivo. Anche se pubblicherà i messaggi così come sono, i messaggi non possono essere letti come JSON documenti. Questo esercizio modifica l'app di esempio per poter pubblicare JSON documenti leggibili nel payload dei messaggi. AWS IoT Core

Procedura dell’esercizio

In questo esercizio, il seguente messaggio verrà inviato con l’argomento device/data.

{ "timestamp": 1601048303, "sensorId": 28, "sensorData": [ { "sensorName": "Wind speed", "sensorValue": 34.2211224 } ] }
Per preparare il client MQTT di prova a monitorare i messaggi di questo esercizio
  1. In Subscribe to a topic (Sottoscrivi un argomento) nel campo Subscription topic field (Argomento sottoscrizione), inserisci il filtro dell’argomento: device/data, quindi scegli Subscribe to topic (Sottoscrivi nell’argomento).

  2. Nella colonna Abbonamenti del client di MQTT test, scegli dispositivo/dati.

  3. Tieni aperta la finestra del client di MQTT test per attendere i messaggi dal tuo dispositivo.

Per inviare JSON documenti con l'app di esempio pubsub.py
  1. Sul dispositivo, copia pubsub.py su pubsub3.py.

  2. Modifica pubsub3.py per cambiare il modo in cui formatta i messaggi pubblicati.

    1. Aprire pubsub3.py in un editor di testo.

    2. Individua la riga di codice:

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

    3. Modificalo in:

      message = "{}".format(message_string)

    4. Individua la riga di codice:

      message_json = json.dumps(message)

    5. Modificalo in:

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

    6. Salvare le modifiche.

  3. Sul dispositivo, esegui questo comando per inviare il messaggio due volte.

    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
  4. Nel client di MQTT test, verifica che abbia interpretato e formattato il JSON documento nel payload del messaggio, ad esempio:

    Immagine che mostra come viene visualizzato JSON il payload di un messaggio nel MQTT client della console. AWS IoT

Per impostazione predefinita, pubsub3.py effettua la sottoscrizione anche ai messaggi che invia. Dovresti vedere che ha ricevuto i messaggi nell'output dell'app. La finestra del terminale dovrebbe essere simile a questa.

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!

Risultato dell’esercizio

In questo modo, il dispositivo può generare messaggi da inviare per AWS IoT Core testare la connettività di base e fornire messaggi AWS IoT Core da elaborare. Ad esempio, puoi utilizzare questa app per inviare dati di test dal tuo dispositivo per testare le azioni delle AWS IoT regole.

Rivedi i risultati

Gli esempi di questo tutorial ti hanno fornito un'esperienza pratica sulle nozioni di base con cui i dispositivi possono comunicare, AWS IoT Core una parte fondamentale della tua soluzione. AWS IoT Quando i dispositivi sono in grado di comunicare AWS IoT Core, possono trasmettere messaggi ai AWS servizi e ad altri dispositivi su cui possono agire. Allo stesso modo, AWS i servizi e gli altri dispositivi possono elaborare informazioni che generano l'invio di messaggi ai dispositivi dell'utente.

Quando sei pronto per AWS IoT Core approfondire, prova questi tutorial:

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.