Soucis script pour éteindre vmc

Bonsoir tout le monde,

Je rencontre un souci pour mon automatisation de VMC et peut être que vous trouverez ou ça bug dans ma réflexion…

J’ai une vmc derrière un Sonoff R2 basic.

Il s’active quand ma lumière de sdb s’allume ou quand l’humidité de la sdb (récupéré avec un thermomètre Sonoff) est au dessus de 75%.

Elle est sensée s’éteindre quand:

La lumière de la sdb est de nouveau coupée pendant 5min ET que l’humidité est bien en dessous de 75%

Ou

Que l’humidité est globalement passée sous la barre des 75%.

Mais voilà, l’allumage à l’air de se faire correctement, mais elle ne s’éteint jamais…

Vous auriez une idée de ce que je fais mal?

Merci beaucoup pour votre aide !:blush:

Voilà mon script :

alias: Allumage VMC si humide
description: ""
trigger:
  - type: humidity
    platform: device
    device_id: bdac2c9df79b7582c3eb0b71c7ded959
    entity_id: sensor.temp_sdb_humidity
    domain: sensor
    above: 75
    for:
      hours: 0
      minutes: 0
      seconds: 1
  - platform: device
    type: turned_on
    device_id: 1d9b8a2ea9e7cd5ae870339e578acde7
    entity_id: switch.spots_sdb
    domain: switch
condition: []
action:
  - type: turn_on
    device_id: 103d9ac150a303bb6543b16ed3137580
    entity_id: switch.tasmota_3
    domain: switch
  - if:
      - condition: device
        type: is_off
        device_id: 1d9b8a2ea9e7cd5ae870339e578acde7
        entity_id: switch.spots_sdb
        domain: switch
        for:
          hours: 0
          minutes: 5
          seconds: 0
      - condition: and
        conditions:
          - type: is_humidity
            condition: device
            device_id: bdac2c9df79b7582c3eb0b71c7ded959
            entity_id: sensor.temp_sdb_humidity
            domain: sensor
            below: 75
    then:
      - type: turn_off
        device_id: 103d9ac150a303bb6543b16ed3137580
        entity_id: switch.tasmota_3
        domain: switch
    else:
      - type: turn_on
        device_id: 103d9ac150a303bb6543b16ed3137580
        entity_id: switch.tasmota_3
        domain: switch
      - repeat:
          while:
            - type: is_humidity
              condition: device
              device_id: bdac2c9df79b7582c3eb0b71c7ded959
              entity_id: sensor.temp_sdb_humidity
              domain: sensor
              above: 75
          sequence: []
mode: single

Salut
Alors le cas de déclenchement par les spots ne doit pas fonctionner. Ça déclenche sur l’état spot on certes mais ça rentre jamais dans la condition du if (spot off) puisque c’est justement l’inverse
Et le while… Bof bof

Voici mon implementation. Je vais la changer un peu pour prendre en compte une difference minimum avec l’humidité extérieure, plutôt que de prendre en compte une valeur fixe. C’était ok pour l’hiver, mais pas trop pour l’été:

Principe de fonctionnement: les triggers concernent tous les événements qui peuvent activer la VMC.

La condition (complexe) est valide s’il faut activer la VMC.

Les actions:

  1. Activer la VMC;
  2. Attendre la condition d’arrêt (avec ‹ wait for trigger ›, pas de boucle).
  3. Eteindre la VMC.
alias: Ventilation SDB (Duplicate)
description: Ventilation SDB
trigger:
  - platform: numeric_state
    entity_id: sensor.sdb_dewpoint
    above: "15.4"
  - platform: numeric_state
    entity_id: sensor.exterieur_dewpoint
    below: "11.5"
  - platform: event
    event_type: homeassistant_start
    id: ha_restart
condition:
  - condition: or
    conditions:
      - condition: and
        conditions:
          - condition: numeric_state
            entity_id: sensor.exterieur_dewpoint
            below: "11.5"
          - condition: numeric_state
            entity_id: sensor.sdb_dewpoint
            above: "15.2"
      - condition: and
        conditions:
          - condition: state
            entity_id: light.sonoff_01minizb_4febc024_on_off
            state: "on"
          - condition: trigger
            id: ha_restart
action:
  - type: turn_on
    device_id: 3c3d6f675c5d59e015c83cfd7d4282ed
    entity_id: light.sonoff_01minizb_4febc024_on_off
    domain: light
  - wait_for_trigger:
      - platform: template
        value_template: >-
          {{ states('sensor.sdb_dewpoint') | float < 13.8 or
          states('sensor.exterieur_dewpoint') | float > 12 }}
  - type: turn_off
    device_id: 3c3d6f675c5d59e015c83cfd7d4282ed
    entity_id: light.sonoff_01minizb_4febc024_on_off
    domain: light
mode: single

