Bonjour à tous et toutes,
J’ai un problème tout simple mais que je n’arrive pas à résoudre, je voudrais que ma variable event_summary
puisse être utilisé hors de la porté de la boucle for pour la transmettre à ma variable
v_summary
, auriez vous une idée ou alors faire autrement ?
Merci
script:
notif_calendar_poubelle:
alias: Calandar - Notif poubelle lendemain
icon: mdi:trash-can
mode: single
sequence:
- variables:
v_summary: "TEST"
- service: calendar.get_events
target:
entity_id:
- calendar.test # Adjust to your actual calendar name
metadata: {}
data:
start_date_time: "{{ now().replace(hour=0, minute=0, second=0) + timedelta(days=1) }}"
end_date_time: "{{ now().replace(hour=0, minute=0, second=0) + timedelta(days=2) }}"
response_variable: cal
- condition: >-
{% for event in cal["calendar.test"]["events"] %}
{% set event_summary = event.summary.lower() %}
{% if event_summary | regex_search('poubelle|poubelles') %}
true
{% break %}
{% endif %}
{% endfor %}
- service: notify.mobile_app_nilmoty_oppox3
metadata: {}
data:
title: "Poubelle"
message: "{{ v_summary }}"
Pas certain que ça puisse se faire. Dans tous les cas, il faudrait déjà rendre ta variable accessible en dehors de ta boucle « for », pour cela il faut passer par un namespace.
Le code devrait ressembler à qqc comme cela (mais je n’ai pas pu tester) :
- condition: >-
{% set ns = namespace(event_summary="") %}
{% for event in cal["calendar.test"]["events"] %}
{% set ns.event_summary = event.summary.lower() %}
{% if ns.event_summary | regex_search('poubelle|poubelles') %}
true
{% break %}
{% endif %}
{% endfor %}
Ensuite il faudrait voir si « ns.event_summary » est connu plus bas dans l’action (mais j’ai de sérieux doutes).
Bon en fait cela ne marche pas comme je l’avais prévu. Tu peux dupliquer le code se trouvant dans la condition …
- condition: >-
{% for event in cal["calendar.test"]["events"] %}
{% set event_summary = event.summary.lower() %}
{% if event_summary | regex_search('poubelle|poubelles') %}
true
{% break %}
{% endif %}
{% endfor %}
- service: notify.mobile_app_nilmoty_oppox3
metadata: {}
data:
title: "Poubelle"
message: >-
{% for event in cal["calendar.test"]["events"] %}
{% set event_summary = event.summary.lower() %}
{% if event_summary | regex_search('poubelle|poubelles') %}
{{ event_summary }}
{% break %}
{% endif %}
{% endfor %}
Merci de ton retour, je viens de tester mais comme tu le pensais ns
est hors de porté !
Stopped because an error was encountered at February 23, 2024 at 17:26:36 (runtime: 0.01 seconds)
Error rendering data template: UndefinedError: ‹ ns › is undefined
- condition: >-
{% set ns = namespace(event_summary="") %} {% for event in
cal["calendar.test"]["events"] %}
{% set ns.event_summary = event.summary.lower() %}
{% if ns.event_summary | regex_search('poubelle|poubelles') %}
true
{% break %}
{% endif %}
{% endfor %}
- service: notify.mobile_app_nilmoty_oppox3
metadata: {}
data:
title: Poubelle
message: "{{ ns.event_summary }}"
Oui donc tu peux dupliquer le code, c’est moche mais ça devrait marcher 
L’autre solution c’est de créer un sensor avec le « résultat » de ton « for » que tu mets à jour toutes les x minutes et utiliser ce sensor dans ton automation.
Salut,
ça me semble bien compliqué pour tester la présence d’un truc dans le calendrier.
1 - la regex est trop compliquée, si ça matche pour poubelles, ça matche forcement pour poubelle aussi…
2 - on est pas obligé de boucler sur un tableau en yaml
Donc une truc du genre
{{ cal["calendar.test"]["events"] | lower | regex_search('poubelle') }}
ça retourne true dans les mêmes conditions à mon avis
Après je ne sais pas si ça marche avec le calendrier local, mais avec google faire plusieurs calendrier à partir d’un seul en se basant sur un mot clé xxx, ça permet d’avoir directement des calendar.xxx qui est on/off si l’evenement est là
Salut,
Alors j’ai trouvé un bon compromis je pense voilà le résultat:
script:
notif_calendar_poubelle:
alias: Calandar - Notif poubelle lendemain
icon: mdi:trash-can
mode: single
sequence:
- service: calendar.get_events
target:
entity_id:
- calendar.poubelle_sicoval
metadata: {}
data:
start_date_time: "{{ now().replace(hour=0, minute=0, second=0) + timedelta(days=1) }}"
end_date_time: "{{ now().replace(hour=0, minute=0, second=0) + timedelta(days=2) }}"
response_variable: cal
- condition: "{{ cal['calendar.poubelle_sicoval']['events'] | lower | regex_search('poubelle') }}"
- variables:
var : "Ramassage {{ ' ' }} {{ cal['calendar.poubelle_sicoval']['events'][0].summary }} {{ ' ' }} demain"
- service: tts.google_say_fr
data:
cache: false
entity_id: media_player.gh_salon
message: "{{ var }}"
- service: notify.mobile_app_nilmoty_oppox3
metadata: {}
data:
title: "Poubelle"
message: "{{ var }}"
Merci à tous
1 « J'aime »