Tutorial: Installare l'SDK di dispositivo ed eseguire l’applicazione di esempio per Device Shadows - 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à.

Tutorial: Installare l'SDK di dispositivo ed eseguire l’applicazione di esempio per Device Shadows

In questa sezione viene illustrato come installare il software richiesto e SDK di dispositivo per Python AWS IoT ed eseguire l’applicazione di esempio shadow.py per modificare il documento Shadow e controllare lo stato di shadow.

In questo tutorial, imparerai come:
  • Utilizzare il software installato e SDK di dispositivo per Python AWS IoT per eseguire l'app di esempio.

  • Scoprire come l'immissione di un valore utilizzando l'app di esempio pubblichi il valore desiderato nella console AWS IoT.

  • Esaminare l’applicazione di esempio shadow.py e come utilizzare il protocollo MQTT per aggiornare lo stato di shadow.

Prima di eseguire questo tutorial:

È necessario aver impostato Account AWS, aver configurato il dispositivo Raspberry Pi e aver creato un oggetto AWS IoT e una policy che fornisce al dispositivo le autorizzazioni per pubblicare e sottoscrivere gli argomenti riservati MQTT del servizio Device Shadow. Per ulteriori informazioni, consulta Tutorial: Preparazione del Raspberry Pi per eseguire l'applicazione shadow.

Devi anche aver installato Git, Python e SDK di dispositivo per Python AWS IoT. Questo tutorial si basa sui concetti presentati nel tutorial Connettere un Raspberry Pi o altro dispositivo. Se non hai provato questo tutorial, ti consigliamo di seguire i passaggi descritti in tale tutorial per installare i file dei certificati e SDK di dispositivo e quindi tornare a questo tutorial per eseguire l’applicazione di esempio shadow.py.

Questo tutorial dura circa 20 minuti.

Fase 1: eseguire l'app di esempio shadow.py

Prima di eseguire il comando l’app di esempio shadow.py, oltre ai nomi e alla posizione dei file di certificato installati, sono necessarie le seguenti informazioni.

Valori dei parametri dell'applicazione

Parametro

Dove trovare il valore

your-iot-thing-name

Denominare l’oggetto AWS IoT che hai creato in precedenza in Fase 2: creare una risorsa dell’oggetto e connettere la policy all’oggetto.

Per trovare questo valore, nella console AWS IoT, scegli Manage (Gestione), quindi scegli Things (Oggetti).

your-iot-endpoint

Il valore del tuo endpoint IoT ha un formato di: endpoint_id-ats.iot.region.amazonaws.com, ad esempio, a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com. Per trovare questo valore:

  1. Nella console AWS IoT, scegli Manage (Gestione), quindi scegli Things (Oggetti).

  2. Scegli l’oggetto IoT che hai creato per il tuo dispositivo, my_light_lampadina, che hai utilizzato in precedenza, quindi scegli Interact (Interagisci). L'endpoint viene visualizzato nella sezione HTTPS della pagina dei dettagli degli oggetti.

Installazione ed esecuzione dell'applicazione di esempio
  1. Passare alla directory dell’applicazione di esempio.

    cd ~/aws-iot-device-sdk-python-v2/samples
  2. Nella finestra a riga di comando, sostituisci il tuo endpoint IoT e il nome dell’oggetto IoT come indicato ed esegui questo comando.

    python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --thing_name your-iot-thing-name
  3. Controlla che l'applicazione di esempio:

    1. Si connetta al servizio IoT AWS per il tuo account.

    2. Effettui la sottoscrizione ad eventi Delta e alle risposte Update e Get.

    3. Richieda di inserire un valore desiderato nel terminale.

    4. L'output sia simile a quello riportato di seguito:

    Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'... Connected! Subscribing to Delta events... Subscribing to Update responses... Subscribing to Get responses... Requesting current shadow state... Launching thread to read user input... Finished getting initial shadow state. Shadow contains reported value 'off'. Enter desired value:
Nota

