Compartir a través de


Introducción a la identidad de módulo y los módulos gemelos de IoT Hub con el Azure Portal y un dispositivo .NET

Las identidades de módulo y los módulos gemelos son similares a la identidad de dispositivo y el dispositivo gemelo de Azure IoT Hub, pero ofrecen granularidad más fina. Aunque la identidad del dispositivo y los dispositivos gemelos de Azure IoT Hub permiten que la aplicación back-end configure un dispositivo y proporcionan visibilidad sobre las condiciones de este, la identidad del módulo y los módulos gemelos proporcionan estas funcionalidades para los componentes individuales de un dispositivo. En los dispositivos compatibles con varios componentes, como dispositivos con sistema operativo o firmware, identidades de módulo y módulos gemelos permiten la configuración individual y condiciones específicas por componente.

Nota

Las características descritas en este artículo solo están disponibles en el nivel estándar de IoT Hub. Para obtener más información sobre los niveles Básico y Estándar o Gratis de IoT Hub, consulte Elección del nivel adecuado de IoT Hub para la solución.

En este artículo, aprenderá a:

  • Crear una identidad de módulo en el portal.

  • Usar el SDK de dispositivo de .NET para actualizar el módulo gemelo desde el dispositivo.

Nota

Consulte los SDK de Azure IoT para obtener más información sobre las herramientas de SDK disponibles para compilar aplicaciones de dispositivo y back-end.

Prerrequisitos

  • Visual Studio.

  • Una instancia de IoT Hub. Cree uno con la CLI o el Azure Portal.

  • Dispositivo registrado. Registre uno en el Azure Portal.

Autenticación de módulos

Puede utilizar claves simétricas o certificados X.509 para autenticar las identidades de los módulos. Para la autenticación de certificados X.509, el certificado del módulo debe tener su nombre común (CN) formateado como CN=<deviceid>/<moduleid>. Por ejemplo:

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

Creación de una identidad de módulo en el portal

En una identidad del dispositivo se pueden crear hasta 20 identidades de módulo. Para agregar una identidad, siga estos pasos:

  1. En el dispositivo existente del Azure Portal, elija Agregar identidad de módulo para crear la primera identidad del módulo.

  2. Escriba el nombre myFirstModule. Guarde su identidad de módulo.

    Captura de pantalla que muestra la página «Detalles de identidad de módulo».

    La nueva identidad de módulo aparece en la parte inferior de la pantalla. Selecciónela para ver los detalles de la identidad del módulo.

    Captura de pantalla que muestra el menú Detalles de identidad de módulo.

Guarde la Cadena de conexión (clave principal). Se utilizará en la siguiente sección para configurar el módulo en el dispositivo en una aplicación de consola.

Actualización del módulo gemelo con el SDK de dispositivo .NET

Ahora vamos a comunicarnos a la nube desde tu dispositivo simulado. Al crearse una identidad de módulo, se crea también un módulo gemelo en IoT Hub de manera implícita. En esta sección se crea una aplicación de consola .NET en el dispositivo simulado que actualiza las propiedades notificadas del módulo gemelo.

Creación de un proyecto de Visual Studio

Para crear una aplicación que actualice las propiedades notificadas para el módulo gemelo, siga estos pasos:

  1. En Visual Studio, seleccione Crear un proyecto nuevo, Aplicación de consola (.NET Framework) y luego Siguiente.

  2. En Configure su nuevo proyecto, escriba UpdateModuleTwinReportedProperties como Nombre de proyecto. Seleccione Next (Siguiente) para continuar.

    Captura de pantalla que muestra la ventana emergente

  3. Mantenga la versión predeterminada de .NET Framework y seleccione Crear.

Instalación del SDK de dispositivo más reciente de .NET de Azure IoT Hub

La identidad del módulo y el módulo gemelo solo están disponibles en los SDK de dispositivo de la versión preliminar de IoT Hub. Para instalarlo, siga estos pasos:

  1. En Visual Studio, abra Herramientas>Administrador de paquetes NuGet>Administrar paquetes NuGet para la solución.

  2. Seleccione Examinar y luego seleccione Incluir versión preliminar. Busque Microsoft.Azure.Devices.Client. Seleccione la versión más reciente e instale.

    Captura de pantalla que muestra cómo instalar Microsoft.Azure.Devices.Client.

    Ahora tendrá acceso a todas las características del módulo.

Cree la aplicación de consola UpdateModuleTwinReportedProperties

Para crear la aplicación, siga estos pasos:

  1. Agregue las siguientes instrucciones using al principio del archivo Program.cs :
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
  1. Agregue los campos siguientes a la clase Program . Sustituya el valor del marcador de posición por la cadena de conexión del módulo que guardó anteriormente.
private const string ModuleConnectionString = "<Your module connection string>";
private static ModuleClient Client = null;
  1. Agregue el método OnDesiredPropertyChanged siguiente a la clase 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. Por último, reemplace el método Main por el código siguiente:
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}");
}

Puede compilar y ejecutar esta aplicación mediante F5.

Ahora ya sabe cómo recuperar el módulo gemelo y actualizar las propiedades reportadas con el protocolo AMQP.

Pasos siguientes

Para continuar la introducción a IoT Hub y explorar otros escenarios de IoT, consulte: