Premiers pas en domotique avec FHEM

Étiquettes:

Je souhaite mettre en place une solution domotique libre sur ma petite plate-forme Dockstar sous Debian, en démarrant à moindre coût avec un RFXtrx433, qui permet de gérer de nombreux modules domotiques fonctionnant en ondes radio 433 Mhz. En particulier les sondes Oregon et les modules Chacon et consorts.

Pourquoi FHEM ?

J’ai commencé par essayer domogik ,  trop lourd pour ma configuration qui héberge déjà serveur squeezebox, dnsmasq , ntp et samba. Par ailleurs la solution n’assure pour l’instant pas (à ma connaissance) de fonctions d’automatisation. Par contre elle supporte beaucoup de technologies …

xpl-perl me paraissait bien et léger, associé avec xPL-pyHAL pour les automatismes. Malheureusement le RFXtrx433 n’est pas supporté et je n’ai pas le courage de coder son support. Et il n’y a pas vraiment d’interface utilisateur…

heyu a quant à lui une interface web, il est léger, mais ne supporte pas non plus le RFXtrx433 …

domogica n’a a priori qu’une interface X-Window

C’est alors que je suis tombé sur FHEM, solution qui  supporte de nombreuses technos (dont le RFXtrx433), est écrite en perl avec un système de plugins, possède plusieurs interfaces (web et natives Androïd et iOS) et permet de gérer par script (perl ou commandes externes) les automatismes. La communauté est assez active mais essentiellement allemande, ce qui me pose problème pour la lecture des docs (dont une partie seulement est en anglais) et la consultation du forum (mais on peut poser ses questions en anglais…). Autre inconvénient : pas de support de xPL … avis aux bonnes volontés !

Installation

Référence : http://fhem.de/fhem.html#Installation
# wget http://fhem.de/fhem-5.3.deb
# apt-get install libdevice-serialport-perl
# dpkg -i fhem-5.3.deb

Démarrer le serveur avec
# /etc/init.d/fhem start

Pour utiliser le module MSG (prérequis pour pouvoir envoyer des notifications par mail) il faut charger quelques modules perl :
# apt-get install libmime-lite-html-perl
# apt-get install libnet-smtp-ssl-perl
# apt-get install libemail-mime-encodings-perl
# apt-get install libmime-base64-urlsafe-perl
# apt-get install libauthen-sasl-perl

Paramétrages de base

FHEM se configure par lignes de commandes, qu’on peut faire prendre en compte de plusieurs manières :

  • en éditant /opt/fhem/fhem.cfg si on souhaite que ça reste définitif
  • en passant une ligne de commandes dans l’interface graphique : Si on tape ensuite sur la touche « ENTREE » au clavier, celle-ci est prise en compte immédiatement mais pas sauvegardée dans /etc/fhem.cfg. En cliquant sur le bouton « save » on sauvegarde l’ensemble de ce qu’on a passé jusqu’alors dans le fichier de config pris en compte au démarrage.
  • en telnet, si on a bien activé la fonctionnalité (par défaut telnet sur le port 7072). Pour mettre au point c’est le plus efficace car on a le retour immédiatement. De même, pour sauvegarder il faut passer la commande save.

Quelques commandes utiles à avoir dans son fichier de config :

  • Pour définir un tellstick (FHEM reconnaîtra les devices définis dans la config de telldusd…)