In caso di problemi nell'esecuzione dell’app di esempio shadow.py, consulta Fase 3: Risolvi i problemi con l’app di esempio shadow.py. Per ottenere ulteriori informazioni che potrebbero essere utili per risolvere il problema, aggiungi il parametro --verbosity debug alla riga di comando in modo che l'app di esempio visualizzi messaggi dettagliati su ciò che sta facendo.

Inserisci i valori e osserva gli aggiornamenti nel documento Shadow

È possibile inserire i valori nel terminale per specificare il valore desired, che aggiorna anche il valore reported. Supponiamo di inserire il colore yellow nel terminale. Il valore reported viene aggiornato anche al colore yellow. Di seguito sono riportati i messaggi visualizzati nel terminale:

Enter desired value: yellow Changed local shadow value to 'yellow'. Updating reported shadow value to 'yellow'... Update request published. Finished updating reported shadow value to 'yellow'.

Quando si pubblica questa richiesta di aggiornamento, AWS IoT crea una shadow classica predefinita per la risorsa dell’oggetto. È possibile osservare la richiesta di aggiornamento pubblicata nei valori reported e desired nella console AWS IoT guardando il documento Shadow per la risorsa dell’oggetto creata (ad esempio, My_light_bulb). Per visualizzare l'aggiornamento nel documento Shadow:

  1. Nella console AWS IoT, scegli Manage (Gestione), quindi scegli Things (Oggetti).

  2. Nell'elenco di oggetti visualizzati, seleziona l'oggetto che hai creato, scegli Shadows, quindi scegli Classic Shadow (Shadow classico).

Il documento Shadow dovrebbe essere simile a quanto riportato di seguito, mostrando i valori reported e desired impostati sul colore yellow. Questi valori vengono visualizzati nello Stato shadow del documento.

{ "desired": { "welcome": "aws-iot", "color": "yellow" }, "reported": { "welcome": "aws-iot", "color": "yellow" } }

Viene inoltre visualizzato una sezione Metadata (Metadati) che contiene le informazioni sul timestamp e il numero di versione della richiesta.

Puoi usare la versione del documento sullo stato per assicurarti di aggiornare la versione più recente di una copia shadow di un dispositivo. Se invii un'altra richiesta di aggiornamento, il numero di versione aumenta di 1. Quando fornisci una versione con una richiesta di aggiornamento, il servizio rifiuta la richiesta con un codice di risposta di conflitto HTTP 409 se la versione corrente del documento sullo stato non corrisponde alla versione fornita.

{ "metadata": { "desired": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } }, "reported": { "welcome": { "timestamp": 1620156892 }, "color": { "timestamp": 1620156893 } } }, "version": 10 }

Per saperne di più sul documento Shadow e osservare le modifiche alle informazioni sullo stato, procedi con il tutorial successivo Tutorial: Interagisci con Device Shadow utilizzando l’app di esempio e il client di test MQTT come descritto nella sezione Fase 4: Esamina i risultati e i passaggi successivi di questo tutorial. Eventualmente, si può anche sapere di più sul codice di esempio shadow.py e su come utilizza il protocollo MQTT nella sezione seguente.

Fase 2: Revisione dell'app di esempio shadow.py dell'SDK di dispositivo

Questa sezione esamina l’app di esempio shadow.py dal SDK di dispositivo v2 AWS IoT per Python, usata in questo tutorial. Qui, esamineremo come si connette a AWS IoT Core utilizzando il protocollo MQTT e MQTT su WSS. La libreria del Runtime comune AWS (AWS-CRT) fornisce il supporto del protocollo di comunicazione di basso livello ed è incluso con SDK di dispositivo v2 per Python AWS IoT.

Mentre questo tutorial utilizza MQTT e MQTT su WSS, AWS IoT supporta i dispositivi che pubblicano richieste HTTPS. Per un esempio di un programma Python che invia un messaggio HTTP da un dispositivo, vedi l’esempio di codice HTTPS utilizzando la libreria di Python requests.

