Exercice : déployer une fonction Azure dans IoT Edge

Effectué

Filtrez les données de télémétrie envoyées par l’appareil.

Rappelez-vous que vous voulez réduire au minimum la quantité de données envoyées depuis chaque magasin. Pour réduire la quantité de données de télémétrie envoyées à votre application Azure IoT Central, vous devrez filtrer les données sur l’appareil IoT Edge.

Dans cette unité, vous allez utiliser Azure Functions sur le périphérique IoT Edge pour implémenter un filtre. Ce filtre garantit que l’appareil envoie uniquement des données de télémétrie lorsque la température ambiante est supérieure à 21°C.

Remarque

Cet exercice est facultatif. Si vous souhaitez effectuer cet exercice, vous devrez créer un abonnement Azure avant de commencer. Si vous n’avez pas de compte Azure ou si vous ne souhaitez pas en créer un pour l’instant, vous pouvez lire les instructions pour comprendre les informations qui sont présentées.

Créer un registre de conteneurs

Votre appareil IoT Edge doit télécharger et installer le module Azure Functions personnalisé qui implémente le filtre. Les modules IoT Edge sont empaquetés en tant qu’images compatibles avec Docker que vous pouvez stocker dans un référentiel de conteneurs. Vous utilisez Azure Container Registry (ACR) pour stocker votre nouveau module et générer le conteneur à partir d’un projet source.

Exécutez les commandes suivantes pour ajouter un registre de conteneurs à votre groupe de ressources dans Azure :

REGISTRY_NAME="edgecentral$RANDOM"
az acr create -n $REGISTRY_NAME -g <rgn>[sandbox resource group name]</rgn> --sku Standard --admin-enabled true
az acr credential show -n $REGISTRY_NAME
echo "Your registry name is: $REGISTRY_NAME"

Notez le nom et les valeurs password du registre pour les utiliser plus tard dans cette unité.

Créer un projet Azure Functions

Vous utilisez C# pour implémenter la fonction. Exécutez les commandes suivantes pour installer le modèle de projet, puis générer un squelette de projet :

dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls

Exécutez la commande suivante pour remplacer la fonction FilterFunction.cs existante par une implémentation qui filtre les valeurs de télémétrie de température de l’ordinateur :

curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/iotedge/FilterFunction.cs

Générez maintenant une image Docker et chargez-la dans votre registre de conteneurs. Patientez quelques minutes le temps que cette commande s’exécute :

az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .

Vous pouvez répertorier les images dans votre registre avec la commande suivante :

az acr repository list --name $REGISTRY_NAME

Mettre à jour le manifeste de déploiement

Pour utiliser le nouveau module de filtre sur votre appareil IoT Edge, mettez à jour le manifeste de déploiement avec la nouvelle version.

Téléchargez le nouveau manifeste de déploiement et la nouvelle définition d’interface sur votre ordinateur local en cliquant avec le bouton droit sur les liens suivants et en choisissant Enregistrer sous :

Ouvrez EnvironmentalSensorManifestFilter-1-4.json dans un éditeur de texte et mettez-le à jour pour utiliser le module de filtre de votre registre de conteneurs :

  1. Remplacez les trois instances de <YOUR CONTAINER REGISTRY NAME> par le nom de votre registre de conteneurs. Le nom ressemble à edgecentral27912.
  2. Remplacez <YOUR CONTAINER REGISTRY PASSWORD> par le mot de passe que vous avez noté précédemment dans cette unité.
  3. Enregistrez les modifications.

Cette version du manifeste de déploiement :

  • Ajoute le module avec la fonction Azure que vous avez créée :

    "filterfunction": {
      "version": "1.0",
      "type": "docker",
      "status": "running",
      "restartPolicy": "always",
      "settings": {
        "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
        "createOptions": ""
      }
    
  • Achemine la sortie du module SimulatedTemperatureSensor vers le module filterfunction avant d’envoyer les données de télémétrie filtrées à votre application Azure IoT Central :

    "routes": {
        "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream",
        "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")"
      },
    

