Freigeben über


Erste Schritte mit der Geräteverwaltung (.NET)

Back-End-Apps können Azure IoT Hub-Primitive wie Gerätezwillinge und direkte Methoden verwenden, um Aktionen zur Geräteverwaltung auf Geräten remote zu starten und zu überwachen. In diesem Artikel wird veranschaulicht, wie eine Back-End-App und eine Geräte-App zusammen verwendet werden können, um einen Remoteneustart des Geräts mithilfe von IoT Hub zu initiieren und zu überwachen.

Hinweis

Die in diesem Artikel beschriebenen Features stehen nur im Standard-Tarif von IoT Hub zur Verfügung. Weitere Informationen zu den IoT Hub-Tarifen „Basic“ und „Standard/Free“ finden Sie unter Wählen des richtigen IoT Hub-Tarifs für Ihre Lösung.

Verwenden Sie eine direkte Methode, um Geräteverwaltungsaktionen (wie Neustarts, Zurücksetzen auf Werkseinstellungen und Firmwareaktualisierung) von einer Back-End-App aus in der Cloud zu initiieren. Das Gerät ist für Folgendes verantwortlich:

  • Verarbeiten der von IoT Hub gesendeten Methodenanforderung

  • Initiieren der entsprechenden gerätespezifischen Aktion auf dem Gerät.

  • Senden von Statusupdates über die gemeldeten Eigenschaften an IoT Hub

Sie können eine Back-End-App in der Cloud verwenden, um Gerätezwillingsabfragen auszuführen und Berichte zum Status der Geräteverwaltungsaktionen zu erstellen.

In diesem Artikel wird gezeigt, wie Sie Folgendes erstellen:

  • SimulateManagedDevice: eine simulierte Geräte-App mit einer direkten Methode, die das Gerät neu startet und die letzte Neustartzeit meldet. Direkte Methoden werden aus der Cloud aufgerufen.

  • TriggerReboot: eine .NET-Konsolen-App, die die direkte Methode in der simulierten Geräte-App über Ihren IoT-Hub aufruft. Sie zeigt die Antwort und aktualisierte gemeldete Eigenschaften an.

Voraussetzungen

  • Visual Studio.

  • Ein IoT Hub in Ihrem Azure-Abonnement. Wenn Sie noch keinen Hub haben, können Sie die Schritte unter Erstellen eines IoT-Hubs ausführen.

  • Ein in Ihrem IoT-Hub registriertes Gerät. Wenn Sie nicht über ein Gerät in Ihrem IoT-Hub verfügen, führen Sie die Schritte unter Registrieren eines Geräts aus.

  • Stellen Sie sicher, dass der Port 8883 in Ihrer Firewall geöffnet ist. Das Beispielgerät in diesem Artikel verwendet das MQTT-Protokoll, das über Port 8883 kommuniziert. In einigen Netzwerkumgebungen von Unternehmen oder Bildungseinrichtungen ist dieser Port unter Umständen blockiert. Weitere Informationen und Problemumgehungen finden Sie unter Herstellen einer Verbindung mit IoT Hub (MQTT).

Erstellen einer Geräte-App mit einer direkten Methode

In diesem Abschnitt führen Sie folgende Schritte aus:

  • Erstellen einer .NET-Konsolen-App, die auf eine von der Cloud aufgerufene direkte Methode antwortet

  • Auslösen des Neustarts eines simulierten Geräts

  • Verwenden der gemeldeten Eigenschaften, um Gerätezwillingsabfragen zu ermöglichen, die Geräte und den Zeitpunkt ihres letzten Neustarts ermitteln

Wichtig

Dieser Artikel enthält Schritte zum Verbinden eines Geräts mithilfe einer Shared Access Signature, was auch als symmetrische Schlüsselauthentifizierung bezeichnet wird. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung eines Geräts mit X.509-Zertifikaten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Verbindungssicherheit.

