Dela via


Kom igång med IoT Hub-modulens identitet och modultvilling med hjälp av Azure-portalen och en .NET-enhet

Modulidentiteter och modultvillingar liknar enhetsidentitet och enhetstvilling i Azure IoT Hub, men har en större detaljnivå. Även om Azure IoT Hub-enhetsidentiteten och enhetstvillingen gör det möjligt för serverdelsprogrammet att konfigurera en enhet och ge insyn i enhetens villkor, ger en modulidentitet och modultvilling dessa funktioner för enskilda komponenter på en enhet. På kompatibla enheter med flera komponenter, till exempel operativsystemenheter eller enheter för inbyggd programvara, tillåter modulidentiteter och modultvillingar isolerade konfigurationer och villkor för varje komponent.

Kommentar

De funktioner som beskrivs i den här artikeln är endast tillgängliga på standardnivån för IoT Hub. Mer information om de grundläggande och standard-/kostnadsfria IoT Hub-nivåerna finns i Välj rätt IoT Hub-nivå för din lösning.

I den här artikeln får du lära dig att:

  • Skapa en modulidentitet i portalen.

  • Använd en .NET-enhets-SDK för att uppdatera modultvillingen från enheten.

Förutsättningar

  • Visual Studio.

  • En IoT-hubb. Skapa en med CLI eller Azure-portalen.

  • En enhet som är registrerad i din IoT-hubb. Om du inte har en enhet i din IoT-hubb följer du stegen i Registrera en enhet.

Modulautentisering

Du kan använda symmetriska nycklar eller X.509-certifikat för att autentisera modulidentiteter. För X.509-certifikatautentisering måste modulens certifikat ha sitt gemensamma namn (CN) formaterat som CN=<deviceid>/<moduleid>. Till exempel:

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

Skapa en modulidentitet i portalen

Inom en enhetsidentitet kan du skapa upp till 20 modulidentiteter. Följ dessa steg för att lägga till en identitet:

  1. Från din befintliga enhet i Azure-portalen väljer du Lägg till modulidentitet för att skapa din första modulidentitet.

  2. Ange namnet myFirstModule. Spara din modulidentitet.

    Skärmbild som visar sidan Modulidentitetsinformation.

    Den nya modulidentiteten visas längst ned på skärmen. Välj den om du vill se information om modulidentitet.

    Skärmbild som visar menyn Modulidentitetsinformation.

Spara anslutningssträngen (primärnyckeln). Du använder den i nästa avsnitt för att konfigurera modulen på enheten i en konsolapp.

Uppdatera modultvillingen med SDK för .NET-enheter

Nu ska vi kommunicera med molnet från din simulerade enhet. När en modulidentitet har skapats skapas en modultvilling implicit i IoT Hub. I det här avsnittet skapar du en .NET-konsolapp på din simulerade enhet som uppdaterar modultvillingens rapporterade egenskaper.

Skapa ett Visual Studio-projekt

Följ dessa steg för att skapa en app som uppdaterar modultvillingen, rapporterade egenskaper:

  1. I Visual Studio väljer du Skapa ett nytt projekt, sedan Konsolapp (.NET Framework) och sedan Nästa.

  2. I Konfigurera det nya projektet anger du UpdateModuleTwinReportedProperties som projektnamn. Klicka på Nästa när du vill fortsätta.

    Skärmbild som visar popup-fönstret

  3. Behåll .NET-standardramverket och välj sedan Skapa.

Installera den senaste Azure IoT Hub .NET-enhets-SDK:n

Funktionerna för modulidentitet och modultvillingar är endast tillgängliga i IoT Hub-förversionen av enhets-SDK:er. Följ dessa steg för att installera det:

  1. Öppna Verktyg>NuGet Upravljač za pakete> Hantera NuGet-paket för lösning i Visual Studio.

  2. Välj Bläddra och välj sedan Inkludera förhandsversion. Sök efter Microsoft.Azure.Devices.Client. Välj den senaste versionen och installera.

    Skärmbild som visar hur du installerar Microsoft.Azure.Devices.Client.

    Nu har du åtkomst till alla modulfunktioner.

Skapa UpdateModuleTwinReportedProperties-konsolappen

Följ dessa steg för att skapa din app:

  1. Lägg till följande using-uttryck överst i Program.cs-filen:
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
  1. Lägg till följande fält i klassen Program. Ersätt platshållarvärdet med modulen niska veze du sparade tidigare.
private const string ModuleConnectionString = "<Your module connection string>";
private static ModuleClient Client = null;
  1. Lägg till följande metod OnDesiredPropertyChanged till klassen 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. Ersätt slutligen main-metoden med följande kod:
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}");
}

Du kan skapa och köra den här appen med hjälp av F5.

Nu vet du hur du hämtar modultvillingen och uppdaterar rapporterade egenskaper med AMQP-protokollet.

Nästa steg

Mer information om hur du kan komma igång med IoT Hub och utforska andra IoT-scenarier finns här: