Exercice : exécuter les appareils simulés

Effectué

Dans cet exercice, vous exécutez l’appareil simulé. Lorsque l’appareil est démarré pour la première fois, il se connecte au service Azure IoT Hub Device Provisioning (DPS) qui l’inscrit automatiquement en utilisant l’inscription de groupe configurée.

Une fois l’appareil inscrit dans l’inscription de groupe DPS, l’appareil est inscrit automatiquement dans le registre d’appareils IoT Hub. Une fois l’appareil inscrit et enregistré, l’appareil peut commencer à communiquer avec Azure IoT Hub en toute sécurité en tirant parti de l’authentification de certificat d’appareil X.509 configurée.

Tâche 1 : Générer et exécuter les projets d’appareil simulé

  1. Dans Visual Studio Code, ouvrez le dossier sensor-thl-001-device s’il n’est pas déjà ouvert.

  2. Dans Visual Studio, ouvrez le menu Terminal, puis sélectionnez Nouveau terminal pour ouvrir le Terminal intégré en bas de la fenêtre Visual Studio Code.

  3. À l’invite de commande Terminal, vérifiez que le répertoire de travail actuel est le dossier \sensor-thl-001-device.

  4. Générer et exécuter le projet ContainerDevice :

    dotnet run
    

    Remarque

    Lorsque vous exécutez votre appareil simulé pour la première fois, l’erreur la plus courante est une erreur de certificat non valide. Cette erreur peut provoquer une exception ProvisioningTransportException. Si un message similaire à l’exemple suivant s’affiche, vérifiez que le certificat d’autorité de certification dans DPS et le certificat d’appareil pour l’application d’appareil simulé sont correctement configurés. Dans la section Vérifier votre travail en bas de cette page web, il existe des commandes Cloud Shell permettant d’afficher les informations d’autorité de certification et de certificat d’appareil inscrites à partir de DPS qui peuvent être utilisées pour diagnostiquer une erreur.

    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
    ...
    
  5. Notez que l’application d’appareil simulé envoie une sortie à la fenêtre Terminal.

    Lorsque l’application d’appareil simulé s’exécute correctement, le Terminal affiche la sortie de la console à partir de l’application.

    Faites défiler vers le haut des informations affichées dans la fenêtre Terminal.

    Notez que le certificat d’appareil X.509 sensor-thl-001 a été chargé, l’appareil a été inscrit auprès du service Azure IoT Hub Device Provisioning, il a été affecté pour se connecter au hub IoT hub-{your-suffix} et les propriétés souhaitées du jumeau d’appareil sont chargées.

    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...
    

    Pour passer en revue le code source de l’appareil simulé, ouvrez le fichier de code source Program.cs. Recherchez les instructions Console.WriteLine utilisées pour générer les messages affichés dans la console.

  6. Notez que les messages de télémétrie au format JSON sont envoyés à IoT Hub.

    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}
    

    Une fois que l’appareil simulé a terminé les tâches initiales de démarrage, d’approvisionnement et d’inscription, il envoie des messages de télémétrie de capteur simulés à IoT Hub.

    Notez que le délai entre chaque message envoyé à IoT Hub, tel que défini par la propriété de jumeau d’appareil telemetryDelay, retarde actuellement de 1 seconde entre l’envoi des messages de télémétrie de capteur.

  7. Laissez l’appareil simulé en cours d’exécution.

Tâche 2 : Démarrer l’autre appareil simulé

  1. Ouvrez une nouvelle instance de Visual Studio Code.

    Vous pouvez ouvrir la nouvelle instance à partir de Visual Studio Code : ouvrez le menu Fichier et sélectionnez Nouvelle fenêtre.

  2. Dans la nouvelle fenêtre Visual Studio Code, dans le menu Fichier, sélectionnez Ouvrir un dossier.

  3. Accédez au dossier sensor-thl-002-device, puis sélectionnez Sélectionner un dossier.

  4. Dans Visual Studio, ouvrez le menu Terminal, puis sélectionnez Nouveau terminal pour ouvrir le Terminal intégré en bas de la fenêtre Visual Studio Code.

  5. À l’invite de commande Terminal, vérifiez que le répertoire de travail actuel est le dossier \sensor-thl-002-device.

  6. Générez et exécutez le projet ContainerDevice.

    dotnet run
    

Tâche 3 : Modifier la configuration d’appareil via son jumeau

Lorsque vous avez créé l’inscription de groupe dans DPS, vous définissez la configuration initiale du jumeau pour que vos appareils disposent d’une propriété telemetryDelay définie sur 1 seconde. Avec les appareils simulés en cours d’exécution, la configuration de telemetryDelay peut être mise à jour en modifiant l’état souhaité du jumeau d’appareil au sein de IoT Hub.

  1. Dans le bac à sable Azure, mettez à jour les propriétés souhaitées de l’appareil sensor-thl-001 pour envoyer des données de télémétrie toutes les 3 secondes.

    az iot hub device-twin update --hub-name hub-$suffix --device-id sensor-thl-001 --desired "{'telemetryDelay':'3'}"
    
  2. Revenez à la fenêtre Visual Studio Code qui exécute le projet ContainerDevice à partir du dossier sensor-thl-001-device.

  3. Notez que l’application a été avertie de la mise à jour du paramètre de propriété telemetryDelay souhaitée du jumeau d’appareil.

    L’application génère des messages dans la console montrant que les nouvelles propriétés souhaitées du jumeau d’appareil sont chargées et que les modifications sont définies et renvoyées au hub Azure IoT.

    Desired Twin Property Changed:
    {"telemetryDelay":3,"$version":2}
    Reported Twin Properties:
    {"telemetryDelay":3}
    
  4. Notez que les messages de télémétrie du capteur d’appareil simulé sont maintenant envoyés à Azure IoT Hub toutes les 3 secondes.

    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}
    
  5. Dans le volet Terminal, pour quitter l’application d’appareil simulé, appuyez sur Ctrl-C.

  6. Basculez vers votre autre fenêtre Visual Studio Code et utilisez l’invite de Terminal pour arrêter l’application d’appareil simulé.

    Ne fermez pas encore les fenêtres Visual Studio Code, car vous revenez pour réexécuter les programmes dans l’exercice suivant.

Vérifier votre travail

  1. Si l’un de vos programmes n’a pas fonctionné, corrigez les erreurs avant de passer à l’exercice suivant.

  2. Vérifiez que la valeur du jumeau d’appareil telemetryDelay est de 3 secondes.

    az iot hub device-twin show --hub-name hub-$suffix --device-id sensor-thl-001