Avant de migrer sur Home Assistant, j'utilisais Jeedom et plus particulièrement le plugin sunshutter pour gérer finement le positionnement de mes volets roulants. J'ai été déçu de ne pas trouver d'équivalent sur Home Assistant.
J'ai fait, dans un premier temps, quelques essais avec Schedy mais il ne répondait pas à mes attentes. Je me suis lancé dans l'idée de refaire un équivalant en natif sous Home Assistant. Je tenais également à remercier Philipp et Lionel pour l'aide qu'ils ont pu m'apporter.
Prérequis
- Lire l'article en entier avant de se lancer
- Posséder un ou plusieurs volets roulants sous Home Assistant
- Être sur une version d'Home Assistant supérieure ou égale à 2022.5
À titre d'information, j'utilise des volets roulants contrôlés par des modules Shelly 2.5 utilisant l'intégration native Shelly sur Home Assistant.
Une présentation d'un cas réel d'utilisation est disponible ici : Exemple de gestion du volet roulant de ma cuisine.
Règles de gestion des volets roulants
-
Gérer une routine pour le positionnement des volets roulants (Exemple : Si le soleil est au-dessus de l'horizon, j'ouvre le volet roulant sinon je le ferme).
-
Gérer des conditions immédiates permettant à un volet roulant de sortir de sa routine (Exemple : Maintenir le volet à 30% d'ouverture s'il fait trop chaud).
-
Forcer certaines conditions immédiates à être exécutés même si la gestion automatique du volet est suspendue
-
Suspendre la gestion automatique du volet s'il sort de sa routine avec reprise au bout d'un délai de X minutes (Exemple : Si je bouge le volet manuellement, il ne doit plus se repositionner automatiquement pendant 1 heure)
-
Gérer un positionnement précis (Exemple : Si je demande au volet de se positionner à 20% d'ouverture, il doit d'abord se fermer complètement). Sur les modules Shelly 2.5, le positionnement du volet se fait à l'aide du temps, malheureusement, suivant le point de départ, la position demandée peut être approximative.
Automatisation d'un volet
cover.nom_du_volet_roulant
. Cet article contient les éléments pour automatiser un seul volet. Il faudra recommencer ces étapes pour chacun de vos volets roulants.La gestion d'un volet nécessitera, au minimum, une automatisation et 3 blueprints (pour respecter toutes les règles de gestion).
C'est parti, mon kiki… enfin presque…
Avant toute chose, nous allons devoir ajouter quelques entités indispensables pour faire fonctionner le moteur de gestion.
- Un input_number afin de mémoriser la position désirée du volet roulant (qui est différente de la position réelle). Cependant Home Assistant ne permet pas de forcer la répétition d'une valeur, il faut donc utiliser un nombre en dehors de la plage de positionnement du volet, comprise entre 0 et 100, afin de simuler la répétition de la position désirée. J'ai choisi d'utiliser une plage de position allant de -1 à 100%.
input_number:
nom_du_volet_roulant_desired_position:
name: Nom du volet roulant - Position désirée
min: "-1"
max: "100"
step: "1"
unit_of_measurement: "%"
- Un input_number pour indiquer la durée (s) que le volet met pour effectuer un mouvement complet d'ouverture et de fermeture qui correspondra au temps de détection avant de suspendre le volet (j'ai simplement chronométré le temps que met mon volet pour s'ouvrir et se fermer complètement).
input_number:
nom_du_volet_roulant_detection:
name: Durée (s) pour effectuer un mouvement complet d'ouverture ou de fermeture
min: "5"
max: "600"
step: "5"
unit_of_measurement: "s"
- Un input_datetime pour définir la durée (min) de suspension du volet.
input_datetime:
nom_du_volet_roulant_duration_suspension:
name: Durée (min) de suspension du volet roulant
has_date: false
has_time: true
- Un timer pour gérer la suspension du volet.
timer:
nom_du_volet_roulant:
name: Durée de suspension restant
restore: true
Positionnement du volet
C'est l'automatisation qu'il vous appartient de personnaliser pour correspondre à votre gestion du volet. Je vous conseille dans un premier temps de noter les positions voulues suivant les conditions (Par exemple: Si le soleil est au-dessus de l'horizon, j'ouvre le volet roulant) et il est très important de bien déterminer l'ordre des conditions. À la première règle de gestion satisfaite, le positionnement se déclenchera sans vérifier les conditions suivantes.
automation:
- description: Nom_du_volet_roulant - Positionnement
alias: nom_du_volet_roulant_positioning
id: f8811757-05f7-420d-8c34-379788af5b24
mode: restart
trigger:
- platform: time_pattern
minutes: "/10" # ⚠️ à modifier : durée entre chaque calcul de positionnement
- platform: event
event_type:
- timer.cancelled
- timer.finished
event_data:
entity_id: timer.nom_du_volet_roulant
condition:
- condition: state # Le volet ne doit pas être déjà en cours de suspension
entity_id: timer.nom_du_volet_roulant # ⚠️ à modifier avec le nom de votre timer
state: "idle"
- condition: template # La position réelle du volet doit avoir changé depuis plus de "nom_du_volet_roulant_duration_open_close" secondes
value_template: "{{ (as_timestamp(now()) - as_timestamp(states.cover.nom_du_volet_roulant.last_changed) | int(0)) > (states('input_number.nom_du_volet_roulant_detection') | int) }}" # ⚠️ à modifier avec le nom de vos entités
action:
- choose:
[...] # ⚠️ à modifier avec vos règles de gestion
Par exemple, prenons ces 3 règles (classées dans l'ordre de priorité) :
- Si le soleil est sous l'horizon, je veux que le volet soit fermé (0%)
- Si je suis absent de la maison, je veux que le volet se positionne à 40% (voir mon article sur la gestion des présences avec HomeKit)
- Dans tous les autres cas, mon volet doit être ouvert à 100%
L'automatisation précédente devient :
automation:
- description: Nom_du_volet_roulant - Positionnement
alias: nom_du_volet_roulant_positioning
id: f8811757-05f7-420d-8c34-379788af5b24
mode: restart
trigger:
- platform: time_pattern
minutes: "/10" # ⚠️ à modifier : durée entre chaque calcul de positionnement
- platform: event
event_type:
- timer.cancelled
- timer.finished
event_data:
entity_id: timer.nom_du_volet_roulant
condition:
- condition: state # Le volet ne doit pas être déjà en cours de suspension
entity_id: timer.nom_du_volet_roulant # ⚠️ à modifier avec le nom de votre timer
state: "idle"
- condition: template # La position réelle du volet doit avoir changé depuis plus de "nom_du_volet_roulant_duration_open_close" secondes
value_template: "{{ (as_timestamp(now()) - as_timestamp(states.cover.nom_du_volet_roulant.last_changed) | int(0)) > (states('input_number.nom_du_volet_roulant_detection') | int) }}" # ⚠️ à modifier avec le nom de vos entités
action:
- choose:
- conditions: # 1. Si le soleil est sous l'horizon, je veux que le volet soit fermé (0%)
- condition: numeric_state
entity_id: sun.sun
attribute: elevation
below: 0
sequence:
- service: input_number.set_value
target:
entity_id: input_number.cuisine_volet_roulant_planned_position
data:
value: 0
- conditions: # 2. Si je suis absent de la maison, je veux que le volet se positionne à 40%
- condition: template
value_template: "{{ is_state('input_boolean.presence_at_home_xxx', 'off') }}"
sequence:
- service: input_number.set_value
target:
entity_id: input_number.cuisine_volet_roulant_planned_position
data:
value: 40
default: # 3. Dans tous les autres cas, mon volet doit être ouvert à 100%
- service: input_number.set_value
target:
entity_id: input_number.nom_du_volet_roulant_planned_to_go
data:
value: 100
Le moteur de gestion
Maintenant que vos règles sont bien définies dans une automatisation, il faudra importer et configurer chacun des 3 blueprints suivants disponible sur mon github.
- cover_immediate.yaml (cliquez ici pour l'importer sur votre Home Assistant)
Ce blueprint sert à gérer les conditions immédiates :
- Immediate conditions : Entités correspondantes à vos conditions immédiates (exemples : état de l'alarme et/ou d'une fenêtre, la gestion des présences...)
- Timer : Le timer qui gère la suspension du volet roulant (
timer.nom_du_volet_roulant
) - Desired roller shutter position : L'input_number qui mémorise la position désirée du volet roulant (
input_number.nom_du_volet_roulant_desired_position
) - Roller shutter positioning : L'automatisation qui correspond au positionnement du volet roulant (
automation.nom_du_volet_roulant_positioning
)
- cover_move.yaml (cliquez ici pour l'importer sur votre Home Assistant)
- Roller shutter : Le volet roulant (
cover.nom_du_volet_roulant
) - Timer : Le timer qui gère la suspension du volet (
timer.nom_du_volet_roulant
) - Desired roller shutter position : L'input_number qui mémorise la position désirée du volet roulant (
input_number.nom_du_volet_roulant_desired_position
) - Time to complete a full opening or closing motion : L'input_number qui indique la durée que le volet met pour effectuer un mouvement complet d'ouverture et de fermeture (
input_number.nom_du_volet_roulant_detection
) - Enable accurate positioning : Activation ou non du positionnement précis (si oui, il faut remplir le champ suivant)
- Accurate position : Un input_number qui indique la position (entre 1 et 99%) pour laquelle le volet se fermera complètement avant de se positionner
- cover_suspend.yaml (cliquez ici pour l'importer sur votre Home Assistant)
- Roller shutter : Le volet roulant (
cover.nom_du_volet_roulant
) - Timer : Le timer qui gère la suspension du volet (
timer.nom_du_volet_roulant
) - Desired roller shutter position : L'input_number qui mémorise la position désirée du volet roulant (
input_number.nom_du_volet_roulant_desired_position
) - Duration of roller shutter suspension : L'input_datetime qui indique la durée de suspension du volet roulant (
input_datetime.nom_du_volet_roulant_duration_suspension
) - Time to complete a full opening or closing motion : L'input_number qui indique la durée que le volet met pour effectuer un mouvement complet d'ouverture et de fermeture (
input_number.nom_du_volet_roulant_detection
) - Check a condition before automatic positioning : Activation ou non de la vérification d'une condition avant de suspendre le volet (si oui, il faut remplir le champ suivant)
- Condition to be checked : La condition à vérifier pour activer la suspension automatique. Si cette condition est fausse, la gestion du volet roulant ne sera jamais suspendu (la suspension automatique est désactivée)
Voilà, vos 3 blueprints sont maintenant configurés et la gestion automatique du volet est en place. Il ne vous reste plus qu'à recommencer ces étapes pour tous vos autres volets roulants.
Conclusion
C'est la base de la gestion que j'utilise pour contrôler mes sept volets roulants depuis l'année dernière. Il ne nous a jamais fait défaut et on améliore les conditions au fur et à mesure pour, par exemple, anticiper les canicules ou encore, optimiser la température de la maison en hiver.
N'hésitez pas à me poser vos questions grâce au formulaire de contact ou sur HACF.
Une présentation d'un cas réel d'utilisation est disponible ici : Exemple de gestion du volet roulant de ma cuisine. Vous avez également accès à l'ensemble des automatisations que j'utilise pour gérer mes volets roulants : Automatisations - Volets roulants