TUTO gestion des volets roulants sous Home Assistant via Node-Red
Introduction.
Je possède chez moi des volets roulants commandés pour la plupart par des ESP8266 (Electrodragon en l’ocurrence, d’autres en Zigbee). L’idée initiale était de pouvoir faire en sorte que les volets s’ouvrent et se ferment automatiquement en fonction du lever et du coucher du soleil (sunrise et sunset dans la suite de ce tuto) mais qu’il soit possible de définir un offset (= décalage horaire par rapport au lever/coucher du soleil). En effet il est bien plus intéressant de définir la gestion des volets en fonction du soleil que par rapport à une heure fixe puisque cela permet de profiter de l’évolution des heures de jour et de nuit en fonction des saisons. Cependant, par rapport à mon mode de vie, je souhaitais bénéficier des quelques dizaines de minutes d’éclairage naturel qui persistent après le coucher du soleil, tout comme le lever du soleil est parfois trop tot pour lever mes volets… d’où l’importance de pouvoir définir un offset que je peux régler selon les saisons.
Assez parlé, passons à l’action !
*Mise à jour : 30/11/2020 – Temps de lecture / réalisation : ` < 30 min – Difficulté : Faible ++ / Moyen - - .
To do :
- Intégrer l’optimisation par rapport à l’azimut du soleil (Cf. tuto)
Prérequis, matériels nécessaires & utilisés :
- Version de HA : V 0.118.4.
- Avoir installé et comprendre les bases de Node-Red installé et intégré à HA (v1.2.5) (ici par exemple)
- Avoir des volets roulants (c’est mieux !) et des actionneurs pour les ouvrir/fermer (chez moi ce sont des ESP, mais le tuto est facilement adaptable pour d’autres protocoles).
- Comprendre les différents Input_xxx sous HA
Installation / configuration.
Le flow global :
1/ Les Inputs
Avant de rentrer dans les détails du flow Node-Red, on va commencer par créer des inputs sous HA. C’est inputs correspondent aux différents paramètres utilisateurs concernant les volets. On peut les créer directement sur l’interface graphique de HA en allant dans Configuration/Entrées puis en cliquant sur ‹ Ajouter une entrée › en bas à droite de l’écran. Pour ma part je les crée directement sous forme de fichier yaml, cela offre à mon sens un meilleur contrôle.
Input_boolean
Le premier sera donc une entrée de type interrupteur (ou Input Boolean). Il suffit donc de rajouter cette entrée dans son fichier configuration.yaml qui se trouve dans le répertoire config de votre serveur HA (ou dans un sous répertoire input_boolean selon la manière dont votre configuration est organisée -
cf Splitting up the configuration pour mieux comprendre).
volets_auto_salon_etat:
name: Volets auto
icon: mdi:window-shutter
initial: on
On sauvegarde le fichier (il s’appelle Volet_Auto_Salon.yaml chez moi). Il va permettre d’avoir un interrupteur général : Si il est désactivé l’ouverture des volets se fera manuellement, comme au bon vieux temps !
Input_number
Ensuite on crée un deuxième fichier, cette fois de type Nombre (ou input_number). Cela va nous permettre de régler les offsets (c’est à dire les décalages de temps) afin que notre volet ne s’ouvre/ferme que XX minutes avant/après le lever/coucher du soleil. Ici j’ai choisi de l’afficher sous forme d’un slider, mais on peut très bien avoir un nombre à saisir.
volets_auto_salon_offset_ouvre:
name: Offset matin
min: -90
max: 90
step: 1
mode: slider
volets_auto_salon_offset_ferme:
name: Offset soir
min: -90
max: 90
step: 1
mode: slider
- name : on donne un nom
- min et max définissent la plage de nombre que l’on peut régler avec le slider
- step définit de combien d’unité on change l’offset lorsque l’on déplace le curseur sur le slider
- mode: définit que l’on souhaite une présentation sous forme de slider (barre horizontale)
On sauvegarde le fichier (il s’appelle Volet_Auto_Salon.yaml chez moi)
On redémarre HA pour que nos fichiers soient pris en compte et l’on peut désormais afficher nos Entités ainsi créées dans Lovelace :
Pour ma part j’ai réuni ces entités sous une seule et même carte (Volets Automatiques) dans laquelle j’ai aussi rajouté l’affichage de l’heure du levé/couché du soleil (sensor.next_sunset /sunrise) :
On peut maintenant passer à Node-Red :
2/ Les flow Node-red
Suivons le flow, nœud par nœud, en partant du haut à gauche :
Les 2 premiers flows, en haut à gauche (monte) et à droite (descend) servent à récupérer la variable d’offset
1. Event:states node (Saisie offset HA) :
Il sert à déclencher le flow. On définit dans le champs Entity_ID
l’input_boolean précédemment créé. Lorsque l’on activera l’interrupteur, le flow sera déclenché.
On rajoute un deuxième nœud event:state juste en dessous mais cette fois on met input_number.volets_auto_salon_offset_ouvre
dans le champs Entity_ID
. Ainsi si l’on touche au slider le flow sera aussi déclenché.
2. Get entities node (Offset HA)
On cherche cette fois à récupérer l’offset définit dans HA. Il suffit pour cela de mettre notre input_number input_number.volets_auto_salon_offset_ouvre
dans le champs Entity_ID
du nœud pour qu’il soit remonté dans le msg.payload du noeud et passé au noeud suivant
3. Change node (set global.monte_salon)
Ce nœud va nous servir à définir une variable globale appelée ici monte_salon, qui va prendre la valeur du msg.payload envoyée précédemment. On met bien « global. » afin que la valeur soit stockée par node-red et réutilisable dans un autre flow (cf. ci après)
A ce stade on a définit, récupéré, et stocké la valeur de l’offset, soit donc pour ceux qui suivent, le nombre de minute avant (si négatif) ou après (si positif) l’heure de lever du soleil
On fait la même chose pour le la descente des volets le soir (en haut à droite sur la capture d’écran) mais cette fois les champs Entity_ID
seront remplis avec les variables ‹ ferme › de notre input_number et la variable globale sera global.descend
On passe ensuite au flow qui va lancer l’action de monter les volets le matin et de les descendre le soir
4. Inject enhanced node (Action)
Ce nœud sert juste à réveiller le flow pour programmer l’execution de l’action. Il est exécuté toutes les X minutes (5 chez moi)
N.B. : c’est la partie que j’aime le moins sur cet automatisation. Lancer un processus toutes les 5 minutes pour une action qui ne va etre exécutée que 2 fois par jour m’embete un peu … Si un spécialiste me lit et qu’il a une meilleure idée, qu’il n’hésite surtout à le dire en commentaires !
5. Within-time node (Sunrise - Sunset)
Ce nœud est celui qui définit les heures d’exécution matin et soir. Plus précisément on définit une heure de départ (sunrise ici) et une heure de fin (sunset ici). A l’heure de départ, un msg.payload sera lancé sur la sortie (output) du haut (montée des volets donc), tandis qu’à l’heure de fin le msg.payload sera sur la sortie du bas (descente des volets).
Mais ce qui est encore plus intéressant avec ce nœud, c’est qu’il permet de définir un offset sous forme de payload (dans offset sous Start time et End time). On va donc pouvoir récupérer nos variables précédemment stockée (vous vous souvenez … global.monte_salon et global.descend_salon). Cela affectera donc les heures d’éxexcutions, d’autant de minutes (en positif ou en négatif) que nous avions défini dans l’input_number.
6. Current state (Volets auto ON ?)
C’est à ce stade que l’on récupère l’information de notre input_boolean d’activation générale. Si l’interrupteur a été mis sur OFF, le flow est routé vers l’output du bas et coupe à ce stade le flow et les volets ne bougent donc pas ! Sinon c’est vers l’output du haut et le flow continue avec le node 7
7. Call service node
C’est à ce stade que l’execution de l’action est véritablement lancée. Dans le cas des ESP8266 qui gèrent mes volets il faut appeler avec ce nœud le
composant ‹ cover › (que j’ai ajouté dans ESPhome) qui est l’équivalent pour ESPhome de l’
intégration ‹ cover › de HA, mais c’est là un autre sujet. Le service Cover a appeler est soit
open_cover pour la montée, soit
close_cover pour la descente. L’
entity id est celle du volet que l’on souhaite actionner.
Vous pouvez aussi remplacer ces nœuds par ceux qui seront plus adaptés à la gestion de vos actionneurs de volets (mqtt, zwave, zigbee ou autre)
8. Comment node
C’est nœuds de commentaire ne servent juste qu’à donner quelques indications sur les différents flows, ils sont par définition optionnels !
Voilou, a ce stade vous avez normalement des volets programmables en fonction du soleil et d’un offset réglable
Bonus
Mon bureau fait également parfois office de chambre d’amis. Afin que mes hôtes puissent rester maitres de leur heure de coucher j’ai donc modifié légèrement le flow des volets du bureau :
Je n’entre pas trop dans le détail puisque le principe est exactement le même que vu ci dessus. J’ai juste ajouté un input_boolean ‹ mode invités ›, et je vérifie dans le flow si celui ci est activé (auquel cas le flow est routé vers une nœud EZtimer (palette à installer) qui ouvre les volets arbitrairement à 11h00). Si le ‹ mode invités › est OFF le flow ne passe pas par ce nœud EZtimer et le flow correspond donc à ce que l’on a vu ici.
N’hésitez pas à me faire part de vos remarques en commentaire, et si vous souhaitez que je détaille plus particulièrement un point ou un autre, je compléterai ce tuto en fonction.
A nouveau, un grand merci à @Clemalex et à @fredarro qui m’ont bien aidé pour en arriver la !
Je vous souhaite une bonne gestion de vos volets !!