Il y a trois ans, j’avais publié une automatisation simple pour fermer mes volets en fonction des relevés de température. Ça fonctionnait bien, mais après plus de 3 ans d’utilisation, j’ai considérablement amélioré le système. Laissez-moi vous montrer ce qui a changé et pourquoi.
Quoi de Neuf ?#
La version originale avait une seule automatisation contrôlant 5 volets l’après-midi. Le nouveau système :
- 3 zones au lieu de 1 (rez-de-chaussée, bureau, premier étage)
- Capteurs de température moyennés au lieu de relevés uniques
- Réouverture automatique le soir
- Exécution optimisée (10 minutes au lieu de 5)
- 6 automatisations au total (3 fermetures + 3 ouvertures)
Les Capteurs de Température#
L’amélioration clé est l’utilisation de capteurs moyennés au lieu de s’appuyer sur des relevés de température uniques. J’utilise la plateforme min_max de Home Assistant avec le type mean :
# components/sensors.yaml
- platform: min_max
name: average_temperature_external
type: mean
round_digits: 1
entity_ids:
- sensor.motion_externe_patio_temperature
- sensor.motion_externe_salon_temperature
- sensor.motion_externe_chambre_temperature
- sensor.motion_externe_entree_temperature_2
- sensor.motion_externe_bureau_temperature_2
- sensor.netatmo_external_temperature
- platform: min_max
name: average_temperature_ground_floor
type: mean
round_digits: 1
entity_ids:
- sensor.temperature_sensor_salon_temperature_2
- sensor.temperature_sensor_salle_manger_temperature_2
- sensor.temperature_sensor_cuisine_temperature_2
- sensor.temperature_sensor_bureau_temperature_2
- sensor.netatmo_weather_station_temperature
- sensor.temperature_sensor_salle_bain_parents_temperature_2
- platform: min_max
name: average_temperature_first_floor
type: mean
round_digits: 1
entity_ids:
- sensor.temperature_sensor_chambre_gaia_temperature_2
- sensor.temperature_sensor_chambre_bastien_temperature_2
- sensor.temperature_sensor_bibliotheque_temperature_2
- sensor.temperature_sensor_salle_bain_etage_temperature_2Cette approche est plus robuste car :
- Les pannes de capteurs uniques ne cassent pas l’automatisation
- Les variations de température entre les pièces sont moyennées
- Une représentation plus précise des conditions réelles
Zone 1 : Volets du Rez-de-Chaussée#
Automatisation de Fermeture#
- id: cover_closes_weather
alias: Close cover based on afternoon temperature
triggers:
- trigger: time_pattern
minutes: /10
conditions:
- condition: time
alias: Time 12~18
after: '12:00:00'
before: '18:00:00'
- condition: or
conditions:
- condition: template
value_template: '{{ states.automation.close_cover_based_on_afternoon_temperature.attributes.last_triggered == none }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.close_cover_based_on_afternoon_temperature'', ''last_triggered'')) |int(0)) > 28800 }}'
- condition: template
value_template: '{{ states.sensor.average_temperature_external.state|float > states.sensor.average_temperature_ground_floor.state|float + 2 }}'
- condition: numeric_state
entity_id: sensor.temperature_sensor_salon_temperature_2
above: 20
actions:
- action: cover.set_cover_position
data:
entity_id:
- cover.salon_n1
- cover.salon_n2
- cover.salon_n3
- cover.salon_n4
- cover.chambre_jardin
position: 40Points clés :
- Exécution toutes les 10 minutes (était 5)
- Fenêtre horaire : 12h00-18h00 (était 12h30-18h00)
- La température externe doit être 2°C plus chaude que l’interne
- La température interne doit être supérieure à 20°C
- Volets à 40% (pas complètement fermés)
Automatisation d’Ouverture#
- id: open_cover_when_weather_closed
alias: Open cover when automatically closed
triggers:
- trigger: time_pattern
minutes: /10
conditions:
- condition: time
alias: Time 19h00~20
after: '19:00:00'
before: '20:00:00'
- condition: or
conditions:
- condition: template
value_template: '{{ states.automation.open_cover_when_automatically_closed.attributes.last_triggered == none }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.open_cover_when_automatically_closed'', ''last_triggered'')) |int(0)) > 28800 }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.close_cover_based_on_afternoon_temperature'', ''last_triggered'')) |int(0)) < 28800 }}'
actions:
- action: cover.open_cover
data:
entity_id:
- cover.salon_n1
- cover.salon_n2
- cover.salon_n3
- cover.salon_n4
- cover.chambre_jardinCette automatisation rouvre les volets le soir (19h00-20h00) s’ils ont été fermés par l’automatisation de température pendant la journée.
Zone 2 : Volets du Bureau#
Automatisation de Fermeture#
- id: cover_bureau_closes_weather
alias: Close Bureau Cover based on temperature
triggers:
- trigger: time_pattern
minutes: /10
conditions:
- condition: time
alias: Time 8~13
after: 08:00:00
before: '13:00:00'
- condition: or
conditions:
- condition: template
value_template: '{{ states.automation.close_bureau_cover_based_on_temperature.attributes.last_triggered == none }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.close_bureau_cover_based_on_temperature'', ''last_triggered'')) |int(0)) > 28800 }}'
- condition: template
value_template: '{{ (states.sensor.motion_externe_entree_temperature_2.state|float + states.sensor.motion_externe_bureau_temperature_2.state|float)/2 > states.sensor.temperature_sensor_bureau_temperature_2.state|float }}'
- condition: numeric_state
entity_id: sensor.temperature_sensor_bureau_temperature_2
above: 20
actions:
- action: cover.set_cover_position
data:
entity_id:
- cover.bureau_jardin
position: 40Différences clés avec le rez-de-chaussée :
- Fenêtre horaire : 08h00-13h00 (exposition matinale)
- Moyenne de 2 capteurs externes au lieu de 6
- Pas de différentiel de 2°C nécessaire (juste externe > interne)
Automatisation d’Ouverture#
- id: open_bureau_cover_when_weather_closed
alias: Open Bureau cover when automatically closed
triggers:
- trigger: time_pattern
minutes: /5
conditions:
- condition: time
alias: Time 14h00~14h30
after: '14:00:00'
before: '14:30:00'
- condition: or
conditions:
- condition: template
value_template: '{{ states.automation.open_bureau_cover_when_automatically_closed.attributes.last_triggered == none }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.open_bureau_cover_when_automatically_closed'', ''last_triggered'')) |int(0)) > 28800 }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.close_bureau_cover_based_on_temperature'', ''last_triggered'')) |int(0)) < 28800 }}'
actions:
- action: cover.open_cover
data:
entity_id:
- cover.bureau_jardinLe volet du bureau s’ouvre brièvement à 14h00-14h30 car le soleil s’est éloigné de cette fenêtre.
Zone 3 : Volets Velux du Premier Étage#
Automatisation de Fermeture#
- id: cover_floor_weather
alias: Close first floor covers based on afternoon temperature
triggers:
- trigger: time_pattern
minutes: /10
conditions:
- condition: time
alias: Time 12~18
after: '11:00:00'
before: '18:00:00'
- condition: or
conditions:
- condition: template
value_template: '{{ states.automation.close_first_floor_covers_based_on_afternoon_temperature.attributes.last_triggered == none }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.close_first_floor_covers_based_on_afternoon_temperature'', ''last_triggered'')) |int(0)) > 28800 }}'
- condition: template
value_template: '{{ states.sensor.average_temperature_external.state|float > states.sensor.average_temperature_first_floor.state|float }}'
actions:
- action: cover.close_cover
data:
entity_id:
- cover.velux_gaia_jardin_roller_shutter
- cover.velux_bastien_jardin_roller_shutter
- cover.velux_biblioteque_roller_shutterDifférences clés :
- Fenêtre horaire : 11h00-18h00 (commence plus tôt à cause de l’expositiontoiture)
- Pas de différentiel de 2°C (les fenêtres de toit chauffent plus vite)
- Volets complètement fermés (pas 40%)
- Contrôle des fenêtres de toit Velux
Automatisation d’Ouverture#
- id: open_floor_when_weather_closed
alias: Open first floor covers when automatically closed
triggers:
- trigger: time_pattern
minutes: /10
conditions:
- condition: time
alias: Time 19h00~20
after: '19:00:00'
before: '20:00:00'
- condition: or
conditions:
- condition: template
value_template: '{{ states.automation.open_first_floor_covers_when_automatically_closed.attributes.last_triggered == none }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.open_first_floor_covers_when_automatically_closed'', ''last_triggered'')) |int(0)) > 28800 }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.close_first_floor_covers_based_on_afternoon_temperature'', ''last_triggered'')) |int(0)) < 28800 }}'
actions:
- action: cover.open_cover
data:
entity_id:
- cover.velux_gaia_jardin_roller_shutter
- cover.velux_bastien_jardin_roller_shutter
- cover.velux_biblioteque_roller_shutterLa Condition “Déjà Exécuté”#
Toutes les automatisations utilisent ce pattern pour éviter les exécutions multiples par jour :
- condition: or
conditions:
- condition: template
value_template: '{{ states.automation.VOTRE_AUTOMATISATION_ID.attributes.last_triggered == none }}'
- condition: template
value_template: '{{ ( as_timestamp(now()) - as_timestamp(state_attr(''automation.VOTRE_AUTOMATISATION_ID'', ''last_triggered'')) |int(0)) > 28800 }}'Cela vérifie si :
- L’automatisation n’a jamais été déclenchée (première exécution), OU
- Le dernier déclenchement date de plus de 8 heures (28800 secondes)
Pourquoi 8 heures ? Ça empêche la ré-exécution dans la même plage horaire tout en permettant l’exécution le lendemain.
Leçons Apprises Après 3 Ans#
- Les capteurs moyennés sont plus fiables - Les pannes de capteurs uniques ne cassent pas le système
- Les zones multiples sont importantes - Différentes expositions nécessitent des timing différents
- La réouverture automatique est essentielle - Les volets ne doivent pas rester fermés toute la nuit
- Les intervalles de 10 minutes suffisent - 5 minutes était excessif
- Le différentiel de 2°C fonctionne bien - Prévient les déclenchements par temps nuageux
- Les Velux ont besoin d’un traitement spécial - Les fenêtres de toit chauffent plus vite et nécessitent une fermeture complète
Et Ensuite ?#
Le post original mentionnait l’ajout de capteurs d’intensité lumineuse (lux) pour empêcher la fermeture des volets quand il fait nuageux mais chaud. J’ai implémenté ceci dans mes automatisations d’éclairage externe et prévois de l’intégrer ici aussi.
Restez à l’écoute pour la prochaine mise à jour !
Articles connexes :
