Hue Dimmer switch et volets roulants

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%Hue Dimmer switch

Ingrédients de ma recette

  1. Un Hue dimmer switch associé au Hue bridge préalablement défini dans FHEM
  2. 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:

  1. 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…
  2. 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 :

get bridge sensors

get bridge sensors

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

  1. Utilisation et programmation du Philips Hue dimmer switch : comment lui en faire faire plus qu’avec l’application Hue de Philips
  2.   Hue Dimmer Switch (en allemand – Wiki FHEM) : comment utiliser le Hue Dimmer Switch dans FHEM
  3. Hue Developer program forum : Reacting to tap switches