Pianificare e trasmettere processi (.NET/Node.js)Schedule and broadcast jobs (.NET/Node.js)

Usare l'hub IoT per pianificare e tenere traccia dei processi che aggiornano milioni di dispositivi.Use Azure IoT Hub to schedule and track jobs that update millions of devices. Usare i processi per:Use jobs to:

  • Aggiornare le proprietà desiderateUpdate desired properties
  • Aggiornare i tagUpdate tags
  • Richiamare metodi direttiInvoke direct methods

Un processo esegue il wrapping di una di queste azioni e tiene traccia dell'esecuzione rispetto a un set di dispositivi, definito da una query su dispositivi gemelli.A job wraps one of these actions and tracks the execution against a set of devices that is defined by a device twin query. Ad esempio, un'applicazione back-end può usare un processo per chiamare un metodo diretto su 10.000 dispositivi che riavvia i dispositivi stessi.For example, a back-end app can use a job to invoke a direct method on 10,000 devices that reboots the devices. È necessario specificare il set di dispositivi con una query di dispositivi gemelli e pianificare il processo in modo che venga eseguito in un secondo momento.You specify the set of devices with a device twin query and schedule the job to run at a future time. L'applicazione può quindi tenere traccia dell'avanzamento mentre ognuno dei dispositivi riceve ed esegue il metodo diretto di riavvio.The job tracks progress as each of the devices receive and execute the reboot direct method.

Per altre informazioni su queste funzionalità, vedere:To learn more about each of these capabilities, see:

Questa esercitazione illustra come:This tutorial shows you how to:

  • Creare un'app per dispositivi che implementa un metodo diretto denominato lockDoor che può essere chiamato dall'app back-end.Create a device app that implements a direct method called lockDoor that can be called by the back-end app. L'app per dispositivi riceve anche le modifiche di proprietà desiderate dall'app back-end.The device app also receives desired property changes from the back-end app.
  • Creare un'app back-end che crea un processo per chiamare il metodo diretto lockDoor su più dispositivi.Create a back-end app that creates a job to call the lockDoor direct method on multiple devices. Un altro processo invia gli aggiornamenti di proprietà desiderati a più dispositivi.Another job sends desired property updates to multiple devices.

Al termine dell'esercitazione saranno disponibili un'app per il dispositivo console Node.js e un'app back-end console .NET (C#):At the end of this tutorial, you have a Node.js console device app and a .NET (C#) console back-end app:

simDevice.js che si connette all'hub IoT, implementa il metodo diretto lockDoor e gestisce le modifiche di proprietà desiderate.simDevice.js that connects to your IoT hub, implements the lockDoor direct method, and handles desired property changes.

ScheduleJob che usa i processi per chiamare il metodo diretto lockDoor e aggiornare le proprietà di dispositivi gemelli desiderate su più dispositivi.ScheduleJob that uses jobs to call the lockDoor direct method and update the device twin desired properties on multiple devices.

Per completare l'esercitazione, sono necessari gli elementi seguenti:To complete this tutorial, you need the following:

  • Visual Studio 2015 o Visual Studio 2017.Visual Studio 2015 or Visual Studio 2017.
  • Node.js 4.0.x o versione successiva.Node.js version 4.0.x or later. L'articolo Prepare your development environment (Preparare l'ambiente di sviluppo) descrive come installare Node.js per questa esercitazione in Windows o Linux.The article Prepare your development environment describes how to install Node.js for this tutorial on either Windows or Linux.
  • Un account Azure attivo.An active Azure account. Se non si ha un account, è possibile crearne uno gratuito in pochi minuti.If you don't have an account, you can create a free account in just a couple of minutes.

Creare un hub IoTCreate an IoT hub

