Condividi tramite


Pianificare e trasmettere processi (interfaccia della riga di comando di Azure)

Usare l'hub IoT per pianificare e tenere traccia dei processi che aggiornano milioni di dispositivi. Usare i processi per:

  • Aggiornare le proprietà desiderate
  • Aggiornare i tag
  • Richiamare metodi diretti

In parole povere, un processo esegue il wrapping di una di queste azioni e tiene traccia dell'avanzamento dell'esecuzione rispetto a un set di dispositivi. Il set di dispositivi con cui interagisce un processo è definito da una query del dispositivo gemello. Grazie a un processo, ad esempio, un'app back-end può richiamare un metodo di riavvio in 10.000 dispositivi, specificato da una query di dispositivi gemelli e pianificato in un secondo momento. L'applicazione può quindi tenere traccia dell'avanzamento mentre ognuno dei dispositivi riceve ed esegue il metodo di riavvio.

Altre informazioni su queste funzionalità sono disponibili in questi articoli:

Nota

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

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 crea due processi pianificati. Il primo processo richiama un metodo diretto mentre il secondo processo aggiorna una proprietà del dispositivo gemello desiderata 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 interattiva dell'interfaccia della riga di comando eseguita nel browser o in un'app come Terminale Windows. Se si usa Cloud Shell, non è necessario installare alcun componente. Se si preferisce usare l'interfaccia della riga di comando in locale, è necessaria l'interfaccia della riga di comando di Azure versione 2.36 o successiva. Eseguire az --version per trovare la versione. Per installare o aggiornare localmente l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure.

  • Un hub IoT nella sottoscrizione di Azure. Se non si ha ancora un hub, è possibile seguire la procedura descritta in Creare un hub IoT.

  • 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 Cloud Shell

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

  1. Selezionare l'icona Cloud Shell nell'intestazione della pagina nel portale di Azure.

    Screenshot dei controlli globali dall'intestazione di pagina del portale di Azure, evidenziando l'icona di 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 di Cloud Shell per selezionare l'ambiente dell'interfaccia della riga di comando preferito. In questa articolo si usa l'ambiente Bash. È anche possibile usare l’ambiente di PowerShell.

    Nota

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

    Screenshot di una finestra di Azure Cloud Shell che evidenzia il selettore di ambiente nella barra degli strumenti.

Preparare due sessioni dell'interfaccia della riga di comando

Successivamente, è necessario preparare due sessioni dell'interfaccia della riga di comando di Azure. Se si usa Cloud Shell, eseguire queste sessioni in schede Cloud Shell separate. Se si usa un client dell'interfaccia della riga di comando locale, eseguire istanze dell'interfaccia della riga di comando separate. 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 pianifica i processi per il dispositivo simulato con l'hub IoT.

Nota

L'interfaccia della riga di comando di Azure richiede l'accesso all'account Azure. Se si usa 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, in questo articolo non è richiesta alcuna autenticazione aggiuntiva, ad esempio una stringa di connessione, da usare con un dispositivo reale. 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 Microsoft Azure IoT per l'interfaccia della riga di comando di Azure alla shell in uso. L'estensione aggiunge i comandi specifici dell'hub IoT, di IoT Edge e del servizio di Provisioning di dispositivi in hub IoT (DPS) all'interfaccia della riga di comando di Azure. Dopo aver installato l'estensione, non è necessario installarla nuovamente in alcuna 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 Cloud Shell in un browser, selezionare l'icona Apri nuova sessione nella 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 della riga di comando.

    Screenshot di una finestra di Azure Cloud Shell che evidenzia 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 l'identità del dispositivo. Il dispositivo simulato risponde ai processi pianificati 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 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 valori corrispondenti. Questo comando simula il dispositivo creato nel passaggio precedente. Il dispositivo simulato è configurato per restituire un codice di stato e un payload quando 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 desidera che la simulazione venga eseguita più a lungo, è possibile usare il parametro --msg-count per specificare più messaggi o il parametro --msg-interval per specificare un intervallo più lungo tra i messaggi. È anche possibile eseguire di nuovo il comando per riavviare il dispositivo simulato.

