"MyCam" Episode 4 : Une Camaro totalement connectée

Sécurité du Cloud

Des nouvelles du front

6 mois se sont écoulés depuis le dernier épisode.

Camaro

La Camaro était équipée d’un ordinateur, d’une connexion Internet et d’une application permettant de visualiser, avec des temps de réponse perfectibles, les paramètres moteur en temps réel depuis l’autoradio ou depuis l’iPad embarqué.

Entre temps, beaucoup de choses ont évolué et j’ai pu procéder à de nouvelles expérimentations…

Fiabilisation de la connexion Internet

La première version de la connexion Internet était une clé 3G sur l’ordinateur embarqué et un switch WiFi. Le système fonctionnait, mais la qualité de la liaison Internet était moyenne : La réception n’était pas optimale (la camaro est un char d’assaut blindé) et pas suffisamment fiable en mouvement.

Siege Camaro

La connexion Internet a finalement été stabilisée au moyen d’un routeur Netgear 3G / 4G.

La stabilité de la connexion Internet est remarquable, surtout en mouvement. Peu de coupures sous Deezer, tant qu’on ne traverse pas la rase campagne et les pays frontaliers.

A l’arrêt, dans les rassemblements, c’est un véritable hot-spot WiFi.

C’est le seul composant de l’installation qui reste visible pour l’instant. Son camouflage (déport de l’antenne WiFi) sera géré ultérieurement.

Réalisation d’un radar de proximité avec sonar ultrason et caméra

