Dela via


Kom igång med enhetshantering (.NET)

Serverdelsappar kan använda Azure IoT Hub primitiver, till exempel enhetstvillingar och direktmetoder, för att fjärrstarta och övervaka enhetshanteringsåtgärder på enheter. Den här artikeln visar hur en serverdelsapp och en enhetsapp kan arbeta tillsammans för att initiera och övervaka en fjärrenhetsomstart med hjälp av IoT Hub.

Anteckning

Funktionerna som beskrivs i den här artikeln är endast tillgängliga på standardnivån för IoT Hub. Mer information om nivåerna basic och standard/kostnadsfri IoT Hub finns i Välja rätt IoT Hub nivå för din lösning.

Använd en direktmetod för att initiera enhetshanteringsåtgärder (till exempel omstart, fabriksåterställning och uppdatering av inbyggd programvara) från en serverdelsapp i molnet. Enheten ansvarar för:

  • Hantera metodbegäran som skickas från IoT Hub.

  • Initiera motsvarande enhetsspecifika åtgärd på enheten.

  • Tillhandahålla statusuppdateringar via rapporterade egenskaper för att IoT Hub.

Du kan använda en serverdelsapp i molnet för att köra frågor för enhetstvillingar för att rapportera om förloppet för dina enhetshanteringsåtgärder.

Den här artikeln visar hur du skapar:

  • SimulateManagedDevice: en simulerad enhetsapp med en direktmetod som startar om enheten och rapporterar den senaste omstartstiden. Direktmetoder anropas från molnet.

  • TriggerReboot: en .NET-konsolapp som anropar direktmetoden i den simulerade enhetsappen via din IoT-hubb. Den visar svaret och uppdaterade rapporterade egenskaper.

Förutsättningar

  • Visual Studio.

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

  • En registrerad enhet. Registrera en i Azure Portal.

  • Kontrollera att port 8883 är öppen i brandväggen. Enhetsexemplet i den här artikeln använder MQTT-protokollet, som kommunicerar via port 8883. Den här porten kan blockeras i vissa företags- och utbildningsnätverksmiljöer. Mer information och sätt att kringgå det här problemet finns i Ansluta till IoT Hub (MQTT).

Skapa en enhetsapp med en direktmetod

I det här avsnittet får du:

  • Skapa en .NET-konsolapp som svarar på en direktmetod som anropas av molnet.

  • Utlös en omstart av simulerad enhet.

  • Använd de rapporterade egenskaperna för att aktivera enhetstvillingfrågor för att identifiera enheter och när de senast startades om.

Följ dessa steg för att skapa den simulerade enhetsappen:

  1. Öppna Visual Studio och välj Skapa ett nytt projekt, leta upp och välj sedan projektmallen Konsolapp (.NET Framework) och välj sedan Nästa.

  2. I Konfigurera det nya projektet namnger du projektet SimulateManagedDevice och väljer sedan Nästa.

    Skärmbild som visar hur du namnger ett nytt Visual Studio-projekt.

  3. Behåll standardversionen .NET Framework och välj sedan Skapa.

  4. I Solution Explorer högerklickar du på det nya Projektet SimulateManagedDevice och väljer sedan Hantera NuGet-paket.

  5. Välj Bläddra och sök sedan efter och välj Microsoft.Azure.Devices.Client. Välj installera.

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

    Det här steget laddar ned, installerar och lägger till en referens till Azure IoT-enhetens SDK NuGet-paket och dess beroenden.

  6. Lägg till följande using -instruktioner överst i filen Program.cs :

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    
  7. Lägg till följande fält i klassen Program. {device connection string} Ersätt platshållarvärdet med enhetsanslutningssträngen som du såg när du registrerade en enhet i IoT Hub:

    static string DeviceConnectionString = "{device connection string}";
    static DeviceClient Client = null;
    
  8. Lägg till följande för att implementera direktmetoden på enheten:

    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. Lägg slutligen till följande kod i Main-metoden för att öppna anslutningen till din IoT-hubb och initiera metodlyssnaren:

    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. I Solution Explorer högerklickar du på din lösning och väljer sedan Ställ in startprojekt.

  11. För Startprojekt för vanliga egenskaper> väljer du Enskilt startprojekt och sedan projektet SimulateManagedDevice. Klicka på OK för att spara ändringarna.

  12. Välj Skapa>bygglösning.

Anteckning

För att hålla det enkelt implementerar den här artikeln inte någon återförsöksprincip. I produktionskoden bör du implementera återförsöksprinciper (till exempel en exponentiell backoff), som föreslås i Hantering av tillfälliga fel.

Hämta IoT Hub-anslutningssträngen

I den här artikeln skapar du en serverdelstjänst som anropar en direktmetod på en enhet. Om du vill anropa en direktmetod på en enhet via IoT Hub behöver din tjänst behörighet för tjänstanslutning. Som standard skapas varje IoT Hub med en princip för delad åtkomst med namnet service som ger den här behörigheten.

Så här hämtar du IoT Hub anslutningssträngen för tjänstprincipen:

  1. I Azure Portal väljer du Resursgrupper. Välj den resursgrupp där hubben finns och välj sedan hubben i listan över resurser.

  2. I fönstret till vänster i IoT-hubben väljer du Principer för delad åtkomst.

  3. I listan över principer väljer du tjänstprincipen .

  4. Kopiera den primära anslutningssträngen och spara värdet.

Skärmbild som visar hur du hämtar anslutningssträngen från din IoT Hub i Azure Portal.

