@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 »
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
@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 à :
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… ) 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…
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).
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 )
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
Ç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).
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…
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é.)
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 modifierai demain, mais comme toujours avec toi, ça doit être ça
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
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 sans devoir aller ouvrir une fenêtre ni allumer une prise…
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.