Heyu, X10 (domotique)
Il y a longtemps que je souhaitais écrire un billet sur la domotique et ainsi, faire partager ma première expérience de « Geek propriétaire« . En effet, l’une des premières choses que j’ai bricolée dans ma maison, il y a maintenant quelques années, a été l’ajout d’un poil d’automatisation. Un projet personnel pour agrémenter mon petit confort et surtout, je dois bien l’avouer, prendre un pied monstrueux en bidouillant à l’échelle d’une maison…
Le but, ici, n’est pas de fournir un dossier détaillé, mais plutôt de faire un témoignage ou donner un retour d’expérience sur ce que peut-être l’amusante mise en place d’une petite solution de domotique.
L’idée de départ était de pouvoir faire des choses relativement simples, telles que :
- Fermer les volets, couper l’alimentation de certains appareils au lieu de les laisser en veille ( TV, ampli, moniteurs, imprimantes) et éteindre les lumières lorsque l’alarme est activée,
- Faire l’opération inverse lorsque l’alarme est désactivée,
- Allumer automatiquement certaines lumières à la tombée du jour,
- Ouvrir automatiquement les volets le matin en guise de réveil,
- Mettre automatiquement en marche mon serveur de sauvegardes chaque nuit et l’éteindre une fois les backups terminés,
- etc…
Cette installation, en plus du respect évident des trois lois de la robotique, se devait de ne pas négliger le WAF (Woman Acceptance Factor). En bref, une simplicité maximale d’utilisation et le moins d’aléas possible – Hors de question, pour la pérennité du projet, que la TV s’éteigne par « accident » en plein dénouement d’un épisode des « Experts » , la série préférée de Maman…
1 – Une norme et du matériel,
Pour mener à bien ce projet, j’ai utilisé la technologie courant porteur X10… Un système qui n’est plus tout jeune (1975), mais qui a le mérite d’être simple à mettre en oeuvre, toujours fonctionnel et pas trop cher (enfin… tout est relatif).
Il existe deux principaux types de modules : les contrôleurs et les récepteurs. Le système X10 utilise le réseau électrique existant pour diffuser des trames aux différents modules. Les trames sont structurées avec une partie adresse et une partie commande (ou ordre).
Une adresse X10 est composée :
- d’un code maison, sur 4 bits, de A à P,
- et d’un code appareil, sur 4 bits également, de 1 à 16.
Comme nous sommes sur un principe de diffusion, nous pouvons configurer plusieurs modules avec la même adresse – tous les récepteurs voient passer les trames, mais n’exécutent l’ordre que si l’adresse leur correspond.
Ci-dessous, la liste non exhaustive des ordres qui peuvent être transmis :
- Marche (ON), Arrêt (OFF),
- Variation croissante (BRIGHT + Valeur), variation décroissante (DIM + Valeur),
- Toutes les lumières allumées (ALL LIGHTS ON) ou éteintes (ALL LIGHTS OFF),
- Tout allumé, sans distinction du type d’appareil (ALL ON) ou tout éteint (ALL OFF).
Récepteurs (exemples) :
Les récepteurs, comme leur nom l’indique, vont être réceptifs aux ordres X10 pour effectuer l’action commandée. Le tableau ci-dessous présente quelques exemples de matériels :
Contrôleurs (exemples) :
Les contrôleurs sont capables de générer des trames X10 sur le réseau.
2 – Des logiciels,
MisterHouse
MisterHouse est probablement le projet le plus complet de domotique libre.
- Il supporte des matériels allant bien au-delà du X10,
- Est capable d’exécuter des actions basées sur de la reconnaissance vocale, des évènements horaires, réseaux, matériels, etc…,
- Dispose d’une interface web,
- Couplé à un magnétoscope numérique (VCR), permet la programmation d’enregistrements,
- S’interface avec les mails, le téléphone,
- Gère des caméras de surveillance,
- Produit de la synthèse vocale,
- etc…etc…etc…
Bref, du lourd, du trop lourd pour un démarrage en douceur… Je voulais bricoler avec mes petites mimines et là, c’était vraiment trop d’un coup…
ControlX1O::CM11
ControlX10::CM11 est la librairie Perl MisterHouse utilise pour la gestion du X10. Elle est relativement facile à utiliser. Je m’en suis servi pour coder un petit utilitaire, « TuX10« , qui permettait de gérer des modules X10, d’envoyer et recevoir des trames, le tout en ligne de commandes. Après avoir « pissé » un bon nombre de lignes et mon programme quasi finalisé, j’ai découvert « Heyu« , qui fait la même chose….Mais en mieux… Ce n’est pas grave, un peu de code aide souvent à comprendre pas mal de choses…
Heyu
Heyu est donc un utilitaire, qui fait la même chose que TuX10, mais en mieux
Ils s’utilise, dans un usage courant, de la façon suivante :
# heyu <Commande> <Module>
Par exemple, dans l’hypothèse ou la lumière de mon salon est adressé « A1 »,
Pour l’allumer :
# heyu ON A1
Pour l’éteindre :
# heyu OFF A1
Pour l’allumer avec un variation à 50% (le niveau doit être donné entre 1 et 22) :
# heyu DIMB A1 11
C’est très pratique pour allumer un appareil à heure fixe à l’aide d’un simple cron…
Exemple : allumage de mon serveur de sauvegardes, qui porte l’adresse « C1 », tous les jours à 23H00 :
# CRONTAB 00 23 * * * /usr/local/bin/heyu ON C1 |
Heyu dispose d’une multitude de commandes et d’options. Nous en verrons quelques unes dans la suite, pour le reste :
# heyu help
ou de façon plus classique :
# man heyu
3 – Un scénario,
Les modes de fonctionnement
J’ai imaginé trois modes de fonctionnement , en fonction de ma présence et de mon activité dans la maison : Les modes « présence », « sommeil » et « absence ».
Le mode « Présence »
C’est le mode de fonctionnement normal, quand je suis à la maison.
- Il est déclenché par l’arrêt de l’alarme ou un signal de réveil,
- Tous les appareils sont sous tension (TV, Hifi, matériel informatique, etc…),
- Les volets sont ouverts,
- La lumière du séjour s’allume automatiquement quand la nuit tombe et s’éteint quand le jour se lève – classe !
Le mode « Sommeil »
Ce mode est actif pendant la nuit, quand je dors…
- Activé manuellement via une télécommande ou la console (Signal Réveil OFF),
- Les appareils ne sont plus alimentés,
- Les volets fermés,
- Les lumières éteintes,
- La lumière du séjour/cuisine s’allume à 50% quand une présence est détectée : Juste ce qu’il faut pour y voir suffisamment lors des excursions nocturnes près du frigo. Cette attention permet de ne pas être éblouis et de reprendre tranquillement sa nuit après le casse-croute… c’est important !
- Ce mode peut-être désactivé par un signal de réveil manuel ou automatique, pour passer en mode « Présence » (Signal Réveil ON).
- Le passage en mode « présence » est déclenché automatiquement tous les jours de la semaine à 6h30, pour bénéficier d’un doux réveil à la lumière du jour. ( Nda : Penser à ajouter un mode « vacances »…c’est tôt 6h30 quand on est en RTT !)
Le mode « Absence »
- Déclenché par la mise en marche de l’alarme,
- Identique au mode précédent, mais le seul ordre X10 pris en compte est l’arrêt de l’alarme pour le passage en mode « Présence ».
En clair, on attend juste que l’alarme soit désactivée.
4 – Et du bricolage…
Cher lecteur, si tu as tenu jusque là, c’est le moment où nous allons mettre les mains dans le cambouis… L’expression est d’usage, mais c’est plutôt dans le placo que se logent les petits bidules X10… Mais ne nous égarons pas….
Commençons par un petit état de ces différents bidules équipant la maison.
Les éléments X10 utilisés et leur adresse :
Adresse X10 | Type de module | Description | Ordre ON | Ordre OFF |
---|---|---|---|---|
A1 | Module Lampe | Eclairage Séjour | Allume les lampes du séjour | Eteint les lampes du séjour |
A4 | Module Appareil | Matériel Informatique (Imprimantes, Moniteurs...) | Alimente les appareils | Coupe l'alimentation |
A5 | Module Appareil | Matériel Hifi (TV, Ampli, etc...) | Alimente les appareils | Coupe l'alimentation |
A7 | Module volets roulants | Volets roulants zone jour (séjour, cuisine) | Ouvre les volets | Ferme les volets |
A8 | Module volets roulants | Volets roulants zone nuit (chambres) | Ouvre les volets | Ferme les volets |
A9 | Signal | Signal de passage mode présence / mode sommeil | Signal de réveil | Indique que je vais me coucher |
A10 | Détecteur de mouvements | Détecteur de mouvements Bureau | ON est envoyé quand un mouvement est détecté | OFF est envoyé quand aucun mouvement n'est détecté depuis plus de 2 minutes |
A11 | Détecteur d'obscurité | Détecteur de d'obscurité Bureau | Envoyé quand il fait sombre dans le bureau | Envoyé quand il fait jour dans le bureau |
A12 | Détecteur de mouvements | Détecteur de mouvements séjour | ON est envoyé quand un mouvement est détecté | OFF est envoyé quand aucun mouvement n'est détecté depuis plus de 2 minutes |
A13 | Détecteur d'obscurité | Détecteur d'obscurité séjour | Envoyé quand il fait sombre dans le séjour | Envoyé quand il fait jour dans le séjour |
B1 | Signal | Mode nuit | Envoyé quand le système passe en mode nuit | Envoyé quand le système passe en mode jour |
B3 | Signal | Mode Absence | Envoyé quand l'alarme est armée | Envoyé quand l'alarme est désarmée |
C1 | Module appareil | Serveur de sauvegardes | Allume le serveur de sauvegardes | Arrête le serveur de sauvegardes |
D1 | Flag | Flag Nuit | Est positionné à ON au couché du soleil | Est positionné à OFF au levé du soleil |
Configuration générale :
Ma première idée était de charger la totalité des règles et des macros dans le CM11, pour que le système puisse fonctionner de façon autonome, y compris quand l’ordinateur est éteint. Cependant, j’ai vite changé d’avis… La rom du CM11 est d’une taille plutôt limité et on s’arrache vite les cheveux à gérer des tests qui disparaissent en segmentant un peu les choses. Comme de toute façon, l’ordinateur n’est jamais éteint, j’ai fini par utiliser un fichier de macros par mode. Le bon fichier est uploadé lors d’un changement d’état.
Attaquons la configuration de base de heyu. Le fichier /etc/heyu/x10.conf permet de spécifier le port à utiliser pour l’accès au CM11, un code maison par défaut, de déclarer des alias pour les modules (ce n’est pas obligatoire) et enfin d’affecter l’exécution de scripts à des évènements.
# /etc/heyu/x10.conf - Fichier de configuration HEYU # Port série à utiliser : TTY /dev/ttyS0 # Code maison par défaut HOUSECODE A # Fichier de LOGs LOG_DIR /var/log/ # Nom du fichier contenant les macros à uploader SCHEDULE_FILE x10.sched |
Le système est capable de calculer les heures de couché et de levé du soleil en fonction de la date et de la position géographique.
# Nombre de jours à calculer PROGRAM_DAYS 366 # Position Géographique LONGITUDE E1:30 LATITUDE N43:30 # Mode de calcul DAWN_OPTION FIRST DUSK_OPTION FIRST |
Il est également possible de définir des alias…
# ALIAS
ALIAS lampe_sejour A1 StdLM
ALIAS halogene A2 StdLM
ALIAS test1 A3 StdAM
ALIAS test2 A4 StdAM
ALIAS hifi A5 StdAM
ALIAS vr_jour A7 shutter
ALIAS vr_nuit A8 shutter
ALIAS vr A7,8
ALIAS inter_reveil A9
ALIAS mvt_bureau A10
ALIAS obs_bureau A11
ALIAS mvt_sejour A12
ALIAS obs_sejour A13
ALIAS nuit B1
ALIAS alarme B3
ALIAS sauvegarde C1 StdAM
ALIAS mode_nuit D1 |
Exécution de scripts sur évènement X10.
Quand l’ordre « D1 ON », qui signale la tombé de la nuit est détecté sur le réseau, on crée un fichier sur le système, qui permettra de détecter simplement s’il fait nuit ou pas… Ce flag est positionné quelque-soit le mode de fonctionnement.
# Gestion du mode nuit SCRIPT D1 on anysrc :: touch /var/tux10/NUIT SCRIPT D1 off anysrc :: rm -f /var/tux10/NUIT |
De la même façon, l’ordre « A9 OFF » indique que l’on souhaite passer en mode « sommeil », « B3 ON » en mode « Absence » et « B3 OFF » ou « A9 ON » en mode présence.
# Gestion du mode sommeil SCRIPT A9 off anysrc :: /home/heyu/mode_sommeil.sh SCRIPT A9 on anysrc :: /home/heyu/mode_presence.sh # Gestion du mode absence (alarme) SCRIPT B3 on anysrc :: /home/heyu/mode_absence.sh SCRIPT B3 off anysrc :: /home/heyu/mode_presence.sh |
Toujours à l’heure…
Pour que tout fonctionne parfaitement, il faut s’assurer que l’horloge du CM11 est bien à l’heure… Une nouvelle entrée dans la crontab va effectuer une remise à l’heure régulière grâce à la commande « setclock » d’heyu
# CRONTAB 00 23 * * * /usr/local/bin/heyu ON C1 00 */6 * * * /usr/local/bin/heyu setclock |
Le mode « présence »
Comme nous l’avons vu, ce mode est déclenché soit par désactivation de l’alarme (B3 OFF), soit par un signal de réveil (A9 ON).
Sur l’un de ces évènements, Heyu a été précédemment configuré pour lancer le script « mode_presence.sh« .
Ce dernier envoie les ordres d’ouverture des volets, de mise sous tension des appareils, allume la lumière s’il fait nuit et charge les macros de présence dans la rom du CM11.
mode_presence.sh
#!/bin/bash # mode_presence.sh # Ouverture des volets, mise sous tensions des appareils /usr/local/bin/heyu on A4,5,7,8 # Allumer la lumière, si necessaire if [ -e /var/tux10/NUIT ]; then /usr/local/bin/heyu on A1 fi # Upload des macros si nécessaire cmp -s /etc/heyu/x10.sched.presence /etc/heyu/x10.sched if [ !$? -eq 0 ]; then cp /etc/heyu/x10.sched.presence /etc/heyu.x10.sched /usr/local/bin/heyu upload fi |
Au niveau des macros, on va juste définir un timer qui gère l’allumage et l’extinction automatique des lumières en fonction du jour et de la nuit.
/etc/heyu/x10.sched.presence
# x10.sched.presence # Définition d'un timer tous les jours. # Lance la macro lum_off à l'aurore, # La macro lum_on 10 minutes avant le crépuscule. timer smtwtfs 01/01-12/31 dawn dusk-10 lum_off lum_on # Macro lum_on - Envoie les ordres A1 ON et D1 ON macro lum_on 0 on a1; on d1 # Macro lum_off - Envoie les ordres A1 OFF et D1 OFF macro lum_off 0 off a1; off d1 |
Le mode « absence »
Ce mode est déclenché par l’activation de l’alarme uniquement (B3 ON)
Heyu est configuré pour exécuter le script « mode_absence.sh » lorsque le mode est activé.
Le script envoi les ordres de fermeture des volets, de mise hors tension des appareils, éteint les lumières et charge les macros d’absence.
mode_absence.sh
#!/bin/bash # mode_absence.sh # Fermeture des volets, mise hors tensions des appareils et de l'éclairage /usr/local/bin/heyu on A1,2,4,5,7,8 # Upload des macros si nécessaire cmp -s /etc/heyu/x10.sched.absence /etc/heyu/x10.sched if [ !$? -eq 0 ]; then cp /etc/heyu/x10.sched.absence /etc/heyu.x10.sched /usr/local/bin/heyu upload fi |
Les macros et timers sont sensiblement identiques à l’étape précédente. Nous n’allons gérer que le « flag » D1 indiquant au système s’il fait jour ou nuit – Inutile d’allumer les lumières s’il n’y a personne à la maison.
/etc/heyu/x10.sched.absence
# x10.sched.presence # Définition d'un timer tous les jours. # Lance la macro lum_off à l'aurore, # La macro lum_on 10 minutes avant le crépuscule. timer smtwtfs 01/01-12/31 dawn dusk-10 lum_off lum_on # Macro lum_on - Envoi l'ordre D1 ON macro lum_on 0 on d1 # Macro lum_off - Envoi l'ordre D1 OFF macro lum_off 0 off d1 |
Le mode « sommeil »
Ce mode est déclenché par l’envoi de « A9 OFF« .
Heyu est configuré pour exécuter « mode_sommeil.sh » lors de l’entrée dans ce mode.
Le script ferme les volets roulants, coupe l’alimentation des divers appareils et éteint les lumières. Les macros « embarqués » s’occupent de l’éclairage interactif du séjour (présence près du frigo) et du réveil.
mode_sommeil.sh
# mode_sommeil.sh # Fermeture des volets, mise hors tensions des appareils et de l'éclairage /usr/local/bin/heyu on A1,2,4,5,7,8 # Upload des macros si nécessaire cmp -s /etc/heyu/x10.sched.sommeil /etc/heyu/x10.sched if [ !$? -eq 0 ]; then cp /etc/heyu/x10.sched.sommeil /etc/heyu.x10.sched /usr/local/bin/heyu upload fi |
/etc/heyu/x10.sched.sommeil
# x10.sched.sommeil # Le fameux Timer qui réveille... # Du lundi au vendredi à 6h30 # passage en mode présence timer .mtwtf. 01/01-12/31 6:30 00:00 reveil null # Macro réveil macro reveil 0 on a9 # Ici aussi, on trace la tombée de la nuit # et le levé du jour timer smtwtfs 01/01-12/31 dawn dusk-10 night_off night_on macro night_on 0 on d1 macro night_off 0 off d1 # Enfin, la lumière pour le casse croute.. # A12 ON : Détection d'une présence # A12 OFF : Tout est à nouveau calme trigger a12 on lum_on trigger a12 off lum_off # Macro lum_off macro lum_off 0 off a1 # Macro lum_on : Allume la lumière à 50 % macro lum_on 0 dimb a1 11 |
5 – En conclusion
Le système tel qui est décrit est fonctionnel depuis quelques années. Il faut savoir que la technologie X10 n’est pas très réactive – il peut se passer quelques secondes avant qu’un appareil réagisse à un ordre, en particulier quand l’installation prend de l’importance et que plusieurs ordres sont transmis à la suite…
J’espère que ce billet apportera des informations utiles à tous ceux qui voudraient se lancer dans une aventure « domotique ».
Liens :