Pour charger le nouveau manifeste de déploiement :

  1. Dans votre application Azure IoT Central, accédez à Manifestes Edge et sélectionnez le manifeste Capteur environnemental.

  2. Dans la page Personnaliser, chargez le nouveau fichier EnvironmentalSensorManifestFilter-1-4.json. Sélectionnez Suivant.

  3. La page Vérifier et terminer affiche le nouveau module filterfunction. Cliquez sur Enregistrer.

  4. Accédez à l’appareil Appareil Edge - Capteur environnemental - store-001 à partir de la page Appareils, puis sélectionnez Modules.

  5. En haut de la page, sélectionnez Gérer le manifeste > Affecter un manifeste de périphérie. Sélectionnez le manifeste du capteur environnemental, puis sélectionnez Affecter le manifeste.

La liste des modules inclut maintenant le module filterfunction en cours d’exécution :

Capture d’écran montrant le module FilterFunction en cours d’exécution sur l’appareil IoT Edge.

Mettre à jour le modèle d’appareil pour utiliser le nouveau module

L’appareil IoT Edge envoie maintenant la télémétrie via l’interface filterfunction au lieu de l’interface Télémétrie. Par conséquent, vous devez mettre à jour le modèle et les vues d’appareil.

  1. Dans la page Modèles d’appareil, sélectionnez Périphérique de capteur environnemental.

  2. Sélectionnez Modules, puis Importer des modules à partir du manifeste.

    Capture d’écran montrant comment importer des modules à partir du manifeste.

  3. Dans la boîte de dialogue Importer des modules, sélectionnez Capteur environnemental, puis Importer.

Capture d’écran montrant le module FilterFunction ajouté au modèle d’appareil.

Le nouveau module envoie maintenant les données de télémétrie à Azure IoT Central. Ensuite, ajoutez une interface au nouveau module de filtre qui spécifie les données de télémétrie et met à jour le graphique.

  1. Sélectionnez Module FilterFunction, puis + Ajouter une interface héritée. Vous devrez peut-être sélectionner les points de suspension (...) pour voir cette option.
  2. Choisissez la vignette Importer l’interface. Sélectionnez le fichier TelemetryInterface.json que vous avez téléchargé précédemment.

Vous pouvez supprimer l’interface Télémétrie d’origine, car le SimulatedTemperatureModule n’envoie plus de données de télémétrie directement à Azure IoT Central. Le formulaire de sortie de ce module est routé vers le module FilterFunction par le runtime IoT Edge.

  1. Sélectionnez l’interface Télémétrie dans le module SimulatedTemperatureSensor .
  2. Sélectionnez Supprimer, puis confirmez l’opération.

Modifiez la vue Afficher les données de télémétrie de l’appareil IoT Edge pour afficher les données de télémétrie envoyées par le module FilterFunction.

  1. Dans le modèle d’appareil, sélectionnez la vue Afficher les données de télémétrie de l’appareil IoT Edge, puis sélectionnez l’option Modifier sur la vignette du graphique.
  2. Ajoutez les types de télémétrie ambiant/température, humidité, machine/température et pression.
  3. Sélectionnez Mettre à jour , puis Enregistrer.
  4. Sélectionnez Publier pour publier la nouvelle version du modèle d’appareil.

Vérifier votre travail

Pour visualiser les données de télémétrie filtrées provenant de votre appareil IoT Edge :

  1. Dans la page Appareils, sélectionnez l’appareil store-001.

  2. Sélectionnez la vue Afficher les données de télémétrie de l’appareil IoT Edge.

    Vous pouvez afficher les données de télémétrie filtrées sur le graphique. Aucune valeur ne s’affiche quand la température ambiante moyenne est inférieure à 21,0 degrés.

    Capture d’écran montrant un tracé de télémétrie sans valeurs de température ambiante moyenne inférieures à 21.

Si l'appareil semble cesser d'envoyer des données télémétriques, c'est probablement parce que le module SimulatedTemperatureSensor s'arrête après avoir envoyé 500 messages. Si vous redémarrez la machine virtuelle, le comptage est rétabli, et vous verrez que les données de télémétrie commencent à fluctuer de nouveau :

az vm restart --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name $(az vm list --resource-group <rgn>[sandbox resource group name]</rgn> --query [0].name -o tsv)