2024-04-16
md
Ajout d'un détecteur de mouvement VALLHORN de IKEA dans Domoticz
<-Adding an IKEA Trådfri Shortcut Button in Domoticz
<-Passerelle Sonoff Zigbee Bridge (ZBBridge) avec Domoticz

The VALLHORN SensorLe dernier jour de mars était censé être le premier jour de préparation des déclaration de revenu pour le fisc. Procrastiner s'est avéré plus attrayant et tester le nouveau capteur de mouvement de IKEA, soit le VALLHORN type E2134, était la meilleure stratégie d'évitement. Il s'agit d'une installation provisoire, car il y a une très forte probabilité que le capteur soit déplacé. Le moment venu, j'aurai tout oublié, d'où ce billet pour documenter comment j'ai procédé. Conséquemment, il ne s'agit pas d'un examen approfondi de ce capteur de type Zigbee.

Le capteur de mouvement VALLHORN récemment introduit est probablement destiné à remplacer les anciens modèles TRÅDFRI (type E1745 et type E1525). Ces modèles n'étaient pas dans le magasin IKEA d'Halifax (Canada) lorsque j'ai acheté le VALLHORN et ne sont plus dans le catalogue en ligne au Canada. Cependant le E1745 est actuellement disponible (le 2 avril 2024) aux États-Unis, mais probablement seulement jusqu'à l'épuisement des stocks.

Le VALLHORN est très grand, relativement parlant. Sa face est un carré arrondi 71 x 71 mm et il a une profondeur de 34,5 mm; 38,4 mm avec le support de montage. En raison de la plus grande taille, le capteur est alimenté par deux piles AAA au lieu d'une pile bouton au lithium. Ainsi, les piles devraient durer plus longtemps, mais je ne serai pas en mesure de le vérifier parce que je n'ai aucun des vieux capteurs de mouvement IKEA.

Dimensions du VALLHORN

Le nouveau capteur ajoute le niveau de luminosité aux mesures de présence et du pourcentage de charge de la pile des capteurs plus anciens si l'on se fie à la description Blakadder des ces derniers. Cela est utile, car le test consiste à utiliser le VALLHORN pour allumer les lumières dans un escalier quand une personne s'approche, mais seulement si le niveau de clarté est inférieur à un seuil fixé. L'éclairage dans l'escalier est contrôlé par un dispositif Shelly 1 avec un micrologiciel Tasmota. Lorsque la lumière est activée, une minuterie est déclenchée pour l'éteindre après cinq minutes. Cela est fait avec Domoticz, notre serveur domotique. Ainsi, tout le travail est effectué par le système domotique existant et le VALLHORN n'aura qu'à déclencher des routines existantes. Bien entendu, le capteur doit être jumelé avec le coordinateur Zigbee du système domotique qui, dans notre cas, est une passerelle ZbBridge Sonoff (de Itead) avec ZigbeeToTasmota comme micrologiciel.

Bien que le concentrateur Zigbee recommandé par IKEA ne soit pas nécessaire dans cette configuration, il se peut que les fonctionnalités du capteur ne soient pas exploitées. Il est probable qu'il soit possible de fixer le seuil de luminosité pour les messages de marche/arrêt (cluster 0x0006) envoyés par le capteur à une lampe, une passerelle ou à tous les autres autres dispositifs Zigbee appariés. L'installation de test ignorera ces complications et notre système domotique n'utilisera que trois messages du capteur une fois qu'il sera apparié avec le coordinateur Zigbee du système.

Attribut ZigbeeTypeMessage ZigbeeToTasmota
Illuminancenon negative integer{"ZbReceived":{"0xB8BC":{"Device":"0xB8BC","Illuminance":20969,"Endpoint":3,"LinkQuality":55}}}
Occupancy0 or 1{"ZbReceived":{"0xB8BC":{"Device":"0xB8BC","Occupancy":1,"Endpoint":2,"LinkQuality":13}}}
BatteryPercentage0...100 {"ZbReceived":{"0xB8BC":{"Device":"0xB8BC","BatteryVoltage":2.7,"BatteryPercentage":90,"Endpoint":1,"LinkQuality":52}}}

Les messages de ZigbeeToTasmota présentés sur le tableau sont affichés dans la console Tasmota du pont de la passerelle ZbBridge.

La luminosité n'étant signalée que lorsqu'elle change, les valeurs envoyées par le capteur doivent être conservées par Domoticz. Une variable définie par l'utilisateur semblait être la meilleure façon de le faire. La capture d'écran suivante montre comment atteindre la page de configuration des variables utilisateurs dans l'interface web Domoticz.

Adding a user variable

On ajoute une variable en définissant son nom, son type et sa valeur initiale.

Adding a user variable

Ensuite, il faut cliquer sur le bouton Ajouter. Une fois cela fait, la nouvelle variable sera ajoutée au tableau des variables en haut et un idx de type variable lui sera attribué. Dans ce cas stair_illuminance s'est fait attribuer l'idx 4.

L'on pourrait sans doute ajouter un interrupteur de lumière virtuelle (cachée) dans Domoticz pour illuminer l'escalier, mais il y a déjà un commutateur virtuel contrôlant le dispositif Shelly 1 déjà mentionné. Au lieu de cela, une autre variable utilisateur a été crée. Appelée stair_occupency, son idx est 5.

L'étape suivante consiste à ajouter les règles Tasmota au coordinateur Zigbee. Dans mon cas, j'ai joint trois règles à Rule3.

rule3 +ON zbreceived#0xB8BC#Occupancy DO publish domoticz/in {"command":"setuservariable", "idx":5, "value":"%value%"} ENDON ON zbreceived#0xB8BC#Illuminance DO publish domoticz/in {"command":"setuservariable", "idx":4, "value":"%value%"} ENDON ON zbreceived#0xB8BC#BatteryPercentage DO publish domoticz/in {"idx":225,"nvalue":0, "svalue":"%value%"} ENDON

On constate que ces règles définissent des messages MQTT publiés en réponse au message du capteur zigbee reçu par la passerelle ZbBridge. Les messages MQTT ont tous domoticz/in comme sujet auquel Domoticz est automatiquement abonné par défaut si le matériel MQTT Client Gateway with LAN interface est installé. C'est un choix de ma part, et la passerelle Zigbee pourrait envoyées des requêtes HTTP directement à Domoticz.

La troisième règle ajoutée met à jour un capteur de pourcentage virtuel ajouté dans Domoticz pour afficher le niveau de la batterie. Le système domotique se charge d'envoyer une notification si le niveau de la pile descend sous le 60%. L'idx de ce capteur virtuel est 225.

La dernière partie du puzzle est un script dzVents (en Lua) assez simple qui sera déclenché par tout changement dans la valeur de la variable occupancy_stairs.

--[[ Turn "stair_light" on when "stair_occupancy" > 1 and stair_illuminance < 4000 stair_light: switch idx 138, stair_occupancy: user-variable idx 5 and stair_illuminance: user-variable idx 4 ]] return { on = { variables = { 5 } }, execute = function(dz, variable) if ( (variable.value > 0) and (dz.variables(4).value < 4000) ) then dz.devices(138).switchOn() end end }

J'estime que la logique du script est assez claire. La fonction execute sera (on le devine...) exécutée chaque fois que la valeur de la variable 5 change. Si cette valeur est supérieure à un, cela signifie que le capteur a détecté qu'une personne s'approchait des escaliers. Dans ce cas, la lumière d'escalier est allumée si la luminosité ambiante est inférieure au seuil de 4000.

Notes ou informations et idées aléatoires.