Creare un hub IoT per connettere l'app per dispositivo simulato.Create an IoT hub for your simulated device app to connect to. La procedura seguente illustra come completare questa attività usando il portale di Azure.The following steps show you how to complete this task by using the Azure portal.

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Selezionare Nuovo > Internet delle cose > Hub IoT.Select New > Internet of Things > IoT Hub.

    Indice del portale di Azure

  3. Nel riquadro Hub IoT immettere le informazioni seguenti per l'hub IoT:In the IoT hub pane, enter the following information for your IoT hub:

    • Nome: creare un nome per l'hub IoT.Name: Create a name for your IoT hub. Se il nome immesso è valido, viene visualizzato un segno di spunta verde.If the name you enter is valid, a green check mark appears.

    Importante

    L'hub IoT sarà individuabile pubblicamente come endpoint DNS, quindi evitare di indicare informazioni riservate nell'assegnazione del nome.The IoT hub will be publicly discoverable as a DNS endpoint, so make sure to avoid any sensitive information while naming it.

    • Piano tariffario e livello di scalabilità: per questa esercitazione selezionare il livello F1 gratuito.Pricing and scale tier: For this tutorial, select the F1 - Free tier. Per altre informazioni, vedere la pagina relativa a piano tariffario e livello di scalabilità.For more information, see the Pricing and scale tier.

    • Gruppo di risorse: creare un gruppo di risorse per ospitare l'hub IoT o usarne uno esistente.Resource group: Create a resource group to host the IoT hub or use an existing one. Per altre informazioni, vedere l'articolo su come usare i gruppi di risorse per gestire le risorse di Azure.For more information, see Use resource groups to manage your Azure resources

    • Località: selezionare la località più vicina.Location: Select the closest location to you.

    • Aggiungi al dashboard: selezionare questa opzione per semplificare l'accesso all'hub IoT dal dashboard.Pin to dashboard: Check this option for easy access to your IoT hub from the dashboard.

      Finestra Hub IoT

  4. Fare clic su Crea.Click Create. La creazione dell'hub IoT può richiedere alcuni minuti.Your IoT hub might take a few minutes to create. È possibile monitorare lo stato di avanzamento nel riquadro Notifiche.You can monitor the progress in the Notifications pane.

Ora che è stato creato un hub IoT, individuare le informazioni importanti che consentono di connettere dispositivi e applicazioni all'hub IoT.Now that you have created an IoT hub, locate the important information that you use to connect devices and applications to your IoT hub.

  1. Dopo avere creato l'hub IoT, fare clic sul nuovo riquadro dell'hub IoT nel portale di Azure per aprire la finestra delle proprietà.When the IoT hub has been created successfully, click the new tile for your IoT hub in the Azure portal to open the properties window for the new IoT hub. Annotare il Nome host, quindi fare clic su Criteri di accesso condiviso.Make a note of the Hostname, and then click Shared access policies.

    Finestra del nuovo hub IoT

  2. In Criteri di accesso condivisi fare clic sul criterio iothubowner, quindi copiare e annotare la stringa di connessione dell'hub IoT nella finestra iothubowner.In Shared access policies, click the iothubowner policy, and then copy and make note of the IoT Hub connection string in the iothubowner window. Per altre informazioni, vedere Controllo di accesso nella "Guida per gli sviluppatori dell'hub IoT".For more information, see Access control in the "IoT Hub developer guide."

    Criteri di accesso condivisi

Creare un'identità del dispositivoCreate a device identity

In questa sezione si usa uno strumento di Node.js denominato iothub-explorer per creare un'identità del dispositivo per questa esercitazione.In this section, you use a Node.js tool called iothub-explorer to create a device identity for this tutorial. Gli ID dispositivo fanno distinzione tra maiuscole e minuscole.Device IDs are case sensitive.

  1. Eseguire il codice seguente nell'ambiente della riga di comando:Run the following in your command-line environment:

    npm install -g iothub-explorer@latest

  2. Eseguire quindi il comando indicato di seguito per accedere all'hub.Then, run the following command to login to your hub. Sostituire {iot hub connection string} con la stringa di connessione all'hub IoT copiata prima:Substitute {iot hub connection string} with the IoT Hub connection string you previously copied:

    iothub-explorer login "{iot hub connection string}"

  3. Creare infine una nuova identità del dispositivo denominata myDeviceId con il comando:Finally, create a new device identity called myDeviceId with the command:

    iothub-explorer create myDeviceId --connection-string

    Importante

    L'ID dispositivo può essere visibile nei log raccolti per il supporto tecnico e la risoluzione dei problemi, quindi evitare di indicare informazioni riservate nell'assegnazione del nome.The device ID may be visible in the logs collected for customer support and troubleshooting, so make sure to avoid any sensitive information while naming it.

Annotare la stringa di connessione del dispositivo visualizzata nei risultati.Make a note of the device connection string from the result. Questa stringa di connessione del dispositivo viene usata dall'app del dispositivo per la connessione all'hub IoT come dispositivo.This device connection string is used by the device app to connect to your IoT Hub as a device.

Per creare identità del dispositivo a livello di codice, vedere Introduzione all'hub IoT.Refer to Getting started with IoT Hub to programmatically create device identities.

Pianificare i processi per chiamare un metodo diretto e inviare gli aggiornamenti dei dispositivi gemelliSchedule jobs for calling a direct method and sending device twin updates