Führen Sie zum Erstellen der simulierten Geräte-App die folgenden Schritte aus:

  1. Öffnen Sie Visual Studio, und wählen Sie Neues Projekt erstellen aus. Suchen Sie anschließend die Projektvorlage Konsolen-App (.NET Framework), und wählen Sie sie aus. Wählen Sie dann Weiter aus.

  2. Geben Sie Ihrem Projekt in Neues Projekt konfigurieren den Namen SimulateManagedDevice, und wählen Sie Weiter aus.

    Screenshot: Benennen eines neuen Visual Studio-Projekts

  3. Behalten Sie die .NET Framework-Standardversion bei, und wählen Sie Erstellen aus.

  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das neue Projekt SimulateManagedDevice, und wählen Sie NuGet-Pakete verwalten aus.

  5. Wählen Sie Durchsuchen aus, suchen Sie nach dem Paket Microsoft.Azure.Devices.Client, und wählen Sie es aus. Wählen Sie Installieren aus.

    Screenshot: Installieren des Pakets „Microsoft.Azure.Devices.Client“

    In diesem Schritt wird das NuGet-Paket Azure IoT-Geräte-SDK heruntergeladen und installiert sowie ein Verweis auf das Paket und seine Abhängigkeiten hinzugefügt.

  6. Fügen Sie am Anfang der Datei Program.cs die folgenden using-Anweisungen hinzu:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    
  7. Fügen Sie der Program -Klasse die folgenden Felder hinzu. Ersetzen Sie den Platzhalterwert {device connection string} durch die Geräteverbindungszeichenfolge, die beim Registrieren eines neuen Geräts in IoT Hub angezeigt wurde:

    static string DeviceConnectionString = "{device connection string}";
    static DeviceClient Client = null;
    
  8. Fügen Sie Folgendes hinzu, um die direkte Methode auf dem Gerät zu implementieren:

    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. Fügen Sie abschließend der Main-Methode folgenden Code hinzu, um die Verbindung mit dem IoT Hub zu öffnen und den Listener der Methode zu initialisieren:

    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. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihre Projektmappe, und wählen Sie Startprojekte festlegen aus.

  11. Wählen Sie für Allgemeine Eigenschaften>Startprojekt die Option Einzelnes Startprojekt und dann das Projekt SimulateManagedDevice aus. Klicken Sie zum Speichern der Änderungen auf OK .

  12. Wählen Sie Erstellen>Projektmappe erstellen aus.

Hinweis

Der Einfachheit halber wird in diesem Artikel keine Wiederholungsrichtlinie implementiert. Im Produktionscode sollten Sie Wiederholungsrichtlinien implementieren (z.B. exponentielles Backoff), wie es in Behandeln vorübergehender Fehler vorgeschlagen wird.

Abrufen der IoT-Hub-Verbindungszeichenfolge

In diesem Artikel erstellen Sie einen Back-End-Dienst, der eine direkte Methode auf einem Gerät aufruft. Ihr Dienst muss über die Berechtigung Dienstverbindung verfügen, um über IoT Hub eine direkte Methode auf einem Gerät aufrufen zu können. Standardmäßig wird jeder IoT-Hub mit einer SAS-Richtlinie namens service erstellt, die diese Berechtigung erteilt.

Führen Sie zum Abrufen der IoT-Hub-Verbindungszeichenfolge für die Richtlinie service die folgenden Schritte aus:

  1. Wählen Sie im Azure-Portal die Option Ressourcengruppen aus. Wählen Sie die Ressourcengruppe aus, in der sich der Hub befindet, und wählen Sie dann in der Liste der Ressourcen Ihren Hub aus.

  2. Wählen Sie im linken Bereich Ihres IoT-Hubs Freigegebene Zugriffsrichtlinien aus.

  3. Wählen Sie in der Liste der Richtlinien die Richtlinie service aus.

  4. Kopieren Sie die primäre Verbindungszeichenfolge und speichern Sie den Wert.

Screenshot, der das Abrufen der Verbindungszeichenfolge von Ihrem IoT Hub im Azure-Portal zeigt.

Weitere Informationen zu SAS-Richtlinien und Berechtigungen für IoT-Hubs finden Sie unter Access Control und Berechtigungen.

Erstellen einer Dienst-App zum Auslösen eines Neustarts

