Le Blog Amazon Web Services
Analyser la consommation de carburant et les déplacements d’un véhicule en utilisant un M5StickC et le connecteur OBD2
Analyser la conduite, établir un diagnostic de certaines pièces, analyser la consommation ou encore détecter des anomalies : ce sont autant de cas d’utilisation rendus possibles par la collecte de données sur le véhicule. La question que l’on est amené à se poser est : comment démarrer un tel projet ?
AWS est une plateforme de choix pour ce type de projet comme nous allons l’illustrer dans cet article. Nous allons tout d’abord détailler un exemple d’architecture répondant à la problématique de la collecte de données issues d’un véhicule en passant par le traitement de ces données jusqu’à leur utilisation.
Dans cet article nous allons mettre en place un flux de collecte de données permettant ensuite d’analyser la consommation quotidienne d’un véhicule ce qui nous permettra par la suite d’établir des prédictions de consommation en utilisant du Machine Learning.
I. Composants utilisés
Afin de construire un flux d’ingestion de données provenant d’une voiture, nous allons utiliser les composants suivants :
- Un connecteur OBD2 capable de récupérer les informations de diagnostic de la voiture et de les retransmettre en Bluetooth vers un appareil extérieur.
- Un M5StickC ESP32 (version PICO) qui est une carte de développement ESP32 avec écran couleur TFT 0,96 pouces (résolution 80 x 160), LED rouge, bouton, microphone, émetteur IR, IMU 6 axes (SH200Q) et batterie 80 mAH. Le module ESP32 ESP32-Pico dans M5StickC dispose également d’un flash intégré de 4 Mo. Il dispose aussi d’une petite batterie et sa petite taille permet de le rendre discret assez facilement dans l’habitacle de la voiture.
II. Vue d’ensemble de la solution
La solution se décompose en deux parties :
- La partie IoT, qui est en charge de récupérer les données envoyées par la voiture par l’intermédiaire du port OBD2 et du M5StickC. Ce dernier est connecté en bluetooth au capteur OBD2 qui lui transmet les informations en temps réel. Le M5StickC utilise ensuite le protocole MQTT pour transmettre les informations à AWS IoT Core. Les messages sont publiés dans un topic MQTT permettant ainsi de les identifier et de leur appliquer une règle IoT qui les transférera à la partie Analytics.
- La partie analyse des données met en avant le stockage des données, leur traitement (nettoyage et normalisation) et leur exploitation. Les données sont réceptionnées via un flux directment dans Amazon Kinesis Firehose puis elles sont stockées dans un bucket Amazon S3. Ensuite les données sont normalisées et nettoyées via AWS Glue Data Brew puis sont compressées au format Apache Parquet. Les données sont ensuite exploitées par Amazon Athena et présentées dans un dashboard au travers d’Amazon QuickSight.
III. Utiliser le M5StickC pour envoyer les données du véhicule vers le cloud AWS
La première étape dans la réalisation de cette solution est de connecter le capteur OBD2 à la voiture via la prise diagnostic prévue à cet effet (voir image ci-dessous). La norme OBD (On Board Diagnostic) a été mise en place au départ par la CARB (Californian Air Resources Board) pour contrôler les émissions polluantes des véhicules. L’arrivée des calculateurs électroniques de gestion du moteur et des capteurs associés a permis aux véhicules de diminuer leurs rejets polluants. L’OBD, en tant que tel, stipule que le véhicule doit, sur toute sa durée de vie, surveiller en permanence le bon fonctionnement du moteur.
Via ce capteur nous pouvons récupérer de nombreuses d’informations sur le véhicule comme : sa vitesse moyenne, sa localisation, le niveau d’huile moteur ou encore la température du moteur. Pour notre cas d’utilisation nous allons récupérer les informations suivantes :
- la consommation journalière
- la localisation du véhicule durant ses trajets
- la vitesse moyenne
Nous utilisons le capteur OBD2 afin de récupérer ces informations et nous utilisons une connexion bluetooth permettant de les transmettres au M5StickC, ce dernier utilise le système d’exploitation FreeRTOS afin d’exécuter un programme chargé de récupérer les données reçues et de les envoyer au service AWS IoT Core via le protocole MQTT.
AWS IoT Core
AWS IoT fournit les services de cloud qui connectent vos appareils IoT à d’autres appareils et services AWS. AWS IoT peut vous aider à intégrer vos appareils IoT dans des solutions basées sur AWS. En connectant vos appareils à AWS IoT les données provenant de ceux-ci peuvent être utilisées par d’autre services du cloud AWS.
Ici, nous allons créér un objet ou « Thing » en anglais via la console qui va réprésenter notre M5StickC côté AWS. Afin de créér l’objet, rendons nous dans la console AWS et cherchons le service AWS IoT Core. Une fois sur la page du service nous allons créer l’objet nommé ici M5Stick_device. Lors de la création de l’objet, nous allons pouvoir générer un cetficat et une clé privé permettant de gérer l’authentification de l’objet :
Une fois l’objet créé côté AWS, nous pouvons initier une connection depuis notre M5Stick vers AWS IoT Core. Dans un premier temps, nous allons récupérer le point de terminaison permettant à l’objet physique de contacter avec AWS IoT Core :
Le point de terminaison va donc pouvoir être utilisé par le programme pour établir la connection via la protocole MQTT. Pour cela, il est nécéssaire d’intégrer le point de terminaison, la clé privée et le certificat permettant de gérer l’authentification. Ces informations sont utilisés dans la programme du M5StickC réalisé via l’IDE UIFlow comme illustré ci-après.
Afin de tester la connection, AWS IoT Core permet de souscrire à un topic dans lequel les messages du M5StickC sont publiés, dans notre cas nous publions les données issues du connecteur OBD2 branché sur le véhicule.
IV. Ingérer et stocker les données sur AWS
L’appareil communicant désormais avec AWS IoT, il faut maintenant mettre en place une règle via AWS IoT Core dont le rôle est de renvoyer les messages vers un flux de diffusion Amazon Kinesis Data Firehose. Il faut donc dans un premier temps créer un flux de diffusion :
- Ouvrez la console Kinesis Data Firehose
- Sélectionnez Create Delivery Stream (Créer un flux de diffusion).
- Sur la page Destination, choisissez les options suivantes :
- Destination – Choisissez Amazon S3.
- Delivery stream name (Nom du flux de diffusion) – Entrez le nom du flux de diffusion.
- Bucket S3 (Compartiment S3) – Choisissez New S3 bucket (Nouveau compartiment S3), tapez un nom de compartiment, choisissez la région, puis choisissez Créer un bucket.
- Choisissez Suivant.
- Sur la page Configuration, conservez les paramètres par défaut dans le cadre de ce didacticiel. Vous devez uniquement sélectionner un rôle IAM permettant à Kinesis Data Firehose d’accéder à vos ressources, comme expliqué dans la procédure suivante.
- Pour IAM Role, choisissez Select an IAM role.
- Dans le menu déroulant, sous Create/Update existing IAM role, choisissez Firehose delivery IAM role.
- Vous accédez à la console IAM.
- Dans la console IAM, conservez les valeurs des champs par défaut, puis choisissez Allow (Autoriser). Vous revenez aux étapes de configuration du flux de diffusion Kinesis Data Firehose dans la console Kinesis Data Firehose.
- Choisissez Suivant.
- Sur la page Review, vérifiez vos paramètres, puis choisissez Create Delivery Stream.
Remarque : afin d’optimiser le traitement des données par la suite, nous utilisons la fonctionnalité de compression au format Parquet proposée par Amazon Kinesis Data Firehose.
Une fois le flux de diffusion créé, via AWS IoT Core, créez une action qui envoie des événements à un flux de diffusion Kinesis Data Firehose existant :
- Lorsque vous créez une règle dans la console AWS IoT, sur la page Créer une règle, sous Définissez une ou plusieurs actions,
- Choisissez Ajouter action.
- Choisissez Envoyer des messages à un flux Amazon Kinesis Firehose.
- Choisissez Configurer une action.
- Pour le Nom du flux, choisissez un flux de diffusion Kinesis Data Firehose existant.
- Dans le champ Séparateur, choisissez un caractère de séparation à insérer entre les enregistrements.
- Pour le IAM nom du rôle, choisissez un rôle IAM existant ou Créer un nouveau rôle.
- Choisissez Add action.
V. Nettoyer et enrichir les données
Les données brutes arrivent désormais en temps réel dans notre bucket S3, afin de pouvoir les exploiter de la meilleure manière nous allons nettoyer et normaliser ces données. Cette étape est appelée le « feature engineering » et consiste dans un premier temps à sélectionner les données intéressantes pour notre cas d’utilisation puis dans un second temps à travailler la donnée afin de la rendre exploitable par nos outils d’analyse d’une part et par nos algorithmes d’apprentissage automatique d’autre part.
Afin d’effectuer ce travail, nous avons choisit le service AWS Glue Data Brew et ce afin de faciliter la création de job transformant la donnée sans utiliser de code. En effet, AWS Glue DataBrew est un outil visuel de préparation de données qui permet aux analystes de données et aux Data Scientists de nettoyer et de normaliser les données pour les préparer à l’analyse et à l’apprentissage automatique. Vous pouvez choisir parmi plus de 250 transformations prédéfinies pour automatiser les tâches de préparation des données, le tout sans avoir à écrire de code. Ce service est une abstraction du service AWS Glue qui est notre service d’ETL serverless. Dans cet article, le choix d’utiliser AWS Glue Data Brew vient du fait que nous souhaitons montrer comment nous pouvons construire notre solution assez rapidement et facilement en s’affranchissant de la rédaction de code.
La première étape consiste à créer un « dataset » ou jeux de données en français et ce afin d’indiquer à AWS Glue Data Brew dans quel bucket se trouvent les données à nettoyer. Ici, nous constatons que les données sont bien stockées dans un bucket S3 au format Parquet.
La deuxième étape consiste à créer un projet. En créant le projet, nous créons un environnement dédié à la mise en place de nos transformations avec des ressources de calcul qui vont nous être allouées à la demande afin d’appliquer des transformations.
Une fois le projet créé, AWS Glue Data Brew se sert du dataset définit précédemment afin d’extraire un echantillon des données sur lesquels nous allons pouvoir appliquer des transformations à la volée. Les différentes transformations que nous appliquons sont ensuite ajoutées dans l’onglet « Recipe » ou recette en français visible à droite de l’écran. L’idée ici étant de définir une liste de transformations testées sur l’échantillon et que nous voulons appliquer ensuite à l’ensemble de nos données. Cette recette est utilisée pour créer le job final permettant d’appliquer les transformations sur la totalité de notre jeu de données. Dans notre cas, nous retirons les unités présentes dans les données qui ne nous sont pas utiles ici comme par exemple les caractères non désirés dans fuel_level. Une fois que vous avez effectué toutes vos transformations sur l’échantillon, cliquez sur « Create job ». Le service créé un job basé sur toutes les transformations que vous avez ajoutées dans la recette.
Une fois le job créé, ce dernier peut être lancé afin d’appliquer les transformations sur le jeu de données. Les données avec les transformations effectuées sont ensuite stockées dans un répertoire de votre compartiment S3 de votre choix.
VI. Requêter et visualiser les données sur AWS
Nous allons maintenant mettre en place la dernière partie de notre architecture en intégrant les services de consommation des données et de visualisation. Pour cela nous allons utiliser deux services : Amazon Athena et Amazon Quicksight.
Amazon Athena
Amazon Athena est un service de requête interactif qui facilite l’analyse des données dans Amazon S3 à l’aide de la syntaxe SQL standard. Athena fonctionne sans serveur. Il n’existe aucune infrastructure à gérer et vous ne payez que pour les requêtes que vous exécutez. Vous pouvez accéder au détail des prix sur cette page.
Amazon Quicksight
Amazon QuickSight est un service rapide d’aide à la décision (BI) basé sur le cloud qui vous permet de fournir des renseignements à tout collaborateur de votre entreprise.
En tant que service entièrement géré, Amazon QuickSight vous permet de créer et de publier facilement des tableaux de bord interactifs qui incluent des aperçus générés par des inférences de modèles de Machine Learning. Ces modèles sont déjà pré-entrainés pas AWS et mis à disposition via le service Amazon QuickSight. Vous pouvez ensuite accéder aux tableaux de bord depuis n’importe quel appareil et les intégrer à vos applications, vos portails et vos sites web.
Différents types d’analyse
Dans cet article, nous avons analysé les données remontées par un véhicule et nous avons pu obtenir plusieurs visualisations de nos résultats :
- Dans la première figure en haut à gauche, nous observons la consommation en fonction du type de carburant utilisé. Nous pouvons constater que pour la même consommation de carburant, nous avons pu parcourir d’avantage de distance avec le carburant E10 qu’avec du SP98 (voir ici les différences entre les carburants).
- En dessous, nous avons collecté les positions du véhicule que nous avons croisées avec sa vitesse moyenne ce qui nous permet de visualiser les trajets effectués par la voiture mais aussi la vitesse moyenne par zone.
- Les trois autres graphiques nous montrent respectivement la moyenne de la charge du moteur de la voiture, la vitesse moyenne par jour et la consommation moyenne par jour.
Dorian Richard, Solutions Architect (EMEA) chez Amazon Web Services France, il accompagne les clients français dans leur transformation digitale et leur adoption du cloud.