Marquisette, Plissé, Température et Luminosité

Automatisation complexe…Marquisette-Plissé-temperature-lumière

Avant de décrire mon problème, UN GRAND MERCI a toute les infos que j’ai déjà trouver, toutes le choses que j’ai déjà appris dans cette communauté. Tout les jours je réussi des truc ou pas, mais le lendemain je trouve une solutions…

Voila ce que je veut faire - ce que je fais avec Homey. Malheureusement je n’arrive pas a transférer ce que je fais sur Homey sur HA. Désolé mais je ne me retrouve pas!

Donc dans ma véranda, le toit est fait de 8 énorme Velux. Sur ces velux j’ai 8x marquisette (stores toile a l’extérieur) et 8x plissé (stores a l’intérieur).
Avec un capteur de lumière (Aeotec en Z-wave) je mesure la lumière et au moment qu’il depasse un seuil - je fais descendre les marquisette (extérieur). Et si lumières en dessous du seuil - les marquisette remonte.
Rien de plus simple…
Par contre si a l’extérieur il fait en dessous de 10degres, je veut que les plissé (intérieur) se ferme, je ne veut pas les marquisette dans la neige sur le toit et je veut chauffer la véranda! En même temps si la température change, alors change les store.
De plus l’ors d’un passage de nuage je ne veut pas que les stores monte et descende x fois au long de la journée! Pour cela sur Homey j’ai mis un compteur, ou je règle combien de fois en combien te temps il re prend la mesure de la lumière pour voir le chamgement et seulement la il fait fermé les stores. Pour le moment il va tout les 90s voir les lux et si le compteur arrive a trois il ferme, si non il mets le compteur a 0 pour la prochaine fois…

Un peu compliquer peut etre mais sa fonctionne bien…

Bon, puisque je connait pas non plus toute les fonctions de HA, si vous avez des idées avec quoi comment je pourrais mettre sa en oeuvres.

Un grand merci d’avance

Salut!
Pour avoir le délai, plutôt que de mettre un timer tu peux utiliser la propriété last_updated (dernier changement d’état) de tes stores et lors du déclenchement de l’automation faire une condition via le delta avec l’heure actuelle. C’est une piste :slight_smile:

c’est là où node red aurait drôlement simplifié les choses (pour moi en tout cas…node red, c’est la vie… lol ) courage !

1 J'aime

Une autre piste, utiliser la clé for qui déclenche lorsque l’etat du déclencheur est acquis pendant x secondes, minutes, etc.

Rien ne t’empêche (au contraire, sur un autre sujet je disais que ce serais super) de fournir ta solution en Node-RED :+1:

me tente pas mon loulou lol, je vais peut etre le faire, le cahier des charges de @Shadow est super limpide ^^

@Shadow , tu as donc 8 entités par marquisettes et 8 entités par plissé? tu as fait des groupes pour tes entités peut etre (style grp.marquisette_ext et grp.marquisette_plissees ) ?

en Node red ça donnerai un truc comme cela :