In questa sezione si crea un'app console .NET (usando C#) che usa i processi per chiamare il metodo diretto lockDoor e inviare gli aggiornamenti di proprietà desiderati a più dispositivi.In this section, you create a .NET console app (using C#) that uses jobs to call the lockDoor direct method and send desired property updates to multiple devices.

  1. In Visual Studio aggiungere un progetto desktop di Windows classico in Visual C# usando il modello di progetto Applicazione console .In Visual Studio, add a Visual C# Windows Classic Desktop project to the current solution by using the Console Application project template. Assegnare al progetto il nome ScheduleJob.Name the project ScheduleJob.

    Nuovo progetto desktop di Windows classico in Visual C#

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ScheduleJob e quindi scegliere Gestisci pacchetti NuGet.In Solution Explorer, right-click the ScheduleJob project, and then click Manage NuGet Packages....

  3. Nella finestra Gestione pacchetti NuGet selezionare Esplora, cercare microsoft.azure.devices, selezionare Installa per installare il pacchetto Microsoft.Azure.Devices e accettare le condizioni per l'uso.In the NuGet Package Manager window, select Browse, search for microsoft.azure.devices, select Install to install the Microsoft.Azure.Devices package, and accept the terms of use. Questa procedura scarica, installa e aggiunge un riferimento al pacchetto NuGet Azure IoT SDK per servizi e alle relative dipendenze.This step downloads, installs, and adds a reference to the Azure IoT service SDK NuGet package and its dependencies.

    Finestra Gestione pacchetti NuGet

  4. Aggiungere le istruzione using seguenti all'inizio del file Program.cs :Add the following using statements at the top of the Program.cs file:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  5. Aggiungere l'istruzione using seguente se non è già presente nelle istruzioni predefinite.Add the following using statement if not already present in the default statements.

    using System.Threading.Tasks;
    
  6. Aggiungere i campi seguenti alla classe Program .Add the following fields to the Program class. Sostituire il segnaposto con la stringa di connessione dell'hub IoT creato nella sezione precedente.Replace the placeholder with the IoT Hub connection string for the hub that you created in the previous section.

    static string connString = "{iot hub connection string}";
    static ServiceClient client;
    static JobClient jobClient;
    
  7. Aggiungere il metodo seguente alla classe Program :Add the following method to the Program class:

    public static async Task MonitorJob(string jobId)
    {
        JobResponse result;
        do
        {
            result = await jobClient.GetJobAsync(jobId);
            Console.WriteLine("Job Status : " + result.Status.ToString());
            Thread.Sleep(2000);
        } while ((result.Status != JobStatus.Completed) && (result.Status != JobStatus.Failed));
    }
    
  8. Aggiungere il metodo seguente alla classe Program :Add the following method to the Program class:

    public static async Task StartMethodJob(string jobId)
    {
        CloudToDeviceMethod directMethod = new CloudToDeviceMethod("lockDoor", TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5));
    
        JobResponse result = await jobClient.ScheduleDeviceMethodAsync(jobId,
            "deviceId='myDeviceId'",
            directMethod,
            DateTime.Now,
            10);
    
        Console.WriteLine("Started Method Job");
    }
    
  9. Aggiungere il metodo seguente alla classe Program :Add the following method to the Program class:

    public static async Task StartTwinUpdateJob(string jobId)
    {
        var twin = new Twin();
        twin.Properties.Desired["Building"] = "43";
        twin.Properties.Desired["Floor"] = "3";
        twin.ETag = "*";
    
        JobResponse result = await jobClient.ScheduleTwinUpdateAsync(jobId,
            "deviceId='myDeviceId'",
            twin,
            DateTime.Now,
            10);
    
        Console.WriteLine("Started Twin Update Job");
    }
    
  10. Aggiungere infine le righe seguenti al metodo Main :Finally, add the following lines to the Main method:

    jobClient = JobClient.CreateFromConnectionString(connString);
    
    string methodJobId = Guid.NewGuid().ToString();
    
    StartMethodJob(methodJobId);
    MonitorJob(methodJobId).Wait();
    Console.WriteLine("Press ENTER to run the next job.");
    Console.ReadLine();
    
    string twinUpdateJobId = Guid.NewGuid().ToString();
    
    StartTwinUpdateJob(twinUpdateJobId);
    MonitorJob(twinUpdateJobId).Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  11. In Esplora soluzioni aprire Imposta progetti di avvio e assicurarsi che Azione per il progetto ScheduleJob sia impostata su Avvio.In the Solution Explorer, open the Set StartUp projects... and make sure the Action for ScheduleJob project is Start. Compilare la soluzione.Build the solution.

Creare un'app di dispositivo simulatoCreate a simulated device app

