Condividi tramite


Introduzione alla gestione dei dispositivi (.NET)

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 un'app back-end e un'app per dispositivi può collaborare per avviare e monitorare un riavvio remoto del 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 le operazioni di gestione dei dispositivi, ad esempio il riavvio, il ripristino delle impostazioni predefinite e l'aggiornamento del firmware, da un'applicazione back-end nel cloud. 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 un'applicazione back-end nel cloud per eseguire query di un dispositivo gemello in modo da creare report sullo stato di avanzamento delle operazioni di gestione del dispositivo.

Questo articolo illustra come creare:

  • SimulateManagedDevice: un'app del dispositivo simulata con un metodo diretto che riavvia il dispositivo e segnala l'ultima volta di riavvio. I metodi diretti vengono richiamati dal cloud.

  • TriggerReboot: un'app console .NET che chiama il metodo diretto nell'app per dispositivi simulati tramite l'hub IoT. Visualizza la risposta e le proprietà segnalate aggiornate.

Prerequisiti

  • Visual Studio.

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

  • Dispositivo registrato. Registrare una nella 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).

Creare un'app per dispositivi con un metodo diretto

In questa sezione verrà illustrato come:

  • Creare un'app console .NET che risponde a un metodo diretto chiamato dal cloud.

  • Attivare un riavvio del dispositivo simulato.

  • Usare le proprietà segnalate per abilitare le query nei dispositivi gemelli in modo da identificare i dispositivi e l'ora dell'ultimo riavvio.

Per creare l'app per dispositivo simulata, seguire questa procedura:

  1. Aprire Visual Studio e selezionare Crea un nuovo progetto, quindi trovare e selezionare il modello di progetto App console (.NET Framework), quindi selezionare Avanti.

  2. In Configura il nuovo progetto assegnare un nome al progetto SimulateManagedDevice e quindi selezionare Avanti.

    Screenshot che mostra come assegnare un nome a un nuovo progetto di Visual Studio.

  3. Mantenere la versione predefinita di .NET Framework e quindi selezionare Crea.

  4. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nuovo progetto SimulateManagedDevice e quindi selezionare Gestisci pacchetti NuGet.

  5. Selezionare Sfoglia, quindi cercare e selezionare Microsoft.Azure.Devices.Client. Selezionare Installa.

    Screenshot che mostra come installare il pacchetto Microsoft.Azure.Devices.Client.

    Questo passaggio scarica, installa e aggiunge un riferimento al pacchetto NuGet Azure IoT SDK per dispositivi e alle relative dipendenze.

  6. Aggiungere le istruzione using seguenti all'inizio del file Program.cs :

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    
  7. Aggiungere i campi seguenti alla classe Program . Sostituire il {device connection string} valore segnaposto con la stringa di connessione del dispositivo visualizzata quando si è registrato un dispositivo nella hub IoT:

    static string DeviceConnectionString = "{device connection string}";
    static DeviceClient Client = null;
    
  8. Aggiungere quanto segue per implementare il metodo diretto nel dispositivo:

    static Task<MethodResponse> onReboot(MethodRequest methodRequest, object userContext)
    {
        // In a production device, you would trigger a reboot 
        //   scheduled to start after this method returns.
        // For this sample, we simulate the reboot by writing to the console
        //   and updating the reported properties.
        try
        {
            Console.WriteLine("Rebooting!");
    
            // Update device twin with reboot time. 
            TwinCollection reportedProperties, reboot, lastReboot;
            lastReboot = new TwinCollection();
            reboot = new TwinCollection();
            reportedProperties = new TwinCollection();
            lastReboot["lastReboot"] = DateTime.Now;
            reboot["reboot"] = lastReboot;
            reportedProperties["iothubDM"] = reboot;
            Client.UpdateReportedPropertiesAsync(reportedProperties).Wait();
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error in sample: {0}", ex.Message);
        }
    
        string result = @"{""result"":""Reboot started.""}";
        return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
    }
    
  9. Infine aggiungere il codice seguente al metodo Main per aprire la connessione all'hub IoT e inizializzare il listener del metodo:

    try
    {
        Console.WriteLine("Connecting to hub");
        Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
          TransportType.Mqtt);
    
        // setup callback for "reboot" method
        Client.SetMethodHandlerAsync("reboot", onReboot, null).Wait();
        Console.WriteLine("Waiting for reboot method\n Press enter to exit.");
        Console.ReadLine();
    
        Console.WriteLine("Exiting...");
    
        // as a good practice, remove the "reboot" handler
        Client.SetMethodHandlerAsync("reboot", null, null).Wait();
        Client.CloseAsync().Wait();
    }
    catch (Exception ex)
    {
        Console.WriteLine();
        Console.WriteLine("Error in sample: {0}", ex.Message);
    }
    
  10. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione e selezionare Imposta progetti di avvio.

  11. Per Proprietà comuni>Progetto di avvio, selezionare Progetto di avvio singolo, quindi selezionare il progetto SimulateManagedDevice. Selezionare OK per salvare le modifiche.

  12. Selezionare Compila>Compila soluzione.

