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 :

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 :

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 :

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.

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.

Le mode « Sommeil »

Ce mode est actif pendant la nuit, quand je dors…

Le mode « Absence »

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 :

Laissez votre message après le bip...Biiiiip

Commentaires

Ton article est génial.
Je n’avais jamais pensé à aborder le problème de cette manière!
Du coup, ca m’intéresse.

Merci!

Excellent article ! Je pensais que niveau matériel c’était beaucoup plus lourd que ça 🙂 , mais le coup des « quelques secondes » me gène un peu : j’imagine bien une genre d’appli Android qui envoie des infos vers le PC qui utilise heyu, mais par exemple pour allumer la télé (oui la télé saimal) ben attendre quelques secondes me gène un peu surtout si c’est pour ne regarder que quelques minutes des guignols (ça saibien).

La plupart du temps, les ordres sont pris en compte instantanément. Il arrive effectivement que l’on ai une latence de quelques secondes – moins de 5 sur une installation telle qu’elle est décrite – quand plusieurs ordres transitent en même temps sur le réseau X10… Mais vraiment rien de bien gênant…

Bonjour,
pour compléter Heyu, il existe un Frontend : domus.Link (http://domus.link.co.pt/)
ca permet de profiter d’une interface en Ligne pour contrôler ses composants X10, et il intègre un skin iphone.

Merci pour ton post ! Je viens de faire l’acquisition d’une maison et souhaitais passer à la domotique aussi. Ton article tombe plus qu’a pic ! Merci beaucoup, je vais gagner du temps !

Excellent article, tu m’as convaincu de me lancer dans la domotique. 😀

Question: Existe-il un système pour sécuriser les commandes X10?

Par ce qu’imagine, en cas d’absence la nuit, un voleur malin pourrait se servire du système en place pour ouvrire les volets sans se fouler.

Vraiment bien ce tuto, perso je m apprete a franchire le pas. Je cherche pour le matos, des modules  » d initiation ».
As-tu un site à recommmander ?
Le courant porteur fonctionne bien ? Ne conseilles-tu pas la radio plutot ? L’interfacage Heyu / Misterhouse est-il plutot simple ?

Bravo! Ca donn envie. Quoi que le tarif me rebute encore…

Article vraiment très intéressant !

ça donne une une très bonne idée de la faisabilité et ça donne envie de se lancer.

Merci pour ces précieuses informations.

Très bon article, pour ma part j’utilise un Linksys NSLU2 pour piloter mon installation mais un sheevaplug serait maintenant plus d’actualité. C’est assez fabuleux de voir ses volets se lever à la levée du jour et se fermer à la tombée de la nuit (l’inverse c’est plutot génant).

Merci pour vos commentaires !

Pour répondre à Korbé, le X10 n’est pas très « sécure » effectivement. Il existe toutefois des modules « filtre » permettant d’éviter que les ordres ne circulent en dehors du réseau électrique intérieur.

La solution la plus simple et la plus efficace lors d’absences prolongées est de couper les lignes correspondant aux volets roulants.

Bon billet intéressant, mais je partirai sur des microcontrolleurs, réseau de capteurs et des technologies Xbee à la place. C’est moins cher et plus sécurisé.

bonjour,
C’est parti, je me suis lancé et ca marche plutôt bien, alors merci pour ce tuto clair qui m’a bien aidé. Cependant je bute, car impossible de faire éxécuter un script depuis x10.conf, alors que mon script fonctionne en ligne de commande. Pour mon essai, c’est un script tres simple:
cp /var/www/alarme/heyu/toto /var/www/alarme/heyu/titi
appelé depuis x10.conf:
SCRIPT A1 on anysrc :: /var/www/alarme/heyu/test.sh
Je bute depuis 2 jours et j’y perds mon latin!!
Auriez vous des pistes?
Cordialement
Michel

Bonjour,
C’est bon, dans la config de heyu je n’avais pas mis le chemin /bin/sh dans la variable script shell!!
Si ça peut servir…Merci encore pour l’article.
Michel

Laisser un commentaire

(requis)

(requis)