Hello,
merci beaucoup d’avoir pris du temps pour répondre.

Alors justement, pour les spot il déclenche bien. Pour le taux d’humidité, quand il atteint 75% j’en suis pas sur, j’ai pas encore observé ça.

Le while bof… d’accord :blush: mais pourquoi ? Si je ne mets pas de while, il va me faire la boucle qu’une fois et ensuite rester allumé non? Je voulais lui dire de continuer à vérifier le taux d’humidité tant qu’il n’est pas sous les 75%

Par contre le script doit me créer des soucis parce que ce matin j’ai remarqué que HA redémarre env. Tous les 5-10min :scream::sweat_smile:

Hello,

C’est super sympa de partager ton script, je vais le tester des que je rentre :star_struck:

D’accord, donc wait for trigger evite de faire des boucles en continu, excellent !

Je suis d’accord pour la différence avec l’extérieur, voir avec les autres pièces de la maison chez moi (pas de fenêtre dans la salle de bain) parce que si tt la maison est a 75% et qu’il attend de descendre en dessous, il passera sa vie à tourner :sweat_smile::sweat_smile:

C’est bien ce que je dis aussi. Ça allume mais ça ne peut jamais s’éteindre avec les spots


Au moment de l’évaluation du if, l’état du spot est ON dans 99.999% des cas (ça vient de déclncher)… donc condition pas valide. Dans les 0.0001% des cas ou il serait par hasard à OFF(genre tu rippes sur le bouton), la condition de temps de 5 minutes n’est de toutes façons pas valable

Par ce que tu as un bidule qui tourne en permanence. Que par exemple un redémarrage au milieu de ta boucle casse la mécanique tant que tu n’as rien redeclenché… Bref algorithmique c’est possible mais c’est pas efficace

Plutôt que de faire un truc compliqué et commun… Une automatisation pour les spots (revue et corrigée)
Une automatisation qui allume avec le seuil à 75% (avec un truc qui attends par exemple 5min au dessus de seuil) d’un côté. Une automatisation qui fait l’inverse pour éteindre.
Comme ça au lieu de travailler avec des while tu travailles avec des triggers. Ça marche tout le temps

Je compare l’humidité absolue (g/m3) et pas le %. Quand il fait froid et il pleut et c’est humide dehor, l’humidité absolue peut être plus faible quand même.

@Pulpy-Luke

Merci d’avoir pris autant de temps pour détailler ça, je comprends mieux l’idée de séparer les automatisations.

Et merci de m’avoir expliqué l’affaire de l’état des spots… Je voyais rien jusqu’à ce que tu me colle le nez dessus :sweat_smile:

Je vais cogiter ça et faire ça mieux, merci beaucoup!

@le_top

Je vais tenter ton script.

Concernant l’histoire de été/hiver, dans mes recherches, j’étais tombé sur ce script, peut-être que tu l’as déjà essayé?

J’utilise ça My Canaletto | Home Assistant & Hygrostat

Mais il est vrai que selon les saisons ce n’est pas parfait !

Merci à toi pour cette piste là, je vais explorer ça (vive les vacances :smiley: )!

J’ai remarqué que quand HA fait des MAJ ou qu’il y a une coupure de courant et qu’il redémarre, il me lance une boucle des scripts (je le constate surtout sur mon script de gestion d’éclairage puisque ça me l’allume de temps en temps en pleine nuit :sweat_smile: )… Est-ce qu’il y a une condition qu’on peut insérer dans les scripts pour pas que ça arrive?

Le temps de me pencher un peu plus dessus, je voulais utiliser une version très simple de ton idée, que j’ai adapté comme ça:

alias: VMC - Ventilation SDB
description: Ventilation SDB
trigger:
  - platform: numeric_state
    entity_id: sensor.temp_sdb_humidity
    above: "75.0"
    attribute: humidity
action:
  - type: turn_on
    entity_id: switch.tasmota_3
  - wait_for_trigger:
      - platform: template
        value_template: "{{ states ('sensor.temp_sdb_humidity') | float < 74.0 }}"
  - type: turn_off
    entity_id: switch.tasmota_3
mode: single

Par contre j’ai du faire une erreur car quand je veux enregistrer, il me dit

Message malformed: Unable to determine action @ data[‹ action ›][0]

Tu aurais une idée? Merci beaucoup, sincèrement!

Visiblement il faut le device_id, et domaine.

Je propose que tu supprime les actions, que tu passes en mode UI ou tu ajoute les actions de façon interactive.
Il y aura moins d’erreurs.

Sache que j’écoute le homeassistant_start pour détecter que la VMC est déjà activer après un redémarrage et démarrer l’automatisme si c’est le cas pour l’éteindre quand il faut.
Sinon, la VMC tournera même après la baisse en attendant que l’humidité redéclenche un démarrage.