Condividi tramite


Creare l'identità del modulo e i moduli gemelli dell'hub IoT con il portale di Azure e l'SDK per dispositivi .NET

Le identità del modulo e i moduli gemelli sono simili alle identità del dispositivo e ai dispositivi gemelli dell'hub IoT di Azure, ma offrono una granularità superiore. Mentre l'identità del dispositivo e il dispositivo gemello dell'hub IoT di Azure consentono all'applicazione back-end di configurare un dispositivo e forniscono visibilità sulle condizioni del dispositivo, l'identità del modulo e il modulo gemello forniscono queste funzionalità per i singoli componenti di un dispositivo. Nei dispositivi con più componenti, ad esempio i dispositivi di sistema operativo o i dispositivi firmware, le identità e i gemelli dei moduli permettono la configurazione e le condizioni isolate per ogni componente.

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.

In questo articolo verrà spiegato come:

  • Creare un'identità del modulo nel portale.

  • Usare l'SDK del dispositivo .NET per aggiornare il modulo gemello dal dispositivo.

Nota

Vedere Azure IoT SDK per altre informazioni sugli strumenti SDK disponibili per creare app sia per dispositivi che back-end.

Prerequisiti

  • Visual Studio.

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

  • Un dispositivo registrato nell'hub IoT. Se non si ha un dispositivo nell'hub IoT, seguire la procedura descritta in Registrare un dispositivo.

Autenticazione modulo

È possibile usare chiavi simmetriche o certificati X.509 per autenticare le identità del modulo. Per l'autenticazione del certificato X.509, il certificato del modulo deve avere il nome comune (CN) formattato come CN=<deviceid>/<moduleid>. Ad esempio:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

Creare un'identità del modulo nel portale

In una identità del dispositivo è possibile creare fino a 20 identità del modulo. Per aggiungere un'identità, seguire questa procedura:

  1. Dal dispositivo esistente nel portale di Azure scegliere Aggiungi identità modulo per creare la prima identità del modulo.

  2. Immettere il nome myFirstModule. Salvare l'identità del modulo.

  3. La nuova identità del modulo viene visualizzata nella parte inferiore della schermata. Selezionarla per visualizzarne i dettagli.

  4. Salvare la Stringa di connessione (chiave primaria). Viene usata nella sezione successiva per configurare il modulo nel dispositivo in un'app console.

    Screenshot che mostra il menu Dettagli identità modulo.

Aggiornare il modulo gemello usando l'SDK per dispositivi .NET

A questo punto è possibile comunicare con il cloud dal dispositivo simulato. Una volta creata un'identità del modulo, viene implicitamente creato anche un modulo gemello nell'hub IoT. In questa sezione, nel dispositivo simulato viene creata un'app console .NET che aggiorna le proprietà segnalate del modulo gemello.

Creare un progetto di Visual Studio

Per creare un'app che aggiorna il modulo gemello, seguire questa procedura:

  1. In Visual Studio selezionare Crea un nuovo progetto, quindi scegliere App console (.NET Framework) e selezionare Avanti.

  2. In Configura il nuovo progetto immettere UpdateModuleTwinReportedProperties come Nome progetto. Selezionare Avanti per continuare.

    Screenshot che mostra il popup

  3. Mantenere .NET Framework predefinito, quindi selezionare Crea.

Installare la versione più recente di Azure IoT Hub SDK per dispositivi .NET

Le funzionalità di identità e modulo gemello del modulo sono disponibili solo negli SDK per dispositivi non rilasciati nell'hub IoT. Per installare l'estensione, seguire questa procedura:

  1. In Visual Studio aprire Strumenti>Gestione pacchetti NuGet>Gestisci pacchetti NuGet per la soluzione.

  2. Selezionare Sfoglia e quindi selezionare Includi versione preliminare. Cercare Microsoft.Azure.Devices.Client. Selezionare la versione più recente e installarla.

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

    Ora si ha accesso a tutte le funzionalità dei moduli.

Creare un'app console UpdateModuleTwinReportedProperties

Importante

Questo articolo include la procedura per connettere un dispositivo usando una firma di accesso condiviso, altrimenti chiamata autenticazione con chiave simmetrica. Questo metodo di autenticazione è comodo per i test e le valutazioni, ma l'autenticazione tramite certificati X.509 rappresenta un approccio più sicuro. Per scoprire di più, vedere Procedure consigliate per la sicurezza > Sicurezza della connessione.

Per creare l'app, seguire questa procedura:

  1. Aggiungere le istruzione using seguenti all'inizio del file Program.cs :
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
  1. Aggiungere i campi seguenti alla classe Program . Sostituire il valore del segnaposto con la stringa di connessione del modulo salvata in precedenza.
private const string ModuleConnectionString = "<Your module connection string>";
private static ModuleClient Client = null;
  1. Aggiungere il metodo OnDesiredPropertyChanged seguente alla classe Program:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext)
    {
        Console.WriteLine("desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
        Console.WriteLine("Sending current time as reported property");
        TwinCollection reportedProperties = new TwinCollection
        {
            ["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.Now
        };

        await Client.UpdateReportedPropertiesAsync(reportedProperties).ConfigureAwait(false);
    }
  1. Sostituire infine il metodo Main con il codice seguente:
static void Main(string[] args)
{
    Microsoft.Azure.Devices.Client.TransportType transport = Microsoft.Azure.Devices.Client.TransportType.Amqp;

    try
    {
        Client = ModuleClient.CreateFromConnectionString(ModuleConnectionString, transport);
        Client.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler);
        Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null).Wait();

        Console.WriteLine("Retrieving twin");
        var twinTask = Client.GetTwinAsync();
        twinTask.Wait();
        var twin = twinTask.Result;
        Console.WriteLine(JsonConvert.SerializeObject(twin));

        Console.WriteLine("Sending app start time as reported property");
        TwinCollection reportedProperties = new TwinCollection();
        reportedProperties["DateTimeLastAppLaunch"] = DateTime.Now;

        Client.UpdateReportedPropertiesAsync(reportedProperties);
    }
    catch (AggregateException ex)
    {
        Console.WriteLine("Error in sample: {0}", ex);
    }

    Console.WriteLine("Waiting for Events.  Press enter to exit...");
    Console.ReadKey();
    Client.CloseAsync().Wait();
}

private static void ConnectionStatusChangeHandler(ConnectionStatus status, ConnectionStatusChangeReason reason)
{
    Console.WriteLine($"Status {status} changed: {reason}");
}

È possibile compilare ed eseguire questa app usando F5.

Ora si conosce come recuperare il modulo gemello e aggiornare le proprietà segnalate con il protocollo AMQP.

Passaggi successivi

Per altre informazioni sulle attività iniziali con l'hub IoT e per esplorare altri scenari IoT, vedere: