Share via


Introduzione alla gestione dei dispositivi (interfaccia della riga di comando di Azure)

Le app back-end possono usare hub IoT di Azure primitive, ad esempio dispositivi gemelli e metodi diretti, per avviare e monitorare in remoto le azioni di gestione dei dispositivi nei dispositivi. Questo articolo illustra come l'interfaccia della riga di comando di Azure e un dispositivo possono collaborare per richiamare un metodo diretto per un dispositivo usando hub IoT.

Nota

Le funzionalità descritte in questo articolo sono disponibili solo nel livello Standard dell'hub IoT. Per altre informazioni sui livelli di hub IoT di base e standard/gratuiti, vedere Scegliere il livello di hub IoT appropriato per la soluzione.

Usare un metodo diretto per avviare azioni di gestione dei dispositivi, ad esempio il riavvio, il ripristino delle impostazioni predefinite e l'aggiornamento del firmware da una sessione dell'interfaccia della riga di comando di Azure. Il dispositivo è responsabile per:

  • La gestione della richiesta di metodo inviata dall'hub IoT.

  • L'avvio, nel dispositivo, dell'azione corrispondente specifica del dispositivo.

  • Gli aggiornamenti di stato tramite le proprietà segnalate nell'hub IoT.

È possibile usare l'interfaccia della riga di comando di Azure per eseguire query di dispositivi gemelli per segnalare lo stato di avanzamento delle azioni di gestione dei dispositivi. Per altre informazioni sull'uso di metodi diretti, vedere Linee guida per la comunicazione da cloud a dispositivo.

Questo articolo illustra come creare due sessioni dell'interfaccia della riga di comando di Azure:

  • Sessione che crea un dispositivo simulato. Il dispositivo simulato è configurato per restituire un codice di stato e un payload JSON quando viene richiamato qualsiasi metodo diretto.

  • Sessione che richiama un metodo diretto nel dispositivo simulato creato nell'altra sessione.

Prerequisiti

  • Interfaccia della riga di comando di Azure. È anche possibile eseguire i comandi in questo articolo usando azure Cloud Shell, una shell dell'interfaccia della riga di comando interattiva eseguita nel browser o in un'app, ad esempio Terminale Windows. Se si usa Cloud Shell, non è necessario installare alcun componente. Se si preferisce usare l'interfaccia della riga di comando in locale, questo articolo richiede l'interfaccia della riga di comando di Azure versione 2.36 o successiva. Eseguire az --version per trovare la versione. Per installare o aggiornare l'interfaccia della riga di comando di Azure in locale, vedere Installare l'interfaccia della riga di comando di Azure.

  • Un hub IoT. Crearne uno con l'interfaccia della riga di comando o il portale di Azure.

  • Assicurarsi che la porta 8883 sia aperta nel firewall. L'esempio di dispositivo di questo articolo 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).

Preparare l'Cloud Shell

Se si vuole usare l'Cloud Shell di Azure, è necessario avviare e configurarlo. Se si usa l'interfaccia della riga di comando in locale, passare alla sezione Prepara due sessioni dell'interfaccia della riga di comando.

  1. Selezionare l'icona Cloud Shell dall'intestazione della pagina nella portale di Azure.

    Screenshot dei controlli globali dall'intestazione di pagina della portale di Azure, evidenziando l'icona Cloud Shell.

    Nota

    Se è la prima volta che si usa Cloud Shell, viene richiesto di creare una risorsa di archiviazione necessaria per usare Cloud Shell. Selezionare una sottoscrizione per creare un account di archiviazione e una condivisione File di Microsoft Azure.

  2. Usare il selettore di ambiente nella barra degli strumenti Cloud Shell per selezionare l'ambiente dell'interfaccia della riga di comando preferito. Questo articolo usa l'ambiente Bash . È anche possibile usare l'ambiente PowerShell .

    Nota

    Alcuni comandi richiedono sintassi o formattazione diversi negli ambienti Bash e PowerShell . Per altre informazioni, vedere Suggerimenti per l'uso dell'interfaccia della riga di comando di Azure correttamente.

    Screenshot di una finestra di Cloud Shell di Azure, evidenziando il selettore di ambiente nella barra degli strumenti.

Preparare due sessioni dell'interfaccia della riga di comando

