Udostępnij za pośrednictwem


Wprowadzenie do zarządzania urządzeniami (.NET)

Aplikacje zaplecza mogą używać elementów pierwotnych usługi Azure IoT Hub, takich jak bliźniacze reprezentacje urządzeń i metody bezpośrednie, do zdalnego uruchamiania i monitorowania akcji zarządzania urządzeniami na urządzeniach. W tym artykule pokazano, jak aplikacja zaplecza i aplikacja urządzenia mogą współpracować w celu zainicjowania i monitorowania ponownego uruchomienia urządzenia zdalnego przy użyciu usługi IoT Hub.

Uwaga

Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa usługi IoT Hub. Aby uzyskać więcej informacji na temat warstw podstawowej i standardowej/bezpłatnej usługi IoT Hub, zobacz Wybieranie odpowiedniej warstwy usługi IoT Hub dla rozwiązania.

Użyj metody bezpośredniej, aby zainicjować akcje zarządzania urządzeniami (takie jak ponowny rozruch, resetowanie do ustawień fabrycznych i aktualizacja oprogramowania układowego) z poziomu aplikacji zaplecza w chmurze. Urządzenie jest odpowiedzialne za:

  • Obsługa żądania metody wysłanego z usługi IoT Hub.

  • Inicjowanie odpowiedniej akcji specyficznej dla urządzenia na urządzeniu.

  • Dostarczanie aktualizacji stanu za pośrednictwem zgłoszonych właściwości do usługi IoT Hub.

Aplikację zaplecza w chmurze można użyć do uruchamiania zapytań bliźniaczych reprezentacji urządzenia w celu raportowania postępu akcji zarządzania urządzeniami.

W tym artykule pokazano, jak utworzyć:

  • SimulateManagedDevice: symulowana aplikacja urządzenia z metodą bezpośrednią, która ponownie uruchamia urządzenie i zgłasza czas ostatniego ponownego uruchomienia. Metody bezpośrednie są wywoływane z chmury.

  • TriggerReboot: aplikacja konsolowa platformy .NET, która wywołuje metodę bezpośrednią w aplikacji urządzenia symulowanego za pośrednictwem centrum IoT. Wyświetla on odpowiedź i zaktualizowane zgłoszone właściwości.

Wymagania wstępne

  • Visual Studio.

  • Centrum IoT. Utwórz go za pomocą interfejsu wiersza polecenia lub witryny Azure Portal.

  • Urządzenie zarejestrowane w centrum IoT Hub. Jeśli nie masz urządzenia w centrum IoT Hub, wykonaj kroki opisane w temacie Rejestrowanie urządzenia.

  • Upewnij się, że port 8883 jest otwarty w zaporze. Przykład urządzenia w tym artykule używa protokołu MQTT, który komunikuje się za pośrednictwem portu 8883. Ten port może zostać zablokowany w niektórych środowiskach sieci firmowych i edukacyjnych. Aby uzyskać więcej informacji i sposobów obejścia tego problemu, zobacz Nawiązywanie połączenia z usługą IoT Hub (MQTT).

Tworzenie aplikacji urządzenia przy użyciu metody bezpośredniej

W tej sekcji omówiono następujące zagadnienia:

  • Utwórz aplikację konsolową platformy .NET, która odpowiada na metodę bezpośrednią wywoływaną przez chmurę.

  • Wyzwalanie symulowanego ponownego rozruchu urządzenia.

  • Użyj zgłoszonych właściwości, aby włączyć zapytania bliźniaczej reprezentacji urządzenia w celu zidentyfikowania urządzeń i ich ostatniego ponownego uruchomienia.

Aby utworzyć aplikację urządzenia symulowanego, wykonaj następujące kroki:

  1. Otwórz program Visual Studio i wybierz pozycję Utwórz nowy projekt, a następnie znajdź i wybierz szablon projektu Aplikacja konsolowa (.NET Framework), a następnie wybierz pozycję Dalej.

  2. W obszarze Konfigurowanie nowego projektu nadaj projektowi nazwę SimulateManagedDevice, a następnie wybierz pozycję Dalej.

    Zrzut ekranu przedstawiający sposób nazywania nowego projektu programu Visual Studio.

  3. Zachowaj domyślną wersję programu .NET Framework, a następnie wybierz pozycję Utwórz.

  4. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nowy projekt SimulateManagedDevice, a następnie wybierz polecenie Zarządzaj pakietami NuGet.

  5. Wybierz pozycję Przeglądaj, a następnie wyszukaj i wybierz pozycję Microsoft.Azure.Devices.Client. Wybierz Zainstaluj.

    Zrzut ekranu przedstawiający sposób instalowania pakietu Microsoft.Azure.Devices.Client.

    Ten krok pobiera, instaluje i dodaje odwołanie do pakietu NuGet zestawu SDK urządzeń usługi Azure IoT oraz jego zależności.

  6. Dodaj następujące instrukcje using w górnej części pliku Program.cs:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    
  7. Dodaj następujące pola do klasy Program: Zastąp wartość symbolu {device connection string} zastępczego urządzeniem parametry połączenia, które zostało wyświetlone podczas rejestrowania urządzenia w usłudze IoT Hub:

    static string DeviceConnectionString = "{device connection string}";
    static DeviceClient Client = null;
    
  8. Dodaj następujące elementy, aby zaimplementować metodę bezpośrednią na urządzeniu:

    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. Na koniec dodaj następujący kod do metody Main , aby otworzyć połączenie z centrum IoT Hub i zainicjować odbiornik metody:

    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. W Eksplorator rozwiązań kliknij rozwiązanie prawym przyciskiem myszy, a następnie wybierz polecenie Ustaw projekty startowe.

  11. W obszarze Projekt startowy typowych właściwości>wybierz pojedynczy projekt startowy, a następnie wybierz projekt SimulateManagedDevice. Aby zapisać zmiany, wybierz pozycję OK.

  12. Wybierz pozycję Kompiluj rozwiązanie kompilacji>.

