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 :

Module Appareil : Se connecte entre la prise et l'appareil. Est capable d'interpréter des ordres ON et OFF.
Module lampe : Identique au module appareil, mais ne supporte pas des intensités élevées. Il est toutefois capable de gérer des commandes supplémentaires (DIM / BRIGHT) .
Module lampe (douille) : S'insère entre l'ampoule et la douille d'origine.
Module mural : remplace un interrupteur. Existe en version variateur ou 3 positions pour volets roulants ou stores.
Micro module : se positionne derrière un interrupteur existant (dans la boite d'encastrement).
Module rackable : Prend place directement au niveau du tableau électrique.

Contrôleurs (exemples) :

Les contrôleurs sont capables de générer des trames X10 sur le réseau.

Le CM11 est le module indispensable. Connecté au port série ou usb d'un ordinateur, il va nous permettre de communiquer avec le réseau X10. Il est capable de recevoir ou d'envoyer des trames X10. Il est programmable, pour un fonctionnement ordinateur éteint.
Ce modèle est apparemment obsolète et remplacé par le CM15.
Le module radio permet de transformer des ordres RF, émis depuis une télécommande ou un capteur sans fil en ordre X10.
Un exemple de détecteur sans fil. Il joue le rôle de détecteur de présence, mais aussi d'obscurité.
Centrale d'alarme X10 capable de générer des ordres X10 en fonction d'évènements :
Armement, désarmement, déclenchement, etc...
Elle peut également servir de console de commande X10.

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 X10Type de moduleDescriptionOrdre ONOrdre OFF
A1Module LampeEclairage SéjourAllume les lampes du séjourEteint les lampes du séjour
A4Module AppareilMatériel Informatique (Imprimantes, Moniteurs...)Alimente les appareilsCoupe l'alimentation
A5Module AppareilMatériel Hifi (TV, Ampli, etc...)Alimente les appareilsCoupe l'alimentation
A7Module volets roulantsVolets roulants zone jour
(séjour, cuisine)
Ouvre les voletsFerme les volets
A8Module volets roulantsVolets roulants zone nuit (chambres)Ouvre les voletsFerme les volets
A9SignalSignal de passage mode présence / mode sommeilSignal de réveilIndique que je vais me coucher
A10Détecteur de mouvementsDétecteur de mouvements BureauON est envoyé quand un mouvement est détectéOFF est envoyé quand aucun mouvement n'est détecté depuis plus de 2 minutes
A11Détecteur d'obscuritéDétecteur de d'obscurité BureauEnvoyé quand il fait sombre dans le bureauEnvoyé quand il fait jour dans le bureau
A12Détecteur de mouvementsDétecteur de mouvements séjourON est envoyé quand un mouvement est détectéOFF est envoyé quand aucun mouvement n'est détecté depuis plus de 2 minutes
A13Détecteur d'obscuritéDétecteur d'obscurité séjourEnvoyé quand il fait sombre dans le séjourEnvoyé quand il fait jour dans le séjour
B1SignalMode nuitEnvoyé quand le système passe en mode nuitEnvoyé quand le système passe en mode jour
B3SignalMode AbsenceEnvoyé quand l'alarme est arméeEnvoyé quand l'alarme est désarmée
C1Module appareilServeur de sauvegardesAllume le serveur de sauvegardesArrête le serveur de sauvegardes
D1FlagFlag NuitEst positionné à ON au couché du soleilEst 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 :

Vus : 2041
Publié par Jopa : 29