[{"id":"4185f335.4f68cc","type":"tab","label":"shadow","disabled":false,"info":""},{"id":"549948ee.639f08","type":"server-state-changed","z":"4185f335.4f68cc","name":"capt luminosite >50 lumens","server":"a537137.2d98df","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"capt luminosite","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"50","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":140,"y":209,"wires":[["c97d12c.a79fcf"],["c3672542.1af828"]]},{"id":"7455f892.32eeb8","type":"api-call-service","z":"4185f335.4f68cc","name":"group.marquisette_ext fermeture","server":"a537137.2d98df","version":1,"debugenabled":false,"service_domain":"switch","service":"turn_off","entityId":"group.marquisette_ext","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":870,"y":169,"wires":[[]]},{"id":"a2b5cb2c.5f4ca8","type":"api-call-service","z":"4185f335.4f68cc","name":"group.marquisettes_ext Ouverture","server":"a537137.2d98df","version":1,"debugenabled":false,"service_domain":"switch","service":"turn_on","entityId":"group.marquisettes_ext","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":880,"y":269,"wires":[[]]},{"id":"84acaf17.15d69","type":"server-state-changed","z":"4185f335.4f68cc","name":"capt temperature ext  <10°","server":"a537137.2d98df","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"capt temperature ext","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"10","halt_if_type":"num","halt_if_compare":"lt","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":150,"y":440,"wires":[["e64b802.7aac18"],[]]},{"id":"853a7e5b.97658","type":"api-call-service","z":"4185f335.4f68cc","name":"group.marquisettes_plissees Fermetture","server":"a537137.2d98df","version":1,"debugenabled":false,"service_domain":"switch","service":"turn_off","entityId":"group.marquisettes_plissees","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":680,"y":440,"wires":[[]]},{"id":"c7b512d7.91a5a","type":"comment","z":"4185f335.4f68cc","name":"Avec un capteur de lumière (Aeotec en Z-wave) je mesure la lumière et au moment qu’il depasse un seuil - je fais descendre les marquisette (extérieur). ","info":"","x":570,"y":40,"wires":[]},{"id":"6267a3f6.25e3ac","type":"comment","z":"4185f335.4f68cc","name":"Par contre si a l’extérieur il fait en dessous de 10degres, je veut que les plissé (intérieur) se ferme","info":"","x":410,"y":380,"wires":[]},{"id":"e64b802.7aac18","type":"looptimer","z":"4185f335.4f68cc","duration":"90","units":"Second","maxloops":"10","maxtimeout":"1","maxtimeoutunits":"Hour","name":"","x":400,"y":440,"wires":[["853a7e5b.97658"],[]]},{"id":"c97d12c.a79fcf","type":"looptimer","z":"4185f335.4f68cc","duration":"90","units":"Second","maxloops":"10","maxtimeout":"1","maxtimeoutunits":"Hour","name":"","x":360,"y":169,"wires":[["7455f892.32eeb8"],[]]},{"id":"c3672542.1af828","type":"looptimer","z":"4185f335.4f68cc","duration":"90","units":"Second","maxloops":"10","maxtimeout":"1","maxtimeoutunits":"Hour","name":"","x":360,"y":269,"wires":[["a2b5cb2c.5f4ca8"],[]]},{"id":"2b046bca.beec64","type":"comment","z":"4185f335.4f68cc","name":"verification ttes les 90sec, 10 changements de statut / heure","info":"","x":500,"y":229,"wires":[]},{"id":"bdf828c3.e2a728","type":"comment","z":"4185f335.4f68cc","name":"verification ttes les 90sec, 10 changements de statut / heure","info":"","x":500,"y":129,"wires":[]},{"id":"90bd9701.0288a8","type":"comment","z":"4185f335.4f68cc","name":"Et si lumières en dessous du seuil - les marquisette remonte.","info":"","x":291,"y":80,"wires":[]},{"id":"a537137.2d98df","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

mais @Shadow , utilises tu Node red?

Oui 8x de chaque et j’ai créer le groupe :

#covers.yaml
- platform: group
  name: Marquisette
  entities:
    - cover.marquisette_dd_5
    - cover.marquisette_dg_5
    - cover.marquisette_dmd_5
    - cover.marquisette_dmg_5
    - cover.marquisette_hd_5
    - cover.marquisette_hg_5
    - cover.marquisette_hmd_5
    - cover.marquisette_hmg_5
- platform: group
  name: Plissé
  entities:
    - cover.plisse_devant_droite_5
    - cover.plisse_devant_gauche_5
    - cover.plisse_devant_md_5
    - cover.plisse_devant_mg_5
    - cover.plisse_haut_droite_5
    - cover.plisse_haut_gauche_5
    - cover.plisse_haut_md_5
    - cover.plisse_haut_mg_5

Non je ne voulais pas encore un truc de plus… je commence a comprendre le reste

Je te réponds en YAML ce soir :+1:

1 J'aime

En lisant ton explication j’en déduis le principe suivante :

SI sensor.luminosite_exterieur >= seuil_luminosite ALORS
    -> marquisettes CLOSE (DESCENTE)
SI sensor.luminosite_exterieur < seuil_luminosite (pendant 5min) ALORS
    -> marquisettes OPEN (MONTEE)
SI sensor.temperature_exterieure <= seuil_température ALORS
    -> plisse CLOSE (FERMETURE)
    -> marquisettes OPEN (OUVERTURE)
    -> chauffage ON (ACTIVATION) 
SI sensor.temperature_exterieure > seuil_température ALORS
    -> plisse OPEN (OUVERTURE)
    -> chauffage OFF (ACTIVATION)
    SI sensor.luminosite_exterieur >= seuil_luminosite ALORS
       -> marquisettes CLOSE (DESCENTE)

Je ne suis pas sûr de l’interprétation de ta phrase :

Je n’ai pas saisi si tu parlais de l’effet de serre de la véranda ou d’un chauffage dans la vérande, donc dans le doute, je suis partis sur un chauffage dans la véranda.
Si tu n’en as pas, il suffit de supprimer les lignes d’action lié au chauffage (switch.chauffage)

J’ai essayé de commenter au maximum le code.

La seule notion nouvelle que je n’ai jamais rencontré sur le forum est la notion d’id du déclencheur.

Donc…

Explications :

Lorsque qu’une automatisation comporte plusieurs déclencheurs, Home Assistant leur attribut à chacun un identifiant unique nommé id.

Il est présent dans la variable trigger qui est créée au déclenchement de l’automatisation.
Pour pouvoir y accéder dans les modèles(templates) de condition, action de l’automatisation déclenchée il suffit d’écrire {{trigger.id}}.

Prenons l’exemple d’une automatisation avec 3 déclencheurs, Home Assistant attribuera à chacun de ces déclencheur un identifiant à partir de 0 et suivant l’ordre de déclaration de ces déclencheurs.

alias: Identifiant des déclencheurs
description: 'Gestion des identifiants des déclencheurs'
trigger:
# Déclencheur = 0 (trigger.id = 0)
  - platform: numeric_state
    entity_id: sensor.luminosite_exterieure
# Déclencheur = 1 (trigger.id = 1)
  - platform: state
    entity_id: sensor.luminosite_exterieure
# Déclencheur = 2 (trigger.id = 2)
  - platform: numeric_state
    entity_id: sensor.temperature_exterieure
condition: []
action: []

On revient donc à ta demande qui contient pour moi 4 déclencheurs :

Déclencheur = 0 (trigger.id = 0) :
    SI sensor.luminosite_exterieur >= seuil_luminosite ALORS
        -> marquisettes CLOSE (DESCENTE)
Déclencheur = 1 (trigger.id = 1) :
    SI sensor.luminosite_exterieur < seuil_luminosite (pendant 5min) ALORS
        -> marquisettes OPEN (MONTEE)
Déclencheur = 2 (trigger.id = 2) :
    SI sensor.temperature_exterieure <= seuil_température ALORS
        -> plisse CLOSE (FERMETURE)
        -> marquisettes OPEN (OUVERTURE)
        -> chauffage ON (ACTIVATION) 
Déclencheur = 3 (trigger.id = 3) :
    SI sensor.temperature_exterieure > seuil_température ALORS
        -> plisse OPEN (OUVERTURE)
        -> chauffage OFF (ACTIVATION)
        SI sensor.luminosite_exterieur >= seuil_luminosite ALORS
        -> marquisettes CLOSE (DESCENTE)

Ce qui donne en automatisation YAML :

alias: Véranda
description: 'Gestion des marquisettes et plissés en fonction de la luminosité et de la température'
trigger:
# Déclencheur 0 : Luminosité > Seuil de luminosite 
  - platform: numeric_state
    entity_id: sensor.luminosite_exterieure
    above: input_number.luminosite_exterieure
# Déclencheur 1 : Luminosité < Seuil de luminosite depuis 5 minutes
  - platform: numeric_state
    entity_id: sensor.luminosite_exterieure
    below: input_number.luminosite_exterieure
    for: '00:05:00'
# Déclencheur 2 : Température < Seuil de température 
  - platform: numeric_state
    entity_id: sensor.temperature_exterieure
    below: input_number.temperature_exterieure
# Déclencheur 3 : Température > Seuil de température 
  - platform: numeric_state
    entity_id: sensor.temperature_exterieure
    above: input_number.temperature_exterieure
condition: []
action:
  - choose:
      - conditions:
      # Déclencheur 0 : Luminosité > Seuil de luminosite 
          - condition: template
            alias: "Luminosité > Seuil"
            value_template: '{{trigger.id == ''0''}}'
        sequence:
          # Notification dans la barre latérale
          - service: persistent_notification.create
            data:
              title: "[Veranda] - Luminosité > Seuil"
              message: "Descente des marquisettes"
          # Descente des marquisettes
          - service: cover.close_cover
            target:
              entity_id: cover.marquisette
      - conditions:
      # Déclencheur 1 : Luminosité < Seuil de luminosite depuis 5 minutes
          - condition: template
            alias: "Luminosité < Seuil depuis 5 min"
            value_template: '{{trigger.id == ''1''}}'
        sequence:
          # Notification dans la barre latérale
          - service: persistent_notification.create
            data:
              message: "[Veranda] - Luminosité < Seuil depuis 5 min"
          # Montée des marquisettes
          - service: cover.open_cover
            target:
              entity_id: cover.marquisette
      - conditions:
      # Déclencheur 2 : Température < Seuil de température 
          - condition: template
            alias: "Température < Seuil"
            value_template: '{{trigger.id == ''2''}}'
        sequence:
          # Notification dans la barre latérale
          - service: persistent_notification.create
            data:
              message: "[Veranda] - Température < Seuil"
          # Montée des marquisettes
          - service: cover.open_cover
            target:
              entity_id: cover.marquisette
          # Fermeture des plissés
          - service: cover.close_cover
            target:
              entity_id: cover.plisse
          # Activation du chauffage
          - service: switch.turn_on
            target:
              entity_id: switch.chauffage
      - conditions:
      # Déclencheur 3 : Température > Seuil de température 
          - condition: template
            alias: "Température > Seuil"
            value_template: '{{trigger.id == ''3''}}'
        sequence:
          # Notification dans la barre latérale
          - service: persistent_notification.create
            data:
              message: "[Veranda] - Température > Seuil"
          # Extinction du chauffage
          - service: switch.turn_off
            target:
              entity_id: switch.chauffage
          # Vérification que Luminosité > Seuil
          - condition: numeric_state
            above: input_number.luminosite_exterieure
            entity_id: sensor.luminosite_exterieure
          # Vérification que Marquisettes != closed (donc open)
          - condition: state
            entity_id: cover.marquisette
            state: open
          # Notification dans la barre latérale
          - service: persistent_notification.create
            data:
              message: "[Veranda] - Descente Marquisettes"
          # Descente des marquisettes
          - service: cover.close_cover
            target:
              entity_id: cover.marquisette
    default: []
mode: single
1 J'aime

Je n’ai pas trouvé l’écriture compliqué… :wink:

Le plus dur a été de construire le squelette, la logique et ensuite via l’interface de HA, le faire en prenant son temps …

Le YAML c’est la vie !

image

Mdr :kissing_heart: HA c est la vie :slight_smile:

1 J'aime

Eh SUPER Merci… je sais pas quoi dire

Je vais tester tout sa, en attendant que le beau temps reviens un peu pour tester les nuage…
A priori c’est plus facile que les flows que j’ai sur Homey. Mais j’aurais certainement encore des questions.

Avec je veut chauffer je pensais tout simplement au plissé qui sont a l’intérieur et réchauffe la véranda.

Mets simplement un :heart:

:+1: