Migration Node Red vers HA

Tu devrais faire un tour plutôt du côté de numeric_state :

Le fonctionnement est différent…est bien plus proche de la réalité avec des seuils et non des valeurs fixes.

@Clemalex, en suivant tes indications et la doc officielle sur l’action choose, j’ai obtenu ceci que j’ai aussi simplifier :

#
# Gestion de la déshumidification de la salle de bains
#
- mode: single
  alias: "Gestion de la déshumidification"
  description: "Gestion de la déshumidification de la salle de bains"
  trigger:
    - platform: state
      entity_id: binary_sensor.aqara_open_sdb_contact
    - platform: numeric_state
      entity_id: sensor.aqara_temp_sdb_humidity
  action:
    - alias: "Turn on deshumifier when contact is on, humidity is above 45 and switch is off"
      choose:
        - alias: "Contact is on, humidity is above 45 and switch is off"
        - conditions: >
            {{
              is_state('binary_sensor.aqara_open_sdb_contact', 'on') and
              sensor.aqara_temp_sdb_humidity > 45 and
              is_state('switch.ikea_prise_sdb', 'off')
            }}
          sequence:
            - alias: "Turn on deshumifier"
              service: switch.turn_off
              target:
                entity_id: switch.ikea_prise_sdb
      default:
        - alias: "Turn off deshumifier"
          service: switch.turn_on
          target:
            entity_id: switch.ikea_prise_sdb

Je me suis rendu compte que l’algo de fonctionnement de la prise du déshumidificateur est plus simple :
Si l’humidité est supérieure à 45% et que la fenêtre est fermée et que la prise est éteinte alors allumer la prise sinon dans tous les autres cas éteindre la prise.

Si tu penses que cette automation correspond à ce que j’attend, je vais essayer de transformer le bloc conditions qui « n’est pas écrit complétement dans le langage HA yaml » :grin:

Tu as l’inverse non ?

Oui, la logique me parait bonne :wink:

Tu peux tout à faut garder le code Template (mais comme toi, je préfère le click&go).
Pour celui qui veut minimiser encore plus ton code, je pense que ceci devrait le faire (à tester car pas mis au point)

#
# Gestion de la déshumidification de la salle de bains
#
- mode: single
  alias: "Gestion de la déshumidification"
  description: "Gestion de la déshumidification de la salle de bains"
  trigger:
    - platform: state
      entity_id: binary_sensor.aqara_open_sdb_contact
    - platform: numeric_state
      entity_id: sensor.aqara_temp_sdb_humidity
  action:
    - service: >
        {% set person = trigger.entity_id.split('.')[1] | capitalize %}
        {% if is_state('binary_sensor.aqara_open_sdb_contact', 'on') and sensor.aqara_temp_sdb_humidity > 45 and is_state('switch.ikea_prise_sdb', 'off') %}
        switch.turn_on
        {% else %}
        switch.turn_off
        {% endif %}
      target:
        entity_id: switch.ikea_prise_sdb

Documentation : Automation trigger variables - Home Assistant

@Clemalex, je sèche…
Voici ce que j’ai testé et le résultat :

#
# Gestion de la déshumidification de la salle de bains
#
- mode: single
  alias: "Gestion de la déshumidification contact"
  description: "Gestion de la déshumidification de la salle de bains"
  trigger:
    - platform: state
      entity_id: binary_sensor.aqara_open_sdb_contact
  action:
    - alias: "Turn on deshumifier when contact is on, humidity is above 45 and switch is off"
      choose:
        - conditions:
              - condition: state
                entity_id: binary_sensor.aqara_open_sdb_contact
                state: 'off'
          sequence:
            - service: switch.turn_on
              target:
                entity_id: switch.ikea_prise_sdb
      default:
        - service: switch.turn_off
          target:
            entity_id: switch.ikea_prise_sdb

Ce que cela doit faire :

  • Lorsque la fenêtre s’ouvre le déshumidificateur doit s’arrêter et doit redémarrer lorsque la fenêtre est fermée.

résultat :

  • ça fonctionne pas complètement comme je le souhaites.
    Lorsque je redémarres HA, la fenêtre est fermée mais le déshumidificateur ne démarre pas.
    J’ouvre la fenêtre, puis je la referme, le déshumidificateur s’allume puis s’arrête lorsque je l’ouvre.
    C’est l’initialisation au démarrage de HA qui n’est pas faite. Comment faire ?

Mes essais en ajoutant le capteur d’humidité :

#
# Gestion de la déshumidification de la salle de bains
#
- mode: single
  alias: "Gestion de la déshumidification"
  description: "Gestion de la déshumidification de la salle de bains"
  trigger:
    - platform: state
      entity_id: binary_sensor.aqara_open_sdb_contact
    - platform: numeric_state
      entity_id: sensor.aqara_temp_sdb_humidity
      above: 45
  action:
    - alias: "Turn on deshumifier when window is closed (contact is off), humidity is above 45 and switch is off"
      choose:
        - conditions:
          - condition: and
            conditions:
              - condition: state
                entity_id: binary_sensor.aqara_open_sdb_contact
                state: 'off'
              - condition: numeric_state
                entity_id: sensor.aqara_temp_sdb_humidity
                above: 45
              - condition: state
                entity_id: switch.ikea_prise_sdb
                state: 'off'
          sequence:
            - service: switch.turn_on
              target:
                entity_id: switch.ikea_prise_sdb
      default:
        - service: switch.turn_off
          target:
            entity_id: switch.ikea_prise_sdb

Ce que cela doit faire :

  • Si la fenêtre est fermée et l’humidité est supérieure à 45 et la prise est éteinte
    • le déshumidificateur doit s’allumer.
  • Si la fenêtre s’ouvre
    • le déshumidificateur doit s’éteindre.
      Si la fenêtre se ferme
    • le déshumidificateur doit se rallumer si l’humidité est supérieure à 45.
  • Si l’humidité descend en dessous de 45
    • le déshumidificateur doit s’éteindre.
  • Si l’humidité remonte au dessus de 45
    • le déshumidificateur doit se rallumer si la fenêtre est fermée.

résultat :

  • données au démarrage :
    • contact : off (fenêtre fermée)
    • humidity : 45.19
    • switch : off (prise éteinte)
  • Je démarre l’automation => rien alors que l’humidité étant au dessus de 45, la fenêtre étant fermée et la prise étant éteinte, cela devra allumer la prise.
  • si je change par les outils de dev la valeur de humidity à :
    • 47 : rien
    • 43 : rien
    • 45.19 (valeur du capteur) : il s’allume :thinking:
    • 43 : rien
    • 45.19 (valeur du capteur) : il s’éteint :thinking: :thinking:

Je m’y perd …

Hihihihihi… :innocent: :blush:

Et oui, il fallait que tu le découvres seul mon jeune padawan

Pour les automatisations que tu souhaites voir fonctionner tout le temps, il faut ajouter un déclenchement sur le temps (un déclenchement state sur sensor.time par exemple declenchera l’automatisation toutes les minutes et c’est les conditions qui conditionnent les actions…)

Sinon dans ton cas précis de ton automatisation, l’augmentation de l’humidité doit suffire car dès la prochaine augmentation ça declenchera l’automatisation (en théorie car apparemment… :innocent:) et donc il te faut juste t’assurer que si HA redémarre il déclenche l’automatisation (et tes conditions feront le reste) et pour ça c’est un évènement (événement au démarrage)

Peut être que le fait de taper 47 envoit un texte (string) et non un nombre…

Essaie la prochaine fois 47.00 car ton déclencheur attends un nombre…

AH AH !! J’ai trouvé !!! :champagne:

Il fallait que je surveilles les deux sens du passage du seuil d’humidité.

Voici le code qui fonctionne :

#
# Gestion de la déshumidification de la salle de bains
#
- mode: single
  alias: "Gestion de la déshumidification"
  description: "Gestion de la déshumidification de la salle de bains"
  trigger:
    - platform: state
      entity_id: binary_sensor.aqara_open_sdb_contact
    - platform: numeric_state
      entity_id: sensor.aqara_temp_sdb_humidity
      above: 45
    - platform: numeric_state
      entity_id: sensor.aqara_temp_sdb_humidity
      below: 45
  action:
    - alias: "Turn on deshumifier when window is closed (contact is off), humidity is above 45 and switch is off"
      choose:
        - conditions:
          - condition: and
            conditions:
              - condition: state
                entity_id: binary_sensor.aqara_open_sdb_contact
                state: 'off'
              - condition: numeric_state
                entity_id: sensor.aqara_temp_sdb_humidity
                above: 45
              - condition: state
                entity_id: switch.ikea_prise_sdb
                state: 'off'
          sequence:
            - service: switch.turn_on
              target:
                entity_id: switch.ikea_prise_sdb
      default:
        - service: switch.turn_off
          target:
            entity_id: switch.ikea_prise_sdb