In questa sezione si crea un'app console Node.js che risponde a un metodo diretto chiamato dal cloud, che attiva un riavvio del dispositivo simulato e usa le proprietà segnalate per abilitare le query del dispositivo gemello che consentono di identificare i dispositivi e di sapere quando sono stati riavviati l'ultima volta.In this section, you create a Node.js console app that responds to a direct method called by the cloud, which triggers a simulated device reboot and uses the reported properties to enable device twin queries to identify devices and when they last rebooted.

  1. Creare una nuova cartella vuota chiamata simDevice.Create a new empty folder called simDevice. Nella cartella simDevice creare un file package.json eseguendo questo comando al prompt dei comandi.In the simDevice folder, create a package.json file using the following command at your command prompt. Accettare tutte le impostazioni predefinite:Accept all the defaults:

    npm init
    
  2. Al prompt dei comandi nella cartella simDevice digitare il comando seguente per installare i pacchetti azure-iot-device e azure-iot-device-mqtt:At your command prompt in the simDevice folder, run the following command to install the azure-iot-device and azure-iot-device-mqtt packages:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Con un editor di testo creare un nuovo file simDevice.js nella cartella simDevice.Using a text editor, create a new simDevice.js file in the simDevice folder.

  4. Aggiungere le istruzioni "require" seguenti all'inizio del file simDevice.js:Add the following 'require' statements at the start of the simDevice.js file:

    'use strict';
    
    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-mqtt').Mqtt;
    
  5. Aggiungere una variabile connectionString e usarla per creare un'istanza Client.Add a connectionString variable and use it to create a Client instance. Assicurarsi di sostituire i segnaposto con valori appropriati per l'installazione.Make sure to replace the placeholders with values appropriate to your setup.

    var connectionString = 'HostName={youriothostname};DeviceId={yourdeviceid};SharedAccessKey={yourdevicekey}';
    var client = Client.fromConnectionString(connectionString, Protocol);
    
  6. Aggiungere la funzione seguente per gestire il metodo lockDoor.Add the following function to handle the lockDoor method.

    var onLockDoor = function(request, response) {
    
        // Respond the cloud app for the direct method
        response.send(200, function(err) {
            if (!err) {
                console.error('An error occured when sending a method response:\n' + err.toString());
            } else {
                console.log('Response to method \'' + request.methodName + '\' sent successfully.');
            }
        });
    
        console.log('Locking Door!');
    };
    
  7. Aggiungere il codice seguente per registrare il gestore per il metodo lockDoor.Add the following code to register the handler for the lockDoor method.

    client.open(function(err) {
        if (err) {
            console.error('Could not connect to IotHub client.');
        }  else {
            console.log('Client connected to IoT Hub.  Waiting for lockDoor direct method.');
            client.onDeviceMethod('lockDoor', onLockDoor);
        }
    });
    
  8. Salvare e chiudere il file simDevice.js.Save and close the simDevice.js file.

Nota

Per semplicità, in questa esercitazione non si implementa alcun criterio di ripetizione dei tentativi.To keep things simple, this tutorial does not implement any retry policy. Nel codice di produzione è consigliabile implementare criteri per i tentativi, ad esempio un backoff esponenziale, come illustrato nell'articolo di MSDN Transient Fault Handling (Gestione degli errori temporanei).In production code, you should implement retry policies (such as an exponential backoff), as suggested in the MSDN article Transient Fault Handling.

Eseguire le appRun the apps

A questo punto è possibile eseguire le app.You are now ready to run the apps.

  1. Al prompt dei comandi nella cartella simDevice eseguire questo comando per iniziare l'ascolto del metodo diretto di riavvio.At the command prompt in the simDevice folder, run the following command to begin listening for the reboot direct method.

    node simDevice.js
    
  2. Eseguire l'app console C# ScheduleJob facendo clic con il pulsante destro del mouse sul progetto ScheduleJob, quindi selezionando Debug e Avvia nuova istanza.Run the C# console app ScheduleJob by right-clicking on the ScheduleJob project, then selecting Debug and Start new instance.

  3. L'output viene visualizzato sia dal dispositivo che dalle app back-end.You see the output from both device and back-end apps.

    Eseguire le app per pianificare i processi

Passaggi successiviNext steps

In questa esercitazione è stato usato un processo per pianificare un metodo diretto in un dispositivo e aggiornare le proprietà di un dispositivo gemello.In this tutorial, you used a job to schedule a direct method to a device and the update of the device twin's properties.

Per altre informazioni sull'hub IoT e sui modelli di gestione dei dispositivi, ad esempio in modalità remota tramite l'aggiornamento del firmware air, vedere Esercitazione: Come eseguire un aggiornamento del firmware.To continue getting started with IoT Hub and device management patterns such as remote over the air firmware update, read Tutorial: How to do a firmware update.

Per altre informazioni sulla distribuzione dell'intelligenza artificiale in dispositivi perimetrali con Azure IoT Edge, vedere la Guida introduttiva di IoT Edge.To learn about deploying AI to edge devices with Azure IoT Edge, see Getting started with IoT Edge.