define TStick TellStick /usr/bin/tdtool
  • En version 5.3, le support du  RFXtrx433est automatique (il est découvert automatiquement et ajouté dans la config qui est définie dans /opt/fhem.cfg (en 5.2 elle était dans /etc/fhem.cfg)
    define TRX_2 TRX /dev/ttyUSB2@38400
  • Rajouter latitude et longitude de chez soi (en notation décimale), pour pouvoir utiliser les heures de lever et coucher de soleil dans les scénarios (cf  SUNRISE_EL.)
    attr global latitude 43.666667
    attr global longitude 7.148
  • Attention, pour le module Twilight(qui permet d’avoir la luminosité sur une échelle de 0 à 6), il faut redéfinir ces valeurs, ainsi que le code météo yahoo de sa ville (qu’on trouve dans l’URL une fois qu’on a sélectionné sa ville sur yahoo (ex: http://weather.yahoo.com/france/provence-alpes-cote-dazur/cagnes-sur-mer-582630/ )
    define cagnesTwilight Twilight 43.666667 7.148 5 582630

Les capteurs et actionneurs

Ils sont reconnus automatiquement en principe et ont des attributs non modifiables, qui permettent entre autre de les identifier (type, identifiant…). Il est possible de les renommer avec la commande rename .

Les attributs modifiables le sont avec la commande attr (ou en utilisant l’interface graphique). Il est possible de

  •  donner un alias (qui apparait dans l’interface graphique à la place du nom),
  • de classer par « pièces » (room),
  • de grouper (group)
  • d’affecter une icone …

A chacun peut être est associé une log texte (FileLog) qui indique les changements d’état, et pour certains un graphe (plotweblink)

Scénarios

Là où FHEM devient intéressant, c’est qu’il permet de passer des commandes lors d’événements, ce qui permet de programmer des automatismes (appelés souvent scénarios dans les box domotiques). Les commandes peuvent être les commandes natives de fhem, des commandes perl ou des programmes externes.

Quelques exemples simplifiés

hygrostat : piloter l’extraction d’air de la salle de bains

Pour piloter le ventilateur extracteur de la salle de bains, une sonde Oregon  THGR228-N et un module récepteur Chacon font l’affaire.

La sonde Oregon et le module récepteur Chacon sont reconnus automatiquement. Dans mon cas ce sont respectivement THGR228N_1 et TRX_AC_00725f4203.

 

Il suffit maintenant de vérifier toutes les mn si l’humidité dépasse un seuil pour déclencher et arrêter si elle descend en dessous d’un autre seuil :
define ventil_off at +*00:01:00 { fhem("set TRX_AC_00725f4203 off") if((ReadingsVal("THGR228N_1","humidity","0") lt 65) && (Value("TRX_AC_00725f4203") ne "off")) }
attr ventil_off alias Arret  ventil si H<65%
attr ventil_off room Salle_de_bains
define ventil_on at +*00:01:00 { fhem("set TRX_AC_00725f4203 on") if((ReadingsVal("THGR228N_1","humidity","0") gt 80) && (Value("TRX_AC_00725f4203") ne "on")) }
attr ventil_on alias Ventiler si H>80%
attr ventil_on room Salle_de_bains

Programmer sa machine à café

Exit la crontab de mon essai précédent (Mettre en route et éteindre sa cafetière avec un tellstick et une prise télécommandée Casto), c’est maintenant intégré dans un vrai logiciel domotique !

Plus besoin non plus du tellstick (qui fonctionne aussi très bien avec FHEM), les prises casto peuvent être pilotées par le RFXtrx433, avec un firmware >=60 (j’ai dû échanger quelques mails avec le très disponible Bert de RFXCOM, qui a adapté son code et modifié la doc dans la foulée !). Il suffit de déclarer la prise casto comme TRX_RISINGSUN_XY où X est le « home code » (A à D) et Y le « device code » (1 à 3) qui l’identifient.

Une petite commande « at » et le tour est joué
define cafe_semaine at *06:30:00 { fhem("set TRX_RISINGSUN_A1 on-till 7:15") if(!$we) }

De manière à pouvoir utiliser aussi la télécommande et avoir le retour d’état dans FHEM, j’ai dû modifier le module FHEM 46_TRX_LIGHT.pm . Je le documenterai si nécessaire mais la modif  n’est pas indispensable si on se contente de commander la prise avec FHEM. Il est maintenant possible d’utiliser la télécommande et récupérer les codes générés dans FHEM, en utilisant le décodage des codes PT2262 générés (voir aussi le wiki en référence : PT2262 empfangen und senden mit TRX_LIGHT.pm  )

Capteurs de sécurité : envoyer un mail d’alerte

capteur inondation WD18Définition du capteur d’inondation WD18
  1. Mettre le switch en position S pour qu’il fonctionne correctement avec FHEM
  2. appuyer 5 secondes sur le bouton RF-Test pour qu’il « publie » son code et soit découvert par FHEM comme un capteur d’ouverture DS10A la manière suivante (dans l’exemple son code est 2240)

define TRX_DS10A_2240 TRX_SECURITY DS10A 2240 Window
attr TRX_DS10A_2240 room TRX_SECURITY
define FileLog_TRX_DS10A_2240 FileLog ./log/TRX_DS10A_2240-%Y-%m.log TRX_DS10A_2240
attr FileLog_TRX_DS10A_2240 logtype fht80tf:Window,text
attr FileLog_TRX_DS10A_2240 room TRX_SECURITY
define SVG_TRX_DS10A_2240 SVG fileplot FileLog_TRX_DS10A_2240:fht80tf:CURRENT
attr SVG_TRX_DS10A_2240 label "TRX_DS10A_2240 Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_TRX_DS10A_2240 room Plots

Comme il changera de nom au prochain changement de pile, modifier son nom avec la commande rename :
rename TRX_DS10A_2240 capteur_inondation

puis changer sa définition de manière à ce que les alertes remontent de manière plus cohérente, et associer une icone d’état :
define capteur_inondation TRX_SECURITY wd18 2240 water
attr capteur inondation devStateIcon normal:message_ok alert:message_attention

et modifier la Log :
attr FileLog_capteur_inondation logtype text

Les alertes remontent maintenant dans la log de manière correcte (notifications de statut environ toutes les heures sauf en cas d’alerte, auquel cas l’état normal revient au bout d’une vingtaine de mn.

2013-09-19_19:27:35 inondation_SDB water: normal
2013-09-19_19:27:35 inondation_SDB statechange: normal
2013-09-19_19:27:35 inondation_SDB battery: ok

Envoi de mail

Pour envoyer un mail en cas d’alerte, il faut utiliser les modules MSG et MSGMail. Ca ne fonctionne qu’avec un compte qui supporte SMTP avec la couche TLS/SSL .

Créer un fichier /etc/fhem/msgmailauth avec dans la première ligne le nom de login mail émetteur qu’on voudra utiliser (toto@monadresse.fr), et sur le 2e le mot de passe. Modifier les droits pour qu’il appartienne à l’utilisateur fhem et que seul lui puisse lire et écrire le fichier :
# chown fhem /etc/fhem/msgmailauth
# chmod 600 /etc/fhem/msgmailauth

Si on utilise un mail OVH, même si on a un nom de domaine il faut utiliser comme host  SMTP ssl0.ovh.net et pas smtp.mondomaine.fr (le certificat SSL n’est valide que pour ce nom)

Comme exemple, voir comment envoyer un mail lorsque quelqu’un sonne au portail

Fichiers

Tout est sous /opt/fhem depuis la version 5.3

  • /opt/fhem/FHEM : c’est là qu’on trouve les différents modules
  • Les logs sont dans /opt/fhem/log et accessibles via l’interface web

Liens

FHEM

  • FHEM
  • Le forum FHEM users sur Google Groups a été remplacé par un nouveau forum, où la plupart des interventions sont allemand, mais où les gens répondent volontiers en anglais.
  • Wiki (en allemand pour l’essentiel, malheureusement)

Capteur X10

RFXtrx433

 

 

 

29 commentaires sur “Premiers pas en domotique avec FHEM”

  1. Bonjour Olivier,
    je reviens vers toi car j’ai un problème. Je me suis décidé à allumer automatiquement la radio avec FHEM, tous les jours de la semaine, sauf les jours fériés. Voici ma commande :
    define radio1 at *7:00:00 {fhem "set RADIO on-for-timer 00:35:00" if($wday == 1)&(!$we)}

    Elle fonctionne une fois, mais pas la semaine d’après (j’en ai une par jour de la semaine car les durées sont différentes selon les jours). Je ne comprends pas pourquoi. Tu vois un problème ? (ca fait des semaines que j’utilise CRON pour palier à ce problème mais pour éviter les jours fériés, ca devient plus compliqué, et ne pas utiliser une fonction prévu dans FHEM, c’est quand meme dommage !)
    merci
    fred

  2. Salut,

    Je me demandais à quel point domogik est trop lourd pour un dockstar. Je pense faire comme toi et utiliser cette machine pour me lancer dans la domotique en la couplant à un RFXtrx433.
    Je pense que je dédierai le dockstar uniquement à ça, mais ton article me fait peur quant à installer domogik.

    1. Domogik tourne mais est lent. FHEM est plus rustique mais offre plus de possibilités et tourne sans problème sur le dockstar même avec d’autres logiciels en parallèle (il y a même des packages pour routeurs type linksys avec openwrt…)

  3. Olivier,
    Les thermostats fonctionnent tres bien en autonome. J’en ai 1 par piece avec les capteurs de fenetre et qui controle entre 1 et 3 valves. Pour le monitoring des 12 thermostats par fhem j’utilise des modules CUNO de busware. J’ai ete oblige d’en mettre 3 en raison de la taille, de la forme de la maison, des murs en beton armes. La liaison radio a une portee limitee. Pour le controle des thermostats, l’association des thermostats avec les modules CUNO est un vrai cauchemar en raison de la lenteur du protocole FS20 utilise. Ca peut prendre plusieurs minutes pour envoyer une commande ce qui n’ai pas vraiment un probleme pour le chauffage mais rend l’association d’un grand nombre de thermostats tres difficile et longue.

    Remi

  4. Super ! ca marche !
    en fait le mot motion que j’utilisais était un mot réservé. On peut mettre n’importe quoi à la place (comme light). A quoi sert ce dernier mot ? Un fichier est créé et enregistre les logs ?
    En tout cas, c’est super. Et comme FHEM est très bien fait, le passage de requête http est ultra simple, de mon karotz : on lit le lien http avec la souris, quand elle passe sur on, sur l’interface de FHEM. Cette requete est simplement à utiliser sur la karotz (via le programme KRON ou via http.get(« http… ») en javascript, et un passage d’un RFID devant le karotz, et la lumière, la TV… s’allume ou s’éteigne !
    J’ai plus qu’à mettre des pauses entre certaines requêtes (attendre que la freeplayer s’allume pour mettre une chaine par exemple)…, et essayer d’utiliser le même RFID mais avec des actions différentes selon l’heure (possible ?)…
    Je chope les ondes d’un capteur T° et hygro : les données sont stockées quelque part ? sinon, comment faire pourles voir et avoir un graph ? ca m’intéresse aussi car j’ai l’intention d’utiliser le compteur électrique pour avoir une courbe de ma conso (et avec la T°, je trouverais surement une belle corrélation).
    Merci Olivier.

    1. Pour le dernier mot c’est pour préciser le nom utilisé dans la log pour identifier le type de capteur ou commande, comme le dit la doc de TRX_LIGHT, si j’ai bien compris.
      Pour les logs des capteurs il faut utiliser la commande FileLog pour stocker l’historique. J’ai des capteurs Oregon avec lesquels ça marche bien

    1. Il faut mettre :
      define lampe TRX_LIGHT RISINGSUN A1 light
      Chez moi j’ai :
      # casto
      define prise_cafetiere TRX_LIGHT RISINGSUN A1 light
      attr prise_cafetiere alias Cafetière
      attr prise_cafetiere room Cuisine
      define FileLog_prise_cafetiere FileLog /var/log/fhem/prise_cafetiere-%Y.log prise_cafetiere
      attr FileLog_prise_cafetiere alias Historique Café
      attr FileLog_prise_cafetiere logtype text
      attr FileLog_prise_cafetiere room Cuisine

  5. Bonjour
    j’ai exploré un peu plus FHEM. J’ai voulu mettre le dernier module 46_trx_light (numéro 2419 alors qu’e, 5.3, la version du module est 2335). Je me suis rendu compte que tous les modules se trouvaient sur /usr/share/fhem/FHEM (bug dans ta partie fichier), et j’ai fais un wget pour avoir le fichier. ‘ai fait un vi sur la fichier qui m’a l’air bien. Pourtant ce module n’est plus reconnu quand je le défini. Pourquoi ? faut-il faire quelque chose d’autre pour mettre à jour les modules, ou alors ils ne sont pas compatibles avec la version en cours ?
    en tout cas j’ai passé la journée à essayer d’allumer cette prise et impossible.
    merci

    1. Désolé je rentre à peine de vacances (j’y serais d’ailleurs resté un peu plus…)
      Chez moi tout est sous /opt/fhem comme je l’ai dit dans le tutorial. J’ai supprimé à la main /usr/share/fhem en passant en version 5.3 pour éviter les ennuis, comme ils ont décidé de changer les répertoires d’installation…
      Je suis toujours avec le module 46_trx_light en 2335, et n’ai pas encore eu le temps de faire d’update manuel.

  6. Bon en fait je viens de trouver : il suffit de rajouter « motion » à la fin. Mais je ne sais pas pourquoi !
    Maintenant voici la question ultime : « set lampe on » donne un message « No set implemented for RISINGSUN » ??

    1. Je ne suis pas chez moi en ce moment du coup il m’est un peu difficile de vérifier, mais avec le code que j’utilise ça marche (je suis repassé sur le code standard car la personne qui a écrit le support du RFXTRX l’a modifié récemment et ça devrait répondre au besoin de décodage de nos modules en standard, mais je n’ai pas eu le temps de tester : http://forum.fhem.de/index.php?t=msg&th=10017&start=0&rid=0)
      Il faudrait éventuellement voir avec elle si il n’y a pas eu d’autres modifs qui posent problème.

  7. Olivier,

    Je viens de demarrer depuis une semaine FHEM pour controler tous mes thermostats de chauffage (FHT80b de Conrad). Ca fait plaisir de trouver un autre utilisateur francais. Pour l’instant je tourne sous Windows7 mais passerai probablement sous debian dans les mois qui viennent.

    A bientot

    1. Bonjour,
      me revoici, avec tout en main. J’ai suivi ton tuto pour installer FHEM : ca ce fait en un rien de temps.
      Ensuite, le site web est très rapide (http://192.168.0.xx:8083). La difficulté 1ere a été de trouver où était chez moi le rfxtrx : en USB0. Ok définition ok. Maintenant j’en suis aux commandes : pas trop facile, mais j’imagine, une fois qu’on a choppé le truc ca va mieux.
      Par exemple si je veux directement faire « set TRX_RISINGSUN_A1 on » il me demande de définir « TRX_RISINGSUN A1 » : LOGIQUE ! Alors je définis : « define lampe TRX_LIGHT RISINGSUN A1 » mais ca ne marche pas ! peux-tu m’aider stp ?

  8. Merci pour tout, je vais regarder tout ca. J’ai rien sur mon dockstar, donc la mémoire sera totalement free quand j’aurai viré webadmin. Je crois que je vais faire comme toi : domogik d’abord puis peut etre fhem.
    La source du plugin de domogik est très facile : y’a 3 lignes car c’est des commandes http. Mais si fhem peut aussi etre commandé en http, peut etre que je deviendrais (dans quelques mois !) le createur d’un plugin karotz pour fhem (si domogik me va pas)! 😉

  9. Bonjour,
    merci pour ce super article. Tu dis que « on peut passer des commandes lors d’évènements, pour programmer des automatismes. Les commandes peuvent être des programmes externes. ».
    Ayant comme toi (vu sur le forum touteladomotique) un dockstar, bientot un rfxtrx, je voudrais commander des prises casto et aussi ma fbx avec du http, avec un karotz. J’ai ce karotz depuis cette semaine, et c’est vraiment cool comme interface et modulable (j’y est mis un serveur web httpd comme décrit par wizz). Est-ce que depuis le Karotz je pourrais envoyer des ordres à FHEM pour qu’il exécute des scénarios ? c’est vraiment la seule question qu’il me reste à résoudre. Car il y a un plugin Karotz/Domogik, mais je vois que tu as raison à propos de Domogik.
    Donc que veut dire commande externe ? il faut savoir que le Karotz se programme en Javascript ou python. Qu’il existe une application pour envoyer du http. Serait-ce possible d’envoyer des commandes http du Karotz vers FHEM ? (voire directement au rfxtrx ?)
    merci

    1. comme question complémentaire : tu dis que domogik est trop lourd. Comment cela se traduit sur le dockstar ? lenteur dans l’exécution des ordres, lenteur de paramétrage, de config ? ou simplement interface trop complète et donc lourdeur d’utilisation ? car si c’est ce cas, j’ai que webmin à virer de mon dockstar, et je pourrais l’utiliser sans probleme. Car c’est quand meme le seul soft open source qui a un plungin pour mon Karotz ! et donc qui répond à ma demande.
      merci

      1. J’ai écrit un petit aide-mémoire sur l’installation et la configuration de domogik (Domogik version dev sur Dockstar) que j’ai trouvé un peu laborieuse alors celle que FHEM est plus immédiate.
        Quant à la lourdeur, elle est relative et à tester sur ta config : sur la mienne il y a déjà un serveur dnsmasq, un serveur squeezebox (qui sert aussi comme serveur DLNA) ainsi que samba qui prennent déjà des ressources. Domogik nécessite mysql qui en prend pas mal aussi, ce qui fait que la mémoire (très limitée sur un dockstar) est bien mise à contribution et ça swappe. L’interface est lente, aussi bien pour la config que pour l’utilisation.

      • commande externe = n’importe quel script ou exécutable qu’on peut lancer avec un shell. C’est documenté ici : Fhem command types
      • On doit pouvoir lancer des ordres à FHEM avec du http (c’est ce qui se passe quand on utilise l’interface web de FHEM pour passer des commandes), mais ça reste à expérimenter pour voir comment faire en pratique avec le karotz. La lecture du code du plugin domogik doit probablement aider…

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.