Volets baissés selon luminance

Salut la communauté ! Besoin d’un avis garanti sans engagement.

Mon problème

J’ai deux façades copieusement arrosées par le soleil. Pratique en hiver, problématique en été. J’ai donc fait des automatismes pour faire baisser les volets en position MY. En gros les conditions sont :

  • Luminance sup à 40000lx (J’ai des sondes SOMFY IO pour mesurer sur les deux façades
  • Température sup à 20°C
    Eventuellement :
    Conditions horaires
    Conditions de volets (si volet « close », ne rien faire, quelqu’un dort dans cette pièce ou pas loin - chose que l’appli SOMFY ne permet pas de faire…)

J’ai aussi des automatismes pour les relever si :

  • Luminance sup à 800lx mais inférieur à 35000lx
    Eventuellement :
    Conditions horaires
    Conditions de volets (idem que pour la fermeture)

Ca parait simple, mais au final mes volets ne se baissent pas toujours, et certains fonctionnent mais pas d’autres. Aucune idée du pourquoi du comment. J’ai pourtant mis deux trigger, soit directement le device, soit le numeric state (qui sauf erreur ne déclenche que lorsque la valeur passe la valeur cible), mais je n’ai pas plus de résultats.

alias: Fermeture volet Mezzanine
description: ''
trigger:
  - type: illuminance
    platform: device
    device_id: :)
    entity_id: sensor.face_sud_est_luminance
    domain: sensor
    above: 40000
    for:
      hours: 0
      minutes: 0
      seconds: 30
  - platform: numeric_state
    entity_id: sensor.face_sud_est_luminance
    above: '40000'
    for:
      hours: 0
      minutes: 0
      seconds: 30
condition:
  - condition: device
    device_id: :)
    domain: cover
    entity_id: cover.volet_arthur
    type: is_open
  - condition: device
    device_id: :)
    domain: cover
    entity_id: cover.chambre_baptiste
    type: is_open
  - type: is_temperature
    condition: device
    device_id: :)
    entity_id: sensor.exterieur_temperature
    domain: sensor
    above: 20
  - condition: time
    before: '20:00:00'
    after: '09:00:00'
action:
  - device_id: :)
    domain: button
    entity_id: button.mezzanine_my_position
    type: press
mode: single

Bon voilà y a un truc qui m’échappe, je ne sais pas si c’est lié au code, à la manière de communiquer avec la Tahoma (Overkiz) ou autre chose… Je suis novice et dans le brouillard, si quelqu’un peu m’expliquer ce qui peut coincer et ce qu’il me faut vérifier ca serait super !

Ma configuration

System Health

version core-2022.5.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.9
os_name Linux
os_version 5.10.108
arch x86_64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4982
Installed Version 1.24.5
Stage running
Available Repositories 1129
Downloaded Repositories 5
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 7.6
update_channel stable
supervisor_version supervisor-2022.05.2
docker_version 20.10.9
disk_total 31.3 GB
disk_used 3.6 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons File editor (5.3.3), Terminal & SSH (9.4.0), Google Assistant SDK (2.5.0)
Dashboards
dashboards 5
resources 5
views 5
mode storage

En complément, précisons que HA tourne en machine virtuelle sur un serveur Unraid. M’enfin comme tout fonctionne je pense pas que cette précision n’ai grande importance.

Bonjour,

Il y a combien de volets à gérer, 2 ?

Trigger: en supprimer un, le device > 40k lux pendant > 30sec suffit.

Condition: je pense qu’il y a un souci sur la condition Time, en gros tu lui dis « ok si Time = de minuit à 20h ET de 9h à minuit », ça marche pas. Personnellement j’utiliserais un classique « Quand il fait jour »:

condition:
  - condition: sun
    after: sunrise
    before: sunset

Action: je ne connais pas ce mode « button », j’imagine que le « press » actionne un/des volets vers Tahoma ?

Par contre c’est bizarre que des volets fonctionnent et d’autres non, en général soit ça marche, soit ça marche pas, peu de place à l’aléatoire :confused:

Il ns faudrait un peu plus de détails.

Bonjour,
Merci pour votre retour,

J’ai 12 volets et en tout 27 devices - 207 entities qui passent par OverKiz.
Ma condition horaire me sert pour la face nord-ouest car je n’ai pas de détecteur de ce côté, et le soleil n’y vient qu’après 15h. Donc une seule condition horaire, celle que l’automatisme ne se lance qu’entre 15h et 20h.

Je vais laisser tourner 2-3 jours sans rien toucher pour voir ce qu’il se passe exactement, mais typiquement aujourd’hui l’automatisme posté n’a pas fonctionné.