Uwaga

Aby zachować prostotę, ten artykuł nie implementuje żadnych zasad ponawiania prób. W kodzie produkcyjnym należy zaimplementować zasady ponawiania prób (takie jak wycofywanie wykładnicze), zgodnie z sugestią w obsłudze błędów przejściowych.

Pobieranie parametry połączenia centrum IoT

W tym artykule utworzysz usługę zaplecza, która wywołuje metodę bezpośrednią na urządzeniu. Aby wywołać metodę bezpośrednią na urządzeniu za pośrednictwem usługi IoT Hub, usługa wymaga uprawnień połączenia z usługą. Domyślnie każde centrum IoT Hub jest tworzone przy użyciu zasad dostępu współdzielonego o nazwie usługa , która przyznaje to uprawnienie.

Aby uzyskać parametry połączenia usługi IoT Hub dla zasad usługi, wykonaj następujące kroki:

  1. W witrynie Azure Portal wybierz pozycję Grupy zasobów. Wybierz grupę zasobów, w której znajduje się centrum, a następnie wybierz centrum z listy zasobów.

  2. W okienku po lewej stronie centrum IoT hub wybierz pozycję Zasady dostępu współdzielonego.

  3. Z listy zasad wybierz zasady usługi .

  4. Skopiuj parametry połączenia podstawową i zapisz wartość.

Zrzut ekranu przedstawiający sposób pobierania parametry połączenia z usługi IoT Hub w witrynie Azure Portal.

Aby uzyskać więcej informacji na temat zasad dostępu współdzielonego i uprawnień usługi IoT Hub, zobacz Kontrola dostępu i uprawnienia.

Tworzenie aplikacji usługi w celu wyzwolenia ponownego uruchomienia

W tej sekcji utworzysz aplikację konsolową platformy .NET przy użyciu języka C#, która inicjuje zdalny ponowny rozruch na urządzeniu przy użyciu metody bezpośredniej. Aplikacja używa zapytań bliźniaczych reprezentacji urządzenia do odnajdywania czasu ostatniego ponownego uruchomienia tego urządzenia.

  1. Otwórz program Visual Studio i wybierz pozycję Utwórz nowy projekt.

  2. W obszarze Tworzenie nowego projektu znajdź i wybierz szablon projektu Aplikacja konsolowa (.NET Framework), a następnie wybierz przycisk Dalej.

  3. W obszarze Konfigurowanie nowego projektu nadaj projektowi nazwę TriggerReboot, a następnie wybierz pozycję Dalej.

    Zrzut ekranu przedstawiający sposób konfigurowania nowego projektu programu Visual Studio.

  4. Zaakceptuj domyślną wersję programu .NET Framework, a następnie wybierz pozycję Utwórz , aby utworzyć projekt.

  5. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt TriggerReboot, a następnie wybierz polecenie Zarządzaj pakietami NuGet.

  6. Wybierz pozycję Przeglądaj, a następnie wyszukaj i wybierz pozycję Microsoft.Azure.Devices. Wybierz pozycję Zainstaluj , aby zainstalować pakiet Microsoft.Azure.Devices .

    Zrzut ekranu przedstawiający sposób instalowania pakietu Microsoft.Azure.Devices.

    Ten krok pobiera, instaluje i dodaje odwołanie do pakietu NuGet zestawu SDK usługi Azure IoT oraz jego zależności.

  7. Dodaj następujące instrukcje using w górnej części pliku Program.cs:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  8. Dodaj następujące pola do klasy Program: Zastąp wartość symbolu {iot hub connection string} zastępczego wartością parametry połączenia usługi IoT Hub skopiowaną wcześniej w sekcji Pobieranie parametry połączenia centrum IoT Hub.

    static RegistryManager registryManager;
    static string connString = "{iot hub connection string}";
    static ServiceClient client;
    static string targetDevice = "myDeviceId";
    
  9. Dodaj następującą metodę do klasy Program. Ten kod pobiera bliźniacze reprezentację urządzenia na potrzeby ponownego uruchamiania urządzenia i generuje zgłoszone właściwości.

    public static async Task QueryTwinRebootReported()
    {
        Twin twin = await registryManager.GetTwinAsync(targetDevice);
        Console.WriteLine(twin.Properties.Reported.ToJson());
    }
    
  10. Dodaj następującą metodę do klasy Program. Ten kod inicjuje ponowny rozruch na urządzeniu przy użyciu metody bezpośredniej.

    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. Na koniec dodaj następujące wiersze do metody Główne:

    registryManager = RegistryManager.CreateFromConnectionString(connString);
    StartReboot().Wait();
    QueryTwinRebootReported().Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  12. Wybierz pozycję Kompiluj rozwiązanie kompilacji>.

