Übung: Ausführen der simulierten Geräte
In dieser Übung führen Sie die simulierten Geräte aus. Wenn das Gerät zum ersten Mal gestartet wird, stellt es eine Verbindung mit dem Device Provisioning Service (DPS) her, der es automatisch mithilfe der konfigurierten Gruppenregistrierung aufnimmt.
Sobald das Gerät in die DPS-Gruppenregistrierung aufgenommen ist, wird es automatisch in der IoT Hub-Geräteregistrierung registriert. Nachdem das Gerät aufgenommen und registriert wurde, kann es beginnen, mit der konfigurierten X.509-Gerätezertifikatauthentifizierung sicher mit Azure IoT Hub zu kommunizieren.
Aufgabe 1: Erstellen und Ausführen der simulierten Geräteprojekte
Öffnen Sie in Visual Studio Code den Ordner sensor-thl-001-device, sofern er noch nicht geöffnet ist.
Öffnen Sie in Visual Studio das Menü Terminal, und wählen Sie dann Neues Terminal aus, um das integrierte Terminal am unteren Rand des Visual Studio Code-Fensters zu öffnen.
Stellen Sie an der Eingabeaufforderung „Terminal“ sicher, dass der Ordner \sensor-thl-001-device das aktuelle Arbeitsverzeichnis ist.
Erstellen Sie das Projekt ContainerDevice-, und führen Sie es aus:
dotnet run
Hinweis
Wenn Sie Ihr simuliertes Gerät zum ersten Mal ausführen, tritt am häufigsten der Fehler Ungültiges Zertifikat auf. Dieser Fehler kann zu einer ProvisioningTransportException-Ausnahme führen. Wenn eine Meldung ähnlich dem folgenden Beispiel angezeigt wird, vergewissern Sie sich, dass das Zertifizierungsstellenzertifikat in DPS und das Gerätezertifikat für die simulierte Geräteanwendung ordnungsgemäß konfiguriert sind. Im Abschnitt „Arbeit überprüfen“ am unteren Rand dieser Webseite werden Cloud Shell-Befehle zum Anzeigen registrierter Zertifizierungsstellen- und Gerätezertifikatsinformationen von DPS angezeigt, die zur Fehlerdiagnose verwendet werden können.
localmachine:LabFiles User$ dotnet run Found certificate: AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001; PrivateKey: True Using certificate AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001 RegistrationID = sensor-thl-001 ProvisioningClient RegisterAsync . . . Unhandled exception. Microsoft.Azure.Devices.Provisioning.Client.ProvisioningTransportException: {"errorCode":401002,"trackingId":"2e298c80-0974-493c-9fd9-6253fb055ade","message":"Invalid certificate.","timestampUtc":"2019-12-13T14:55:40.2764134Z"} at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerAmqp.ValidateOutcome(Outcome outcome) at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerAmqp.RegisterDeviceAsync(AmqpClientConnection client, String correlationId, DeviceRegistration deviceRegistration) at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerAmqp.RegisterAsync(ProvisioningTransportRegisterMessage message, CancellationToken cancellationToken) at X509CertificateContainerDevice.ProvisioningDeviceLogic.RunAsync() in /Users/User/Documents/AZ-220/LabFiles/Program.cs:line 121 at X509CertificateContainerDevice.Program.Main(String[] args) in /Users/User/Documents/AZ-220/LabFiles/Program.cs:line 55 ...
Beachten Sie, dass die simulierte Geräte-App die Ausgaben an das Terminalfenster sendet.
Wenn die simulierte Geräte-App ordnungsgemäß ausgeführt wird, zeigt das Terminal die Konsolenausgabe aus der App an.
Scrollen Sie nach oben zum Anfang der Informationen, die im Terminalfenster angezeigt werden.
Beachten Sie Folgendes: Das X.509-Gerätezertifikat „sensor-thl-001“ wurde geladen. Das Gerät wurde beim Gerätebereitstellungsdienst registriert. Es wurde angewiesen, eine Verbindung mit dem IoT-Hub hub-{your-suffix} herzustellen, und die gewünschten Eigenschaften des Gerätezwillings werden geladen.
localmachine:LabFiles User$ dotnet run Found certificate: AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001; PrivateKey: True Using certificate AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001 RegistrationID = sensor-thl-001 ProvisioningClient RegisterAsync . . . Device Registration Status: Assigned ProvisioningClient AssignedHub: hub-1119.azure-devices.net; DeviceID: sensor-thl-001 Creating X509 DeviceClient authentication. simulated device. Ctrl-C to exit. DeviceClient OpenAsync. Connecting SetDesiredPropertyUpdateCallbackAsync event handler... Loading Device Twin Properties... Desired Twin Property Changed: {"$version":1} Reported Twin Properties: {"telemetryDelay":1} Start reading and sending device telemetry...
Um den Quellcode für das simulierte Gerät zu überprüfen, öffnen Sie die Quellcodedatei Program.cs. Suchen Sie nach den Console.WriteLine-Anweisungen, die zum Ausgeben der Meldungen dienen, die auf der Konsole angezeigt werden.
Beachten Sie, dass JSON-formatierte Telemetrienachrichten an IoT Hub gesendet werden.
Start reading and sending device telemetry... 12/9/2019 5:47:00 PM > Sending message: {"temperature":24.047539159212047,"humidity":67.00504162675004,"pressure":1018.8478924248358,"latitude":40.129349260196875,"longitude":-98.42877188146265} 12/9/2019 5:47:01 PM > Sending message: {"temperature":26.628804161040485,"humidity":68.09610794675355,"pressure":1014.6454375411363,"latitude":40.093269544242695,"longitude":-98.22227128174003}
Nachdem das simulierte Gerät die anfänglichen Start-, Bereitstellungs- und Registrierungsaufgaben abgeschlossen hat, sendet es simulierte Sensortelemetrienachrichten an IoT Hub.
Beachten Sie, dass die Verzögerung zwischen den einzelnen an IoT Hub gesendeten Nachrichten, die durch die telemetryDelay-Eigenschaft des Gerätezwillings definiert wird, derzeit jeweils 1 Sekunde zwischen dem Senden von Sensor-Telemetrienachrichten beträgt.
Lassen Sie das simulierte Gerät laufen.
Aufgabe 2: Starten des anderen simulierten Geräts
Öffnen Sie eine neue Instanz von Visual Studio Code.
Sie können die neue Instanz in Visual Studio Code öffnen: Öffnen Sie das Menü Datei, und wählen Sie Neues Fenster aus.
Wählen Sie im neuen Visual Studio Code-Fenster im Menü Datei die Option Ordner öffnen aus.
Navigieren Sie zum Ordner sensor-thl-002-device, und wählen Sie dann Ordner auswählen aus.
Öffnen Sie in Visual Studio das Menü Terminal, und wählen Sie dann Neues Terminal aus, um das integrierte Terminal am unteren Rand des Visual Studio Code-Fensters zu öffnen.
Vergewissern Sie sich, dass an der Eingabeaufforderung „Terminal“ der Ordner \sensor-thl-002-device das aktuelle Arbeitsverzeichnis ist.
Erstellen Sie das Projekt ContainerDevice, und führen Sie es aus.
dotnet run
Aufgabe 3: Ändern der Gerätekonfiguration durch den Gerätezwilling
Wenn Sie die Gruppenregistrierung in DPS erstellt haben, konfigurieren Sie die anfängliche Zwillingskonfiguration für Ihre Geräte so, dass die telemetryDelay-Eigenschaft auf 1 Sekunde festgelegt ist. Wenn die simulierten Geräte ausgeführt werden, kann die telemetrieDelay-Konfiguration aktualisiert werden, indem Sie den gewünschten Zustand des Gerätezwillings im IoT Hub bearbeiten.
Aktualisieren Sie in der Azure-Sandbox die gewünschten Eigenschaften des Geräts sensor-thl-001, um alle 3 Sekunden Telemetriedaten zu senden.
az iot hub device-twin update --hub-name hub-$suffix --device-id sensor-thl-001 --desired "{'telemetryDelay':'3'}"
Kehren Sie zurück zum Fenster Visual Studio Code, in dem das Projekt ContainerDevicet aus dem Ordner sensor-thl-001-device ausgeführt wird.
Beachten Sie, dass die Anwendung über die gewünschte Einstellung der aktualisierten telemetrieDelay-Eigenschaft des Gerätezwillings benachrichtigt wurde.
Die Anwendung gibt Nachrichten an die Konsole aus, die zeigen, dass die neuen gewünschten Eigenschaften des Gerätezwillings geladen werden und dass die Änderungen festgelegt und an Azure IoT Hub zurückgegeben werden.
Desired Twin Property Changed: {"telemetryDelay":3,"$version":2} Reported Twin Properties: {"telemetryDelay":3}
Beachten Sie, dass die simulierten Telemetrienachrichten des Gerätesensors alle 3 Sekunden an Azure IoT Hub gesendet werden.
12/9/2019 5:48:07 PM > Sending message: {"temperature":33.89822140284731,"humidity":78.34939097908763,"pressure":1024.9467544610131,"latitude":40.020042418755764,"longitude":-98.41923808825841} 12/9/2019 5:48:10 PM > Sending message: {"temperature":27.475786026323114,"humidity":64.4175510594703,"pressure":1020.6866468579678,"latitude":40.2089999240047,"longitude":-98.26223221770334} 12/9/2019 5:48:13 PM > Sending message: {"temperature":34.63600901637041,"humidity":60.95207713588703,"pressure":1013.6262313688063,"latitude":40.25499096898331,"longitude":-98.51199886959347}
Um die simulierte Geräte-App zu beenden, drücken Sie im Bereich Terminal die Tastenkombination STRG-C.
Wechseln Sie zu Ihrem anderen Visual Studio Code-Fenster, und verwenden Sie die Eingabeaufforderung Terminal, um die simulierte Geräte-App zu beenden.
Schließen Sie die Visual Studio Code-Fenster noch nicht, da Sie zurückkehren und die Programme in der nächsten Übung erneut ausführen werden.
Überprüfen Ihrer Arbeit
Wenn eines Ihrer Programme nicht funktioniert, beheben Sie die Fehler, bevor Sie mit der nächsten Übung fortfahren.
Überprüfen Sie, ob der
telemetryDelay
-Wert des Gerätezwillings3
Sekunden beträgt.az iot hub device-twin show --hub-name hub-$suffix --device-id sensor-thl-001