Nota

Per mantenere semplici le operazioni, questo articolo non implementa alcun criterio di ripetizione dei tentativi. Nel codice di produzione è consigliabile implementare criteri di ripetizione dei tentativi (ad esempio, un backoff esponenziale) come suggerito in Gestione degli errori temporanei.

Ottenere la stringa di connessione dell'hub IoT

In questo articolo viene creato un servizio back-end che richiama un metodo diretto in un dispositivo. Per richiamare un metodo diretto in un dispositivo tramite l'hub IoT, è necessario che il servizio disponga delle autorizzazioni di connessione al servizio. Per impostazione predefinita, ogni hub IoT viene creato con un servizio con nome di criteri di accesso condiviso che concede tale autorizzazione.

Per ottenere la stringa di connessione dell'hub IoT per i criteri del servizio, seguire questa procedura:

  1. Nel portale di Azure fare clic su Gruppi di risorse. Selezionare il gruppo di risorse in cui si trova l'hub e quindi selezionare l'hub dall'elenco di risorse.

  2. Nel riquadro sinistro dell'hub IoT selezionare Criteri di accesso condiviso.

  3. Dall'elenco dei criteri selezionare i criteri del servizio.

  4. Copiare la stringa di connessione primaria e salvare il valore.

Screenshot che mostra come recuperare la stringa di connessione dal hub IoT nell'portale di Azure.

Per altre informazioni sui criteri di accesso condiviso e sulle autorizzazioni dell'hub IoT, vedere Controllo dell'accesso e autorizzazioni.

Creare un'app del servizio per attivare un riavvio

In questa sezione viene creata un'app console .NET, tramite C#, che attiva un riavvio remoto su un dispositivo usando un metodo diretto. L'app esegue query nel dispositivo gemello per ottenere l'ora dell'ultimo riavvio del dispositivo in questione.

  1. Aprire Visual Studio e selezionare Crea un nuovo progetto.

  2. In Crea un nuovo progetto, trovare e selezionare il modello di progetto App console (.NET Framework) , quindi selezionare Avanti.

  3. In Configura il nuovo progetto assegnare un nome al progetto TriggerReboot e quindi selezionare Avanti.

    Screenshot che mostra come configurare un nuovo progetto di Visual Studio.

  4. Accettare la versione predefinita di .NET Framework, quindi selezionare Crea per creare il progetto.

  5. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto TriggerReboot e quindi selezionare Gestisci pacchetti NuGet.

  6. Selezionare Sfoglia, quindi cercare e selezionare Microsoft.Azure.Devices. Selezionare Installa per installare il pacchetto Microsoft.Azure.Devices.

    Screenshot che mostra come installare il pacchetto Microsoft.Azure.Devices.

    Questa procedura scarica, installa e aggiunge un riferimento al pacchetto NuGet Azure IoT SDK per servizi e alle relative dipendenze.

  7. Aggiungere le istruzione using seguenti all'inizio del file Program.cs :

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  8. Aggiungere i campi seguenti alla classe Program . Sostituire il valore segnaposto {iot hub connection string} con la stringa di connessione dell'hub IoT copiata in precedenza in Ottenere la stringa di connessione dell’hub IoT.

    static RegistryManager registryManager;
    static string connString = "{iot hub connection string}";
    static ServiceClient client;
    static string targetDevice = "myDeviceId";
    
  9. Aggiungere il metodo seguente alla classe Program. Questo codice ottiene il dispositivo gemello per il dispositivo in fase di riavvio e restituisce le proprietà segnalate.

    public static async Task QueryTwinRebootReported()
    {
        Twin twin = await registryManager.GetTwinAsync(targetDevice);
        Console.WriteLine(twin.Properties.Reported.ToJson());
    }
    
  10. Aggiungere il metodo seguente alla classe Program. Il codice attiva il riavvio nel dispositivo usando un metodo diretto.

    public static async Task StartReboot()
    {
        client = ServiceClient.CreateFromConnectionString(connString);
        CloudToDeviceMethod method = new CloudToDeviceMethod("reboot");
        method.ResponseTimeout = TimeSpan.FromSeconds(30);
    
        CloudToDeviceMethodResult result = await 
          client.InvokeDeviceMethodAsync(targetDevice, method);
    
        Console.WriteLine("Invoked firmware update on device.");
    }
    
  11. Aggiungere infine le righe seguenti al metodo Main :

    registryManager = RegistryManager.CreateFromConnectionString(connString);
    StartReboot().Wait();
    QueryTwinRebootReported().Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  12. Selezionare Compila>Compila soluzione.