Mer information om IoT Hub principer och behörigheter för delad åtkomst finns i Åtkomstkontroll och behörigheter.

Skapa en tjänstapp för att utlösa en omstart

I det här avsnittet skapar du en .NET-konsolapp med C#, som initierar en fjärromstart på en enhet med hjälp av en direktmetod. Appen använder enhetstvillingfrågor för att identifiera den senaste omstartstiden för enheten.

  1. Öppna Visual Studio och välj Skapa ett nytt projekt.

  2. I Skapa ett nytt projekt letar du upp och väljer projektmallen Konsolapp (.NET Framework) och väljer sedan Nästa.

  3. I Konfigurera det nya projektet namnger du projektet TriggerReboot och väljer sedan Nästa.

    Skärmbild som visar hur du konfigurerar ett nytt Visual Studio-projekt.

  4. Acceptera standardversionen av .NET Framework och välj sedan Skapa för att skapa projektet.

  5. I Solution Explorer högerklickar du på projektet TriggerReboot och väljer sedan Hantera NuGet-paket.

  6. Välj Bläddra och sök sedan efter och välj Microsoft.Azure.Devices. Välj Installera för att installera paketet Microsoft.Azure.Devices .

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

    Det här steget laddar ned, installerar och lägger till en referens till Azure IoT-tjänstens SDK NuGet-paket och dess beroenden.

  7. Lägg till följande using -instruktioner överst i filen Program.cs :

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  8. Lägg till följande fält i klassen Program. {iot hub connection string} Ersätt platshållarvärdet med den IoT Hub anslutningssträng som du kopierade tidigare i Hämta IoT Hub-anslutningssträngen.

    static RegistryManager registryManager;
    static string connString = "{iot hub connection string}";
    static ServiceClient client;
    static string targetDevice = "myDeviceId";
    
  9. Lägg till följande metod i klassen Program. Den här koden hämtar enhetstvillingen för den omstartande enheten och matar ut de rapporterade egenskaperna.

    public static async Task QueryTwinRebootReported()
    {
        Twin twin = await registryManager.GetTwinAsync(targetDevice);
        Console.WriteLine(twin.Properties.Reported.ToJson());
    }
    
  10. Lägg till följande metod i klassen Program. Den här koden initierar omstarten på enheten med hjälp av en direktmetod.

    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. Slutligen lägger du till följande rader till Main-metoden:

    registryManager = RegistryManager.CreateFromConnectionString(connString);
    StartReboot().Wait();
    QueryTwinRebootReported().Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  12. Välj Skapa>bygglösning.

Anteckning

Den här artikeln utför endast en enda fråga för enhetens rapporterade egenskaper. I produktionskoden rekommenderar vi avsökning för att identifiera ändringar i de rapporterade egenskaperna.

Kör apparna

Nu är du redo att köra apparna.

  1. Om du vill köra .NET-enhetsappen SimulateManagedDevice högerklickar du på projektet SimulateManagedDevice i Solution Explorer, väljer Felsök och väljer sedan Starta ny instans. Appen bör börja lyssna efter metodanrop från din IoT-hubb.

  2. När enheten är ansluten och väntar på metodanrop högerklickar du på projektet TriggerReboot , väljer Felsök och väljer sedan Starta ny instans.

    Du bör se Omstart skrivet i SimulatedManagedDevice-konsolen och de rapporterade egenskaperna för enheten, som inkluderar den senaste omstartstiden, skrivna i TriggerReboot-konsolen .

    Kör tjänst- och enhetsapp

Anpassa och utöka enhetshanteringsåtgärderna

Dina IoT-lösningar kan utöka den definierade uppsättningen med enhetshanteringsmönster eller aktivera anpassade mönster med hjälp av enhetstvillingen och primitiva metoder från moln till enhet. Andra exempel på åtgärder för enhetshantering är fabriksåterställning, uppdatering av inbyggd programvara, programuppdatering, energisparfunktioner, nätverks- och anslutningshantering samt datakryptering.

Fönster för enhetsunderhåll

Vanligtvis konfigurerar du enheter för att utföra åtgärder i taget som minimerar avbrott och stilleståndstid. Enhetsunderhållsperioder är ett vanligt mönster för att definiera när en enhet ska uppdatera sin konfiguration. Dina serverdelslösningar kan använda önskade egenskaper för enhetstvillingen för att definiera och aktivera en princip på enheten som aktiverar en underhållsperiod. När en enhet tar emot principen för underhållsperiod kan den använda den rapporterade egenskapen för enhetstvillingen för att rapportera status för principen. Serverdelsappen kan sedan använda enhetstvillingfrågor för att intyga efterlevnad av enheter och varje princip.

Nästa steg

I den här artikeln använde du en direktmetod för att utlösa en fjärromstart på en enhet. Du använde de rapporterade egenskaperna för att rapportera den senaste omstartstiden från enheten och frågade enhetstvillingen för att identifiera enhetens senaste omstartstid från molnet.

ToTo continue getting started with IoT Hub and device management patterns such as end-to-end image-based update in Device Update for Azure IoT Hub article using the Raspberry Pi 3 B+ Reference Image.ToTo continue getting started with IoT Hub and device management patterns such as end-to-end image-based update in Device Update for Azure IoT Hub article using the Raspberry Pi 3 B+ Reference Image.

Information om hur du utökar IoT-lösnings- och schemametodanrop på flera enheter finns i Schemalägga och sända jobb.