Tutoriel : Implémenter l’analytique spatiale IoT avec Azure Maps

Dans un scénario IoT, il est courant de capturer et de suivre les événements pertinents qui se produisent dans l’espace et le temps. Les applications de gestion de flotte, de gestion des biens, de mobilité et de ville intelligente constituent des exemples. Ce tutoriel décrit une solution qui effectue le suivi des déplacements d’une voiture de location à l’aide des API Azure Maps.

Dans ce tutoriel vous allez :

  • Créer un compte Stockage Azure pour journaliser les données de suivi de véhicule.
  • Charger une limite géographique sur un compte de stockage Azure.
  • Créer un hub dans Azure IoT Hub et inscrire un appareil.
  • Créer une fonction dans Azure Functions, en implémentant une logique métier basée sur l’analytique spatiale Azure Maps.
  • Vous abonner aux événements de télémétrie de l’appareil IoT à partir de la fonction Azure par le biais d’Azure Event Grid.
  • Filtrer les événements de télémétrie à l’aide du routage des messages IoT Hub.

Prérequis

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Conseil

Vous pouvez télécharger l’intégralité du projet C# rentalCarSimulation à partir de GitHub en tant que fichier ZIP unique en accédant à la racine de l’exemple et en sélectionnant le <> Codevert, puis Télécharger le fichier ZIP.

Ce tutoriel utilise l’application Postman, mais vous pouvez choisir un autre environnement de développement d’API.

Important

Dans les exemples d’URL, remplacez {Your-Azure-Maps-Subscription-key} par votre clé d’abonnement Azure Maps.

Cas d’usage : Suivi de voiture de location

Imaginez qu’une société de location de voitures souhaite journaliser les informations sur la localisation, les distances parcourues et l’état de fonctionnement de ses voitures de location. Elle souhaite par ailleurs stocker ces informations à chaque fois qu’une voiture quitte la région géographique autorisée.

Les voitures de location sont équipées d’appareils IoT qui envoient régulièrement des données de télémétrie à IoT Hub. La télémétrie comprend la localisation actuelle et indique si le moteur de la voiture tourne. Le schéma d’emplacement des appareils est conforme au schéma Plug-and-Play des données géospatiales IoT. Le schéma de télémétrie des appareils de la voiture de location est semblable au code JSON suivant :

{
    "data": {
        "properties": {
            "Engine": "ON"
        },
        "systemProperties": {
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "ContosoRentalDevice",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "636959817064335548",
            "iothub-enqueuedtime": "2019-06-18T00:17:20.608Z",
            "iothub-message-source": "Telemetry"
        },
        "body": {
            "location": {
                "type": "Point",
                "coordinates": [ -77.025988698005662, 38.9015330523316 ]
            }
        }
    }
}

Dans ce tutoriel, vous n’allez suivre qu’un seul véhicule. Après avoir configuré les services Azure, vous devez télécharger le projet C# rentalCarSimulation pour exécuter le simulateur de véhicule. L’ensemble du processus, de l’événement à l’exécution de la fonction, est résumé dans les étapes suivantes :

  1. L’appareil embarqué envoie des données de télémétrie à IoT Hub.

  2. Si le moteur de la voiture est allumé, le hub publie les données de télémétrie sur Event Grid.

  3. Une fonction Azure est déclenchée en raison de son abonnement aux événements de télémétrie de l’appareil.

  4. La fonction journalise les coordonnées de la localisation de l’appareil du véhicule, l’heure de l’événement et l’ID de l’appareil. Elle utilise ensuite l’API d’obtention de limite géographique spatiale pour déterminer si la voiture est allée à l’extérieur de la limite géographique. Si c’est le cas, la fonction stocke les données de localisation reçues de l’événement dans un conteneur d’objets blob. Elle interroge également la Recherche d’adresse inversée pour convertir les coordonnées en adresse postale et stocker celle-ci avec les autres données de localisation de l’appareil.

Le diagramme suivant montre une vue d’ensemble du système.

Diagramme de vue d’ensemble du système.