Explications des blocs :

  • mode: single

    permet de contrôler ce qui se passe lorsque l’automatisation est déclenchée alors que les actions sont toujours en cours d’exécution depuis un déclenchement précédent. Ici single ne relance pas l’automation si elle est déjà lancée (pour plus de précision).

  • alias: "Gestion de la déshumidification"

    l’alias définit le texte qui sera visible dans le menu Automatisations de HA (Menu latéral, cliquez sur Configuration puis Automatisations).

  • trigger:
      - platform: state
        entity_id: binary_sensor.aqara_open_sdb_contact
      - platform: numeric_state
        entity_id: sensor.aqara_temp_sdb_humidity
        above: 45
      - platform: numeric_state
        entity_id: sensor.aqara_temp_sdb_humidity
        below: 45
    

    Ce bloc définit à partir de quel entité surveillée l’automatisation va pouvoir être déclenchée.
    Ici, nous allons surveiller :

    • un capteur d’ouverture que ne peut avoir comme état que on (fenêtre ouverte) ou off (fenêtre fermée). platform sera donc de type state.
    • un seuil d’un capteur d’humidité < à 45% et > à 45%. Nous surveillerons donc les deux événements le passage de 44.xxxxxx à 45.xxxxxx par la condition above: 45 et le passage inverse de 45.xxxxxx à 44.xxxxxx via la condition below: 45. Cette valeur étant numérique, elle sera définit par condition: numeric_state
  • choose:
    permettra de définir, dans mon cas, deux actions possibles :

    • Une définie par le bloc conditions:
    • L’autre par défaut, via la directive default:, si la condition n’est pas respectée.
  •         - condition: and
              conditions:
                - condition: state
                  entity_id: binary_sensor.aqara_open_sdb_contact
                  state: 'off'
                - condition: numeric_state
                  entity_id: sensor.aqara_temp_sdb_humidity
                  above: 45
                - condition: state
                  entity_id: switch.ikea_prise_sdb
                  state: 'off'
    

    Va définir 3 conditions à respecter pour déclencher l’action définie par le mot clé séquence qui suivra. Ces 3 conditions devront être respectées en même temps à cause de condition: and. Les 3 conditions sont :

    • Le capteur de contact binary_sensor.aqara_open_sdb_contact devra avoir son état à ‹ off › (state: 'off'). Ce qui définit la fenêtre fermée, c’est pas très parlant mais à force d’ouvrir/fermer la fenêtre, c’est ce que j’ai trouvé.
    • Le capteur d’humidité qui devra être au dessus de 45 above: 45
    • L’état de la prise qui devra être à ‹ off › (prise éteinte) state: 'off' (si elle est déjà allumée, ça ne sert à rien de la rallumer :grin:)
  •         sequence:
              - service: switch.turn_on
                target:
                  entity_id: switch.ikea_prise_sdb
    

    Cette action va exécuter le service pour allumer service: switch.turn_on la prise Ikea entity_id: switch.ikea_prise_sdb

  •     default:
          - service: switch.turn_off
            target:
              entity_id: switch.ikea_prise_sdb
    

    Ce bloc va définir l’action par défaut à exécuter si les conditions du bloc choose: n’ont pas été respectées. Dans mon cas l’exécution du service pour éteindre service: switch.turn_off la prise Ikea entity_id: switch.ikea_prise_sdb.

Et comme à chaque fois, un GRAND MERCI à @Clemalex pour ton aide :raised_hands:
Ça commence à rentrer, c’est bien !

Je ne suis pas persuadé de la pertinence de surveiller le niveau bas et le niveau en tant que déclencheur…

