Partager via


Tutoriel : Envoyer des données via une passerelle transparente

S’applique à : icône oui IoT Edge 1.1

Important

IoT Edge la date de fin du support 1.1 était le 13 décembre 2022. Consultez la page Politique de support Microsoft pour plus d’informations sur la prise en charge de ce produit, de ce service, de cette technologie ou de cette API. Pour plus d’informations sur la mise à jour vers la dernière version d’IoT Edge, consultez Mettre à jour IoT Edge.

Dans cet article, nous utilisons une fois de plus la machine virtuelle de développement comme appareil simulé. Toutefois, au lieu d’envoyer des données directement au hub IoT, l’appareil les envoie à l’appareil IoT Edge configuré en tant que passerelle transparente.

Nous surveillons le fonctionnement de l’appareil IoT Edge pendant que l’appareil simulé envoie des données. Une fois que l’appareil a terminé son exécution, nous examinons les données dans notre compte de stockage pour valider que tout a fonctionné comme prévu.

Cette étape est généralement effectuée par un développeur d’appareil.

Dans cette section du tutoriel, vous allez apprendre à :

  • Générez et exécutez un appareil en aval.
  • Vérifier que les données générées sont stockées dans votre stockage Blob Azure.
  • Vérifier que le modèle Machine Learning a classifié les données de l’appareil.

Prérequis

Cet article fait partie d’une série décrivant l’utilisation d’Azure Machine Learning sur IoT Edge. Chaque article de la série s’appuie sur le travail réalisé dans le cadre de l’article précédent. Si vous êtes tombé directement sur cet article, reportez-vous au premier article de la série.

Passer en revue le projet Device Harness

Réutilisez le projet DeviceHarness pour simuler l’appareil en aval. La connexion à la passerelle transparente nécessite deux éléments supplémentaires :

  • Inscrivez le certificat pour que l’appareil IoT en aval approuve l’autorité de certification utilisée par le runtime IoT Edge. Dans notre cas, l’appareil en aval est la machine virtuelle de développement.
  • Ajoutez le nom de domaine complet de la passerelle Edge à la chaîne de connexion de l’appareil.

Examinez le code pour voir comment ces deux éléments sont implémentés.

  1. Sur votre machine de développement, ouvrez Visual Studio Code.

  2. Utilisez Fichier>Ouvrir le dossier... pour ouvrir C:\source\IoTEdgeAndMlSample\DeviceHarness.

  3. Examinez la méthode InstallCertificate() dans le fichier Program.cs.

  4. Notez que si le code recherche le chemin d’accès du certificat, il appelle la méthode CertificateManager.InstallCACert pour installer le certificat sur la machine.

  5. Examinez à présent la méthode GetIotHubDevice sur la classe TurbofanDevice.

  6. Lorsque l’utilisateur spécifie le nom de domaine complet de la passerelle à l’aide de l’option « -g », cette valeur est transmise à cette méthode en tant que variable gatewayFqdn, qui est ajoutée à la chaîne de connexion de l’appareil.

    connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
    

