Automatiser ses volets roulants en fonction du soleil été / hiver

Introduction.

Je vous propose de mettre en place une automatisation pour que vos volets roulants se ferment l’été lorsque le soleil passe devant votre ouverture et s’ouvrent l’hiver afin de limiter les montés / descente de température dans la maison. L’idée est donc de limiter l’impact du soleil à monter la température de la maison l’été et à se servir du soleil pour grappiller quelques degrés l’hiver.

Je vais essayer de vous parler des différentes manières de structurer votre configuration.yaml.

Mise à jour : 17/11/2020 – Temps de lecture / alisation : < 3 / 15 min – Difficulté : Faible / Moyenne.

Prérequis, matériels nécessaires & utilisés :

  • Version de HA : V117.1
  • File Editor d’installé.
  • Avoir ses volets roulants connectés à HA
  • Avoir définit la position de sa maison dans HA

Créer les entités dont nous aurons besoin

Le soleil

Bonne nouvelle, cette entité est de base dans HA, donc pas besoin de faire quoi que ce soit.
Attention cependant elle est basé sur la position de votre maison entrée sur HA
Pour définir la position de votre maison, allez dans Configuration puis l’onglet Général

Vous pouvez aller vérifier dans outils de développement puis l’onglet ÉTATS et dans Entité tapez sun.sun.

Nous voyons deux valeurs qui vont nous intéresser :

  • L’elevation qui correspond à la hauteur du soleil dans le ciel (axe vertical)
  • L’azimuth qui correspond à la position (d’est en ouest) du soleil dans le ciel (axe horizontal)

Sensor elevation et azimuth

Pour utiliser et suivre les attributs de notre entité sun qui sont l’elevation et l'azimuth je vous propose de créer ces valeurs dans un template sensor. Pour ce faire, dans le fichier configuration.yaml dans la partie sensor nous allons ajouter :

sensor: 
  - platform: template
    sensors:
      sunelevation:
        friendly_name: "elevation soleil"
        value_template: "{{ state_attr('sun.sun', 'elevation') }}" 
#on indique que la valeur de cette entité sera égale à la valeur de l'attribut elevation de l'entité sun.sun
      sunazimuth:
        friendly_name: "azimut soleil"
        value_template: "{{ state_attr('sun.sun', 'azimuth') }}"
#on indique que la valeur de cette entité sera égale à la valeur de l'attribut azimuth de l'entité sun.sun

Ce qui va nous créer :
image

Nous devons maintenant à quel azmiuth le soleil passe devant l’ouverture sur lequel nous avons notre volet roulant, pour ce faire je vous propose ce site.
Il vous permet de connaitre la position du soleil à une date, heure et lieu précis.

Prenons l’exemple des fenêtres sud du palais de l’Élysée:
Nous pouvons en déduire que le soleil donnera à partir de l’azimuth 140:
image

Et qu’il ne tapera plus contre la fenêtre à partir de l’azimuth 140:
image

Binary_sensor thereshold

Maintenant que nous connaissons à quel azimuth le soleil tape sur notre fenètre nous allons créer une entité qui sera à on quand le soleil sera susceptible de taper contre notre fenêtre et à off quand ca ne sera plus le cas.

Pour ce faire, dans le fichier configuration.yaml dans la partie binary_sensor nous allons ajouter :

binary_sensor: 
 - platform: threshold
   name: "soleil volet salon sud"
   upper: 270
   lower: 140
   entity_id: sensor.sunazimuth
#on a donc créé une entité qui sera active si la valeur de sensor.sunazimuth est supérieure à 140 et inférieure à 270

Ce qui va nous créer :
image

(Optionnel) Input_select mode volet roulant

Cette partie n’est pas obligatoire, elle vous permet simplement de définir plusieurs modes de fonctionnement pour votre volet roulant.
Pour ce faire, dans le fichier configuration.yaml dans la partie input_select nous allons ajouter :

input_select: 
  modevoletsalons:
    name: mode volet salon sud
    options:
      - Auto chauf
      - Auto froid
      - Manuel

Ce qui va nous créer :
image

Automatisations

Maintenant que nous avons tous ce dont nous avons besoin, passons aux automatisations :

Pour l’été quand on veut limiter la monté en température

Dans l’été pour que le volet descende seul quand le soleil va passer devant votre fenêtre nous allons procéder de la manière suivante :
Dans le fichier automation.yaml nous allons ajouter :

# ////////////////////////////////  mode froid  ////////////////////////////
# /////////  froid volet salon sud  /////////
- id: '1576153777211'
  alias: froid volet salon sud fermeture
  description: froid volet salon sud fermeture
  trigger: 
  - entity_id: binary_sensor.soleil_azimuth_volet_salon_sud
    from: 'off'
    platform: state
    to: 'on'
#cette automatisation va se déclencher si notre binary_sensor créé précédemment passe de l'état off à on 
  condition:
  - condition: state
    entity_id: input_select.modevoletsalons
    state: Auto froid
#à condition que notre input_select soit sur Auto froid
  - condition: template
    value_template: '{{ state_attr("cover.volet_salon_sud", "current_position") > 60 }}'
#et à condition que mon volet soit ouvert à plus de 60
  action:
  - data:
      entity_id: cover.volet_salon_sud
      position: 45
    service: cover.set_cover_position
#dans ce cas mon volet se met en position 45

Toujours dans l’été pour que le volet remonte seul quand le soleil ne passe plus devant votre fenêtre nous allons procéder de la manière suivante :
Dans le fichier automation.yaml nous allons ajouter :

- id: '1576153777212'
  alias: froid volet salon sud ouverture
  description: froid volet salon sud ouverture
  trigger:
  - entity_id: binary_sensor.soleil_azimuth_volet_salon_sud
    from: 'on'
    platform: state
    to: 'off'
#cette automatisation va se déclencher si notre binary_sensor créé précédemment passe de l'état on à off
  condition:
  - condition: state
    entity_id: input_select.modevoletsalons
    state: Auto froid
#à condition que notre input_select soit sur Auto froid
  - condition: numeric_state
    entity_id: sensor.sunelevation
    above: -2
#et à condition que l'élévation soit au dessus de -2 (qu'il ne fasse pas nuit)
  - condition: template
    value_template: '{{ state_attr("cover.volet_salon_sud", "current_position") == 45 }}'
#et à condition que mon volet soit à la position 45 (que je n'y ai pas touché)
  action:
  - data:
      entity_id: cover.volet_salon_sud
      position: 100
    service: cover.set_cover_position
#dans ce cas mon volet se met en position 100 (complètement ouvert)

Pour l’hiver quand on veut utiliser gratuitement la chaleur du soleil

Dans l’hiver pour que le volet monte seul quand le soleil va passer devant votre fenêtre nous allons procéder de la manière suivante :
Dans le fichier automation.yaml nous allons ajouter :

# ////////////////////////////////  mode chauf  ////////////////////////////
# /////////  chauf volet salon sud  /////////
- id: '1576153778211'
  alias: chauf volet salon sud ouverture
  description: chauf volet salon sud ouverture
  trigger:
  - entity_id: binary_sensor.soleil_azimuth_volet_salon_sud
    from: 'off'
    platform: state
    to: 'on'
#cette automatisation va se déclencher si notre binary_sensor créé précédemment passe de l'état off à on
  condition:
  - condition: state
    entity_id: input_select.modevoletsalons
    state: Auto chauf
#à condition que notre input_select soit sur Auto chauf
  - condition: template
    value_template: '{{ state_attr("cover.volet_salon_sud", "current_position") < 90 }}'
#et à condition que mon volet soit ouvert à moins de 90
  action:
  - data:
      entity_id: cover.volet_salon_sud
      position: 100
    service: cover.set_cover_position