La figure ci-dessous met en évidence la zone de limite géographique en bleu. L’itinéraire du véhicule de location est indiqué par une ligne verte.

Figure présentant l’itinéraire à travers la limite géographique.

Créer un compte de stockage Azure

Pour stocker les données de suivi des infractions de la voiture, créez un compte de stockage universel v2 dans votre groupe de ressources. Si vous n’avez pas créé de groupe de ressources, suivez les instructions de la section Créer des groupes de ressources. Nommez votre groupe de ressources ContosoRental.

Pour créer un compte de stockage, suivez les instructions de la section Créer un compte de stockage. Dans ce tutoriel, nommez le compte de stockage contosorentalstorage (en règle générale, vous pouvez le nommer comme vous le souhaitez).

Une fois le compte de stockage créé, vous devez créer un conteneur pour stocker les données de journalisation.

  1. Accédez au compte de stockage que vous venez de créer. Dans la section Essentials, sélectionnez le lien Conteneurs.

    Capture d’écran des conteneurs pour le stockage d’objets blob.

  2. Dans le coin supérieur gauche, sélectionnez + Conteneur. Un panneau s’affiche sur le côté droit du navigateur. Nommez votre conteneur contoso-rental-logs et sélectionnez Créer.

    Capture d’écran de la création d’un conteneur d’objets blob

  3. Accédez au volet Clés d’accès de votre compte de stockage et copiez le nom du compte de stockage et la valeur Clé dans la section key1. Vous avez besoin de ces deux valeurs dans la section Créer une fonction et ajouter un abonnement à la grille d'événements.

    Capture d’écran de la copie du nom du compte de stockage et de la clé.

Charger une limite géographique dans votre compte de stockage Azure

La limite géographique définit la zone géographique autorisée pour notre véhicule de location. Utilisez la limite géographique dans votre fonction Azure pour déterminer si une voiture est allée en dehors de la limite géographique.

Suivez les étapes décrites dans l’article Guide pratique pour créer un registre de données pour charger le fichier de données JSON de limite géographique dans votre compte de stockage Azure, puis enregistrez-le dans votre compte Azure Maps. Veillez à noter la valeur de l'identifiant unique (udid), vous en aurez besoin. L’udid est le moyen de référencer la limite géographique que vous avez chargée dans votre compte de stockage Azure à partir de votre code source. Pour plus d’informations sur les fichiers de données de limite géographique, consultez Données GeoJSON de limite géographique.

Créer un hub IoT

IoT Hub permet une communication bidirectionnelle sécurisée et fiable entre une application IoT et les appareils qu’elle gère. Pour ce tutoriel, vous souhaitez obtenir des informations à partir de l’appareil embarqué dans le véhicule afin de déterminer la localisation de la voiture de location. Dans cette section, vous allez créer un hub IoT dans le groupe de ressources ContosoRental. Ce hub est chargé de la publication des événements de télémétrie de l’appareil.

Pour créer un hub IoT dans le groupe de ressources ContosoRental, effectuez les étapes décrites dans Créer un hub IoT.

Inscrire votre appareil dans votre hub IoT

Les appareils ne peuvent pas se connecter à IoT Hub, sauf s’ils sont inscrits dans le registre des identités IoT Hub. Créez un appareil portant le nom InVehicleDevice. Pour créer et inscrire l’appareil dans votre hub IoT, suivez les étapes décrites dans Inscrire un nouvel appareil dans le hub IoT. N’oubliez pas de copier la chaîne de connexion principale de votre appareil. Vous en aurez besoin ultérieurement.

Créer une fonction et ajouter un abonnement Event Grid

Azure Functions est un service de calcul serverless qui vous permet d’exécuter de petites portions de code (« fonctions »), sans qu’il soit nécessaire de provisionner ou de gérer explicitement l’infrastructure de calcul. Pour en savoir plus, consultez Azure Functions.

Une fonction est déclenchée par un événement spécifique. Créez une fonction déclenchée par un déclencheur Event Grid. Créez la relation entre le déclencheur et la fonction en créant un abonnement à un événement pour les événements de télémétrie de l’appareil IoT Hub. Lorsqu’un événement de télémétrie de l’appareil se produit, votre fonction est appelée comme point de terminaison et reçoit les données pertinentes pour l’appareil que vous avez précédemment inscrit dans IoT Hub.

