Esercitazione: Usare un dispositivo simulato per testare la connettività con l'hub IoT
In questa esercitazione vengono usati gli strumenti del portale dell'hub IoT di Azure e i comandi dell'interfaccia della riga di comando di Azure per testare la connettività dei dispositivi. Questa esercitazione usa inoltre un semplice simulatore di dispositivi eseguibile nel computer desktop.
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
In questa esercitazione apprenderai a:
- Verificare l'autenticazione del dispositivo
- Verificare la connettività da dispositivo a cloud
- Verificare la connettività da cloud a dispositivo
- Verificare la sincronizzazione dei dispositivi gemelli
Prerequisiti
Questa esercitazione usa l'interfaccia della riga di comando di Azure per creare risorse cloud. Esistono due modi per eseguire i comandi dell'interfaccia della riga di comando:
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido in Azure Cloud Shell - Bash.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
- Accedere all'interfaccia della riga di comando di Azure usando il comando az login.
- Quando richiesto, installare le estensioni dell'interfaccia della riga di comando di Azure al primo utilizzo. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
- Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Nota
Questo articolo usa la versione più recente dell'estensione Azure IoT, denominata
azure-iot
. La versione legacy viene chiamataazure-cli-iot-ext
. Deve essere installata solo una versione alla volta. È possibile usare il comandoaz extension list
per convalidare le estensioni attualmente installate.Usare
az extension remove --name azure-cli-iot-ext
per rimuovere la versione legacy dell'estensione.Usare
az extension add --name azure-iot
per aggiungere la nuova versione dell'estensione.Per visualizzare le estensioni installate, usare
az extension list
.L'applicazione di esempio eseguita in questa esercitazione usa Node.js. È necessario disporre di Node.js v10.x.x o versioni successive nel computer di sviluppo.
È possibile scaricare Node.js per più piattaforme da nodejs.org.
È possibile verificare la versione corrente di Node.js installata nel computer di sviluppo tramite il comando seguente:
node --version
Clonare o scaricare il progetto di esempio Node.js dagli esempi di Azure IoT per Node.js.
Assicurarsi che la porta 8883 sia aperta nel firewall. L'esempio di dispositivo di questa esercitazione usa il protocollo MQTT, che comunica tramite la porta 8883. Questa porta potrebbe essere bloccata in alcuni ambienti di rete aziendali e didattici. Per altre informazioni e soluzioni alternative per questo problema, vedere Connettersi all'hub IoT (MQTT).
Creare un hub IoT
In questa sezione si usa l'interfaccia della riga di comando di Azure per creare un hub IoT e un gruppo di risorse. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite. Un hub IoT funge da hub centrale dei messaggi per la comunicazione bidirezionale tra l'applicazione IoT e i dispositivi.
Se si ha già un hub IoT nella sottoscrizione di Azure, è possibile ignorare questa sezione.
Per creare un hub IoT e un gruppo di risorse:
Avviare l'app dell'interfaccia della riga di comando. Per eseguire i comandi dell'interfaccia della riga di comando nel resto di questo articolo, copiare la sintassi del comando, incollarla nell'app dell'interfaccia della riga di comando, modificare i valori delle variabili e premere
Enter
.- Se si usa Cloud Shell, selezionare il pulsante Prova nel comando dell'interfaccia della riga di comando per avviare Cloud Shell in una finestra divisa del browser. In alternativa, è possibile aprire Cloud Shell in una scheda separata del browser.
- Se si usa l'interfaccia della riga di comando di Azure in locale, avviare l'app console dell'interfaccia della riga di comando e accedere all'interfaccia della riga di comando di Azure.
Eseguire az extension add per installare o aggiornare l'estensione azure-iot alla versione corrente.
az extension add --upgrade --name azure-iot
Nell'app dell'interfaccia della riga di comando eseguire il comando az group create per creare un gruppo di risorse. Il comando seguente crea un gruppo denominato MyResourceGroup nella posizione eastus.
Nota
Facoltativamente, è possibile impostare una posizione diversa. Per visualizzare i percorsi disponibili, eseguire
az account list-locations
. Questa guida introduttiva usa eastus come illustrato nel comando di esempio.az group create --name MyResourceGroup --location eastus
Eseguire il comando az iot hub create per creare un hub IoT. La creazione di un hub IoT potrebbe richiedere alcuni minuti.
YourIotHubName. Sostituire questo segnaposto e le parentesi graffe circostanti nel comando seguente, usando il nome scelto per l'hub IoT. Un nome dell'hub IoT deve essere univoco a livello globale in Azure. Usare il nome dell'hub IoT nel resto di questa guida introduttiva ovunque venga visualizzato il segnaposto.
az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
Verificare l'autenticazione del dispositivo
Un dispositivo deve eseguire l'autenticazione con l'hub prima di qualsiasi scambio di dati con l'hub stesso. È possibile usare lo strumento Dispositivi IoT nella sezione Gestione dei dispositivi del portale per gestire i dispositivi e verificare le chiavi di autenticazione in uso. In questa sezione dell'esercitazione viene aggiunto un nuovo dispositivo di test, viene recuperata la relativa chiave e si verifica che il dispositivo di test sia in grado di connettersi all'hub. Successivamente viene reimpostata la chiave di autenticazione per osservare cosa accade quando un dispositivo prova a usare una chiave non aggiornata.
Registrazione di un dispositivo
È necessario registrare un dispositivo con l'hub IoT perché questo possa connettersi. In questa sezione si usa l'interfaccia della riga di comando di Azure per creare un'identità del dispositivo.
Se è già stato registrato un dispositivo nell'hub IoT, è possibile ignorare questa sezione.
Per creare un'identità del dispositivo:
Eseguire il comando az iot hub device-identity create nella shell dell'interfaccia della riga di comando. Questo comando crea l'identità del dispositivo.
your_iot_hub_name. sostituire il segnaposto in basso con il nome scelto per l'hub IoT.
myDevice. È possibile usare questo nome per l'ID dispositivo in questo articolo o specificare un nome di dispositivo diverso.
az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
Eseguire il comando az iot hub device-identity connection-string show .
az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
L'output stringa di connessione è nel formato seguente:
HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
Salvare il stringa di connessione in una posizione sicura.
Nota
Mantenere aperta l'app dell'interfaccia della riga di comando. Verrà usato nei passaggi successivi.
Simulare un dispositivo di test
Per simulare un dispositivo che invia dati di telemetria all'hub IoT, eseguire l'applicazione del dispositivo simulato Node.js scaricata in precedenza.
In una finestra del terminale del computer di sviluppo passare alla cartella radice del progetto di esempio Node.js scaricato. Passare quindi alla cartella iot-hub\Tutorials\ConnectivityTests.
Nella finestra del terminale eseguire i comandi seguenti per installare le librerie necessarie ed eseguire l'applicazione del dispositivo simulato. Usare il dispositivo stringa di connessione annotato quando è stato registrato il dispositivo.
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
La finestra del terminale visualizza un messaggio di operazione riuscita dopo la connessione all'hub:
L'autenticazione da un dispositivo tramite una chiave del dispositivo generata dall'hub IoT è stata completata correttamente.
Reimpostare le chiavi
In questa sezione viene reimpostata la chiave del dispositivo per osservare l'errore generato quando il dispositivo simulato tenta di connettersi.
Per reimpostare la chiave del dispositivo primaria per il dispositivo, eseguire il comando az iot hub device-identity update :
# Generate a new Base64 encoded key using the current date read key < <(date +%s | sha256sum | base64 | head -c 32) # Reset the primary device key for test device az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
Nella finestra del terminale nel computer di sviluppo eseguire nuovamente l'applicazione del dispositivo simulato:
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
Questa volta viene visualizzato un errore di autenticazione quando l'applicazione tenta di connettersi:
Generare un token di firma di accesso condiviso
Se il dispositivo usa uno degli SDK per dispositivi hub IoT, il codice della libreria SDK genera il token di firma di accesso condiviso usato per l'autenticazione con l'hub. Un token di firma di accesso condiviso viene generato dal nome dell'hub, dal nome del dispositivo e dalla chiave del dispositivo.
In alcuni scenari, ad esempio in un gateway di protocollo cloud o nell'ambito di uno schema di autenticazione personalizzato, potrebbe essere necessario generare manualmente il token di firma di accesso condiviso. Per risolvere i problemi relativi al codice di generazione della firma di accesso condiviso, è utile generare un token di firma di accesso condiviso valido noto da usare durante il test.
Nota
Il file di esempio SimulatedDevice-2.js include esempi che illustrano come generare un token di firma di accesso condiviso con o senza l'SDK.
Eseguire il comando az iot hub generate-sas-token per generare un token di firma di accesso condiviso noto usando l'interfaccia della riga di comando:
az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
Copiare il testo completo del token di firma di accesso condiviso generato. Un token di firma di accesso condiviso è simile all'esempio seguente:
SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
In una finestra del terminale nel computer di sviluppo passare alla cartella radice del progetto di esempio di Node.js scaricato. Passare quindi alla cartella iot-hub\Tutorials\ConnectivityTests.
Nella finestra del terminale eseguire i comandi seguenti per installare le librerie necessarie ed eseguire l'applicazione del dispositivo simulato:
npm install node SimulatedDevice-2.js "{Your SAS token}"
La finestra del terminale visualizza un messaggio di operazione riuscita dopo la connessione all'hub usando il token di firma di accesso condiviso:
L'autenticazione da un dispositivo tramite un token di firma di accesso condiviso di test generato da un comando dell'interfaccia della riga di comando è stata completata correttamente. Il file SimulatedDevice-2.js include codice di esempio che illustra come generare un token di firma di accesso condiviso nel codice.
Protocolli
Un dispositivo può usare uno dei protocolli seguenti per la connessione all'hub IoT:
Protocollo | Porta in uscita |
---|---|
MQTT | 8883 |
MQTT su WebSocket | 443 |
AMQP | 5671 |
AMQP su WebSockets | 443 |
HTTPS | 443 |
Se la porta in uscita è bloccata da un firewall, il dispositivo non può connettersi:
Verificare la connettività da dispositivo a cloud
Dopo la connessione di un dispositivo, può iniziare a inviare dati di telemetria all'hub IoT. Questa sezione mostra in che modo verificare che i dati di telemetria inviati dal dispositivo raggiungano l'hub.
Inviare messaggi da dispositivo a cloud
Poiché il stringa di connessione per il dispositivo viene reimpostato nella sezione precedente, usare il comando az iot hub device-identity connection-string show per recuperare il stringa di connessione aggiornato:
az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
Per eseguire un dispositivo simulato che invia messaggi, passare alla cartella iot-hub\Tutorials\ConnectivityTests nel codice scaricato.
Nella finestra del terminale eseguire i comandi seguenti per installare le librerie necessarie ed eseguire l'applicazione del dispositivo simulato:
npm install node SimulatedDevice-3.js "{your_device_connection_string}"
La finestra del terminale visualizza alcune informazioni mentre vengono inviati i dati di telemetria all'hub:
Monitorare i messaggi in arrivo
È possibile usare Metriche nel portale per verificare che i messaggi di telemetria raggiungano l'hub IoT.
Nella portale di Azure selezionare l'hub IoT nell'elenco a discesa Risorsa.
Selezionare Metriche nella sezione Monitoraggio del menu di spostamento.
Selezionare Messaggi di telemetria inviati come metrica e impostare l'intervallo di tempo su Ora precedente. Il grafico mostra il conteggio aggregato dei messaggi inviati dal dispositivo simulato:
Sono necessari alcuni minuti prima che le metriche diventino disponibili dopo l'avvio del dispositivo simulato.
Verificare la connettività da cloud a dispositivo
Questa sezione illustra come eseguire una chiamata al metodo diretto di test per un dispositivo per verificare la connettività da cloud a dispositivo. Viene eseguito un dispositivo simulato nel computer di sviluppo per ascoltare le chiamate al metodo diretto dall'hub.
Nella finestra del terminale usare il comando seguente per eseguire l'applicazione del dispositivo simulato:
node SimulatedDevice-3.js "{your_device_connection_string}"
In una finestra separata usare il comando az iot hub invoke-device-method per chiamare un metodo diretto nel dispositivo:
az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
Il dispositivo simulato stampa un messaggio nella console quando riceve una chiamata al metodo diretto:
Quando il dispositivo simulato riceve correttamente la chiamata al metodo diretto, invia un riconoscimento all'hub:
Verificare la sincronizzazione dei dispositivi gemelli
I dispositivi usano dispositivi gemelli per sincronizzare lo stato tra il dispositivo e l'hub. In questa sezione vengono usati i comandi dell'interfaccia della riga di comando per inviare le proprietà desiderate a un dispositivo e leggere le proprietà segnalate inviate dal dispositivo.
Il dispositivo simulato usato in questa sezione invia le proprietà segnalate all'hub ogni volta che viene avviato e stampa le proprietà desiderate nella console ogni volta che le riceve.
Nella finestra del terminale usare il comando seguente per eseguire l'applicazione del dispositivo simulato:
node SimulatedDevice-3.js "{your_device_connection_string}"
In una finestra separata eseguire il comando az iot hub device-twin show per verificare che l'hub abbia ricevuto le proprietà segnalate dal dispositivo:
az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
Nell'output del comando è possibile visualizzare la proprietà devicelaststarted nella sezione delle proprietà segnalate. Questa proprietà indica la data e l'ora dell'ultimo avvio del dispositivo simulato.
Per verificare che l'hub possa inviare i valori di proprietà desiderati al dispositivo, usare il comando az iot hub device-twin update :
az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
Il dispositivo simulato stampa un messaggio quando riceve un aggiornamento delle proprietà desiderate dall'hub:
Oltre a ricevere le modifiche delle proprietà desiderate man mano che vengono apportate, il dispositivo simulato controlla automaticamente le proprietà desiderate al momento dell'avvio.
Pulire le risorse
Se l'hub IoT non è più necessario, eliminarlo insieme al gruppo di risorse nel portale, A tale scopo, selezionare il gruppo di risorse che contiene l'hub IoT e selezionare Elimina.
Passaggi successivi
In questa esercitazione è stato spiegato come controllare le chiavi del dispositivo, verificare la connettività da dispositivo a cloud, verificare la connettività da cloud a dispositivo e verificare la sincronizzazione dei dispositivi gemelli. Per altre informazioni su come monitorare l'hub IoT, vedere l'articolo sulle procedure per il monitoraggio dell'hub IoT.