Per informazioni su come prendere una decisione informata sul protocollo da utilizzare per le comunicazioni del dispositivo, consulta Scelta di un protocollo applicativo per la comunicazione del dispositivo.

MQTT

L'esempio shadow.py chiama mtls_from_path (mostrato qui) in mqtt_connection_builder per stabilire una connessione con AWS IoT Core utilizzando il protocollo MQTT. mtls_from_path utilizza i certificati X.509 e TLS v1.2 per autenticare il dispositivo. La libreria AWS-CRT gestisce i dettagli di livello inferiore di quella 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 è il tuo endpoint AWS IoT che hai passato dalla riga di comando e client_id è l'ID che identifica in modo univoco questo dispositivo in Regione AWS.

  • cert_filepath, pri_key_filepath e ca_filepath sono i percorsi del certificato e dei file di chiave privata del dispositivo e del file root CA.

  • client_bootstrap è l'oggetto runtime comune che gestisce le attività di comunicazione socket e viene istanziato prima della chiamata a mqtt_connection_builder.mtls_from_path.

  • on_connection_interrupted e on_connection_resumed sono le funzioni di callback da chiamare quando la connessione del dispositivo viene interrotta e ripresa.

  • clean_session consente di avviare una nuova sessione persistente o, se è presente, di 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.

L’esempio shadow.py chiama anche websockets_with_default_aws_signing in mqtt_connection_builder per stabilire una connessione con AWS IoT Core utilizzando il protocollo MQTT su WSS. MQTT su WSS utilizza anche gli stessi parametri di MQTT e prende questi parametri aggiuntivi:

  • region è la regione firmataria AWS utilizzata dall'autenticazione Signature V4 e credentials_provider sono le credenziali AWS fornite, da utilizzare per l'autenticazione. La regione viene passata dalla riga di comando, e l’oggetto credentials_provider viene istanziato appena prima della chiamata a mqtt_connection_builder.websockets_with_default_aws_signing.

  • websocket_proxy_options sono le opzioni proxy HTTP, se si utilizza un host proxy. Nell’app di esempio shadow.py, questo valore viene istanziato appena prima della chiamata a mqtt_connection_builder.websockets_with_default_aws_signing.

Iscrizione agli argomenti e agli eventi Shadow

L’esempio shadow.py cerca di stabilire una connessione e attende di essere completamente connesso. Se non è connesso, i comandi vengono messi in coda. Una volta connesso, l'esempio sottoscrive gli eventi delta e aggiorna e riceve i messaggi e pubblica i messaggi con un livello Quality of Service (QoS) pari a 1 (mqtt.QoS.AT_LEAST_ONCE).

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.

Per ulteriori informazioni sul protocollo MQTT, consulta Esamina il protocollo MQTT e MQTT.

Per ulteriori informazioni su MQTT, MQTT su WSS, sessioni persistenti e i livelli QoS utilizzati in questa esercitazione, consulta Revisione dell'app di esempio pubsub.py SDK per dispositivi.

Fase 3: Risolvi i problemi con l’app di esempio shadow.py

Quando si esegue l’app di esempio shadow.py, dovresti vedere alcuni messaggi visualizzati nel terminale e un prompt per inserire un valore desired. Se il programma genera un errore, per eseguire il debug dell'errore, puoi iniziare controllando se hai eseguito il comando corretto per il tuo sistema.