In diesem Abschnitt erstellen Sie (mit C#) eine .NET Konsolen-App, die über eine direkte Methode einen Remoteneustart auf einem Gerät auslöst. Die App verwendet Gerätezwillingsabfragen, um den Zeitpunkt des letzten Neustarts bei diesem Gerät zu ermitteln.

Wichtig

Dieser Artikel enthält Schritte zum Herstellen einer Verbindung mit einem Dienst mithilfe einer Shared Access Signature. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung bei einem Dienst mit Microsoft Entra ID oder verwalteten Identitäten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Cloudsicherheit.

  1. Öffnen Sie Visual Studio, und wählen Sie Neues Projekt erstellen aus.

  2. Suchen Sie in Neues Projekt erstellen die Projektvorlage Konsolen-App (.NET Framework) , wählen Sie sie und dann Weiter aus.

  3. Geben Sie dem Projekt in Neues Projekt konfigurieren den Namen TriggerReboot, und wählen Sie Weiter aus.

    Screenshot: Konfigurieren eines neuen Visual Studio-Projekts

  4. Akzeptieren Sie die Standardversion von .NET Framework, und wählen Sie Erstellen aus, um das Projekt zu erstellen.

  5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt TriggerReboot, und wählen Sie NuGet-Pakete verwalten aus.

  6. Wählen Sie Durchsuchen aus, suchen Sie nach dem Paket Microsoft.Azure.Devices, und wählen Sie es aus. Wählen Sie Installieren aus, um das Paket Microsoft.Azure.Devices zu installieren.

    Screenshot: Installieren des Pakets „Microsoft.Azure.Devices“

    In diesem Schritt wird das NuGet-Paket Azure IoT-Dienst-SDK heruntergeladen und installiert und ein Verweis auf das Paket und seine Abhängigkeiten hinzugefügt.

  7. Fügen Sie am Anfang der Datei Program.cs die folgenden using-Anweisungen hinzu:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  8. Fügen Sie der Program -Klasse die folgenden Felder hinzu. Ersetzen Sie den Platzhalterwert {iot hub connection string} durch die IoT-Hub-Verbindungszeichenfolge, die Sie zuvor unter Abrufen der IoT-Hub-Verbindungszeichenfolge kopiert haben.

    static RegistryManager registryManager;
    static string connString = "{iot hub connection string}";
    static ServiceClient client;
    static string targetDevice = "myDeviceId";
    
  9. Fügen Sie der Program-Klasse die folgende Methode hinzu. Dieser Code ruft den Gerätezwilling für das neu startende Gerät auf und gibt die gemeldeten Eigenschaften aus.

    public static async Task QueryTwinRebootReported()
    {
        Twin twin = await registryManager.GetTwinAsync(targetDevice);
        Console.WriteLine(twin.Properties.Reported.ToJson());
    }
    
  10. Fügen Sie der Program-Klasse die folgende Methode hinzu. Dieser Code löst den Neustart auf dem Gerät mit einer direkten Methode aus.

    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. Fügen Sie abschließend der Main -Methode die folgenden Zeilen hinzu:

    registryManager = RegistryManager.CreateFromConnectionString(connString);
    StartReboot().Wait();
    QueryTwinRebootReported().Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  12. Wählen Sie Erstellen>Projektmappe erstellen aus.

Hinweis

In diesem Artikel wird nur eine einzelne Abfrage für die gemeldeten Eigenschaften des Geräts durchgeführt. Der Produktionscode sollte einen Abruf enthalten, um die Änderungen in den gemeldeten Eigenschaften des Geräts zu erkennen.

Ausführen der Apps

Jetzt können Sie die Apps ausführen.

  1. Um die .NET-Geräte-App SimulateManagedDevice auszuführen, klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt SimulateManagedDevice, wählen Sie Debuggen und dann Neue Instanz starten aus. Die App sollte mit dem Lauschen auf die Methodenaufrufe aus Ihrem IoT-Hub beginnen.

  2. Nachdem das Gerät verbunden wurde und auf Methodenaufrufe wartet, klicken Sie mit der rechten Maustaste auf das Projekt TriggerReboot, wählen Sie Debuggen und dann Neue Instanz starten aus.

    In der Konsole SimulatedManagedDevice sollte Rebooting angezeigt werden und in der Konsole TriggerReboot die gemeldeten Eigenschaften des Geräts, einschließlich des letzten Neustartzeitpunkts.

    Ausführen der Dienst- und Geräte-App

Anpassen und Erweitern der Geräteverwaltungsaktionen

Ihre IoT-Lösungen können die festgelegten Geräteverwaltungsmuster erweitern oder benutzerdefinierte Muster ermöglichen. Dazu werden die Grundtypen für die Gerätezwillings- oder die C2D-Methode verwendet. Andere Beispiele für Geräteverwaltungsaktionen sind das Zurücksetzen auf die Werkseinstellungen, Firmware- und Softwareaktualisierungen, Energieverwaltung, Netzwerk- und Konnektivitätsverwaltung und Datenverschlüsselung.

Gerätewartungsfenster

In der Regel konfigurieren Sie die Ausführung von Aktionen für Geräte so, dass Unterbrechungen und Ausfallzeiten auf ein Minimum beschränkt sind. Bei Gerätewartungsfenstern handelt es sich um ein häufig verwendetes Muster zum Festlegen des Zeitpunkts, zu dem ein Gerät seine Konfiguration aktualisieren soll. Ihre Back-End-Lösungen können die gewünschten Eigenschaften des Gerätezwillings verwenden, um auf Ihrem Gerät eine Richtlinie zur Aktivierung eines Wartungsfensters festzulegen und zu aktivieren. Wenn ein Gerät die Wartungsfensterrichtlinie erhält, kann es mithilfe der gemeldeten Eigenschaft des Gerätezwillings den Richtlinienstatus melden. Die Back-End-App kann dann mithilfe von Gerätezwillingsabfragen die Konformität von Geräten und den einzelnen Richtlinien sicherstellen.

Nächste Schritte

In diesem Artikel haben Sie eine direkte Methode zum Auslösen eines Remoteneustarts auf einem Gerät verwendet. Sie haben die gemeldeten Eigenschaften zum Melden des letzten Neustartzeitpunkts des Geräts verwendet. Darüber hinaus haben Sie den Gerätezwilling abgefragt, um den letzten Neustartzeitpunkt des Geräts aus der Cloud zu ermitteln.

Um mit IoT Hub und Gerätemanagementmustern wie imagebasierten End-to-End-Updates fortzufahren, lesen Sie den Artikel „Geräteupdate für Azure IoT Hub unter Verwendung des Raspberry Pi 3 B+-Referenzimages.

Unter Planen und Übertragen von Aufträgen erfahren Sie, wie Sie Ihre IoT-Lösung erweitern und Methodenaufrufe für mehrere Geräte planen.