Et dans le bonus, tu pourras chercher à corriger la faute d’orthographe avec ‹ la switch ›/ ‹ allumé ›
J’ai essayé on verra si ca marche ![]()
alias: Duree-ecran-annonce2
description: >-
Annonce vocale si un écran (TV, PC, Switch) a été allumé entre 45 et 60
minutes.
triggers:
- entity_id: sensor.tv_chambre_duree
id: tvch
trigger: state
- entity_id: sensor.pc_adam_duree
id: pcadam
trigger: state
- entity_id: sensor.switch_duree
id: switch
trigger: state
conditions:
- condition: time
after: "09:30:00"
before: "20:00:00"
- condition: template
value_template: |-
{% set current_state = trigger.to_state.state | int(0) %}
{{ current_state >= 45 and (current_state % 5) == 0 and current_state <= 60 }}
actions:
- variables:
name: |
{% if trigger.id == 'tvch' %}
la TV
{% elif trigger.id == 'pcadam' %}
le PC de Adam
{% elif trigger.id == 'switch' %}
la Switch
{% else %}
un appareil
{% endif %}
message_announcement: >-
attention {{ name }} est allumé depuis {{ trigger.to_state.state }}
minutes.
- choose:
- conditions:
- condition: template
value_template: "{{ current_state < 45 }}"
sequence:
- data:
cache: true
message: attention il faut stopper {{ name }} dans 10 minutes
media_player_entity_id: media_player.googlehome5583
target:
entity_id: tts.google_translate_fr_fr
action: tts.speak
- delay:
seconds: 5
- data:
cache: true
message: attention il faut stopper {{ name }} dans 10 minutes
media_player_entity_id: media_player.googlehome2453
target:
entity_id: tts.google_translate_fr_fr
action: tts.speak
- conditions:
- condition: template
value_template: "{{ current_state >= 45 }}"
sequence:
- data:
cache: true
message: "{{ message_announcement }}"
media_player_entity_id: media_player.googlehome5583
target:
entity_id: tts.google_translate_fr_fr
action: tts.speak
- delay:
seconds: 5
- data:
cache: true
message: "{{ message_announcement }}"
media_player_entity_id: media_player.googlehome2453
target:
entity_id: tts.google_translate_fr_fr
action: tts.speak
mode: queued
max: 10
- Le 30 ne passe pas, il faut le mettre dans le conditions globales (les actions ne sont pas déclenchées sinon) pas loin du truc que tu n’aimes pas

current_staten’existe pas dans le choose
Après il y a de l’optimisation à faire, plutôt que de répéter le bloc TTS, adapte juste la variable message_announcement qui prends l’un ou l’autre des messages…
Une solution si tu n’y arrives pas
Résumé
alias: Duree-ecran-annonce
description: >-
Annonce vocale si un écran (TV, PC, Switch) a été allumé entre 45 et 60
minutes (par tranche de 5 min) ou s'il atteint 35 minutes.
triggers:
- entity_id: sensor.tv_chambre_duree
id: tvch
alias: Chambre TV Durée
trigger: state
- entity_id: sensor.pc_adam_duree
id: pcadam
alias: PC Adam Durée
trigger: state
- entity_id: sensor.switch_duree
id: switch
alias: Switch Durée
trigger: state
conditions:
- condition: time
alias: Plage horaire (9h30 - 20h00)
after: "09:30:00"
before: "20:00:00"
- condition: or
conditions:
- condition: template
alias: Durée entre 45 et 60 min (par multiple de 5)
value_template: >-
{% set current_state = trigger.to_state.state | int(0) %} {{
current_state >= 45 and (current_state % 5) == 0 and current_state <=
60 }}
- condition: template
alias: Durée égale à 35 minutes
value_template: "{{ trigger.to_state.state | int(0) == 35 }}"
actions:
- alias: Définir les variables (Nom & Message)
variables:
name: |
{% if trigger.id == 'tvch' %}
la TV
{% elif trigger.id == 'pcadam' %}
le PC de Adam
{% elif trigger.id == 'switch' %}
la Switch
{% else %}
un appareil
{% endif %}
message_announcement: >-
{% set duration = trigger.to_state.state | int(0) %} {% if duration ==
35 %}
Attention il faut stopper {{ name }} dans 10 minutes.
{% elif duration == 45 %}
Attention {{ name }} est allumé depuis {{ duration }} minutes.
{% else %}
Rappel important : {{ name }} est allumé depuis {{ duration }} minutes.
{% endif %}
- alias: Envoyer un SMS (Free Mobile)
action: notify.send_message
metadata: {}
target:
entity_id: notify.sms_free_antony
data:
message: |
{{ message_announcement }}
enabled: true
- alias: Annonce vocale sur Google Home 1
data:
cache: true
message: "{{ message_announcement }}"
media_player_entity_id: media_player.googlehome5583
target:
entity_id: tts.google_translate_fr_fr
action: tts.speak
- alias: Attendre 5 secondes
delay:
seconds: 5
- alias: Annonce vocale sur Google Home 2
data:
cache: true
message: "{{ message_announcement }}"
media_player_entity_id: media_player.googlehome2453
target:
entity_id: tts.google_translate_fr_fr
action: tts.speak
mode: parallel
max: 10
Oua je suis pas prêt d’arriver à ce niveau ![]()
J’arrive à peu près à tout comprendre.
Sauf ça ou j’ai un peu de mal.
message_announcement: |-
{% set duration = trigger.to_state.state | int(0) %} {% if duration == 35 %}
Attention il faut stopper {{ name }} dans 10 minutes.
{% elif duration == 45 %}
Attention {{ name }} est allumé depuis {{ duration }} minutes.
{% else %}
Rappel important : {{ name }} est allumé depuis {{ duration }} minutes.
{% endif %}
Heureusement chat gpt est mon ami
Étape par étape :
{% set duration = trigger.to_state.state | int(0) %}
- Cette ligne récupère l’état de l’entité qui a déclenché le trigger.
- Elle le convertit en entier avec
| int(0)(si la valeur n’est pas un nombre, elle devient 0). durationreprésente donc le nombre de minutes depuis que quelque chose (par ex. une TV) est allumé.
{% if duration == 35 %}
- Si la durée est exactement 35 minutes, le message sera :
"Attention il faut stopper {{ name }} dans 10 minutes." {{ name }}sera remplacé par le nom de l’appareil ou de l’entité.
{% elif duration == 45 %}
- Si la durée est exactement 45 minutes, le message sera :
"Attention {{ name }} est allumé depuis 45 minutes."
{% else %}
- Pour toutes les autres durées, le message par défaut sera :
"Rappel important : {{ name }} est allumé depuis {{ duration }} minutes."
Tout ça c’est du jinja, un langage de code (ouais en plus du yaml qui n’est lui que pour de la config)
Et si chatgpt t’aide alors pourquoi pas
1 « J'aime »
Ce sujet a été automatiquement fermé après 60 jours. Aucune réponse n’est permise dorénavant.