In alcuni casi, il messaggio di errore potrebbe indicare problemi di connessione e avere un aspetto simile a: Host name was invalid for dns resolution o Connection was closed unexpectedly. In questi casi, ecco alcune operazioni disponibili:

  • Controlla l'indirizzo dell'endpoint nel comando

    Esaminare il parametro endpoint nel comando inserito per eseguire l'app di esempio (ad esempio a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com) e controllare questo valore nella console AWS IoT.

    Per verificare se hai utilizzato il valore corretto:

    1. Nella console AWS IoT, scegli Manage (Gestione) e poi Things (Oggetti).

    2. Scegli l’oggetto che hai creato per l'app di esempio (ad esempio, my_light_lampadina) e quindi scegli Interact (Interagisci).

    L'endpoint viene visualizzato nella sezione HTTPS della pagina dei dettagli degli oggetti. Dovresti visualizzare anche un messaggio in cui viene indicato: This thing already appears to be connected.

  • Verifica l'attivazione del certificato

    I certificati autenticano il dispositivo con AWS IoT Core.

    Per verificare se il certificato è attivo:

    1. Nella console AWS IoT, scegli Manage (Gestione) e poi Things (Oggetti).

    2. Scegli l’oggetto che hai creato per l'app di esempio (ad esempio, my_light_lampadina) e quindi scegli Security (Sicurezza).

    3. Seleziona il certificato e quindi, dalla pagina dei dettagli del certificato, scegli Seleziona il certificato e quindi, dalla pagina dei dettagli del certificato, scegli Actions (Operazioni).

    Se nell'elenco a discesa Activate (Attiva) non è disponibile e puoi solo scegliere Deactivate (Disattiva), il certificato è attivo. In caso contrario, scegli Activate (Attiva) ed esegui di nuovo il programma di esempio.

    Se il programma continua a non essere eseguito, controlla i nomi dei file del certificato nel folder certs.

  • Controlla la policy associata alla risorsa dell’oggetto

    Mentre i certificati autenticano il dispositivo, le policy AWS IoT consentono al dispositivo di eseguire operazioni AWS IoT, come la sottoscrizione o la pubblicazione in argomenti riservati MQTT.

    Per verificare se la policy corretta è allegata:

    1. Individua il certificato come descritto in precedenza, quindi scegli Policies (Policy).

    2. Scegli la policy visualizzata e verifica se descrive le operazioni connect, subscribe, receive e publish che consentono al dispositivo l’autorizzazione di pubblicare e sottoscrivere gli argomenti riservati MQTT.

      Consulta Fase 1: creare una policy AWS IoT per Device Shadow per una policy di esempio.

    Se vengono visualizzati messaggi di errore che indicano problemi di connessione a AWS IoT, potrebbe essere dovuto alle autorizzazioni che stai utilizzando per la policy. In questo caso, ti consigliamo di iniziare con una policy che fornisce l'accesso completo alle risorse AWS IoT e quindi esegui di nuovo il programma di esempio. È possibile modificare la policy corrente oppure scegliere la policy corrente. Scegli Detach (Distacca) e quindi crea un altra policy che fornisca accesso completo e collegala alla risorsa dell’oggetto. In seguito è possibile limitare la policy solo alle operazioni e alle policy necessarie per eseguire il programma.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" } ] }
  • Verifica dell'installazione di SDK di dispositivo

    Se il programma non viene ancora eseguito, è possibile reinstallare SDK di dispositivo per assicurarsi che l'installazione dell'SDK sia completa e corretta.

Fase 4: Esamina i risultati e i passaggi successivi

In questo tutorial, hai appreso come:
  • Installare il software, gli strumenti necessari e AWS IoT SDK per dispositivo per Python .

  • Capire come l'applicazione di esempio ,shadow.py, che utilizza il protocollo MQTT per recuperare e aggiornare lo stato corrente di shadow.

  • Eseguire l'app di esempio per Device Shadows e osservare l'aggiornamento del documento Shadow nella console AWS IoT. Hai anche imparato a risolvere eventuali problemi e correggere gli errori durante l'esecuzione del programma.

Fasi successive

A questo punto è possibile eseguire il l’applicazione di esempio shadow.py e utilizzare Device Shadows per controllare lo stato. È possibile osservare gli aggiornamenti del documento Shadow nella console AWS IoT e gli eventi delta a cui risponde l'app di esempio. Utilizzando il client di test MQTT, è possibile iscriversi agli argomenti shadow riservati e osservare i messaggi ricevuti dagli argomenti durante l'esecuzione del programma di esempio. Per ulteriori informazioni su come eseguire questo tutorial, consulta Tutorial: Interagisci con Device Shadow utilizzando l’app di esempio e il client di test MQTT.