Le radar a été développé sur la base d’une carte contrôleur Mini Maestro (http://www.pololu.com/product/1350) qui permet de générer simplement un signal PWM pour le contrôle d’un sonar Maxbotix (http://www.pololu.com/product/792).

Connecteur

Le contrôleur se connecte à l’ordinateur via une prise USB. Il se pilote via une interface série classique.

Le fonctionnement est satisfaisant, le radar détecte des objets à partir de 5-6 mètres et jusque 10 cm environ. Parfait pour garer un tank.

OpenCV

Les tests ont été assez poussés. Un programme a été développé sur la base de la librairie OpenCV (http://opencv.org). Le programme permet de traiter l’image d’une webcam et d’ajouter en surimpression la valeur mesurée par le capteur de distance.

Le système « filme la route » et renvoie l’image sur l’écran de l’autoradio ou de l’iPad avec, en overlay, l’affichage de la distance de l’objet qui passe devant le sonar.

Le projet est resté à l’état de prototype pour l’instant : son implémentation dans la voiture nécessite de passer des câbles entre le compartiment moteur et l’habitable. Un rendez-vous est pris chez un garagiste fin juillet pour réaliser l’opération.  Je dois ensuite démonter l’intégralité du bouclier avant de la voiture pour dissimuler les radars et la caméra. Beaucoup de travail en perspective, j’espère pouvoir montrer des photos et vidéos à la rentrée.

Une fois finalisé, le code source et les plans du radar seront publiés en Open Source.

Intégration de l’ordinateur dans l’habitacle

L’ordinateur a finalement été remplacé par un Raspberry Pi désormais parfaitement intégré dans l’habitable. Plus aucun fil ne dépasse, et il faudra chercher un peu avant de le trouver.

GPS

La réception GPS, initialement assurée avec un GPS bluetooth a été améliorée, pour des raisons de sécurité, mais également parce que la précision du modèle précédent n’était pas satisfaisante.

J’ai opté pour un module GPS directement connecté au Raspberry, adieu le Bluetooth.

Le modèle retenu est un module « Adafruit Ultimate GPS Breakout » (http://www.adafruit.com/products/746).

 

 

Voici à quoi ressemble le montage Raspberry Pi + Module GPS + Module Pololu + Sonar (à terme il y aura plusieurs sonars) :

Module Adafruit

Un Cloud sécurisé pour les données des objets connectés

La principale innovation et la principale raison pour laquelle je n’ai pas trop avancé sur la voiture, c’est le développement d’un « Framework Cloud pour Objets Connectés » qui a pour but de collecter, de transporter, de centraliser et de visualiser toutes les données des capteurs.

Dans le monde des objets connectés, il y a toujours une « application pour ça ». Le problème, si on possède 10 capteurs différents, c’est qu’il faut 10 applications différentes. Comment fédérer les données d’une chaudière à gaz, d’une voiture connectée, de capteurs de température, du temps de réponse à Google ou du nombre d’attaques sur un firewall applicatif ?

Personnellement j’ai choisi de développer une « box universelle » et d’envoyer les données dans un cluster ElasticSearch (http://www.elasticsearch.org/), avec un joli portail de restitution :

Cluster ElasticSearch

Le fonctionnement, l’intégration et la gestion au quotidien sont assez simple et le système global est robuste (ie : ça marche vraiment bien). La mise en œuvre sécurisée est plus délicate, car plusieurs problématiques doivent être prises en compte :

  • L’hétérogénéité des capteurs (type d’information et technologie de communication)
  • L’envoi des données depuis des emplacements fixes (maison),
  • L’envoi des données depuis des connexions potentiellement instables (voiture, drone)
  • L’envoi des données et la gestion des capteurs en temps réel (ou presque)

La solution technique choisie est une « Box connectée » qui se charge de la collecte des données et de l’interaction avec les objets. La Box en question aurait pu être une box domotique à plusieurs centaines d’euros, mais, vous l’aurez compris, j’ai préféré un Raspberry Pi à 31 euros. Le Raspberry Pi est une plateforme de choix pour ce genre de projet notamment pour sa faible consommation électrique, son faible encombrement et la multitude de technologies et protocoles de transport qu’il saura gérer : WiFi, Bluetooth, GPS, Infrarouge, 1-Wire, Z-Wave, Zigbee…

La connexion entre les Box et le Cloud est sécurisée par un certificat numérique + une clé secrète qui permet l’appel à divers Web-Services REST / JSON. Depuis le Cloud il est possible de gérer un nombre illimité de box :

Webservice REST

Et pour chacune de ces box il est possible de lui affecter un nombre illimité de capteurs. Ici un screenshot des capteurs gérés par ma première box « domotique » :

Webservice REST/JSON

Sur le Raspberry Pi, sous Linux, une application python a été développée pour gérer la collecte et l’envoi des données dans le Cloud. Plus qu’une application, c’est un véritable Framework qui a été développé.
Je ne rentre pas dans le détail du logiciel embarqué sur le Pi pour l’instant, mais grosso modo son fonctionnement est le suivant :

Application Python

En parallèle de cette application de gestion, un autre processus est en charge du spooling des données collectées et de la remontée dans le Cloud. En cas de perte de connexion Internet, les données sont spoolées localement sur la box et renvoyées dans le Cloud dès que la connexion est rétablie. Le moteur de transport repose sur l’utilisation de clients / serveurs rsyslog (http://www.rsyslog.com).

Les processus de communication entre le Raspberry Pi et le Cloud reposent sur des web-services REST/JSON avec un chiffrement SSL et une authentification mutuelle par certificat numérique. La configuration des capteurs s’effectue depuis l’application, ici la configuration minimaliste pour le port série du GPS :

Sensors

Bilan après 3 mois d’usage et de tests intensifs

Ca fonctionne ! Et pour tout dire c’est vraiment bluffant : Le volume de données indexé reste très modeste (2,5 Go) pour plusieurs millions d’enregistrements avec les logs du site Web. L’affichage et la recherche de données se fait en temps réel et sans aucun temps de latence. ElasticSearch fonctionne à merveille.

Tableau de bord

Le projet a « fortement dévié » et je me sers aujourd’hui du portail pour visualiser toute sorte de données.

Ci-contre un screenshot de l’interface de pilotage de l’activité du serveur Web.

Sur plusieurs pages on peut trouver la nature des requêtes http, les attaques levées par le firewall Applicatif (Vulture : Un article de blog est en préparation sur Vulture + Elasticsearch) et divers métriques permettant de détecter des utilisations anormales.

Ce système m’a par exemple permis de découvrir un bug dans la box : En corrélant le temps de réponse Google (ie : le bon fonctionnement de ma connexion Internet) avec le dernier appel reçu d’une box, j’ai pu m’apercevoir qu’en cas de temps de réponse trop long (ex : perte provisoire de connexion Internet) l’application de remontée de données plantait.

Pour les curieux, je vous invite à vous renseigner sur le projet « S.A.M.I.» de Samsung (http://www.samsung.com/us/globalinnovation/innovation_areas/). Peu d’informations techniques sont encore disponibles sur le sujet – mais dans l’idée vous verrez que les plateformes Cloud / IoT sont dans l’air du temps  Toujours sur le même sujet, Google vient de racheter, via Nest, la société Dropcam, qui propose une caméra connectée remontant les informations dans son Cloud (http://www.linformaticien.com/actualites/id/33477/domotique-2-0-les-came...). Pour 150 dollars la caméra et 99 dollars par an pour  l’abonnement Cloud et 1 seule semaine d’historique glissant… je préfère mon Cloud privé et sécurisé avec l’historique que je souhaite.

Encore faut-il être capable d’interfacer n’importe quel objet connecté avec mon Cloud… nous en reparlerons ultérieurement, en abordant l’épineux problème de la sécurité des objets connectés :).

Prochaines étapes

Pour l’instant, le système embarqué dans la Camaro ne remonte que les coordonnées GPS. Une fois le câble passé entre l’habitable et le compartiment moteur, toute la télémétrie de la voiture sera remontée en temps réel dans le Cloud: Vitesse, régime moteur, températures, pression d’huile, pression des pneus, consommation…

En exploitant des fonctions analytiques sur ElasticSearch il sera possible de faire des règles de corrélation (ex : consommation/performances vs température extérieure vs pression des pneus…) et de suivre les paramètres de fonctionnement de la voiture dans le temps ou lors d’évènements particuliers). Une fonction intéressante pourrait également être de faire des comparaisons de paramètres entre chaque plein d’essence, pour valider l’impact du carburant sur les performances de la voiture (toutes les marques de carburant se valent-elles ?).

Bref, les possibilités sont assez nombreuses et le terrain de jeu est très vaste ! J’espère revenir rapidement présenter le système caméra / radar et surtout, le tableau de bord avec toute la télémétrie de la voiture.

Jeremie's Hub

D’autres sujets sont dans les cartons : un Drone autonome et connecté et divers projets autour de l’impression 3D.

On reparlera d’impression 3D dans le projet MyCAM car j’ai prévu d’imprimer quelques pièces en ABS pour le support de la caméra embarquée… 

En attendant, n’hésitez pas à me contacter pour toute question sur ce projet ou pour me soumettre de nouvelles idées à explorer. Je ne me doutais pas que ça intéresserait autant de monde… merci à toutes les personnes que j’ai pu croiser dans cette aventure, elles se reconnaitront :).

Jérémie Jourdin, Responsable R&D, Advens