#dans ce cas mon volet se met en position 100 (complètement ouvert)

Toujours dans l’hiver pour que le volet se referme seul (notamment si vous avez des volets isolés) quand le soleil ne passe plus devant votre fenêtre nous allons procéder de la manière suivante :
Dans le fichier automation.yaml nous allons ajouter :

- id: '1576153778212'
  alias: chauf volet salon sud fermeture
  description: chauf volet salon sud fermeture
  trigger:
  - entity_id: binary_sensor.soleil_azimuth_volet_salon_sud
    from: 'on'
    platform: state
    to: 'off'
#cette automatisation va se déclencher si notre binary_sensor créé précédemment passe de l'état on à off
  condition:
  - condition: state
    entity_id: input_select.modevoletsalons
    state: Auto chauf
#à condition que notre input_select soit sur Auto chauf
  - condition: template
    value_template:'{{ state_attr("cover.volet_salon_sud", "current_position") == 60 }}'
#et à condition que mon volet soit à la position 100 (que je n'y ai pas touché)
  action:
  - data:
      entity_id: cover.volet_salon_sud
      position: 0
    service: cover.set_cover_position
#dans ce cas mon volet se met en position 0 (complètement fermé)

Pour aller plus loin

Les automatisations ci-dessus sont a titre d’exemple, il faut les adapter en fonction des expositions et des besoins de chacun.
Par exemple pour l’hiver vous pouvez créer une autre automatisation car le soleil se couche plus tôt. Vous pouvez donc baser l’automatisation de fermeture l’hiver sur l’élévation et non plus sur l’azimut.
Il est également possible d’utiliser des valeurs de température en condition supplémentaire pour les ouvertures ou fermetures. Personnellement je m’en sert pour changer le mode du volet roulant.

Pour l’hiver afin de ne pas lever le volet roulant pour rien (il ne fait pas beau tous les jours), j’ai ajouté la condition suivante :

  - condition: template
    value_template: "{{((((states('sensor.air_control_luminosite')|float * 0.0000185) * 2) + (( 100 - states('sensor.portes_les_valence_cloud_cover')|float) * 0.01)) * 0.33333) > 0.65 }}"

Cette condition utilise la valeur de mon capteur de luminosité extérieur et la couverture nuageuse remontée par météo france. Si le capteur de luminosité considère qu’il fait beau (pris en compte à 66% dans mon calcul) et que la couverture nuageuse annoncée par météo france (pris en compte à 33% dans le calcul) et que la probabilité totale est supérieure à 65% alors j’ouvre les volets.

Texte

16 « J'aime »

Merci pour le partage

Merci pour le partage.

Juste une piste d’amélioration (pas dans le fond mais dans la forme), ce qui ne dénigre en rien ton partage et ton investissement ! :+1: :heart_eyes:

Dans les définitions de tes conditions nécessitant l’accès à l’attribut d’une entité, je te conseille de respecter la recommandation fournie par la documentation, a savoir :

Utiliser au maximum les fonctions states(), is_state() , state_attr() et is_state_attr()

Par exemple :

pourrait être remplacé par :

  - condition: template
    value_template: '{{ state_attr("cover.volet_salon_sud", "current_position") > 60 }}'

C’est simplement :

pour éviter les erreurs et les messages d’erreur lorsque l’entité n’est pas encore prête (par exemple, au démarrage de Home Assistant).

Certes, ici on parle d’automatisation et dans la définition des entités, tu suis les recommandations.

C’est simplement pour homogénéiser le code.

J’avais prévenu que c’était sur la forme et pas le fond :wink:

Encore merci pour le partage, les explications et le temps investi :+1:

Merci pour la remarque, j’ai repris tous mes sensor récemment pour reprendre cette mise en forme, mais je ne suis pas passé sur les automatisations :sweat_smile:
Je modifie le post.

