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

Aplikacje zaplecza mogą używać Azure IoT Hub elementów pierwotnych, 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 IoT Hub.

Uwaga

Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa IoT Hub. Aby uzyskać więcej informacji o warstwach podstawowa i Standardowa/Bezpłatna IoT Hub, zobacz Wybieranie odpowiedniej warstwy 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 wysyłanego z 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 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ć następujące elementy:

  • 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 odpowiedź i zaktualizowane zgłoszone właściwości.

Wymagania wstępne

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 uruchomienia 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 nadawania nazwy nowemu projektowi programu Visual Studio.

  3. Zachowaj domyślną wersję .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 pozycję Zarządzaj pakietami NuGet.

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

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

    Ten krok umożliwia pobranie, zainstalowanie i dodanie odwołania do pakietu NuGet zestawu SDK urządzenia usługi Azure IoT oraz jego zależności.

  6. Dodaj następujące using instrukcje 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 parametrami połączenia urządzenia, które zostały wyświetlone podczas rejestrowania urządzenia w IoT Hub:

    static string DeviceConnectionString = "{device connection string}";
    static DeviceClient Client = null;
    
  8. Dodaj następujące polecenie, 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 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 Typowy projekt startowy właściwości> wybierz pozycję Pojedynczy projekt startowy, a następnie wybierz projekt SimulateManagedDevice. Wybierz przycisk OK, aby zapisać zmiany.

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

Uwaga

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

Pobieranie parametrów 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 IoT Hub, usługa wymaga uprawnienia połączenia z usługą. Domyślnie każda IoT Hub jest tworzona przy użyciu zasad dostępu współdzielonego o nazwie usługa, która przyznaje to uprawnienie.

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

  1. W 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 podstawowe parametry połączenia i zapisz wartość.

Zrzut ekranu przedstawiający sposób pobierania parametrów połączenia z IoT Hub w Azure Portal.

Aby uzyskać więcej informacji na temat IoT Hub zasad dostępu współdzielonego i uprawnień, 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 dla 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ę .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 pozycję 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 umożliwia pobranie, zainstalowanie i dodanie odwołania do pakietu NuGet zestawu SDK usługi Azure IoT oraz jego zależności.

  7. Dodaj następujące using instrukcje 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 parametrami połączenia IoT Hub skopiowanymi wcześniej w sekcji Pobieranie parametrów połączenia centrum IoT.

    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źniaczą 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

W tym artykule wykonano 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.

  2. Po nawiązaniu połączenia z urządzeniem 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 powinien zostać wyświetlony komunikat Ponowne uruchomienie i zgłoszone właściwości urządzenia, które obejmują czas ostatniego ponownego rozruchu, zapisane w konsoli TriggerReboot.

    Uruchamianie aplikacji usług i urządzeń

Dostosowywanie i rozszerzanie akcji zarządzania urządzeniami

Rozwiązania IoT mogą rozszerzać zdefiniowany zestaw wzorców zarządzania urządzeniami lub włączać niestandardowe wzorce przy użyciu bliźniaczej reprezentacji urządzenia i typów pierwotnych metody chmura-urządzenie. 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 odbierze 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 do potwierdzania zgodności 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ć czas ostatniego ponownego uruchomienia urządzenia z urządzenia i wykonano zapytanie dotyczące bliźniaczej reprezentacji urządzenia w celu odnalezienia czasu ostatniego ponownego uruchomienia urządzenia z chmury.

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 (Aby kontynuować rozpoczęcie pracy z wzorcami IoT Hub i zarządzania urządzeniami, takimi jak kompleksowa aktualizacja obrazu opartego na obrazie w usłudze Device Update dla 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ń.