J’ai déjà présenté le variateur intelligent Philips hue (Hue Dimmer switch) et les principes de sa programmation via le Hue bridge 1. On peut étendre son utilisation au-delà de l’écosystème Philips hue si on utilise une box domotique qui sait le gérer.
Voici donc comment l’utiliser en tant que dimmer à double fonctions lumières/volets roulants, à l’aide de FHEM.
- les boutons on / off vont actionner la lumière
- les boutons dim up / dim down vont gérer les volets (s’il fait suffisamment jour), et les lumières (si elles sont allumées.) :
- dim up pour enrouler le store (open); une deuxième pression alors qu’il est en mouvement l’arrête; une pression longue l’ouvre à 70%
- dim down pour le déployer (closed); une deuxième pression l’arrête; une pression longue l’ouvre à 30%
Ingrédients de ma recette
- Un Hue dimmer switch associé au Hue bridge préalablement défini dans FHEM
- Des volets roulants Somfy RTS associés à FHEM et définis par un device ROLLO .
Définition du Hue dimmer switch dans FHEM
Le Hue Dimmer switch va être défini sous la forme de deux devices:
- un HUEdevice group de type LightGroup, qu’on peut utiliser pour appliquer des effets sur l’ensemble des lumières qu’il contrôle : on, off, luminosité, couleur, scènes définies sur le pont…
- un HUEdevice sensor de type ZLLSwitch, qui permettra d’intercepter les pressions appliquées sur le switch 2 et ainsi d’étendre l’utilisation de celui-ci au delà de l’écosystème Philips hue. Par exemple pour commander des volets roulants.
Le HUEdevice group de type LightGroup
Passer la commande set bridge autocreate
(en admettant que bridge est le nom du HUE bridge) si le device n’est pas reconnu dans FHEM. On le retrouve facilement avec la commande
list TYPE=HUEDevice:FILTER=i:type=LightGroup name
Voir le tutoriel « FHEM et Philips hue : premiers pas » pour plus d’informations sur les groupes.
Le HUEdevice sensor de type ZLLSwitch
Principe
Aujourd’hui il n’existe pas dans l’API Hue de mécanisme permettant de notifier les changements d’état à une application 3. Il est donc nécessaire d’interroger régulièrement le Hue bridge (« polling ») pour connaître les changements d’état. C’est loin d’être optimal (latence, risque de manquer des changements d’état, ressources CPU et réseau utilisées…) mais ça a le mérite d’exister.
FHEM polle le Hue bridge, qui reporte pour chaque Hue dimmer switches son état avec un code sur 4 caractères XXXY: les trois premiers représentent le dernier bouton pressé, et le dernier le type de pression effectué :
BUTTON | STATE | CODE |
Button 1 (ON) | INITIAL_PRESSED – première pression | 1000 |
HOLD – maintenu sous pression | 1001 | |
SHORT RELEASED – pression courte | 1002 | |
LONG RELEASED – pression longue | 1003 | |
Button 2 (DIM UP) | INITIAL_PRESSED | 2000 |
HOLD | 2001 | |
SHORT RELEASED | 2002 | |
LONG RELEASED | 2003 | |
Button 3 (DIM DOWN) | INITIAL_PRESSED | 3000 |
HOLD | 3001 | |
SHORT RELEASED | 3002 | |
LONG RELEASED | 3003 | |
Button 4 (OFF) | INITIAL_PRESSED | 4000 |
HOLD | 4001 | |
SHORT RELEASED | 4002 | |
LONG RELEASED | 4003 |
Configuration du bridge
L’intervalle de polling est par défaut de 60s. On peut diminuer cette valeur au minimum (10s) pour améliorer la réactivité, tant que ça n’a pas d’effet de bord sur les autres activités de FHEM…
modify bridge hue-bridge 10
Par ailleurs, on va paramétrer FHEM pour que les appels HTTP au bridge ne soient pas bloquants.
attr bridge bridge httpUtils 1
Définition d’un HUEdevice sensor de type ZLLSwitch
Il faut créer à la main le HUEdevice sensor de type ZLLSwitch qui remontera les états du HUE dimmer switch.
On récupère la liste des capteurs (« sensors ») connus du Hue bridge :
On définit ensuite un device HUEDevice sensor avec la commande
define <device> HUEDevice sensor <id> <interval>
Avec l’exemple ci-dessus (ID = 3 récupéré dans la réponse de la commande précédente) et en mettant une valeur de polling de 10 (le minimum) :
define HUEDimmer HUEDevice sensor 3 10 attr HUEDimmer alias inter chambre attr HUEDimmer icon hue_filled_hds attr HUEDimmer devStateIcon unknown:rc_BLANK attr HUEDimmerSwitch_2 eventMap 1001:ON_hold 1002:ON_short 1003:ON_long 2001:DIMUP_hold 2002:DIMUP_short 2003:DIMUP_long 3001:DIMDOWN_hold 3002:DIMDOWN_short 3003:DIMDOWN_long 4001:OFF_hold 4002:OFF_short 4003:OFF_long
L’attribut eventMap permet d’utiliser des noms symboliques mnémotechniques pour le code d’état (rendra le code plus lisible).
Les évènements relatifs au Hue dimmer switch remontent à partir de maintenant dans FHEM et il est possible d’agir en fonction.
Interrupteur double fonctions éclairage/volets roulants
On commence par programmer le Hue Bridge pour définir le fonctionnement du Hue dimmer switch pour les lumières.
Pour les volets on intercepte les évènements du Hue dimmer switch avec la commande DOIF.
Sans tenir compte de la luminosité :
(([HUEDimmer_salon] eq "DIMUP_short") and ([roller_salon] eq "drive-down")) (set roller_salon stop) DOELSEIF ([HUEDimmer_salon] eq "DIMUP_short") (set roller_salon open) DOELSEIF (([HUEDimmer_salon] eq "DIMDOWN_short") and ([roller_salon] eq "drive-up")) (set roller_salon stop) DOELSEIF ([HUEDimmer_salon] eq "DIMDOWN_short") (set roller_salon closed) DOELSEIF ([HUEDimmer_salon] eq "DIMDOWN_long") (set roller_salon position 70) DOELSEIF ([HUEDimmer_salon] eq "DIMUP_long") (set roller_salon position 30)
En tenant compte de la luminosité :
On utilise le reading twilight_weather d’un device twilight de type TWILIGHT qui donne la luminosité extérieure, en tenant compte de la météo.
(([HUEDimmer_salon] eq "DIMDOWN_short") and ([roller_salon] eq "drive-down") and ([twilight:twilight_weather] >= 10)) (set roller_salon stop) DOELSEIF (([HUEDimmer_salon] eq "DIMDOWN_short") and ([twilight:twilight_weather] >= 10)) ## ne déploie le store que s'il fait clair (set roller_salon closed) DOELSEIF (([HUEDimmer_salon] eq "DIMDUP_short") and ([roller_salon] eq "drive-up")) (set roller_salon stop) DOELSEIF ([HUEDimmer_salon] eq "DIMUP_short") ## ferme le store jour et nuit (set roller_salon open) DOELSEIF (([HUEDimmer_salon] eq "DIMDOWN_long") and ([twilight_Cagnes:twilight_weather] >= 10)) (set roller_salon position 70) DOELSEIF (([HUEDimmer_salon] eq "DIMUP_long") and ([twilight_Cagnes:twilight_weather] >= 10)) (set roller_salon position 30)
Références
- Utilisation et programmation du Philips Hue dimmer switch : comment lui en faire faire plus qu’avec l’application Hue de Philips ↩
- Hue Dimmer Switch (en allemand – Wiki FHEM) : comment utiliser le Hue Dimmer Switch dans FHEM ↩
- Hue Developer program forum : Reacting to tap switches ↩