URL: https://linuxfr.org/users/superzen/journaux/ma-domotique-avec-le-systeme-angharad-3e-generation Title: Ma domotique avec le Système Angharad, 3e génération Authors: Babelouest Date: 2016年09月28日T18:32:39+02:00 License: CC By-SA Tags: langage_c, angularjs, angharad, firefox, c et domotique Score: 36 # Préambule Il y a quelques deux ans de ca, j'ai parlé de mon [système domotique maison](https://linuxfr.org/users/superzen/journaux/angharad-mon-systeme-de-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](https://github.com/babelouest/angharad) Pourquoi 3e génération et pas version 3.0 ? Parce que au début c'était pas mal un serveur autonome, mais avec le temps c'est devenu un d'ensemble de logiciels qui forment un écosystème et se parlent entre eux via des protocoles ad hoc. Pourquoi j'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](https://fr.wikipedia.org/wiki/Z-Wave), l'ajout de webservices en PHP pour gérer les photos et les flux d'une instance [Motion](http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome) et les lecteurs de musique avec [mpd](https://www.musicpd.org/). # 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 RPi et y accéder avec une API REST, et j'ai trouvé que même en réutilisant mon code, c'était long et fastidueux pour coder un simple webservice. J'en ai donc commencé par faire des lirairies qui me faciliteraient la [manipulation des requêtes HTTP](https://github.com/babelouest/ulfius) (celui-là j'en ai déjà [parlé](https://linuxfr.org/users/superzen/journaux/ulfius-framework-pour-faire-des-api-web-en-c) y'a pas long), les [logs](https://github.com/babelouest/yder), ou encore les [requêtes SQL](https://github.com/babelouest/hoel). J'ai pas inventé l'eau chaude non plus, mais quand je cherchais des librairies existantes, j'en trouvais pas qui me paraissaient simples, efficaces, et pas trop lourdes. # Angharad, ca fait quoi concrètement ? Ca gère les lumières, les thermostats, les interrupteurs, les capteurs, les images des caméras, la musique. Ca automatise tout ca avec des scripts et des tâches planifiées, ca gère des alertes, et ca monitore les données aussi. ## Domotique pure Pour la partie domotique pure (lumières, interrupteurs, thermostats, capteurs), ca gère le protocole Z-Wave via la librairie [Openzwave](http://www.openzwave.com/) et une clé usb Z-Wave. Ca 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 ca respecte le protocole, ca parle avec serveur. On peut rajouter d'autres protocoles domotiques si ca nous chante, il _"suffit"_ de programmer sa [librairie](https://github.com/babelouest/benoic/tree/master/device-modules) 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 device sans même avoir à relancer le serveur grâce à la magie de dlopen/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 librairies 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 BD. ### Motion Ca permet d'accéder au 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, on y accède directement grâce à l'url qu'on a 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ées sur des haut-parleurs. La plupart du temps, j'y fais jouer une webradio locale que j'ai créé via liquidsoap et icecast. J'ai donc limité les commandes MPD à stop/play/pause, changer le volume, et lancer une playlist. Mais bon, lister les artistes, albums, chansons, fichiers serait pas hyper compliqué à gérer. ### 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/next sur la radio. ## Application cliente On gère sa maison via [Sagremor](https://github.com/babelouest/sagremor) qui est une application AngularJS 1.5 avec du [Bootstrap](https://fr.wikipedia.org/wiki/Bootstrap_%28framework%29) 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](http://ubislate.ca/product.php?prodid=1), j'y ai collé un Firefox qui fait tourner l'application cliente, et je les ai placées à chaque entrée chez moi juste à coté 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 peut pas lancer l'émulateur Android sur sa machine, c'est pas facile... # Essaye donc! C'est tout libre, les librairies sont LGPL, les programmes serveur GPL v3, l'appli client est sous licence MIT. Je n'ai pas la prétention de faire mieux que les autres comme [Domoticz](https://domoticz.com/) ou [Jeedom](https://www.jeedom.com/), 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. Si il y a des curieux pour tester et participer, c'est avec plaisir!

AltStyle によって変換されたページ (->オリジナル) /