Je dois moi même faire le tour de mes posts sur le forum qui utilisent state.xxx.state…
:wink:

Merci pour le partage. Je vais peut-être me laisser tenter par ce genre d’automatisation.

Bonjour

je suis et j’essaye tous en copiant de comprendre le tuto de @Yul sur les volets roulants :

tout passe la Validation de la configuration sauf un bloc de commande :

> sensor: 
>   - platform: template
>       sunelevation:
>         friendly_name: "elevation soleil"
>         value_template: "{{ state_attr('sun.sun', 'elevation') }}" 
> #on indique que la valeur de cette entité sera égale à la valeur de l'attribut elevation de l'entité sun.sun
>       sunazimuth:
>         friendly_name: "azimut soleil"
>         value_template: "{{ state_attr('sun.sun', 'azimuth') }}"
> #on indique que la valeur de cette entité sera égale à la valeur de l'attribut azimuth de l'entité sun.sun

la solution est peut-être dans l’explication de l’erreur que me donne la validation, mais c’est du chinois pour moi…

Invalid config for [sensor.template]: [sunelevation] is an invalid option for [sensor.template]. Check: sensor.template->sunelevation.

pouvez vous m’expliquer ?
merci

J’ai trouvé en remplaçant « sunelevation » par « solar_angle » et « sunazimut » par « solar_azimut »
mais je ne sais pas pourquoi…

1 « J'aime »

Merci pour le partage :slightly_smiling_face:

@Yul
Sur la config des sensor, il manque une entrée sensors pour que le code soit valide.


sensor: 
  - platform: template
    sensors:
      sunelevation:
        friendly_name: "elevation soleil"
        value_template: "{{ state_attr('sun.sun', 'elevation') }}" 
      sunazimuth:
        friendly_name: "azimut soleil"
        value_template: "{{ state_attr('sun.sun', 'azimuth') }}"
2 « J'aime »

Merci pour l’information.
Le premier post est à jour.

1 « J'aime »

Salut, je ne comprend pas j’ai un message d’erreur ??

Les lignes name, upper, lower et entity_id doivent être au même niveau que le « p » de platform.
Il y a une erreur d’indentation sur le post initial.

1 « J'aime »

Bonjour, merci pour ce post :slight_smile:

Bonjour,

Poste et code très bien expliqué, merci et bravo.
J’ai une question: Quel marque et modèle de capteur solaire utilisez-vous ?
Bonne jounée.

Salut @Yul ,

Merci beaucoup pour ton partage, j’avais ce type de fonction sous Domoticz mais je n’avais jamais porté cette fonctionnalité sous HA. Du coup grâce à toi, j’ai même pas cherché 10min sur la façon de le faire :slight_smile:

Petite question concernant ton capteur de luminosité extérieur, tu utilises quoi ? Ton capteur est-il abrité et l’autonomie des piles est-elle satisfaisante ?

Merci d’avance.

Bon je commence à intégrer ceci pour mes volets (total de 11) et je trouve cela est un peu lourd à mettre en place. Je m’explique :

Je gère mes volets en fonction de mes 3 façades, Est/Sud/Ouest. Cependant je dois ajouter des spécificités aux chambres pour éviter une ouverture/fermeture d’un volet pendant que les petites dorment. Du coup j’ai l’impression d’avoir des dizaines d’automatisation rendant la compréhension un peu lourde.

Des idées pour rassembler ceci en une seule automatisation ?

Bonjour Neuvidor,

Je me suis dis la même chose à l’instant sauf que c’est madame pour moi qui dort étant donné qu’elle fait les postes.

J’ai pensé faire ceci :

  • Crée un input_boolean qui me permet de passer ma femme en mode ‹ nuit ou jour › ce qui règlerai le
    problème de l’ouverture en cas de dodo ^^ . L’activation ce fait par le biais de deux conditions dans une automation.

    1. Elle est à la maison (localisation)
    2. Son téléphone est en état de charge