È quindi necessario preparare due sessioni dell'interfaccia della riga di comando di Azure. Se si usa la Cloud Shell, eseguire queste sessioni in schede di Cloud Shell separate. Se si usa un client dell'interfaccia della riga di comando locale, si eseguono istanze separate dell'interfaccia della riga di comando. Usare le sessioni separate dell'interfaccia della riga di comando per le attività seguenti:

  • La prima sessione simula un dispositivo IoT che comunica con l'hub IoT.
  • La seconda sessione richiama un metodo diretto dal dispositivo simulato usando l'hub IoT.

Nota

L'interfaccia della riga di comando di Azure richiede l'accesso all'account Azure. Se si usa la Cloud Shell, si accede automaticamente all'account Azure. Se si usa un client dell'interfaccia della riga di comando locale, è necessario accedere a ogni sessione dell'interfaccia della riga di comando. Tutte le comunicazioni tra la sessione della shell dell'interfaccia della riga di comando di Azure e l'hub IoT vengono autenticate e crittografate. Di conseguenza, questo articolo non richiede l'autenticazione aggiuntiva usata con un dispositivo reale, ad esempio una stringa di connessione. Per altre informazioni sull'accesso con l'interfaccia della riga di comando di Azure, vedere Accedere con l'interfaccia della riga di comando di Azure.

  1. Nella prima sessione dell'interfaccia della riga di comando eseguire il comando az extension add . Il comando aggiunge l'estensione IoT di Microsoft Azure per l'interfaccia della riga di comando di Azure alla shell dell'interfaccia della riga di comando. L'estensione aggiunge comandi specifici hub IoT, IoT Edge e IoT Device Provisioning Service (DPS) all'interfaccia della riga di comando di Azure. Dopo aver installato l'estensione, non è necessario installarla nuovamente in qualsiasi sessione di Cloud Shell.

    az extension add --name azure-iot
    

    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.

  2. Aprire la seconda sessione dell'interfaccia della riga di comando. Se si usa il Cloud Shell in un browser, selezionare l'icona Apri nuova sessione sulla barra degli strumenti della prima sessione dell'interfaccia della riga di comando. Se si usa l'interfaccia della riga di comando in locale, aprire una seconda istanza dell'interfaccia della riga di comando.

    Screenshot di una finestra di Cloud Shell di Azure, evidenziando l'icona Apri nuova sessione nella barra degli strumenti.

Creare e simulare un dispositivo

In questa sezione viene creata un'identità del dispositivo per l'hub IoT nella prima sessione dell'interfaccia della riga di comando e quindi si simula un dispositivo usando tale identità del dispositivo. Il dispositivo simulato risponde ai metodi diretti richiamati nella seconda sessione dell'interfaccia della riga di comando.

Per creare e avviare un dispositivo simulato:

  1. Nella prima sessione dell'interfaccia della riga di comando eseguire il comando az iot hub device-identity create , sostituendo i segnaposto seguenti con i relativi valori corrispondenti. Questo comando crea l'identità del dispositivo per il dispositivo simulato.

    {DeviceName}. Nome del dispositivo simulato.

    {HubName}. Il nome dell'hub IoT.

    az iot hub device-identity create --device-id {DeviceName} --hub-name {HubName} 
    
  2. Nella prima sessione dell'interfaccia della riga di comando eseguire il comando az iot device simulate , sostituendo i segnaposto seguenti con i relativi valori corrispondenti. Questo comando simula un dispositivo usando l'identità del dispositivo creata nel passaggio precedente. Il dispositivo simulato è configurato per restituire un codice di stato e un payload ogni volta che viene richiamato un metodo diretto.

    {DeviceName}. Nome del dispositivo simulato.

    {HubName}. Il nome dell'hub IoT.

    az iot device simulate --device-id {DeviceName} --hub-name {HubName} \
                           --method-response-code 201 \
                           --method-response-payload '{"result":"Direct method successful"}'
    

    Suggerimento

    Per impostazione predefinita, il comando az iot device simulate invia 100 messaggi da dispositivo a cloud con un intervallo di 3 secondi tra i messaggi. La simulazione termina dopo l'invio di tutti i messaggi. Se si vuole che la simulazione venga eseguita più a lungo, è possibile usare il --msg-count parametro per specificare più messaggi o il --msg-interval parametro per specificare un intervallo più lungo tra i messaggi. È anche possibile eseguire di nuovo il comando per riavviare il dispositivo simulato.

Richiamare un metodo diretto

