# Stocker des données de localisation ![Un aperçu en sketchnote de cette leçon](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.fr.jpg) > Sketchnote par [Nitya Narasimhan](https://github.com/nitya). Cliquez sur l'image pour une version agrandie. ## Quiz avant la leçon [Quiz avant la leçon](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) ## Introduction Dans la dernière leçon, vous avez appris à utiliser un capteur GPS pour capturer des données de localisation. Pour utiliser ces données afin de visualiser la position d'un camion chargé de nourriture et son trajet, elles doivent être envoyées à un service IoT dans le cloud, puis stockées quelque part. Dans cette leçon, vous apprendrez les différentes façons de stocker des données IoT et comment stocker ces données à partir de votre service IoT en utilisant du code sans serveur. Dans cette leçon, nous aborderons : * [Données structurées et non structurées](../../../../../3-transport/lessons/2-store-location-data) * [Envoyer des données GPS à un IoT Hub](../../../../../3-transport/lessons/2-store-location-data) * [Chemins chauds, tièdes et froids](../../../../../3-transport/lessons/2-store-location-data) * [Gérer les événements GPS avec du code sans serveur](../../../../../3-transport/lessons/2-store-location-data) * [Comptes de stockage Azure](../../../../../3-transport/lessons/2-store-location-data) * [Connecter votre code sans serveur au stockage](../../../../../3-transport/lessons/2-store-location-data) ## Données structurées et non structurées Les systèmes informatiques traitent des données, et ces données peuvent prendre toutes sortes de formes et de tailles. Elles peuvent varier de simples nombres à de grandes quantités de texte, en passant par des vidéos, des images et des données IoT. Les données peuvent généralement être classées dans l'une des deux catégories : *données structurées* et *données non structurées*. * **Données structurées** : Ce sont des données avec une structure bien définie et rigide qui ne change pas, et qui sont généralement organisées en tableaux avec des relations. Un exemple serait les informations personnelles d'une personne, comme son nom, sa date de naissance et son adresse. * **Données non structurées** : Ce sont des données sans structure bien définie et rigide, y compris des données dont la structure peut changer fréquemment. Un exemple serait des documents tels que des textes écrits ou des feuilles de calcul. ✅ Faites des recherches : Pouvez-vous penser à d'autres exemples de données structurées et non structurées ? > 💁 Il existe également des données semi-structurées qui sont structurées mais ne s'intègrent pas dans des tableaux fixes. Les données IoT sont généralement considérées comme des données non structurées. Imaginez que vous ajoutiez des dispositifs IoT à une flotte de véhicules pour une grande exploitation agricole commerciale. Vous pourriez vouloir utiliser différents dispositifs pour différents types de véhicules. Par exemple : * Pour les véhicules agricoles comme les tracteurs, vous souhaitez des données GPS pour vous assurer qu'ils travaillent sur les bons champs. * Pour les camions de livraison transportant de la nourriture vers des entrepôts, vous souhaitez des données GPS ainsi que des données de vitesse et d'accélération pour garantir que le conducteur conduit en toute sécurité, ainsi que des données d'identité et de démarrage/arrêt pour garantir la conformité avec les lois locales sur les heures de travail. * Pour les camions frigorifiques, vous souhaitez également des données de température pour garantir que la nourriture ne devient ni trop chaude ni trop froide, afin d'éviter qu'elle ne se détériore pendant le transport. Ces données peuvent changer constamment. Par exemple, si le dispositif IoT est dans la cabine d'un camion, les données qu'il envoie peuvent changer en fonction de la remorque, par exemple en envoyant uniquement des données de température lorsqu'une remorque frigorifique est utilisée. ✅ Quelles autres données IoT pourraient être capturées ? Pensez aux types de charges que les camions peuvent transporter, ainsi qu'aux données de maintenance. Ces données varient d'un véhicule à l'autre, mais elles sont toutes envoyées au même service IoT pour traitement. Le service IoT doit être capable de traiter ces données non structurées, en les stockant de manière à permettre leur recherche ou leur analyse, tout en s'adaptant aux différentes structures de ces données. ### Stockage SQL vs NoSQL Les bases de données sont des services qui permettent de stocker et de interroger des données. Les bases de données existent en deux types : SQL et NoSQL. #### Bases de données SQL Les premières bases de données étaient des systèmes de gestion de bases de données relationnelles (RDBMS), ou bases de données relationnelles. Elles sont également connues sous le nom de bases de données SQL en raison du langage de requête structuré (SQL) utilisé pour interagir avec elles afin d'ajouter, supprimer, mettre à jour ou interroger des données. Ces bases de données consistent en un schéma - un ensemble bien défini de tableaux de données, similaire à une feuille de calcul. Chaque tableau possède plusieurs colonnes nommées. Lorsque vous insérez des données, vous ajoutez une ligne au tableau, en mettant des valeurs dans chacune des colonnes. Cela maintient les données dans une structure très rigide - bien que vous puissiez laisser des colonnes vides, si vous souhaitez ajouter une nouvelle colonne, vous devez le faire sur la base de données, en remplissant les valeurs pour les lignes existantes. Ces bases de données sont relationnelles - c'est-à-dire qu'un tableau peut avoir une relation avec un autre. ![Une base de données relationnelle où l'ID du tableau Utilisateur est lié à la colonne ID utilisateur du tableau Achats, et l'ID du tableau Produits est lié à l'ID produit du tableau Achats](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.fr.png) Par exemple, si vous stockiez les informations personnelles d'un utilisateur dans un tableau, vous auriez un ID unique interne par utilisateur utilisé dans une ligne d'un tableau contenant le nom et l'adresse de l'utilisateur. Si vous souhaitiez ensuite stocker d'autres détails sur cet utilisateur, comme ses achats, dans un autre tableau, vous auriez une colonne dans le nouveau tableau pour l'ID de cet utilisateur. Lorsque vous recherchez un utilisateur, vous pouvez utiliser son ID pour obtenir ses informations personnelles dans un tableau, et ses achats dans un autre. Les bases de données SQL sont idéales pour stocker des données structurées et pour garantir que les données correspondent à votre schéma. ✅ Si vous n'avez jamais utilisé SQL auparavant, prenez un moment pour lire à ce sujet sur la [page SQL de Wikipédia](https://wikipedia.org/wiki/SQL). Quelques bases de données SQL bien connues sont Microsoft SQL Server, MySQL et PostgreSQL. ✅ Faites des recherches : Renseignez-vous sur certaines de ces bases de données SQL et leurs capacités. #### Bases de données NoSQL Les bases de données NoSQL sont appelées NoSQL car elles n'ont pas la même structure rigide que les bases de données SQL. Elles sont également connues sous le nom de bases de données documentaires car elles peuvent stocker des données non structurées telles que des documents. > 💁 Malgré leur nom, certaines bases de données NoSQL permettent d'utiliser SQL pour interroger les données. ![Documents dans des dossiers dans une base de données NoSQL](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.fr.png) Les bases de données NoSQL n'ont pas de schéma prédéfini qui limite la manière dont les données sont stockées. Vous pouvez insérer des données non structurées, généralement sous forme de documents JSON. Ces documents peuvent être organisés en dossiers, similaires aux fichiers sur votre ordinateur. Chaque document peut avoir des champs différents des autres documents - par exemple, si vous stockiez des données IoT provenant de vos véhicules agricoles, certains pourraient avoir des champs pour les données d'accéléromètre et de vitesse, d'autres pourraient avoir des champs pour la température dans la remorque. Si vous ajoutiez un nouveau type de camion, comme un camion avec des balances intégrées pour suivre le poids des produits transportés, alors votre dispositif IoT pourrait ajouter ce nouveau champ et il pourrait être stocké sans aucun changement à la base de données. Quelques bases de données NoSQL bien connues incluent Azure CosmosDB, MongoDB et CouchDB. ✅ Faites des recherches : Renseignez-vous sur certaines de ces bases de données NoSQL et leurs capacités. Dans cette leçon, vous utiliserez un stockage NoSQL pour stocker des données IoT. ## Envoyer des données GPS à un IoT Hub Dans la dernière leçon, vous avez capturé des données GPS à partir d'un capteur GPS connecté à votre dispositif IoT. Pour stocker ces données IoT dans le cloud, vous devez les envoyer à un service IoT. Une fois de plus, vous utiliserez Azure IoT Hub, le même service IoT cloud que vous avez utilisé dans le projet précédent. ![Envoi de télémétrie GPS d'un dispositif IoT à IoT Hub](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.fr.png) ### Tâche - envoyer des données GPS à un IoT Hub 1. Créez un nouveau IoT Hub en utilisant le niveau gratuit. > ⚠️ Vous pouvez vous référer aux [instructions pour créer un IoT Hub du projet 2, leçon 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud) si nécessaire. N'oubliez pas de créer un nouveau groupe de ressources. Nommez le nouveau groupe de ressources `gps-sensor`, et le nouveau IoT Hub avec un nom unique basé sur `gps-sensor`, comme `gps-sensor-`. > 💁 Si vous avez encore votre IoT Hub du projet précédent, vous pouvez le réutiliser. N'oubliez pas d'utiliser le nom de ce IoT Hub et le groupe de ressources dans lequel il se trouve lors de la création d'autres services. 1. Ajoutez un nouveau dispositif au IoT Hub. Appelez ce dispositif `gps-sensor`. Récupérez la chaîne de connexion pour le dispositif. 1. Mettez à jour le code de votre dispositif pour envoyer les données GPS au nouveau IoT Hub en utilisant la chaîne de connexion du dispositif obtenue à l'étape précédente. > ⚠️ Vous pouvez vous référer aux [instructions pour connecter votre dispositif à un IoT du projet 2, leçon 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service) si nécessaire. 1. Lorsque vous envoyez les données GPS, faites-le sous forme de JSON dans le format suivant : ```json { "gps" : { "lat" : , "lon" : } } ``` 1. Envoyez les données GPS toutes les minutes pour ne pas dépasser votre allocation quotidienne de messages. Si vous utilisez le Wio Terminal, n'oubliez pas d'ajouter toutes les bibliothèques nécessaires et de régler l'heure en utilisant un serveur NTP. Votre code devra également s'assurer qu'il a lu toutes les données du port série avant d'envoyer la localisation GPS, en utilisant le code existant de la dernière leçon. Utilisez le code suivant pour construire le document JSON : ```cpp DynamicJsonDocument doc(1024); doc["gps"]["lat"] = gps.location.lat(); doc["gps"]["lon"] = gps.location.lng(); ``` Si vous utilisez un dispositif IoT virtuel, n'oubliez pas d'installer toutes les bibliothèques nécessaires en utilisant un environnement virtuel. Pour le Raspberry Pi et le dispositif IoT virtuel, utilisez le code existant de la dernière leçon pour obtenir les valeurs de latitude et de longitude, puis envoyez-les dans le format JSON correct avec le code suivant : ```python message_json = { "gps" : { "lat":lat, "lon":lon } } print("Sending telemetry", message_json) message = Message(json.dumps(message_json)) ``` > 💁 Vous pouvez trouver ce code dans le dossier [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) ou [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device). Exécutez le code de votre dispositif et assurez-vous que les messages arrivent dans IoT Hub en utilisant la commande CLI `az iot hub monitor-events`. ## Chemins chauds, tièdes et froids Les données qui circulent d'un dispositif IoT vers le cloud ne sont pas toujours traitées en temps réel. Certaines données nécessitent un traitement en temps réel, d'autres peuvent être traitées peu de temps après, et d'autres encore peuvent être traitées beaucoup plus tard. Le flux de données vers différents services qui les traitent à différents moments est appelé chemins chauds, tièdes et froids. ### Chemin chaud Le chemin chaud fait référence aux données qui doivent être traitées en temps réel ou presque. Vous utiliseriez les données du chemin chaud pour des alertes, comme recevoir une notification qu'un véhicule approche d'un dépôt ou que la température dans un camion frigorifique est trop élevée. Pour utiliser les données du chemin chaud, votre code répondrait aux événements dès qu'ils sont reçus par vos services cloud. ### Chemin tiède Le chemin tiède fait référence aux données qui peuvent être traitées peu de temps après leur réception, par exemple pour des rapports ou des analyses à court terme. Vous utiliseriez les données du chemin tiède pour des rapports quotidiens sur le kilométrage des véhicules, en utilisant les données recueillies la veille. Les données du chemin tiède sont stockées dès leur réception par le service cloud dans un type de stockage qui peut être rapidement accessible. ### Chemin froid Le chemin froid fait référence aux données historiques, stockées à long terme pour être traitées lorsque nécessaire. Par exemple, vous pourriez utiliser le chemin froid pour obtenir des rapports annuels sur le kilométrage des véhicules ou effectuer des analyses sur les itinéraires afin de trouver le trajet le plus optimal pour réduire les coûts de carburant. Les données du chemin froid sont stockées dans des entrepôts de données - des bases de données conçues pour stocker de grandes quantités de données qui ne changeront jamais et qui peuvent être interrogées rapidement et facilement. Vous auriez normalement une tâche régulière dans votre application cloud qui s'exécuterait à un moment régulier chaque jour, semaine ou mois pour déplacer les données du stockage du chemin tiède vers l'entrepôt de données. ✅ Pensez aux données que vous avez capturées jusqu'à présent dans ces leçons. S'agit-il de données du chemin chaud, tiède ou froid ? ## Gérer les événements GPS avec du code sans serveur Une fois que les données arrivent dans votre IoT Hub, vous pouvez écrire du code sans serveur pour écouter les événements publiés sur le point de terminaison compatible Event-Hub. Il s'agit du chemin tiède - ces données seront stockées et utilisées dans la prochaine leçon pour établir un rapport sur le trajet. ![Envoi de télémétrie GPS d'un dispositif IoT à IoT Hub, puis à Azure Functions via un déclencheur Event Hub](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.fr.png) ### Tâche - gérer les événements GPS avec du code sans serveur 1. Créez une application Azure Functions en utilisant l'interface CLI Azure Functions. Utilisez l'environnement d'exécution Python et créez-la dans un dossier appelé `gps-trigger`, en utilisant le même nom pour le projet de l'application Functions. Assurez-vous de créer un environnement virtuel pour cela. > ⚠️ Vous pouvez consulter les [instructions pour créer un projet Azure Functions à partir du projet 2, leçon 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application) si nécessaire. 1. Ajoutez un déclencheur d'événement IoT Hub qui utilise le point de terminaison compatible Event Hub de l'IoT Hub. > ⚠️ Vous pouvez consulter les [instructions pour créer un déclencheur d'événement IoT Hub à partir du projet 2, leçon 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) si nécessaire. 1. Définissez la chaîne de connexion du point de terminaison compatible Event Hub dans le fichier `local.settings.json`, et utilisez la clé pour cette entrée dans le fichier `function.json`. 1. Utilisez l'application Azurite comme émulateur de stockage local. 1. Exécutez votre application de fonctions pour vérifier qu'elle reçoit des événements de votre appareil GPS. Assurez-vous que votre appareil IoT fonctionne également et envoie des données GPS. ```output Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} ``` ## Comptes de stockage Azure ![Le logo Azure Storage](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.fr.png) Les comptes de stockage Azure sont un service de stockage polyvalent qui peut stocker des données de différentes manières. Vous pouvez stocker des données sous forme de blobs, dans des files d'attente, dans des tables ou sous forme de fichiers, et tout cela simultanément. ### Stockage Blob Le mot *Blob* signifie objets binaires volumineux, mais il est devenu le terme pour désigner toute donnée non structurée. Vous pouvez stocker n'importe quelle donnée dans le stockage blob, des documents JSON contenant des données IoT aux fichiers image et vidéo. Le stockage blob repose sur le concept de *conteneurs*, des répertoires nommés où vous pouvez stocker des données, similaires aux tables dans une base de données relationnelle. Ces conteneurs peuvent contenir un ou plusieurs dossiers pour stocker des blobs, et chaque dossier peut contenir d'autres dossiers, comme les fichiers sont stockés sur le disque dur de votre ordinateur. Vous utiliserez le stockage blob dans cette leçon pour stocker des données IoT. ✅ Faites des recherches : Lisez sur le [stockage Blob Azure](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) ### Stockage Table Le stockage table vous permet de stocker des données semi-structurées. Le stockage table est en réalité une base de données NoSQL, donc il ne nécessite pas un ensemble défini de tables à l'avance, mais il est conçu pour stocker des données dans une ou plusieurs tables, avec des clés uniques pour définir chaque ligne. ✅ Faites des recherches : Lisez sur le [stockage Table Azure](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) ### Stockage File d'attente Le stockage file d'attente vous permet de stocker des messages de taille maximale de 64 Ko dans une file d'attente. Vous pouvez ajouter des messages à l'arrière de la file d'attente et les lire à l'avant. Les files d'attente stockent les messages indéfiniment tant qu'il reste de l'espace de stockage, ce qui permet de conserver les messages à long terme, puis de les lire lorsque nécessaire. Par exemple, si vous souhaitez exécuter une tâche mensuelle pour traiter des données GPS, vous pouvez les ajouter à une file d'attente chaque jour pendant un mois, puis à la fin du mois, traiter tous les messages de la file d'attente. ✅ Faites des recherches : Lisez sur le [stockage File d'attente Azure](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) ### Stockage Fichier Le stockage fichier consiste à stocker des fichiers dans le cloud, et toutes les applications ou appareils peuvent se connecter en utilisant des protocoles standards de l'industrie. Vous pouvez écrire des fichiers dans le stockage fichier, puis le monter comme un disque sur votre PC ou Mac. ✅ Faites des recherches : Lisez sur le [stockage Fichier Azure](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) ## Connectez votre code sans serveur au stockage Votre application de fonctions doit maintenant se connecter au stockage blob pour stocker les messages provenant de l'IoT Hub. Il existe deux façons de le faire : * À l'intérieur du code de la fonction, connectez-vous au stockage blob en utilisant le SDK Python pour le stockage blob et écrivez les données sous forme de blobs. * Utilisez une liaison de fonction de sortie pour lier la valeur de retour de la fonction au stockage blob et enregistrer automatiquement le blob. Dans cette leçon, vous utiliserez le SDK Python pour voir comment interagir avec le stockage blob. ![Envoi de télémétrie GPS depuis un appareil IoT vers IoT Hub, puis vers Azure Functions via un déclencheur Event Hub, puis enregistrement dans le stockage blob](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.fr.png) Les données seront enregistrées sous forme de blob JSON avec le format suivant : ```json { "device_id": , "timestamp" :