J’ai l’impression quelorsque ma condition de temps est remplie, c’est à dire 9h le matin, la valeur de luminosité étant déjà au dessus de 40000lx, eh bien le trigger ne se redéclenche plus. Peut-on forcer le trigger à retester ses conditions périodiquement ?

Je me réponds à moi-même au cas où ca intéresserait d’autres novices :

Les triggers « device » (quand on a une sonde de température ou de luminosité par exemple) ou Numeric State ne déclenchent l’automatisme que lorsque la valeur dépasse la/les valeurs indiquées. Si pour une raison ou un autre la valeur est déjà dépassée, par exemple la luminosité dépasse la valeur du Trigger mais que la condition d’horaire n’est pas atteinte, ca ne se lancera plus lorsque l’horaire sera le bon. Pour le numeric state c’est noté dans les explications de HASS, mais c’était pas clair pour Device.

Pour palier à cela, j’ai utilisé un trigger Template et détaillé la bonne fonction. Pour moi, c’est :

  • Pour fermer les volets :

{{ states('sensor.face_sud_ouest_luminance') | float >= 40000 }}

  • Pour réouvrir les volets :

{{ states('sensor.face_sud_ouest_luminance') | float >= 800 and states('sensor.face_sud_ouest_luminance') | float <= 35000}}

Encore une auto-réponse. Ma solution proposée ne fonctionnait pas. Aux grands mots les grands remèdes. J’ai finalement fait un trigger « time pattern », avec dans minutes /1 pour la fermeture et /5 pour l’ouverture ainsi ca vérifie toutes les minutes ou 5 minutes pour savoir si mes conditions de température, de luminosité, de plage horaire et de statut des volets (si fermés en dessous d’un certain niveau, ne pas ouvrir car quelqu’un dort).
Le /x sert à dire « tous les x min » sinon c’est toutes les heures à la x ème minute.

Ca a l’air cette fois-ci de réellement fonctionner.

Bonjour !
Alors ma solution marche bien, bien que ca me pollue quelque peu les logs. Mais c’est pas trop grave. Par contre, fait étrange, j’ai parfois l’un ou l’autre volet qui ne se ferme pas. J’ai tenté en créant un script pour regrouper les actions à faire, mais c’est pas mieux. Le plus d’actions que j’ai à faire, c’est 4 volets à fermer en même temps, c’est pourtant pas énorme… Un peu bizarre non ?

Bon encore une réponse à moi-même, mon soucis de certains volets venait de la Tahoma, manifestement trop prêt du Link (alarme… Somfy). Ca devait faire des interférences ou quelque chose dans le genre puisque depuis qu’ils ne sont plus l’un à côté de l’autre, ca marche mieux.

salut, je suis un peu dans le même cas que toi mais ne comprends pas bien ce que tu as fait. Dans mon cas, je veux réguler l’ouverture de mes volets coté sud en fonction de la luminosité. Le problème c’est que le déclenchement se fait une fois et qu’ensuite il ne se réajuste pas en fonction de la luminosité. Il faut que je déclenche l’automatisme en manuel afin qu’il s’ajuste.
Mon déclencheur est : luminosité > 20000lux plus quelques conditions.
J’aimerai que l’ajustement se fasse automatiquement en fonction de la luminosité que j’ai paramétré.
C’est à dire: ouverture des volets à 75% si luminosité comprise entre 20000 et 50000 lux, à 60% si comprise entre 50000 et 70000lux et 50% si supérieure à 70000lux.
actuellement, lorsque toutes les conditions sont réunies, l’automatisme regarde ma luminosité et abaisse les volets en fonction de ce que j’ai mis juste au dessus. Mais une fois fait, si ma luminosité vient à changer, il reste tel quel.
Moi je voudrais qu’il fasse tout seul: la luminosité à changée donc je réajuste l’ouverture des volets.

Bonsoir,

Est-ce que à la place de:

Dans vos automatisations vous avez essayé:

mode: restart

Bonsoir !
Alors le mode restart fait que si la condition du trigger est de nouveau déclenché, la/les action(s) recommencent au début sans attendre la fin de l’action en cours.
Nous ce qu’on veut, c’est que périodiquement, les valeurs de luminance et/ou température soient vérifiées et si elles sont supérieures à un seuil, l’action s’enclenche. Pas seulement lorsque la valeur passe ce seuil car il est possible, dans certains cas particuliers, que le dépassement soit loupé.

De fait, ce qu’il faut faire, c’est utiliser comme trigger un time-pattern, comme conditions celles que l’on veut en luminance et ensuite en actions le résultat qu’on escompte.