Générez et exécutez l’appareil en aval

  1. Avec le projet DeviceHarness toujours ouvert dans Visual Studio Code, générez le projet. Dans le menu Terminal, sélectionnez Exécuter la tâche de génération et sélectionnez Génération.

  2. Recherchez le nom de domaine complet de votre passerelle Edge en accédant à votre appareil IoT Edge (machine virtuelle Linux) dans le portail Azure et en copiant la valeur de Nom DNS à partir de la page de présentation.

  3. Démarrez votre appareil IoT (machine virtuelle Linux) s’il n’est pas déjà en cours d’exécution.

  4. Ouvrez le terminal Visual Studio Code. Dans le menu Terminal, sélectionnez Nouveau terminal et exécutez la commande suivante en remplaçant <edge_device_fqdn> par le nom DNS que vous avez copié à partir de l’appareil IoT Edge (machine virtuelle Linux) :

    dotnet run -- --gateway-host-name "<edge_device_fqdn>" --certificate C:\edgecertificates\certs\azure-iot-test-only.root.ca.cert.pem --max-devices 1
    
  5. L’application tente d’installer le certificat sur votre machine de développement. Lorsque cela arrive, acceptez l’avertissement de sécurité.

  6. Lorsque vous êtes invité à entrer la chaîne de connexion au hub IoT, cliquez sur les points de suspension ( ... ) sur le volet Appareils Azure IoT Hub, puis sélectionnez Copier une chaîne de connexion IoT Hub. Collez la valeur dans le terminal.

  7. Une sortie semblable à celle-ci s’affiche :

    Found existing device: Client_001
    Using device connection string: HostName=<your hub>.azure-devices.net;DeviceId=Client_001;SharedAccessKey=xxxxxxx; GatewayHostName=iotedge-xxxxxx.<region>.cloudapp.azure.com
    Device: 1 Message count: 50
    Device: 1 Message count: 100
    Device: 1 Message count: 150
    Device: 1 Message count: 200
    Device: 1 Message count: 250
    

    Notez l’ajout de « GatewayHostName » à la chaîne de connexion de l’appareil, ce qui fait que l’appareil communique via IoT Hub via la passerelle transparente IoT Edge.

Vérifier la sortie

Sortie de l’appareil IoT Edge

La sortie du module avroFileWriter peut être facilement observée en examinant l’appareil IoT Edge.

  1. Ouvrez une session SSH sur votre machine virtuelle IoT Edge.

  2. Recherchez les fichiers écrits sur le disque.

    find /data/avrofiles -type f
    
  3. La sortie de la commande doit se présenter comme suit :

    /data/avrofiles/2019/4/18/22/10.avro
    

    Vous pouvez avoir plusieurs fichiers en fonction du minutage de l’exécution.

  4. Prenez note des timestamps. Le module avroFileWriter charge les fichiers dans le cloud lorsque la dernière modification a été apportée il y a plus de 10 minutes (consultez MODIFIED_FICHIER_TIMEOUT dans uploader.py dans le module avroFileWriter).

  5. Une fois que les 10 minutes se sont écoulées, le module doit charger les fichiers. Si le chargement est réussi, le module supprime les fichiers du disque.

Stockage Azure

Nous pouvons observer les résultats de notre appareil en aval qui envoie des données en examinant les comptes de stockage dans lesquels les données doivent être routées.

  1. Sur la machine de développement, ouvrez Visual Studio Code.

  2. Dans le panneau « Stockage Azure » de la fenêtre de l’explorateur, naviguez dans l’arborescence pour trouver votre compte de stockage.

  3. Développez le nœud Conteneurs d’objets blob.

  4. À partir du travail que nous avons effectué dans la partie précédente du tutoriel, nous nous attendons à ce que le conteneur ruldata contienne des messages avec une durée de vie restante. Développez le nœud ruldata.

  5. Vous voyez alors un ou plusieurs fichiers blob nommés comme suit : <IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>.

  6. Cliquez avec le bouton droit sur l’un des fichiers et choisissez Download Blob (Télécharger le blob) pour enregistrer le fichier sur votre machine de développement.

  7. Ensuite, développez le nœud uploadturbofanfiles. Dans l’article précédent, nous avons défini cet emplacement comme cible pour les fichiers chargés par le module avroFileWriter.

  8. Cliquez avec le bouton droit sur les fichiers et choisissez Download Blob (Télécharger le blob) pour l’enregistrer sur votre machine de développement.

Lire le contenu des fichiers AVRO