Voici le code de script C# que votre fonction contient.

À présent, configurez votre fonction Azure.

  1. Dans le tableau de bord du portail Azure, sélectionnez Créer une ressource. Saisissez Function App dans la zone de texte de recherche. Sélectionnez Application de fonction>Créer.

  2. Dans la page de création Function App, nommez votre application de fonction. Sous Groupe de ressources, sélectionnez ContosoRental dans la liste déroulante. Sélectionnez .NET comme pile d’exécution. En bas de la page, sélectionnez Suivant : Stockage>.

    Capture d’écran de la création d’une application de fonction.

  3. Pour Compte de stockage, sélectionnez le compte de stockage que vous avez créé dans Créer un compte de stockage Azure. Sélectionnez Revoir + créer.

  4. Passez en revue les détails de l’application de fonction, puis sélectionnez Créer.

  5. Une fois l’application créée, vous allez y ajouter une fonction. Accédez à l’application de fonction. Sélectionnez le bouton Créer dans le portail Azure.

    Important

    Les modèles Azure EventHub Triggeret leAzure Event Grid Trigger modèle avec des noms similaires. Veillez à sélectionner le modèle Déclencheur Azure Event Grid.

     Capture d’écran de la création d’une machine virtuelle dans le Portail Azure.

  6. Le panneau Créer une fonction s’affiche. Faites défiler le panneau Sélectionner un modèle, sélectionnez Azure Event Grid déclencheur, puis sélectionnez le bouton Créer.

    Capture d’écran de création de fonction.

  7. Donnez un nom à la fonction. Dans ce tutoriel, utilisez le nom GetGeoFunction, mais en général vous pouvez utiliser le nom de votre choix. Sélectionnez Créer une fonction.

  8. Dans le menu de gauche, sélectionnez le volet Code + test. Copiez et collez le Script C# dans la fenêtre de code.

    Copie/Capture d’écran du code de collage dans la fenêtre de fonction.

  9. Dans le code C#, remplacez les paramètres suivants :

    • Remplacez SUBSCRIPTION_KEY par la clé d’abonnement de votre compte Azure Maps.
    • Remplacez UDID par l’udid de la limite géographique que vous avez chargée dans Charger une limite géographique dans votre compte de stockage Azure.
    • La fonction CreateBlobAsync du script crée un objet blob par événement dans le compte de stockage de données. Remplacez les valeurs ACCESS_KEY, ACCOUNT_NAME et STORAGE_CONTAINER_NAME par la clé d’accès de votre compte de stockage, le nom du compte et le conteneur de stockage de données. Ces valeurs ont été générées lors de la création de votre compte de stockage dans la section Créer un compte de stockage Azure.
  10. Dans le menu de gauche, sélectionnez le volet Intégration. Sélectionnez Déclencheur Event Grid dans le diagramme. Tapez un nom pour le déclencheur, eventGridEvent, puis sélectionnez Créer un abonnement Event Grid.

    Capture d’écran de l’ajout d’un abonnement aux événements.

  11. Renseignez les détails de l’abonnement. Donnez un nom à l’abonnement à l’événement. Pour Schéma d’événement, sélectionnez Schéma Event Grid. Pour Types de rubrique, sélectionnez Comptes Azure IoT Hub. Pour Groupe de ressources, sélectionnez le groupe de ressources que vous avez créé au début de ce tutoriel. Pour Ressource, sélectionnez le hub IoT que vous avez créé dans « Créer un hub IoT Azure ». Pour Filtrer sur les types d’événements, sélectionnez Télémétrie de l’appareil.

    Une fois ces options choisies, le Type de rubrique devient IoT Hub. Pour Nom de rubrique système, vous pouvez utiliser le même nom que celui de votre ressource. Pour finir, dans la section Détails du point de terminaison, sélectionnez Sélectionner un point de terminaison. Acceptez tous les paramètres, puis sélectionnez Confirmer la sélection.

    Capture d’écran de la création d’un abonnement aux événements.

  12. Passez vos paramètres en revue. Assurez-vous que le point de terminaison spécifie la fonction que vous avez créée au début de cette section. Sélectionnez Create (Créer).

    Capture d’écran de la confirmation de création d’un abonnement aux événements.

  13. Vous êtes à présent de retour dans le panneau Modifier le déclencheur. Sélectionnez Enregistrer.