Un exemple chez moi :

alias: Fermeture volet Baptiste
mode: single
description: ''
trigger:
  - platform: time_pattern
    minutes: /5
condition:
  - condition: device
    device_id: 5ee2e5248b25230b5989ed7f83276564
    domain: cover
    entity_id: cover.chambre_baptiste
    type: is_position
    above: 24
  - type: is_temperature
    condition: device
    device_id: 297186f08f05cb78af7795cb0129e139
    entity_id: sensor.exterieur_temperature
    domain: sensor
    above: 20
  - type: is_illuminance
    condition: device
    device_id: e14d3bca3cb5a55cd956d099ae36a9fa
    entity_id: sensor.face_sud_ouest_luminance
    domain: sensor
    above: 45000
action:
  - device_id: 5ee2e5248b25230b5989ed7f83276564
    domain: button
    entity_id: button.chambre_baptiste_my_position
    type: press

Toutes les 5 minutes (le /5 - attention, si on met juste 5 ca veut dire que ca se lancera toutes les heures à la 5eme minute), les conditions de l’automatisme sont vérifiées. J’ai une condition de température, de position de volets (si le volet est un peu en dessous de la position préférée, alors on ne veut pas que l’automatisme se lance, ca signifie que quelqu’un dort dans la chambre), et de luminosité. Si toutes ces conditions sont remplies, alors l’action se lance, à savoir se mettre sur la position préférée (comme ca il reste un peu de lumière quand même, j’aime pas vivre dans le noir en plein été !

Didj34, pour ton histoire de plusieurs conditions, je pense qu’un template sur l’action ferait l’affaire, mais moi je ne sais pas faire ca.
Du coup je te propose de faire 3 automations, 1 pour chaque seuil (above 20000 et below 49999, above 50000 et below 69999 , et above 70000) + 1 dernier automation pour ouvrir quand t’es sous un seuil que tu définiras (par exemple below 19000)!
Tu peux faire des copier coller en installant l’add-on File Editor et en allant sur automations.yaml (redémarrer après édition)

En fait ca m’intriguait, et en regardant les possibilités d’action, je vois qu’il y a une fonction if-then et, plus adapté quand on a plus que 2 seuils, la fonction choose. Du coup pour l’histoire des seuils c’est probablement quelque chose comme ca qu’il faut faire :

alias: Fermeture volet Baptiste
mode: single
description: ''
trigger:
  - platform: time_pattern
    minutes: /5
condition:
  - condition: device
    device_id: 5ee2e5248b25230b5989ed7f83276564
    domain: cover
    entity_id: cover.chambre_baptiste
    type: is_position
    above: 24
  - type: is_temperature
    condition: device
    device_id: 297186f08f05cb78af7795cb0129e139
    entity_id: sensor.exterieur_temperature
    domain: sensor
    above: 20
  - type: is_illuminance
    condition: device
    device_id: e14d3bca3cb5a55cd956d099ae36a9fa
    entity_id: sensor.face_sud_ouest_luminance
    domain: sensor
    above: 45000
action:
  - choose:
      - conditions:
          - type: is_illuminance
            condition: device
            device_id: e14d3bca3cb5a55cd956d099ae36a9fa
            entity_id: sensor.face_sud_ouest_luminance
            domain: sensor
            above: 20000
            below: 49999
        sequence:
          - device_id: 574930dfd1d1f9e7fad57a8cad688e8b
            domain: cover
            entity_id: cover.chambre_baptiste_2
            type: set_position
            position: 50
      - conditions:
          - type: is_illuminance
            condition: device
            device_id: e14d3bca3cb5a55cd956d099ae36a9fa
            entity_id: sensor.face_sud_ouest_luminance
            domain: sensor
            above: 50000
            below: 69999
        sequence:
          - device_id: 574930dfd1d1f9e7fad57a8cad688e8b
            domain: cover
            entity_id: cover.chambre_baptiste_2
            type: set_position
            position: 25
    default:
      - device_id: 574930dfd1d1f9e7fad57a8cad688e8b
        domain: cover
        entity_id: cover.chambre_baptiste_2
        type: set_position
        position: 5

Chaque choose vise une position en fonction de la luminosité et ca sera réajusté toutes les 5 min si les conditions de l’automation sont toujours valides. Par défaut la position est la plus fermée.

Sans garantie mais ca me parait être une idée !

bonsoir, merci pour vos réponses. Je vais travailler dessus demain. J’ai effectivement utilisé la fonction choose concernant mes volets, il semble que ça fonctionne. Demain, je vais tenter de progresser en essayant d’intégrer la fonction time_pattern. Je vous tient au courant.

Bonjour,

Et avec un « wait_templait: » sur vos conditions de réouverture du volet, est-ce que cela ne serait pas plus simple ?

Ce qui une fois l’automatisation exécuter, lui permettrait de se redéclencher à nouveau lorsque vos conditions de fermeture sont remplies.

Mcp

Possible mais comme déjà expliqué, je suis plutôt novice (1 mois d’utilisation d’HASS à peine !) et l’écriture de templates ne me réussit pas trop pour le moment. Comme je n’ai pas non plus énormément de temps pour contrôler que ca fonctionne comme je veux, un choose me parait plus sûr !

bonjour, alors voilà, j’ai appliqué ta méthode suggérée okkoh et j’ai utilisé le script que j’avais créé afin de réguler la hauteur de mes volets en fonction du niveau d’ensoleillement. Script dans lequel j’ai utilisé la fonction « choose ».
Resultat: ça fonctionne à merveille!!!
Voici donc les lignes de code correspondant à mon automatisme:
déclencheur: modèle de temps

platform: time_pattern
minutes: /5 (comme le dit okkoh, le / est indispensable pour que la vérification de l'état se fasse toutes les 5 minutes)

mes conditions: (vous mettez celles que vous voulez, voici les miennes)

condition: and
conditions:
  - condition: numeric_state
    entity_id: sensor.netatmo_dimquicoles_indoor_temperature (température intérieure > 23°)
    above: '23'
  - condition: state
    entity_id: input_select.mode_volets (volets en mode auto froid)
    state: Auto froid
  - condition: numeric_state
    entity_id: sensor.sunazimuth (azimuth du soleil compris entre 140 et 270, le soleil donne sur mes fenêtres entre ses valeurs)
    above: '140'
    below: '270'
  - condition: numeric_state
    entity_id: sensor.luminosite (capteur de luminosité >20000 lux)
    above: '20000'

ensuite il vous faut créer un script: (ci dessous le miens qui contient 4 plages avec différentes hauteur de volet en fonction de la luminosité qui est exprimée en lux)

choose:
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        above: '50000'
        below: '70000'
    sequence:
      - service: cover.set_cover_position
        data:
          position: 75
        target:
          area_id:
            - salon
            - atelier
            - chambre_ambre
            - chambre_ayline
            - chambre_camille
            - chambre_parentale
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        above: '70000'
        below: '90000'
    sequence:
      - service: cover.set_cover_position
        data:
          position: 60
        target:
          area_id:
            - salon
            - atelier
            - chambre_ambre
            - chambre_ayline
            - chambre_camille
            - chambre_parentale
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        above: '90000'
    sequence:
      - service: cover.set_cover_position
        data:
          position: 50
        target:
          area_id:
            - salon
            - atelier
            - chambre_ambre
            - chambre_ayline
            - chambre_camille
            - chambre_parentale
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        below: '50000'
    sequence:
      - service: cover.open_cover
        data: {}
        target:
          area_id:
            - salon
            - atelier
            - chambre_ambre
            - chambre_ayline
            - chambre_camille
            - chambre_parentale
default: []

action: mettre le script que vous avez créé (voir ci dessus par exemple)

ça y est, votre automatisme est créé.

Je vais essayer de l’améliorer en rajoutant des conditions du genre: si le volet est fermé, ne rien faire car une personne dors ou si le mode absence longue est activé, ne rien faire.

Content d’avoir pu aider. Pour le mode absence, pensez à l’opérateur NOT dans les conditions (la condition pour le mouvement des volets se fera si le mode absence n’est pas enclenché). Pour le volet, chez moi un volet a un state open dès lors qu’il n’est pas entièrement fermé. du coup combiné avec un NOT, ca fonctionnerait bien.

Bonjour, j’apporte quelques modifications aux lignes de commandes données ci dessus et je vais vous donner par la même occasion un nouvel automatisme permettant de remonter complètement les volets lorsque l’une des conditions du programme de régulation des volets n’est plus remplie. Pourquoi? et bien je me suis rendu compte que lorsque l’une des conditions n’était plus remplie, les volets gardaient la dernière position. Hors ce que je veux, c’est que lorsque l’une des conditions n’est plus remplie, les volets remontent car cela signifie que je n’ai plus besoin de fermer partiellement les volets pour conserver la fraicheur dans la maison.
La première modification, c’est qu’il faut créer le même automatisme pour chaque volet car je vais indiquer dans chacun en condition que celui-ci ne peut se déclencher que si le volet n’est pas fermé (commande AND). Par exemple, si le volet de ma chambre est totalement fermé, cela indique peut être que je dors et que je n’ai pas envie que mon volet se régule. L’intérêt de créer un automatisme pour chaque volet, c’est que l’on va interagir que sur le volet concerné. Je dors et je ne veux pas que mon volet s’ouvre mais je veux que les volets se régulent dans les autres pièces que j’ai paramétrées pour se réguler. Je reprends donc mon automatisme du dessus qui donne ceci une fois modifié:

condition: and
conditions:
  - condition: numeric_state
    entity_id: sensor.netatmo_dimquicoles_indoor_temperature (température intérieure > 23°)
    above: '23'
  - condition: state
    entity_id: input_select.mode_volets (volets en mode auto froid)
    state: Auto froid
  - condition: numeric_state
    entity_id: sensor.sunazimuth (azimuth du soleil compris entre 140 et 270, le soleil donne sur mes fenêtres entre ses valeurs)
    above: '140'
    below: '270'
  - condition: numeric_state
    entity_id: sensor.luminosite (capteur de luminosité >20000 lux)
    above: '20000'
  - condition: not
    conditions:
      - condition: state
        entity_id: cover.chambre_ambre
        state: closed

J’ai juste rajouté la condition « NOT » concernant le volet de ma chambre dans cet automatisme, il faudra bien entendu l’adapter avec l’entité de chaque volet.

Voici maintenant la modification du script à insérer dans l’action de l’automatisme. Encore une fois, il faudra créer autant de scripts que d’automatisme pour chaque volet. Vous pouvez dupliquer un automatisme ou un script en cliquant sur les 3 points en haut à droite, une fois que vous êtes sur la page de votre script ou automatisme, ça vous simplifiera la tâche car il n’y aura que les entités à modifier et un nouveau nom à lui donner avant de le sauvegarder.

choose:
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        above: '50000'
        below: '70000'
    sequence:
      - service: cover.set_cover_position
        data:
          position: 75
        target:
          area_id:
            - chambre_parentale
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        above: '70000'
        below: '90000'
    sequence:
      - service: cover.set_cover_position
        data:
          position: 60
        target:
          area_id:
            - chambre_parentale
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        above: '90000'
    sequence:
      - service: cover.set_cover_position
        data:
          position: 50
        target:
          area_id:
            - chambre_parentale
  - conditions:
      - condition: numeric_state
        entity_id: sensor.luminosite
        below: '50000'
    sequence:
      - service: cover.open_cover
        data: {}
        target:
          area_id:
            - chambre_parentale
default: []

Voilà, votre automatisme est créé pour un volet, mais ce n’est pas terminé. Il vous faut maintenant créer un nouvel automatisme pour chaque volet afin qu’il remonte en totalité lorsque l’une des conditions de l’automatisme donné au dessus n’est plus remplie, excepté bien entendu lorsqu’il fait nuit et qu’il est totalement fermé. La commande « NOT » sera utilisée là aussi.
Ce qui donne: (le déclencheur est toujours un modèle de temps (time patter)

condition: and
conditions:
  - condition: or
    conditions:
      - condition: numeric_state
        entity_id: sensor.netatmo_dimquicoles_indoor_temperature
        below: '23'
      - condition: state
        entity_id: input_select.mode_volets
        state: Auto chaud
      - condition: state
        entity_id: input_select.mode_volets
        state: Manuel
      - condition: numeric_state
        entity_id: sensor.sunazimuth
        above: '280'
        below: '140'
      - condition: numeric_state
        entity_id: input_number.luminosite
        below: '20000'
  - condition: not
    conditions:
      - condition: state
        entity_id: cover.chambre_parentale
        state: closed

J’ai mis un « ou » dans les premières conditions car il suffit que l’une ou l’autre ne soit pas remplie et que mon volet ne soit pas fermé pour qu’il se relève.
Les modes auto chaud et manuel font partis d’une programmation que j’ai vu sur un autre forum permettant de réguler l’ouverture des volets en hivers, en été ou en manuel, ils ne sont pas indispensables, chacun met les conditions qu’il veut.
Vous avez maintenant un automatisme complet de régulation volet par volet. Il y a peut être plus simple, surement avec des templates, mais lorsqu’on ne maîtrise pas bien la création de templates, ça me semble tout à fait viable.
Il est en place chez moi et fonctionne très bien aujourd’hui. Je vais juste peut être à l’avenir prolonger le time pattern en le passant à /10 (toutes les 10 minutes), un détail.

1 « J'aime »