Je pense qu’il faut simplement vérifier l’entité car c’est ton choose qui porte le niveau haut dans sa première condition et le niveau pas dans le cas par défaut (car pas niveau haut).

Je me trompe peut être… :innocent:

Bon en fait le code du message n°25 ne fonctionne pas si bien que ça …

Cela faisait plusieurs matins (suite à nos douches) que le déshumidificateur ne démarrait pas sans ouvrir/fermer la fenêtre.

Ce matin j’ai pu récupérer les graphiques des capteurs :

On voit que la prise s’est bien activée lors du passage de 44.xx à 45.xx à 7:39:52 (d’ailleurs excellente réactivité car c’est exactement la même heure entre le passage du seuil d’humidité et l’activation de la prise).

Mais je ne comprend pas pourquoi elle se désactive à 7:56:41:thinking:
Je ne vois qu’une évolution de l’humidité à 7:54:15 qui passe de 45.18 à 45.32 … Mais 86s de réactivité me semble beaucoup et surtout la valeur reste au dessus de 45.00.

La seule variation proche de 7:56:41 reste le capteur de contact qui a son link_quality qui passe de 40 à 42 à 7:56:40 ??? mais pourquoi cette donnée aurait fait modifier l’automatisation alors que je n’ai aucune condition dessus ???
(j’ai vérifié, le capteur de contact n’a pas changé de valeur entre 7:30 et 8:00, il est resté à Fermé.)

:thinking: :thinking: :thinking:

Des idées peut-être ?

Je ne pensais pas que l’avais mis en production…

En fait le problème vient de tes conditions et du cas default.

Le code que tu as se déclenche sur tous les changements d’humidité en dehors de la valeur 45.
Ensuite, tu vérifie si la valeur est au dessus de 45 et si la prise est éteinte et si la fenêtre est fermée.

Et le fait que tu ai mis le cas défaut, au prochain changement d’humidité, ça éteint car cas par défaut…(la prise étant déjà allumée…)

Je ne me rappelle pas pourquoi tu n’avais pas retenu ma proposition ?

Bon c’est sûr, c’est lié au variation de link_quality du capteur aqara_open_sdb_linkquality !

Voici les évolutions de la prise du déshumidificateur :

Les évolutions du capteur d’humidité aqara_temp_sdb_humidity :

Les évolutions du link_quality du capteur de contact aqara_open_sdb_linkquality :

Détail des évolutions des valeurs
Heure ikea_prise_sdb aqara_open_sdb_linkquality aqara_temp_sdb_humidity Commentaires
Inactive 39 43.92
7:39:52 bascule vers Active 39 45.14 Normal, c’est le passage du seuil de l’humidité qui active la prise
7:50:24 Active 39 45.18
7:56:40 Active 42
7:56:41 bascule vers Inactive 42 Pas normal la valeur de l’humidité est toujours au dessus de 45%
8:01:18 Inactive 60 45.64
9:18:21 Inactive 60 67.95
9:37:00 Inactive 60
9:37:01 bascule vers Active 60 Pas normal, la valeur de l’humidité est toujours au dessus de 45%
9:40:37 Active 60 61.89
9:47:59 Active 60 60.11
10:17:58 Active 60 56.10
10:27:08 bascule vers Inactive 26 Pas normal, la valeur de l’humidité est toujours au dessus de 45%
10:42:55 Inactive 31
11:17:16 Inactive 31 60.55
11:17:17 bascule vers Active 31 Pas normal, la valeur de l’humidité est toujours au dessus de 45%
11:17:24 Active 31 58.15

Pourquoi le link_quality ferait basculer l’automatisation … :thinking:

:pleading_face:, je sais plus pourquoi …

Je files de suite faire le test avec ta proposition …

@Clemalex, j’ai fait le test avec ton code :

  1. Aucune erreur à la vérification de HA.
  2. Redémarrage de HA
  3. Le déshumidificateur démarre
  4. J’ouvre la fenêtre => Le déshumidificateur tourne toujours
  5. Je referme la fenêtre => Le déshumidificateur tourne toujours
  6. Passage de l’humidité de 45.07% à 44.07% (via l’outil de développement de HA) => Le déshumidificateur tourne toujours
  7. Retour à 45.07% => Le déshumidificateur tourne toujours
  8. Passage de 45.07% à 44.15% (naturellement) => Le déshumidificateur tourne toujours

