Ma domotique avec le système Angharad, troisième génération

Source: LinuxFR – les dépêches
Liens: Ma domotique avec le système Angharad, troisième génération
Ma domotique avec le système Angharad, troisième génération

Angharad gère les lumières, les thermostats, les interrupteurs, les capteurs, les images des caméras, la musique.

C’est mon système domotique maison à base de C, d’API REST et de client Web avec plein de JQuery dedans. Dans sa 3e génération, c’est un ensemble de bibliothèques gérant les protocoles Z-Wave et Taulas pour créer facilement plein de modules domotiques. L’API est documentée sur GitHub. Sagremor, le client Web écrit avec AngularJS, permet de tout piloter.

Angharad web client

Sommaire

Préambule

Il y a quelques deux ans de ça, j’ai parlé de mon système domotique maison à base d’API REST et de client Web avec plein de JQuery dedans. Depuis, j’ai continué ce projet avec entrain et il en est maintenant dans sa 3e génération : Angharad sur GitHub.

Pourquoi 3e génération et pas version 3.0 ? Parce qu’au début, c’était pas mal un serveur autonome, mais avec le temps, c’est devenu un ensemble de logiciels qui forment un écosystème et se parlent entre eux via des protocoles ad hoc.

Pourquoi je n’ai pas parlé de la 2e génération ? Surtout parce qu’elle n’est pas venue en une seule fois ; les idées et les améliorations sont venues petit à petit pendant l’année qui a suivi mon premier journal. Les principales améliorations ont été l’ajout du support de Z-Wave, l’ajout de services Web en PHP pour gérer les photos et les flux d’une instance Motion et les lecteurs de musique avec mpd.

Cheminement

Puis je voyais AngularJS et je voyais aussi que mes API REST étaient quand même pas super propres : que du status 200, même en cas d’erreur, et je me disais que supporter une autre base de données, normaliser par‐ci, uniformiser par‐là aurait été pas mal.

Et puis, je me demandais si les service annexes, caméra et musique, pouvaient être intégrés facilement à mon idée de serveur d’API REST en C, parce que j’aime bien le C.

Et j’ai commencé un nouveau module pour brancher un capteur de température à un Raspberry Pi et y accéder avec une API REST et j’ai trouvé que, même en réutilisant mon code, c’était long et fastidieux pour coder un simple service Web.

Je me suis donc mis à faire des bibliothèques qui me faciliteraient la manipulation des requêtes HTTP (celui‐là, j’en ai déjà parlé il n’y a pas très longtemps), les logs ou encore les requêtes SQL.

Je n’ai pas inventé l’eau chaude non plus, mais quand je cherchais des bibliothèques existantes, je n’en trouvais pas qui me paraissaient simples, efficaces et pas trop lourdes.

Angharad, ça fait quoi concrètement ?

Cela gère les lumières, les thermostats, les interrupteurs, les capteurs, les images des caméras, la musique. Cela automatise tout ça avec des scripts et des tâches planifiées, ça gère des alertes, et ça supervise les données également.

Domotique pure

Pour la partie domotique pure (lumières, interrupteurs, thermostats, capteurs), ça gère le protocole Z-Wave via la bibliothèque Openzwave et une clef USB Z-Wave.

Cela gère aussi le protocole Taulas qui est une évolution du protocole de communication que j’avais mis en place avec les Arduinos du début. Donc en utilisant des Arduinos ou autre chose, du moment que ça respecte le protocole, ça parle avec le serveur.

Monitoring avec Angharad

On peut rajouter d’autres protocoles domotiques si ça nous chante, il « suffit » de programmer sa bibliothèque qui implémente les bonnes fonctions, on la compile, on la copie dans le répertoire dédié, on recharge les modules avec l’API Kivabien© et, hop, on a un nouveau type de périphérique, sans même avoir à relancer le serveur, grâce à la magie de dlopen() et dlsync().

Autres services

There is no IOT, just devices dedicated to a simple task.
Pour les autres services (caméras, musique, etc.), on utilise un principe similaire avec des bibliothèques compilées et chargées pendant l’exécution. Là, le système est plus permissif et autorise à créer ses propres API et faire ses propres accès à la base de données.

Motion

Cela permet d’accéder aux flux temps réel et aux images enregistrées par un service Motion.
Pour accéder aux images, il faut que le serveur Angharad puisse accéder au répertoire sur lequel sont les images Motion, donc un répertoire réseau ou quelque chose du genre.
Pour accéder au flux, c’est directement grâce à l’adresse URL fournie au service. J’ai essayé de proxyfier le flux MJPEG, mais sans grand succès…

MPD

Chez moi, j’ai placé des Raspberry Pi dans pas mal de pièces, branchés sur des haut‐parleurs. La plupart du temps, j’y fais jouer une webradio locale que j’ai créée via LiquidSoap et Icecast. J’ai donc limité les commandes MPD à stop, play, pause, changer le volume et lancer une liste de lecture. Mais, bon, lister les artistes, albums, chansons, fichiers ne serait pas hyper compliqué à gérer.

Jukebox Angharad

Liquidsoap

D’ailleurs, ladite webradio est un peu gérable elle aussi, on a accès aux infos des dix derniers morceaux joués, et on peut faire play, pause, stop et next sur la radio.

Application cliente

On gère sa maison via Sagremor, qui est une application AngularJS 1.5 avec du Bootstrap dedans. Elle permet de manipuler toutes les API. Je ne suis pas très fort en ergonomie et encore moins en design eye candy, mais l’interface a l’air assez intuitive, au moins pour les commandes de base (allumer, éteindre, etc.), pour que ma blonde ou un invité s’en serve sans que j’ai à expliquer.

Pour le coté pratique, j’ai deux tablettes Android Ubislate 7Ci, j’y ai collé un Firefox qui fait tourner l’application cliente, et je les ai placées à chaque entrée chez moi juste à côté de la porte.

J’ai toujours le projet de faire une application cliente Android et, maintenant que j’ai une machine un peu plus récente, j’ai pu m’y mettre. Parce que développer des applications Android quand on ne peut pas lancer l’émulateur Android sur sa machine, c’est pas facile…

Essaye donc !

C’est tout libre, les bibliothèques sont en LGPL, les programmes serveurs GPL v3, l’application cliente est sous licence MIT.

Je n’ai pas la prétention de faire mieux que les autres, comme Domoticz ou Jeedom, juste d’avoir un serveur domotique qui réponde à mes besoins ; et puis c’est un bon moyen d’apprendre des nouvelles technos et de tester des concepts.

J’aimerais bien fédérer des amateurs autour de ce projet, mais je ne sais pas trop par où commencer. S’il y a des curieux pour tester et participer, c’est avec plaisir !

Lire les commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *