Share via


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:

    Nota

    Questo articolo usa la versione più recente dell'estensione Azure IoT, denominata azure-iot. La versione legacy viene chiamata azure-cli-iot-ext. Deve essere installata solo una versione alla volta. È possibile usare il comando az 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 messaggi centrale 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:

  1. 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.
  2. Eseguire az extension add per installare o aggiornare l'estensione azure-iot alla versione corrente.

    az extension add --upgrade --name azure-iot
    
  3. 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
    
  4. 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:

  1. 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}
    
  2. 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>
    
  3. 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.

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

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

    Screenshot that shows the simulated device connecting.

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.

  1. 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}
    
  2. 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:

    Screenshot that shows the connection failing after the key reset.

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.

  1. Eseguire il comando az iot hub genereate-sas-token per generare un token di firma di accesso condiviso valido 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}
    
  2. 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

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

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

    Screenshot that shows a successful connection using a SAS token.

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:

Screenshot that shows a connection error when the outbound port is blocked.

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

  1. 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}
    
  2. Per eseguire un dispositivo simulato che invia messaggi, passare alla cartella iot-hub\Tutorials\ConnectivityTests nel codice scaricato.

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

    Screenshot that shows the simulated device sending messages.

Monitorare i messaggi in arrivo

È possibile usare Metriche nel portale per verificare che i messaggi di telemetria raggiungano l'hub IoT.

  1. Nella portale di Azure selezionare l'hub IoT nell'elenco a discesa Risorsa.

  2. Selezionare Metriche nella sezione Monitoraggio del menu di spostamento.

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

    Screenshot showing left pane metrics.

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.

  1. Nella finestra del terminale usare il comando seguente per eseguire l'applicazione del dispositivo simulato:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. 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:

    Screenshot that shows the device confirming that the direct method was received.

    Quando il dispositivo simulato riceve correttamente la chiamata al metodo diretto, invia un riconoscimento all'hub:

    Screenshot showing that the device returns a direct method acknowledgment.

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.

  1. Nella finestra del terminale usare il comando seguente per eseguire l'applicazione del dispositivo simulato:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. 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.

    Screenshot showing the reported properties of a device.

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

    Screenshot that shows the device confirming that the desired properties update was received.

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.