Nota

Questo articolo esegue solo una singola query per le proprietà segnalate del dispositivo. Nel codice di produzione è consigliabile eseguire il polling per rilevare le modifiche nelle proprietà segnalate.

Eseguire le app

A questo punto è possibile eseguire le app.

  1. Per eseguire l'app per dispositivi .NET SimulateManagedDevice, in Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto SimulateManagedDevice, selezionare Debug, quindi selezionare Avvia nuova istanza. L’app dovrebbe iniziare ad ascoltare le chiamate di metodo provenienti dall'IoT hub.

  2. Una volta che il dispositivo è connesso e in attesa di chiamate al metodo, fare clic con il pulsante destro del mouse sul progetto TriggerReboot, selezionare Debug, quindi selezionare Avvia nuova istanza.

    Verrà visualizzato il riavvio scritto nella console SimulatedManagedDevice e le proprietà segnalate del dispositivo, che includono l'ultima ora di riavvio, scritta nella console TriggerReboot .

    Esecuzione del servizio e dell'app per dispositivi

Personalizzare ed estendere le operazioni di gestione dei dispositivi

Le soluzioni IoT possono espandere il set definito di modelli di gestione dei dispositivi o abilitare modelli personalizzati mediante l'uso di primitive di metodo da cloud a dispositivo e del dispositivo gemello. Altri esempi di operazioni di gestione dei dispositivi includono il ripristino delle informazioni predefinite, l'aggiornamento del firmware, l'aggiornamento del software, il risparmio energia, la gestione di rete e connettività e la crittografia dei dati.

Finestre di manutenzione del dispositivo

Configurare i dispositivi in modo che eseguano le azioni in un momento che riduce al minimo le interruzioni e i tempi di inattività. Le finestre di manutenzione del dispositivo costituiscono un modello comunemente usato per definire il momento in cui un dispositivo deve eseguire l'aggiornamento della configurazione. Le soluzioni di back-end possono usare le proprietà desiderate del dispositivo gemello per definire e attivare un criterio sul dispositivo che attiva una finestra di manutenzione. Quando un dispositivo riceve il criterio della finestra di manutenzione, può usare la proprietà segnalata del dispositivo gemello per segnalare lo stato del criterio. L'applicazione back-end può quindi usare le query del dispositivo gemello per attestare la conformità dei dispositivi e di tutti i criteri.

Passaggi successivi

In questo articolo è stato usato un metodo diretto per attivare un riavvio remoto in un dispositivo. Sono state usate le proprietà segnalate per indicare l'ora dell'ultimo riavvio dal dispositivo ed è stata eseguita una query sul dispositivo gemello per ottenere l'ora dell'ultimo riavvio del dispositivo dal cloud.

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

Per informazioni su come estendere la soluzione IoT e pianificare le chiamate al metodo su più dispositivi, vedere Pianificare e trasmettere processi.