Pianificare un processo per richiamare un metodo diretto

In questa sezione si pianifica un processo nella 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. Nella prima sessione dell'interfaccia della riga di comando verificare che il dispositivo simulato sia in esecuzione. In caso contrario, riavviarlo eseguendo il comando az iot device simulate da Creare e simulare un dispositivo.

  2. Nella seconda sessione dell'interfaccia della riga di comando eseguire il comando az iot hub job create, sostituendo i segnaposto seguenti con i valori corrispondenti. In questo esempio non esiste alcun metodo preesistente per il dispositivo. Il comando pianifica un processo che chiama un nome di metodo di esempio nel dispositivo simulato, fornendo un valore null per il payload del metodo. Il metodo fornisce un codice di stato e un payload nella risposta.

    {HubName}. Il nome dell'hub IoT.

    {JobName}. Nome del processo pianificato. I nomi dei processi sono univoci, quindi scegliere un nome di processo diverso ogni volta che si esegue questo comando.

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

    {DeviceName}. Nome del dispositivo simulato.

    az iot hub job create --hub-name {HubName} --job-id {JobName} \
                          --job-type scheduleDeviceMethod \
                          --method-name {MethodName} --method-payload 'null' \
                          --query-condition "deviceId = '{DeviceName}'"
    

    Suggerimento

    Quando si pianifica un processo az iot hub job create che richiama un metodo diretto, è necessario specificare i valori sia per i parametri facoltativi --method-name che per --method-payload. Per i metodi diretti che non accettano un payload, specificare null per il parametro --method-payload.

  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 rispettivamente SampleDevice e SampleMethod per i segnaposto {DeviceName} e {MethodName} nel comando dell'interfaccia della riga di comando di az iot hub job create del passaggio precedente.

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

Pianificare un processo per aggiornare le proprietà di un dispositivo gemello

In questa sezione si pianifica un processo nella seconda sessione dell'interfaccia della riga di comando per aggiornare una proprietà nel dispositivo gemello desiderato nel dispositivo simulato in esecuzione nella prima sessione dell'interfaccia della riga di comando.

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

  2. Nella seconda sessione dell'interfaccia della riga di comando eseguire il comando az iot hub job create, sostituendo i segnaposto seguenti con i valori corrispondenti. In questo esempio si sta pianificando un processo per impostare il valore della proprietà del gemello desiderata BuildingNo su 45 per il dispositivo simulato.

    {HubName}. Il nome dell'hub IoT.

    {JobName}. Nome del processo pianificato. I nomi dei processi sono univoci, quindi scegliere un nome di processo diverso ogni volta che si esegue questo comando.

    {DeviceName}. Nome del dispositivo simulato.

    az iot hub job create --hub-name {HubName} --job-id {JobName} \
                          --job-type scheduleUpdateTwin \
                          --twin-patch '{"properties":{"desired": {"BuildingNo": 45}}}' \
                          --query-condition "deviceId = '{DeviceName}'"
    
  3. Nella prima sessione dell'interfaccia della riga di comando verificare che l'output mostri l'aggiornamento corretto per la proprietà del dispositivo gemello segnalato, a indicare che è stata aggiornata anche la proprietà del dispositivo gemello desiderato.

    Screenshot di un dispositivo simulato che visualizza l'output dopo l'aggiornamento di una proprietà del dispositivo gemello.

Passaggi successivi

In questo articolo è stata utilizzata l’interfaccia della riga di comando di Azure per simulare un dispositivo e pianificare i processi per eseguire un metodo diretto e aggiornare le proprietà del dispositivo gemello per quel dispositivo simulato.

Per continuare a esplorare i modelli di gestione dell'hub IoT e dei dispositivi, aggiornare un'immagine nell'esercitazione sull'aggiornamento dei dispositivi per l'hub IoT di Azure usando l'immagine di riferimento Raspberry Pi 3 B+.