J’attend le passage en dessous de 44% pour être sûr …

Détail du code utilisé
#
# Gestion de la déshumidification de la salle de bains
#
- mode: single
  alias: "Gestion de la déshumidification (test)"
  description: "Gestion de la déshumidification de la salle de bains"
  trigger:
    - platform: state
      entity_id: binary_sensor.aqara_open_sdb_contact
    - platform: state
      entity_id: sensor.aqara_temp_sdb_humidity
  condition: []
  action:
    - choose:
        - conditions:
            - condition: or
              conditions:
                - condition: state
                  entity_id: binary_sensor.aqara_open_sdb_contact
                  state: 'on'
                - condition: numeric_state
                  entity_id: sensor.aqara_temp_sdb_humidity
                  below: '45'
          sequence:
            - condition: state
              entity_id: switch.ac
              state: 'on'
            - service: switch.turn_off
              target:
                entity_id: switch.ikea_prise_sdb
        - conditions:
            - condition: numeric_state
              entity_id: sensor.aqara_temp_sdb_humidity
              above: '44'
          sequence:
            - condition: state
              entity_id: switch.ikea_prise_sdb
              state: 'off'
            - service: switch.turn_on
              target:
                entity_id: switch.ikea_prise_sdb
      default: []

Étrange je regarderais ce soir…

Edit:

T’as oublié de changer l’entité switch.ac par switch.ikea_prise_sdb donc forcément l’extinction ne fonctionne pas… :upside_down_face: :sweat_smile:

1 « J'aime »

Et voici le fonctionnement :

animate

Je pensais que cette automatisation correspondait à ton besoin initial.

Je ne vois pas pourquoi tu n’est pas partis dessus… :sweat_smile:

PS: J’ai mis le nom chauffage car m’a gourré ! C’est bien sûr le déshumidificateur :upside_down_face: :wink:

Je modifierai demain, mais comme toujours avec toi, ça doit être ça :wink:

Comment tu fais pour avoir cette carte avec les entrées et la sortie de ton automation ?
C’est vachement pratique plutôt que de passer par les outils de Dev

C’est juste une cartes entités… :innocent: :blush:

@Clemalex, c’est toujours simple avec toi :grin:

J’ai beau créer une carte entité, je n’arrive pas à avoir un switch sur le capteur de contact et un bouton incrément sur les valeurs d’humidité.

type: entities
entities:
  - entity: binary_sensor.aqara_open_sdb_contact
    name: Fenêtre
  - entity: sensor.aqara_temp_sdb_temperature
    name: Température
  - entity: sensor.aqara_temp_sdb_humidity
    name: Humidité
  - entity: switch.ikea_prise_sdb
    name: Déshumidificateur
  - type: divider
  - type: buttons
    entities:
      - entity: binary_sensor.aqara_open_sdb_contact
        name: Contact
title: Déshumidificateur
show_header_toggle: false
state_color: true

La seule entité que je peux modifier c’et la prise mais c’est normal, c’est un switch d’origine.
Une petite piste ?

Oui, pour la mise au point, je passe directement par des input_*.

Ce n’est qu’après avoir vérifié le fonctionnement que je bascule sur les entités de production.

Cela a le mérite d’être indépendant des mises à jour des entités et de rester sur son canapé pour faire tests :sweat_smile: sans devoir aller ouvrir une fenêtre ni allumer une prise… :innocent: :blush:

D’où ma phrase hier :

Il est préférable de faire la mise au point sur des entités créées, plutôt que les entités cibles finales.

Pas tout compris là … :thinking:

Ce que j’ai compris :

  1. Tu crées une entité input_aqara_open_sdb_contact qui correspond à aqara_open_sdb_contact dans le réel en suivant cette doc Input Boolean
  2. Dans la carte entities, tu utilises cette entité comme entrée que tu peux à loisir modifier via le switch
  3. Dans l’automation, tu remplaces l’entité aqara_open_sdb_contact par l’entité virtuel que tu as créé input_aqara_open_sdb_contact

C’est bien ça ?

Et pour l’humidité, tu prends un input_number ? (comme dans cette doc input number)