Création d'un plugin Jeedom pour véhicule électrique

Création d'un plugin Jeedom pour véhicule électrique

J'en ai déjà parlé, j'ai un véhicule électrique. Ce dernier, comme de nombreux véhicules, aujourd'hui, est pilotable via une application mobile. J'ai un réseau de domotiques basé sur Jeedom et j'ai tenté d'intégrer ma voiture dans mon réseau. Voici comment ça s'est déroulé.

Ce que j'ai besoin de faire est assez simple. Remonter des données sur l'état le véhicule, tel que le taux de charge de la batterie, si la charge est en cours, si le chargeur est branché, le nombre de kilomètres à l'odomètre. Le but initial est de pouvoir réaliser quelques statistiques sur la consommation du véhicule, en utilisant la baisse de la batterie et l'augmentation du nombre de kilomètres parcourues. Idem pour anticiper les temps de charge. Et de pouvoir idéalement optimiser la charge du véhicule sur les heures de nuits.

Ces données sont bien disponibles dans l'application mobile du constructeur, donc il doit aussi être possible de les récupérer. Je parcours le market Jeedom et le forum, mais rien n'est disponible pour mon véhicule. Je tombe finalement sur un sujet particulièrement intéressant qui parle d'une librairie Node.js qui permettrait en creux de faire ce dont j'ai besoin.

Bonne nouvelle, Node.js et Javascript, j'adore et j'en fais tous les jours. Mauvaise nouvelle, pour m'interfacer avec Jeedom, je vais devoir développer une extension en PHP, et ça, je n'en ai pas fait depuis 7 ou 8 ans. Dès fois qu'un autre développeur soit sur le coup, je tente ma chance sur le forum, mais visiblement, il n'y a que des utilisateurs et pas développement en cours, j'annonce mes intentions et je me lance.

Point de vue architecture, je vais mettre en place un système de communication simple entre la partie PHP/Jeedom et la partie Node.js/Véhicule. Ce genre d'interface est prévu par Jeedom avec ce qu'ils appellent des "Démons", mais il n'existe pas de protocole. J'ai donc fais le choix le plus simple, le HTTP. On a donc l'extension Jeedom qui gère la cadence et la persistance des données, alors que de l'autre côté, le "démon" Node.js gère les interactions avec le service du constructeur.

Le constructeur ne fournit pas beaucoup d'informations, mais suffisamment pour que j'ai besoin d'étendre le périmètre des quelques informations que j'ai initialement prévue. Sur le forum, le sujet prend aussi de l'ampleur, avec des personnes possédant des véhicules hybrides et à carburant et je sens bien que quitte a publier une extension, autant qu'elle fonctionne pour tous. Je remonte donc, le maximum d'informations et je rends le tout configurable par l'utilisateur en fonction de son type de véhicule, de motorisation et des options de ce dernier. Idem pour les actions, tous les véhicules de la marque ne peuvent pas démarrer ou arrêter un cycle de charge, on lancer le préchauffage de l'habitacle, ils faut donc tout prévoir et permettre à l'utilisateur de configurer.

Je fais finalement le widget, sur lequel tout apparaît, avec une partie visuelle dynamique (à base de svg) pour afficher tous les éléments remontés par l'API. Le front de Jeedom est un poil vieillissant avec du JQuery 😢 partout, et comme tous les plugins sont conçus avec, ce n'est pas prêt de changer.

En quelques journées de développement, étalé sur le temps libre, je sors une beta, testé par quelques membres volontaires de la communauté et je passe les touts en version stable. C'est aujourd'hui accessible au public.

Derrière la magie

D'écrit comme ça, le développement semble linéaire et simple, mais ce n'est pas tout à fait le cas.

  • J'ai eu beaucoup de difficultés avec la partie Jeedom qui n'est que faiblement documenté, j'ai passé un temps considérable à faire de l'ingénierie inverse (reverse l'engineering.) sur le code de Jeedom, mais aussi sur des extensions open sources existantes.
  • Le widget a été particulièrement pénible à réaliser, les APIs javascript n'étant pas documentés du tout et le code ayant une organisation pour le moins hasardeuse, j'ai choisi de ne pas l'utiliser et de faire les choses moi-même.
  • La librairie d'interconnexion avec le véhicule a été développée et testée spécifiquement avec certains véhicules, les véhicules thermiques ou un peut anciens ne sont pas gérés, j'ai donc due ré-implémenter une partie de la librairie.
  • Le plugin dispose de beaucoup d'options et de paramètres de configuration et l'adage "plus t'en met plus t'en a" de complexité, de bugs, [fill the blank], est particulièrement vrai.
  • L'ouverture d'un compte développeur ainsi que l'affectation des droits permettant de publier des extensions a pris au minimum 1 mois et demi.

Bilan

Après la phase de découverte qui n'est pas nécessaire simple ni intuitive, la réalisation d'un plugin jeedom reste une bonne expérience de recherche et de création. La communauté et vraiment demandeuse de nouvelles fonctionnalités. Pour être honnête j'en ai fait deux autres dans la foulée, une fois le compte développeur ouvert, ca vas plus vite 😉.