Bonjour,
Comme je documente tout ici, si ca peut servir.
j’ai refait mon automatisation concernant la vérification des ouvertures de ma maison en mode été ou hiver.
Il n’est pas rare qu’on ouvre pour aérer mais on à tendance à oublier.
Du coup l’été l’air chaud rentre et l’hiver le froid rentre
Ouverture détectée (trigger.id)
│
▼
Identification de l’ouverture
│
▼
Vérification durée > 10 min ?
│
▼
Comparaison températures (extérieure vs intérieure)
│
├─ Si écart > 10°C → Générer alerte
└─ Sinon → Ne rien faire
│
▼
Message personnalisé
« Attention [nom] est ouverte depuis 10 minutes
[optionnel : écart de température] »
│
▼
Notification / TTS / SMS
alias: FENETRES-OUVERTES
description: >-
Automatisation qui notifie par SMS toute ouverture de fenêtre ou porte restée
ouverte plus de 10 minutes, avec répétition toutes les 30 minutes et
conditions saison/temperature.
triggers:
- entity_id:
- binary_sensor.sensor_fenetre_cellier_sensor_state_any
- binary_sensor.sensor_chadam_window_door_is_open
- binary_sensor.sensor_chlisa_window_door_is_open
- binary_sensor.sensor_fenetre_parents_window_door_is_open
- binary_sensor.sensor_entree_window_door_is_open
- binary_sensor.sensor_bv_bois_window_door_is_open
- binary_sensor.sensor_bv_appenti_window_door_is_open
- binary_sensor.sensor_bureau_window_door_is_open
- binary_sensor.sensor_cuisine_window_door_is_open
- binary_sensor.sensor_celier_porte_window_door_is_open
from: "off"
to: "on"
for:
minutes: 10
trigger: state
conditions: []
actions:
- variables:
name: >
{% if trigger.entity_id ==
'binary_sensor.sensor_fenetre_cellier_sensor_state_any' %}la fenêtre du
cellier {% elif trigger.entity_id ==
'binary_sensor.sensor_chadam_window_door_is_open' %}la fenêtre de Adam
{% elif trigger.entity_id ==
'binary_sensor.sensor_chlisa_window_door_is_open' %}la fenêtre de Lisa
{% elif trigger.entity_id ==
'binary_sensor.sensor_fenetre_parents_window_door_is_open' %}la fenêtre
des parents {% elif trigger.entity_id ==
'binary_sensor.sensor_entree_window_door_is_open' %}la porte d'entrée {%
elif trigger.entity_id ==
'binary_sensor.sensor_bv_bois_window_door_is_open' %}la baie vitrée bois
{% elif trigger.entity_id ==
'binary_sensor.sensor_bv_appenti_window_door_is_open' %}la baie vitrée
appenti {% elif trigger.entity_id ==
'binary_sensor.sensor_bureau_window_door_is_open' %}la porte du bureau
{% elif trigger.entity_id ==
'binary_sensor.sensor_cuisine_window_door_is_open' %}la fenêtre de la
cuisine {% elif trigger.entity_id ==
'binary_sensor.sensor_celier_porte_window_door_is_open' %}la porte du
cellier {% else %}une ouverture{% endif %}
message_announcement: Attention {{ name }} est ouverte depuis 10 minutes.
- repeat:
while:
- condition: template
value_template: |
{{ is_state(trigger.entity_id, 'on') }}
sequence:
- choose:
- conditions:
- condition: state
entity_id: sensor.season
state: summer
- condition: template
value_template: >
{% set ext = states('sensor.fib_oeil_exter_air_temperature')
| float(none) %} {% set int =
states('sensor.fiboeil_sejour_air_temperature') |
float(none) %} {{ ext is not none and int is not none and
ext >= int + 10 }}
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id: notify.sms_free_antony
data:
message: "{{ message_announcement }}"
- conditions:
- condition: state
entity_id: sensor.season
state: winter
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id: notify.sms_free_antony
data:
message: "{{ message_announcement }}"
- delay:
minutes: 30
mode: queued
max: 10
Salut
Il n’y a qu’un seul truc pas top… Le repeat while, wait de 30 min et queue à 10.
La première fenêtre marche à peu prêt (mais même sous jeedom le wait il fallait éviter).
Mais si une deuxième fenêtre s’ouvre avant la fermeture de la première, ça va partir en cacahuète… Et si jamais tu redémarre ha, c’est tout perdu.
Bref, l’idée c’est de compter les fenêtres ouvertes. D’utiliser la liste pour faire l’annonce. Et de mettre un timer de 30 minutes qui se réarme automatiquement et qui est aussi utilisé comme trigger
Pour le reste, tu quand même bien compris comment ça marche, bravo
Hello,
J’ai pas fait mieux sur le repeat while, sinon il y a la base pour le reste avec un sensor liste et un sensor nombre
description: >-
Envoie un message initial après 5 min, puis le répète toutes les 5 min tant
qu'un ouvrant est ouvert.
triggers:
- entity_id: sensor.nombre_ouvrants
above: 0
for: "00:05:00"
trigger: numeric_state
conditions:
- condition: numeric_state
entity_id: sensor.nombre_ouvrants
above: 0
actions:
- repeat:
while:
- condition: numeric_state
entity_id: sensor.nombre_ouvrants
above: 0
sequence:
- target:
entity_id: automation.tts_diffuseur_contextuel_v2
data:
skip_condition: true
variables:
message: >-
Attention, ouvrants toujours ouverts : {{
states('sensor.liste_ouvrants') }}
action: automation.trigger
- delay: "00:05:00"
template liste
{{ expand([
'binary_sensor.olimex_esp32_poe_tableau_porte_entree',
'binary_sensor.olimex_esp32_poe_tableau_porte_droite_salon',
'binary_sensor.olimex_esp32_poe_tableau_porte_gauche_salon'
]) | selectattr('state', 'eq', 'on') | map(attribute='name') | list | join(', ') }}
template nombre
{{ [
states('binary_sensor.olimex_esp32_poe_tableau_porte_entree'),
states('binary_sensor.olimex_esp32_poe_tableau_porte_droite_salon'),
states('binary_sensor.olimex_esp32_poe_tableau_porte_gauche_salon')
] | select('eq', 'on') | list | count }}
cdt
A tester mais ça pourrait ressembler à ça
alias: FENETRES-OUVERTES
description: >-
Automatisation qui notifie par SMS toute ouverture de fenêtre ou porte restée
ouverte plus de 10 minutes, avec répétition toutes les 30 minutes et
conditions saison/temperature.
triggers:
- entity_id:
- binary_sensor.sensor_fenetre_cellier_sensor_state_any
- binary_sensor.sensor_chadam_window_door_is_open
- binary_sensor.sensor_chlisa_window_door_is_open
- binary_sensor.sensor_fenetre_parents_window_door_is_open
- binary_sensor.sensor_entree_window_door_is_open
- binary_sensor.sensor_bv_bois_window_door_is_open
- binary_sensor.sensor_bv_appenti_window_door_is_open
- binary_sensor.sensor_bureau_window_door_is_open
- binary_sensor.sensor_cuisine_window_door_is_open
- binary_sensor.sensor_celier_porte_window_door_is_open
trigger: state
id: "etat_ouvrant"
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.fenetres_ouvertes
id: "timer_finished"
conditions: []
actions:
- variables:
openings: |-
{
"binary_sensor.sensor_fenetre_cellier_sensor_state_any": "la fenêtre du cellier",
"binary_sensor.sensor_chadam_window_door_is_open": "la fenêtre de Adam",
"binary_sensor.sensor_chlisa_window_door_is_open": "la fenêtre de Lisa",
"binary_sensor.sensor_fenetre_parents_window_door_is_open": "la fenêtre des parents",
"binary_sensor.sensor_entree_window_door_is_open": "la porte d'entrée",
"binary_sensor.sensor_bv_bois_window_door_is_open": "la baie vitrée bois",
"binary_sensor.sensor_bv_appenti_window_door_is_open": "la baie vitrée appenti",
"binary_sensor.sensor_bureau_window_door_is_open": "la porte du bureau",
"binary_sensor.sensor_cuisine_window_door_is_open": "la fenêtre de la cuisine",
"binary_sensor.sensor_celier_porte_window_door_is_open": "la porte du cellier"
}
open_list: >
{% set openings = openings | from_json %}
{% set list = [] %}
{% for sensor, name in openings.items() %}
{% if states(sensor) == 'on' %}
{% set _ = list.append(name) %}
{% endif %}
{% endfor %}
{{ list }}
is_first_alert: "{{ trigger.id == 'etat_ouvrant' and (open_list | length) > 0 }}"
time_text: >
{% if is_first_alert %}
depuis 10 minutes
{% else %}
depuis 40 minutes
{% endif %}
message_announcement: >
{% set openings = openings | from_json %}
{% set list = [] %}
{% for sensor, name in openings.items() %}
{% if states(sensor) == 'on' %}
{% set _ = list.append(name) %}
{% endif %}
{% endfor %}
{% if list | length == 1 %}
Attention {{ list[0] }} est ouverte {{ time_text }}.
{% elif list | length > 1 %}
Attention {{ list | join(', ') }} sont ouvertes {{ time_text }}.
{% else %}
Attention une ouverture est ouverte {{ time_text }}.
{% endif %}
- choose:
- conditions:
- condition: trigger
id: "etat_ouvrant"
- condition: template
value_template: "{{ open_list | length > 0 }}"
sequence:
- action: timer.start
target:
entity_id: timer.fenetres_ouvertes
data:
duration: "00:10:00"
- conditions:
- condition: trigger
id: "etat_ouvrant"
- condition: template
value_template: "{{ open_list | length == 0 }}"
sequence:
- action: timer.cancel
target:
entity_id: timer.fenetres_ouvertes
- conditions:
- condition: trigger
id: "timer_finished"
- condition: template
value_template: "{{ open_list | length > 0 }}"
sequence:
- action: timer.start
target:
entity_id: timer.fenetres_ouvertes
data:
duration: "00:30:00"
- choose:
- conditions:
- condition: state
entity_id: sensor.season
state: summer
- condition: template
value_template: >
{% set ext = states('sensor.fib_oeil_exter_air_temperature')
| float(none) %} {% set int =
states('sensor.fiboeil_sejour_air_temperature') |
float(none) %} {{ ext is not none and int is not none and
ext >= int + 10 }}
- condition: trigger
id: "timer_finished"
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id: notify.sms_free_antony
data:
message: "{{ message_announcement }}"
- conditions:
- condition: state
entity_id: sensor.season
state: winter
- condition: trigger
id: "timer_finished"
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id: notify.sms_free_antony
data:
message: "{{ message_announcement }}"
mode: queued
max: 10
J’avais fait ça aussi.
Au final je suis passé à un timer de 10min
30mn c’est trop long
Je teste.
alias: FENETRES-OUVERTES-10MIN
description: Notification des fenêtres ouvertes après 10 minutes
triggers:
- entity_id:
- binary_sensor.sensor_fenetre_cellier_sensor_state_any
- binary_sensor.sensor_chadam_window_door_is_open
- binary_sensor.sensor_chlisa_window_door_is_open
- binary_sensor.sensor_fenetre_parents_window_door_is_open
- binary_sensor.sensor_entree_window_door_is_open
- binary_sensor.sensor_bv_bois_window_door_is_open
- binary_sensor.sensor_bv_appenti_window_door_is_open
- binary_sensor.sensor_bureau_window_door_is_open
- binary_sensor.sensor_cuisine_window_door_is_open
- binary_sensor.sensor_celier_porte_window_door_is_open
to: "on"
trigger: state
- event_type: timer.finished
event_data:
entity_id: timer.timer_fenetres_ouverte
trigger: event
conditions:
- condition: or
conditions:
- condition: state
entity_id: sensor.season
state: winter
- condition: state
entity_id: sensor.season
state: summer
actions:
- variables:
noms: |
{
'binary_sensor.sensor_fenetre_cellier_sensor_state_any': 'la fenêtre du cellier',
'binary_sensor.sensor_chadam_window_door_is_open': 'la fenêtre de Adam',
'binary_sensor.sensor_chlisa_window_door_is_open': 'la fenêtre de Lisa',
'binary_sensor.sensor_fenetre_parents_window_door_is_open': 'la fenêtre des parents',
'binary_sensor.sensor_entree_window_door_is_open': "la porte d'entrée",
'binary_sensor.sensor_bv_bois_window_door_is_open': 'la baie vitrée bois',
'binary_sensor.sensor_bv_appenti_window_door_is_open': 'la baie vitrée appenti',
'binary_sensor.sensor_bureau_window_door_is_open': 'la porte du bureau',
'binary_sensor.sensor_cuisine_window_door_is_open': 'la fenêtre de la cuisine',
'binary_sensor.sensor_celier_porte_window_door_is_open': 'la porte du cellier'
}
fenetres_ouvertes: |
{{ expand(noms.keys()|list)
| selectattr('state','eq','on')
| map(attribute='entity_id')
| map('extract', noms)
| list }}
message_announcement: >
Attention, les fenêtres/portes suivantes sont ouvertes depuis 10 minutes
: {{ fenetres_ouvertes | join(', ') }}
- choose:
- conditions:
- condition: template
value_template: >-
{{ trigger.platform == 'state' and fenetres_ouvertes | length > 0
}}
sequence:
- data:
duration: "00:10:00"
action: timer.start
target:
entity_id:
- timer.timer_fenetres_ouverte
- conditions:
- condition: template
value_template: >-
{{ trigger.platform == 'event' and fenetres_ouvertes | length > 0
}}
sequence:
- choose:
- conditions:
- condition: state
entity_id: sensor.season
state: summer
- condition: template
value_template: >
{% set ext =
states('sensor.fib_oeil_exter_air_temperature') |
float(none) %} {% set int =
states('sensor.fiboeil_sejour_air_temperature') |
float(none) %} {{ ext is not none and int is not none and
ext >= int + 10 }}
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id: notify.sms_free_antony
data:
message: "\"{{ message_announcement }}\""
- conditions:
- condition: state
entity_id: sensor.season
state: winter
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id: notify.sms_free_antony
data:
message: "\"{{ message_announcement }}\""
mode: single
il faut tester la fin du timer : si terminé => message, si cancel => pas message. Et la fermeture de toutes le fenetres déclenche le cancel.
Regarde mon message précédent, c’est une bonne trame (il y a moyen d’optimiser les listes)
1 « J'aime »
Merci @Pulpy-Luke
Je test ton code et surtout j’essaie de le comprendre 
J’ai corrigé des choses car j’avais des messages d’erreur, avec l’aide de l’IA
Erreur expliquée
SecurityError: access to attribute ‹ append › of ‹ list › object is unsafe
Dans Home Assistant, on n’a pas le droit d’utiliser list.append() dans les templates Jinja (pour éviter les effets de bord).
Ces lignes sont la cause directe de l’erreur (à 2 endroits chez toi) :
{% set _ = list.append(name) %}
HA bloque volontairement cette opération.
Solution officielle HA : utiliser namespace()
La bonne pratique consiste à utiliser un namespace, qui est mutable et autorisé.
Correction de open_list
Ancienne version (interdite)
{% set list = [] %}
{% for sensor, name in openings.items() %}
{% if states(sensor) == 'on' %}
{% set _ = list.append(name) %}
{% endif %}
{% endfor %}
{{ list }}
Version corrigée (OK HA)
{% set openings = openings | from_json %}
{% set ns = namespace(list=[]) %}
{% for sensor, name in openings.items() %}
{% if states(sensor) == 'on' %}
{% set ns.list = ns.list + [name] %}
{% endif %}
{% endfor %}
{{ ns.list }}
1 « J'aime »
Oui comme indiqué j’ai pas testé vérifié le code partagé, c’est une base de départ
T’inquiètes c’est déjà génial merci
je suis en train de le tester 
alias: FENETRES-OUVERTES
description: >-
Automatisation qui notifie par SMS toute ouverture de fenêtre ou porte restée
ouverte plus de 10 minutes, avec répétition toutes les 30 minutes et
conditions saison/temperature.
triggers:
- trigger: state
id: etat_ouvrant
entity_id:
- binary_sensor.sensor_fenetre_cellier_sensor_state_any
- binary_sensor.sensor_chadam_window_door_is_open
- binary_sensor.sensor_chlisa_window_door_is_open
- binary_sensor.sensor_fenetre_parents_window_door_is_open
- binary_sensor.sensor_entree_window_door_is_open
- binary_sensor.sensor_bv_bois_window_door_is_open
- binary_sensor.sensor_bv_appenti_window_door_is_open
- binary_sensor.sensor_bureau_window_door_is_open
- binary_sensor.sensor_cuisine_window_door_is_open
- binary_sensor.sensor_celier_porte_window_door_is_open
- trigger: event
id: timer_finished
event_type: timer.finished
event_data:
entity_id: timer.timer_fenetres_ouverte
conditions: []
actions:
- variables:
openings: |
{
"binary_sensor.sensor_fenetre_cellier_sensor_state_any": "la fenêtre du cellier",
"binary_sensor.sensor_chadam_window_door_is_open": "la fenêtre de Adam",
"binary_sensor.sensor_chlisa_window_door_is_open": "la fenêtre de Lisa",
"binary_sensor.sensor_fenetre_parents_window_door_is_open": "la fenêtre des parents",
"binary_sensor.sensor_entree_window_door_is_open": "la porte d'entrée",
"binary_sensor.sensor_bv_bois_window_door_is_open": "la baie vitrée bois",
"binary_sensor.sensor_bv_appenti_window_door_is_open": "la baie vitrée appenti",
"binary_sensor.sensor_bureau_window_door_is_open": "la porte du bureau",
"binary_sensor.sensor_cuisine_window_door_is_open": "la fenêtre de la cuisine",
"binary_sensor.sensor_celier_porte_window_door_is_open": "la porte du cellier"
}
open_list: >
{% set openings = openings | from_json %} {% set ns = namespace(list=[])
%} {% for sensor, name in openings.items() %}
{% if states(sensor) == 'on' %}
{% set ns.list = ns.list + [name] %}
{% endif %}
{% endfor %} {{ ns.list }}
is_first_alert: "{{ trigger.id == 'etat_ouvrant' and (open_list | length) > 0 }}"
time_text: |
{% if is_first_alert %}
depuis 10 minutes
{% else %}
depuis 40 minutes
{% endif %}
message_announcement: |
{% if open_list | length == 1 %}
Attention {{ open_list[0] }} est ouverte {{ time_text }}.
{% elif open_list | length > 1 %}
Attention {{ open_list | join(', ') }} sont ouvertes {{ time_text }}.
{% else %}
Attention une ouverture est ouverte {{ time_text }}.
{% endif %}
- choose:
- conditions:
- condition: trigger
id: etat_ouvrant
- condition: template
value_template: "{{ open_list | length > 0 }}"
sequence:
- action: timer.start
target:
entity_id: timer.timer_fenetres_ouverte
data:
duration: "00:10:00"
- conditions:
- condition: trigger
id: etat_ouvrant
- condition: template
value_template: "{{ open_list | length == 0 }}"
sequence:
- action: timer.cancel
target:
entity_id: timer.timer_fenetres_ouverte
- conditions:
- condition: trigger
id: timer_finished
- condition: template
value_template: "{{ open_list | length > 0 }}"
sequence:
- action: timer.start
target:
entity_id: timer.timer_fenetres_ouverte
data:
duration: "00:30:00"
- choose:
- conditions:
- condition: trigger
id: timer_finished
- condition: state
entity_id: sensor.season
state: summer
- condition: template
value_template: >
{% set ext = states('sensor.fib_oeil_exter_air_temperature') |
float(none) %} {% set int =
states('sensor.fiboeil_sejour_air_temperature') | float(none) %}
{{ ext is not none and int is not none and ext >= int + 10 }}
sequence:
- action: notify.send_message
target:
entity_id: notify.sms_free_antony
data:
message: "{{ message_announcement }}"
- conditions:
- condition: trigger
id: timer_finished
- condition: state
entity_id: sensor.season
state: winter
sequence:
- action: notify.send_message
target:
entity_id: notify.sms_free_antony
data:
message: "{{ message_announcement }}"
mode: queued
max: 10
L’ouverture d’une fenetre déclenche bien le timer
Je reçois bien le SMS au bout des 10 minutes
Par contre je dois revoir le calcul du temps 
Il m’envoi "Attention la porte du bureau est ouverte depuis 40 minutes
"
1 « J'aime »
Là si tu veux faire le comptage, voir si la durée initiale du timer est dispo dans ces attributs. Ça marcherai assez facile pour le premier tour (10 à affiché direct) ou le deuxième (30 mais annoncé 40), c’est après le troisième tour que ça coince sans rajouter un input_number qui memorise la somme.
Au final le plus simple serait peut être d’utiliser le timer simplement pour renvoyer les notifications toutes les 10 minutes si une fenetre est ouverte.
Mais que les temps affichés dans les notifications soient justes le temps depuis la dernière ouverture puisque tout est historisé
Autre solution tu te base sur l’humidité relative (avec thermal comfort) ou la chute du co2 dans la pièce (si tu as un capteur pour).
Tu utilise un template qui vérifie l’évolution de ces taux et quand il se stabilise tu peux fermer (avec un timeout mac si le taux est jamais atteind).
Ca fait des jours que j’essaie de dépanner mon automatisation.
Bon elle fonctionne mais elle annonce jamais 10 minutes … même au premier timer
Je comprends pas.
Quoiqu’il arrive je tombe toujorus dans la condition
alias: FENETRES-OUVERTES-NEW
description: >
Notification SMS si fenêtres ou portes ouvertes plus de 10 minutes, puis
rappel toutes les 30 minutes selon saison et température.
triggers:
- id: etat_ouvrant
entity_id:
- binary_sensor.sensor_fenetre_cellier_sensor_state_any
- binary_sensor.sensor_chadam_window_door_is_open
- binary_sensor.sensor_chlisa_window_door_is_open
- binary_sensor.sensor_fenetre_parents_window_door_is_open
- binary_sensor.sensor_entree_window_door_is_open
- binary_sensor.sensor_bv_bois_window_door_is_open
- binary_sensor.sensor_bv_appenti_window_door_is_open
- binary_sensor.sensor_bureau_window_door_is_open
- binary_sensor.sensor_cuisine_window_door_is_open
- binary_sensor.sensor_celier_porte_window_door_is_open
trigger: state
- id: timer_finished
event_type: timer.finished
event_data:
entity_id: timer.timer_fenetres_ouverte
trigger: event
conditions: []
actions:
- variables:
openings: |
{
"binary_sensor.sensor_fenetre_cellier_sensor_state_any": "la fenêtre du cellier",
"binary_sensor.sensor_chadam_window_door_is_open": "la fenêtre de Adam",
"binary_sensor.sensor_chlisa_window_door_is_open": "la fenêtre de Lisa",
"binary_sensor.sensor_fenetre_parents_window_door_is_open": "la fenêtre des parents",
"binary_sensor.sensor_entree_window_door_is_open": "la porte d'entrée",
"binary_sensor.sensor_bv_bois_window_door_is_open": "la baie vitrée bois",
"binary_sensor.sensor_bv_appenti_window_door_is_open": "la baie vitrée appenti",
"binary_sensor.sensor_bureau_window_door_is_open": "la porte du bureau",
"binary_sensor.sensor_cuisine_window_door_is_open": "la fenêtre de la cuisine",
"binary_sensor.sensor_celier_porte_window_door_is_open": "la porte du cellier"
}
open_list: >
{% set openings = openings | from_json %} {% set ns = namespace(list=[])
%} {% for sensor, name in openings.items() %}
{% if states(sensor) == 'on' %}
{% set ns.list = ns.list + [name] %}
{% endif %}
{% endfor %} {{ ns.list }}
time_text: |
{% if trigger.id == 'timer_finished' %}
{# Si le timer vient de finir, on ajoute 30min au temps précédent #}
{% if state_attr('timer.timer_fenetres_ouverte', 'duration') == '00:10:00' %}
depuis 40 minutes
{% else %}
depuis un moment
{% endif %}
{% else %}
{# C'est le premier déclenchement (changement d'état d'une porte) #}
depuis 10 minutes
{% endif %}
message_announcement: |
{% if open_list | length == 1 %}
Attention {{ open_list[0] }} est ouverte {{ time_text }}.
{% elif open_list | length > 1 %}
Attention {{ open_list | join(', ') }} sont ouvertes {{ time_text }}.
{% else %}
Attention une ouverture est ouverte {{ time_text }}.
{% endif %}
- choose:
- conditions:
- condition: trigger
id: etat_ouvrant
- condition: template
value_template: "{{ open_list | length > 0 }}"
sequence:
- target:
entity_id: timer.timer_fenetres_ouverte
data:
duration: "00:10:00"
action: timer.start
- conditions:
- condition: trigger
id: etat_ouvrant
- condition: template
value_template: "{{ open_list | length == 0 }}"
sequence:
- target:
entity_id: timer.timer_fenetres_ouverte
action: timer.cancel
- conditions:
- condition: trigger
id: timer_finished
- condition: template
value_template: "{{ open_list | length > 0 }}"
sequence:
- target:
entity_id: timer.timer_fenetres_ouverte
data:
duration: "00:30:00"
action: timer.start
- choose:
- conditions:
- condition: trigger
id: timer_finished
- condition: state
entity_id: sensor.season
state: summer
- condition: template
value_template: >
{% set ext = states('sensor.fib_oeil_exter_air_temperature') |
float(none) %} {% set int =
states('sensor.fiboeil_sejour_air_temperature') | float(none) %}
{{ ext is not none and int is not none and ext >= int + 10 }}
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id:
- notify.sms_free_antony
- notify.notification_maison_bartounet
data:
message: "{{ message_announcement }}"
- action: script.2ghome_parle
metadata: {}
data:
volume: 1
message: "{{ message_announcement }}"
- conditions:
- condition: trigger
id: timer_finished
- condition: state
entity_id: sensor.season
state: winter
sequence:
- action: notify.send_message
metadata: {}
target:
entity_id:
- notify.sms_free_antony
- notify.notification_maison_bartounet
data:
message: "{{ message_announcement }}"
- action: script.2ghome_parle
metadata: {}
data:
volume: 1
message: "{{ message_announcement }}"
mode: queued
max: 10
Regarde les traces mais c’est là que ça coince
{% if trigger.id == 'timer_finished' %}
{# Si le timer vient de finir, on ajoute 30min au temps précédent #}
{% if state_attr('timer.timer_fenetres_ouverte', 'duration') == '00:10:00' %}
depuis 40 minutes
{% else %}
depuis un moment
{% endif %}
{% else %}
{# C'est le premier déclenchement (changement d'état d'une porte) #}
depuis 10 minutes
{% endif %}
Déjà timer_finished => arrive quelque soit la durée du timer.
Et etat_ouvrant ne sert à rien à ce moment là (l’annonce est faite au tour suivant), donc depuis 10 minutes est faux
Donc il te reste uniquement la durée du timer comme différentiel pour savoir si 10 ou depuis un moment.
Oui mais j’arrive pas à m’en dépatouiller.
Au final si c’est timer_finished qui est le trigger c’est qu’il est arrivé à 0 non ?
Oui, exactement, timer_finished arrivé à 0s restantes
Donc :
- Si ton trigger est
etat_ouvrant un ouvrant vient JUSTE de s’ouvrir, 0 minutes (tour 1)
- Si
timer_finished et ton timer à pour durée 10 c’est qu’il s’est passé 10min (tu es dans le tour 2)
- Si
timer_finished et s’il vaut 30, c’est qu’il s’est passé 40+ (ou 70 etc, tu es dans le tour 3+)
Le problème vient peut etre que quand on check le timer il est pas forcément pile à 10min
Puisque que quelques secondes se sont écoulés
D’où les traces, c’est le trigger donc tu as toutes les infos dedans
Accessoirement, ça vaut bien (toujours) 10
remaining est le temps restant