In questa sezione viene usata la seconda sessione dell'interfaccia della riga di comando per richiamare un metodo diretto nel dispositivo simulato in esecuzione nella prima sessione dell'interfaccia della riga di comando.

  1. Verificare che il dispositivo simulato nella prima sessione dell'interfaccia della riga di comando sia in esecuzione. In caso contrario, riavviarlo eseguendo il comando az iot device simulate nuovamente da Crea e simulare un dispositivo.

  2. Nella seconda sessione dell'interfaccia della riga di comando eseguire il comando az iot hub invoke-device-method , sostituendo i segnaposto seguenti con i relativi valori corrispondenti. In questo esempio non esiste alcun metodo preesistente per il dispositivo. Il comando chiama un nome di metodo di esempio nel dispositivo simulato. Il metodo fornisce un codice di stato e un payload nella risposta.

    {DeviceName}. Nome del dispositivo simulato.

    {HubName}. Il nome dell'hub IoT.

    {MethodName}. Nome del metodo diretto. Il dispositivo simulato non dispone di un metodo preesistente, quindi è possibile scegliere qualsiasi nome desiderato per questo comando.

    az iot hub invoke-device-method --device-id {DeviceName} --hub-name {HubName} \
                                    --method-name {MethodName}
    
  3. Nella prima sessione dell'interfaccia della riga di comando verificare che l'output mostri la chiamata al metodo. Nello screenshot seguente sono stati usati SampleDevice e per i {DeviceName} segnaposto e {MethodName} rispettivamente nel comando dell'interfaccia della az iot hub invoke-device-methodSampleMethod riga di comando.

    Screenshot di un dispositivo simulato che visualizza l'output dopo che è stato richiamato un metodo.

  4. Nella seconda sessione dell'interfaccia della riga di comando verificare che l'output mostri il codice di stato e il payload ricevuti dal metodo richiamato.

    Screenshot di una finestra di Cloud Shell di Azure che visualizza il codice di stato e il payload di un metodo diretto richiamato.

Richiamare un metodo diretto con un payload

In questa sezione viene usata la seconda sessione dell'interfaccia della riga di comando per richiamare un metodo diretto e fornire un payload al dispositivo simulato in esecuzione nella prima sessione dell'interfaccia della riga di comando.

  1. Verificare che il dispositivo simulato nella prima sessione dell'interfaccia della riga di comando sia in esecuzione. In caso contrario, riavviarlo eseguendo il comando az iot device simulate nuovamente da Crea e simulare un dispositivo.

  2. Nella seconda sessione dell'interfaccia della riga di comando eseguire il comando az iot hub invoke-device-method , sostituendo i segnaposto seguenti con i relativi valori corrispondenti. In questo esempio non esiste alcun metodo preesistente per il dispositivo. Il comando chiama un nome di metodo di esempio nel dispositivo simulato e fornisce un payload per tale metodo. Il metodo fornisce un codice di stato e un payload nella risposta.

    {DeviceName}. Nome del dispositivo simulato.

    {HubName}. Il nome dell'hub IoT.

    {MethodName}. Nome del metodo diretto. Il dispositivo simulato non dispone di un metodo preesistente, quindi è possibile scegliere qualsiasi nome desiderato per questo comando.

    az iot hub invoke-device-method --device-id {DeviceName} --hub-name {HubName} \
                                    --method-name {MethodName} \
                                    --method-payload '{ "SamplePayload": "PayloadValue" }'
    
  3. Nella prima sessione dell'interfaccia della riga di comando verificare che l'output mostri la chiamata al metodo. Nello screenshot seguente sono stati usati SampleDevice e per i {DeviceName} segnaposto e {MethodName} rispettivamente nel comando dell'interfaccia della az iot hub invoke-device-methodSampleMethod riga di comando.

    Screenshot di un dispositivo simulato che visualizza l'output dopo che un metodo è stato richiamato con un payload.

  4. Nella seconda sessione dell'interfaccia della riga di comando verificare che l'output mostri il codice di stato e il payload ricevuti dal metodo richiamato.

    Screenshot di una finestra di Cloud Shell di Azure che visualizza il codice di stato e il payload di un metodo diretto richiamato.

Passaggi successivi

Per informazioni su come usare l'interfaccia della riga di comando di Azure per estendere la soluzione IoT e pianificare le chiamate al metodo nei dispositivi, vedere Pianificazione e trasmissione dei processi.

Per continuare a iniziare a usare hub IoT e modelli di gestione dei dispositivi, ad esempio l'aggiornamento basato su immagini end-to-end, vedere Aggiornamento del dispositivo per hub IoT di Azure articolo usando l'immagine di riferimento di Raspberry Pi 3 B+ .