Ensuite pour épurer le nombre d’automations tu peux crée des groupes de volets par situation géographique :

  • volets sud
  • volets est
  • etc

et faire agir la desente/montée sur le groupe entier

Aussi non il te reste la possibilité de crée des Scènes.

C’est mon ressenti, je suis curieux d’obtenir d’autres informations venant des autres afin de partager un ideal :slight_smile:

Bonne journée,
sven

Bonjour,
Pour le capteur de lumière il est a coté de la piscine, pas abrité (sauf l’esp qui le pilote), c’est un BH1750. Si jamais il y a une vidéo de Seb sur une station météo sur sa chaine e-2-nomy, c’est assez proche de ce que j’ai.
Pour ce qui est de l’ouverture ou non des volets si qqn dort, j’ai des conditions sur les jours/heures et je vérifie si les téléphone portable sont connecté au wifi (cela veux dire que nous sommes réveillés) et que nous sommes à la maison (localisation).

Bonjour @Steningalive,

Merci pour ton partage.

Malheureusement je ne peux pas vraiment faire comme toi car nous n’utilisons pas le wifi mais la 4G. Concernant la localisation, celle-ci ne fonctionne pas non plus avec moi car je travaille trop proche de mon habitation (environ 400m à vol d’oiseau).

J’adore ta phrase « Crée un input_boolean qui me permet de passer ma femme en mode ‹ nuit ou jour> » => Ce serait si donc si simple ? :slight_smile:

Du coup après de multiple essais de gestion par facade je n’ai pas trouvé ceci pertinent. Du coup j’ai quand même crée un capteur d’exposition au soleil par fenêtre et donc une gestion volet par volet. Je n’ai pour le moment pas traité les chambres. Je pense au final avoir 3 gestions de mode :

  • Mode gestion volets global => OFF / Ciel couvert / Forte température
  • Mode gestion volet chambre parental => OFF / Ciel couvert / Forte température
  • Mode gestion volets chambre des enfants => OFF / Ciel couvert / Forte température / Jour / Sieste / Nuit

Mon idée est ensuite de mettre à jour ces différents modes de gestion automatiquement ou pas, chaque volet ayant sa propre automatisation.

Je partagerai une fois ceci vraiment fonctionnel, pour le moment je suis en mode réglage des critères d’exposition des volets fonction de l’azimuth.

Bonjour,

Je n’utilise pas encore home assistant mais jeedom.
Pour l’automatisation des volets des chambre je fais un truc tout « con »
Mon automatisation ne fait rien si le volet est en position fermé. (ca marche pour bébé pour maman…)
Et ca evite aussi les erreurs de detection de presence ou autre
je gere ensuite un autre booleen pour le cas ou je part en vacances afin de bypasser cette securité.

En espèrant que ça vous aide :grin:

2 « J'aime »

merci pour ce tuto très clair. J’ai un pb très bête, je souhaite mettre dans la même automation la fermeture et l’ouverture des volets en fonction d’une heure. J’ai réussi à faire la fermeture et l’ouverture mais pas dans la même automation. Une idée svp? voici mon code pour la fermeture:

- alias: 'Gestion des volets'
  trigger:
  - platform: template
    value_template: '{{ (states.sensor.time.state >= states.input_datetime.heure_fermeture_volets_rdc_semaine.state[0:5]) and (states.sensor.time.state < states.input_datetime.heure_ouverture_volets_rdc_semaine.state[0:5]) }}'
  condition:
    condition: and
    conditions:
      - condition: state
        entity_id: input_select.modes_de_fermeture_des_volets_rdc
        state: 'Mode Auto semaine'
      - condition: state
        entity_id: binary_sensor.workday_sensor
        state: "on"
  action:
  - service: rest_command.fermer_les_volets_rdc
    entity_id: rest_command.fermer_les_volets_rdc