Nous avons inclus un utilitaire en ligne de commande simple pour lire un fichier Avro et retourner une chaîne JSON des messages dans le fichier. Dans cette section, nous allons l’installer et l’exécuter.

  1. Ouvrez un terminal dans Visual Studio Code (Terminal>Nouveau terminal).

  2. Installez hubavroreader :

    pip install c:\source\IoTEdgeAndMlSample\HubAvroReader
    
  3. Utilisez hubavroreader pour lire le fichier Avro que vous avez téléchargé à partir de ruldata.

    hubavroreader <avro file with ath> | more
    
  4. Notez que le corps du message se présente comme nous l’attendons avec l’ID d’appareil et la durée de vie restante prédite.

    {
        "Body": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CycleTime": 1.0,
            "PredictedRul": 170.1723693909444
        },
        "EnqueuedTimeUtc": "<time>",
        "Properties": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CreationTimeUtc": "01/01/0001 00:00:00",
            "EnqueuedTimeUtc": "01/01/0001 00:00:00"
        },
        "SystemProperties": {
            "connectionAuthMethod": "{\"scope\":\"module\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "connectionDeviceGenerationId": "636857841798304970",
            "connectionDeviceId": "aaTurbofanEdgeDevice",
            "connectionModuleId": "turbofanRouter",
            "contentEncoding": "utf-8",
            "contentType": "application/json",
            "correlationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "enqueuedTime": "<time>",
            "iotHubName": "mledgeiotwalkthroughhub"
        }
    }
    
  5. Exécutez la même commande, en transmettant le fichier Avro que vous avez téléchargé à partir de uploadturbofanfiles.

  6. Comme prévu, ces messages contiennent toutes les données de capteur et les paramètres opérationnels du message d’origine. Ces données peuvent servir à améliorer le modèle de durée de vie restante sur notre périphérique en mode Edge.

    {
        "Body": {
            "CycleTime": 1.0,
            "OperationalSetting1": -0.0005000000237487257,
            "OperationalSetting2": 0.00039999998989515007,
            "OperationalSetting3": 100.0,
            "PredictedRul": 170.17236328125,
            "Sensor1": 518.6699829101562,
            "Sensor10": 1.2999999523162842,
            "Sensor11": 47.29999923706055,
            "Sensor12": 522.3099975585938,
            "Sensor13": 2388.010009765625,
            "Sensor14": 8145.31982421875,
            "Sensor15": 8.424599647521973,
            "Sensor16": 0.029999999329447746,
            "Sensor17": 391.0,
            "Sensor18": 2388.0,
            "Sensor19": 100.0,
            "Sensor2": 642.3599853515625,
            "Sensor20": 39.11000061035156,
            "Sensor21": 23.353700637817383,
            "Sensor3": 1583.22998046875,
            "Sensor4": 1396.8399658203125,
            "Sensor5": 14.619999885559082,
            "Sensor6": 21.610000610351562,
            "Sensor7": 553.969970703125,
            "Sensor8": 2387.9599609375,
            "Sensor9": 9062.169921875
        },
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "70df0c98-0958-4c8f-a422-77c2a599594f",
            "CreationTimeUtc": "0001-01-01T00:00:00+00:00",
            "EnqueuedTimeUtc": "<time>"
    }
    

Nettoyer les ressources

Si vous envisagez d’explorer les ressources utilisées par ce tutoriel de bout en bout, patientez jusqu’à ce que vous ayez terminé de nettoyer les ressources que vous avez créées. Dans le cas contraire, procédez comme suit pour les supprimer :

  1. Supprimez le ou les groupes de ressources créés pour contenir la machine virtuelle Dev, la machine virtuelle IoT Edge, IoT Hub, le compte de stockage, le service de l’espace de travail Machine Learning (et les ressources créées : registre de conteneurs, insights d’application, coffre de clés, compte de stockage).

  2. Supprimez le projet Machine Learning dans Azure Notebooks.

  3. Si vous avez cloné le référentiel localement, fermez toutes les fenêtres PowerShell ou VS Code faisant référence au référentiel local, puis supprimez le répertoire du référentiel.

  4. Si vous avez créé des certificats localement, supprimez le dossier c:\edgeCertificates.

Étapes suivantes

Dans cet article, nous avons utilisé notre machine virtuelle de développement pour simuler un appareil en aval envoyant des données de capteur et des données opérationnelles vers notre appareil IoT Edge. Nous avons validé que les modules sur l’appareil ont routé, classé, rendu persistantes et chargé les données en examinant le fonctionnement en temps réel de l’appareil de périphérie et en examinant les fichiers chargés sur le compte de stockage.

Pour continuer votre apprentissage des fonctionnalités IoT Edge, suivez maintenant ce tutoriel :