Filtrer les événements à l’aide du routage des messages IoT Hub

Lorsque vous ajoutez un abonnement Event Grid à la fonction Azure, un itinéraire de messagerie est créé automatiquement dans le hub IoT spécifié. Le routage des messages vous permet d’acheminer différents types de données vers différents points de terminaison. Vous pouvez par exemple router les messages de télémétrie de l’appareil, les événements du cycle de vie de l’appareil et les événements de changement du jumeau d’appareil. Pour plus d’informations, consultez Routage des messages IoT Hub.

Capture d’écran du routage des messages dans IoT Hub.

Dans l’exemple de scénario, vous ne voulez recevoir des messages que lorsque la voiture de location se déplace. Créez une requête de routage pour filtrer les événements dont la propriété Engine est égale à « ON » . Pour créer une requête de routage, sélectionnez la route RouteToEventGrid et remplacez la requête de routage par « Engine=’ON’ » . Ensuite, sélectionnez Enregistrer. Désormais, le hub IoT publie uniquement les données de télémétrie d’appareil où le moteur est en marche.

Capture d’écran du filtrage de routage des messages.

Conseil

Il existe plusieurs façons d’interroger des messages appareil-à-cloud IoT. Pour en savoir plus sur la syntaxe de routage des messages, consultez Routage des messages IoT Hub.

Envoyer des données de télémétrie à IoT Hub

Quand votre fonction Azure s’exécute, vous pouvez maintenant envoyer les données de télémétrie au hub IoT, qui les route vers Event Grid. Utilisez une application C# pour simuler les données de localisation d’un appareil embarqué d’une voiture de location. Pour exécuter l’application, votre ordinateur de développement doit disposer du .NET SDK 6.0 ou version ultérieure. Effectuez ces étapes pour envoyer les données de télémétrie simulées au hub IoT :

  1. Si ce n’est déjà fait, téléchargez le projet C# rentalCarSimulation.

  2. Ouvrez le fichier simulatedCar.cs dans l’éditeur de texte de votre choix, et remplacez la valeur de connectionString par celle que vous avez enregistrée lors de l’inscription de l’appareil. Enregistrez les modifications apportées au fichier.

  3. Assurez-vous que le moteur d'exécution ASP.NET Core est installé sur votre machine. Dans la fenêtre de votre terminal local, accédez au dossier racine du projet C#, puis exécutez la commande suivante afin d’installer les packages nécessaires pour l’application d’appareil simulé :

    dotnet restore
    
  4. Dans le même terminal, exécutez la commande suivante pour générer et exécuter l’application de simulation de voiture de location :

    dotnet run
    

Votre terminal local doit ressembler à la capture d’écran suivante.

Capture d’écran de la sortie de terminal.

Si vous ouvrez le conteneur de stockage blob maintenant, vous pouvez voir quatre objets blob correspondant aux emplacements où le véhicule se trouvait hors de la limite géographique.

Capture d’écran de l’affichage des objets blob dans le conteneur.

La carte suivante montre quatre points de localisation du véhicule en dehors de la limite géographique. Chaque emplacement a été journalisé à intervalles réguliers.

Capture d’écran de la carte des violations.

Explorer Azure Maps et IoT

Pour explorer les API Azure Maps utilisées dans ce tutoriel, consultez :

Pour obtenir la liste complète des API REST Azure Maps, consultez :

Pour obtenir la liste des appareils qui sont certifiés Azure pour IoT, visitez :

Nettoyer les ressources

Aucune ressource ne nécessite un nettoyage.

Étapes suivantes

Pour en savoir plus sur la façon d’envoyer des données de télémétrie appareil-à-cloud, et vice versa, consultez :