Uwaga

Ten artykuł wykonuje tylko jedno zapytanie dotyczące zgłoszonych właściwości urządzenia. W kodzie produkcyjnym zalecamy sondowanie w celu wykrycia zmian we zgłoszonych właściwościach.

Uruchamianie aplikacji

Teraz możesz przystąpić do uruchamiania aplikacji.

  1. Aby uruchomić aplikację urządzenia .NET SimulateManagedDevice, w Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt SimulateManagedDevice, wybierz pozycję Debuguj, a następnie wybierz polecenie Uruchom nowe wystąpienie. Aplikacja powinna zacząć nasłuchiwać wywołań metod z centrum IoT Hub.

  2. Po nawiązaniu połączenia urządzenie i oczekiwaniu na wywołania metody kliknij prawym przyciskiem myszy projekt TriggerReboot, wybierz pozycję Debuguj, a następnie wybierz polecenie Uruchom nowe wystąpienie.

    W konsoli SimulatedManagedDevice powinna zostać wyświetlona pozycja Ponowne uruchomieniei zgłoszone właściwości urządzenia, które obejmują czas ostatniego ponownego uruchomienia, zapisane w konsoli TriggerReboot.

    Uruchamianie aplikacji usługi i urządzenia

Dostosowywanie i rozszerzanie akcji zarządzania urządzeniami

Twoje rozwiązania IoT mogą rozszerzać zdefiniowany zestaw wzorców zarządzania urządzeniami lub włączać wzorce niestandardowe przy użyciu bliźniaczej reprezentacji urządzenia i typów pierwotnych metody chmury do urządzenia. Inne przykłady akcji zarządzania urządzeniami obejmują resetowanie do ustawień fabrycznych, aktualizację oprogramowania, aktualizację oprogramowania, zarządzanie energią, zarządzanie siecią i łącznością oraz szyfrowanie danych.

Okna obsługi urządzenia

Zazwyczaj urządzenia są konfigurowane do wykonywania akcji w czasie, co minimalizuje przerwy i przestoje. Okna obsługi urządzeń są często używanym wzorcem do definiowania czasu aktualizacji konfiguracji urządzenia. Rozwiązania zaplecza mogą używać żądanych właściwości bliźniaczej reprezentacji urządzenia do definiowania i aktywowania zasad na urządzeniu, które umożliwiają okno obsługi. Gdy urządzenie odbiera zasady okna obsługi, może użyć zgłaszanej właściwości bliźniaczej reprezentacji urządzenia, aby zgłosić stan zasad. Aplikacja zaplecza może następnie używać zapytań bliźniaczych reprezentacji urządzenia, aby potwierdzić zgodność urządzeń i poszczególnych zasad.

Następne kroki

W tym artykule użyto metody bezpośredniej do wyzwolenia zdalnego ponownego rozruchu na urządzeniu. Użyto zgłoszonych właściwości, aby zgłosić ostatni czas ponownego rozruchu z urządzenia i wykonano zapytanie dotyczące bliźniaczej reprezentacji urządzenia w celu odnalezienia czasu ostatniego ponownego uruchomienia urządzenia z chmury.

Aby kontynuować rozpoczynanie pracy z usługą IoT Hub i wzorcami zarządzania urządzeniami, takimi jak kompleksowa aktualizacja obrazu oparta na obrazach w artykule Device Update for Azure IoT Hub using the Raspberry Pi 3 B+ Reference Image (Aktualizacja urządzenia dla usługi Azure IoT Hub przy użyciu obrazu referencyjnego urządzenia Raspberry Pi 3 B+).

Aby dowiedzieć się, jak rozszerzyć rozwiązanie IoT i zaplanować wywołania metod na wielu urządzeniach, zobacz Planowanie i emisja zadań.