Automatisation liée à un calendrier

Je déménage dans quelque mois aussi :stuck_out_tongue:
Je viens de faire le test tout fonctionne comme sur des roulettes du moment qu’il n’y a pas d’événement toute la journée « all_day »
sinon il se fige sur l’événement de la journée…

Il faudra que j’essaie à nouveau mais avant le débranchement, il me lançait l’alerte programmée même quand l’événement n’apparaissait pas dans la journée. :upside_down_face:

Étrange si tu as l’occasion plus tard de me faire remonter l’exemple

1 « J'aime »

Je le ferai dès que possible, merci

@Felix62

Bonjour, est-il possible de faire un TTS la veille d’un événement ? Exemple par rapport a « sortir les poubelles », je voudrais avoir le TTS et une notifications sur smartphone la veille de l’évènement car les poubelles passent très tot chez moi :slight_smile: Auriez-vous une solution ?

Merci d’avance.

Salut,

Tu peux récupérer la date de début (start_time) ou de fin (end_time) des évènements du calendrier (gmail chez moi)

un exemple de 24h avant la fin (dans un binary_sensor)

- platform: template
  sensors:
    retour24h:
      friendly_name: Retour <24h
      value_template: >
        {% if is_state('calendar.maison_vide', 'on') %}
          {%- set diff = as_timestamp(state_attr('calendar.maison_vide','end_time')) - as_timestamp(now()) -%}
          {%- if diff <= 86400 and diff >= 0 -%}
              true
          {%- else -%}
            false
          {%- endif -%}
        {% else %}
          false
        {% endif %}

C’est un des premiers trucs que j’ai mis dans HA. C’est peut-être pas le code le plus optimal possible mais l’idée est là

Et si l’événement est mis sur « toute la journée » dans le calendrier ça va fonctionner ?

Toute la journée, c’est juste une heure de début et une fin à 0h00

A toi d’adapter, parce que être alerté 24H avant 0H00 ça peut être drôle à différents niveaux

Je vais essayer ça je te remercie, je reviens vers toi dés que j’ai pu tester :wink:

Je suppose que les 24h c’est le chiffre 86400 ?

Oui : 24 heures = 1440 minutes = 86400 secondes… (attention, retour à l’école primaire)
Code à tester dans le modèle, coté Outils de développement

Merci je vais tester ! Et oui moi et les chiffres ça n’a jamais fait bon ménage :joy:

@Pulpy-Luke je rencontre un erreur sur le code indiquant que la valeur par defaut n’est pas défini pourrais tu me dire a coter de quoi je suis passé ?

Logger: homeassistant.helpers.event
Source: helpers/template.py:423
First occurred: 16:28:41 (2 occurrences)
Last logged: 16:28:41

Error while processing template: Template("dans {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(now())) /86400+1) | int(0) }} jours")
Error while processing template: Template("{{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(now())) /86400+1) | int(0) }}")
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 1585, in forgiving_as_timestamp
    return dt_util.as_timestamp(value)
  File "/usr/src/homeassistant/homeassistant/util/dt.py", line 129, in as_timestamp
    raise ValueError("not a valid date/time.")
ValueError: not a valid date/time.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 421, in async_render
    render_result = _render_with_context(self.template, compiled, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 1906, in _render_with_context
    return template.render(**kwargs)
  File "/usr/local/lib/python3.10/site-packages/jinja2/environment.py", line 1301, in render
    self.environment.handle_exception()
  File "/usr/local/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "<template>", line 1, in top-level template code
  File "/usr/local/lib/python3.10/site-packages/jinja2/sandbox.py", line 393, in call
    return __context.call(__obj, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 1588, in forgiving_as_timestamp
    raise_no_default("as_timestamp", value)
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 1395, in raise_no_default
    raise ValueError(
ValueError: Template error: as_timestamp got invalid input '' when rendering template 'dans {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(now())) /86400+1) | int(0) }} jours' but no default was specified

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 537, in async_render_to_info
    render_info._result = self.async_render(variables, strict=strict, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 423, in async_render
    raise TemplateError(err) from err
homeassistant.exceptions.TemplateError: ValueError: Template error: as_timestamp got invalid input '' when rendering template 'dans {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(now())) /86400+1) | int(0) }} jours' but no default was specified

Le template du sensor :

- platform: template
  sensors:
    next_anniversary:
        friendly_name: >-
            {{ (states.calendar.agendamq_anniversaire.attributes.message) }}
        value_template: >-
            dans {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(now())) /86400+1) | int(0) }} jours
        #  {{ strptime(states.calendar.agendamq_anniversaire.attributes.start_time, "%Y-%m-%d %H:%M:%S").strftime("%A %d %B") }}:
        #  {{ states.calendar.agendamq_anniversaire.attributes.message }}
        #  {%- if states.calendar.agendamq_anniversaire.attributes.location %} at {{ states.calendar.agendamq_anniversaire.attributes.location -}}
        #  {% endif %}
        icon_template: >-
          {% if is_state('calendar.agendamq_anniversaire', 'on') %}
            mdi:crown
          {% else %}
            mdi:calendar-clock
          {% endif %}

- platform: template
  sensors:
    next_anniversary2:
        friendly_name: >-
            {{ (states.calendar.agendamq_anniversaire.attributes.message) }}
        value_template: >-
             {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(now())) /86400+1) | int(0) }}
        #  {{ strptime(states.calendar.agendamq_anniversaire.attributes.start_time, "%Y-%m-%d %H:%M:%S").strftime("%A %d %B") }}:
        #  {{ states.calendar.agendamq_anniversaire.attributes.message }}
        #  {%- if states.calendar.agendamq_anniversaire.attributes.location %} at {{ states.calendar.agendamq_anniversaire.attributes.location -}}
        #  {% endif %}
        icon_template: >-
          {% if is_state('calendar.agendamq_anniversaire', 'on') %}
            mdi:crown
          {% else %}
            mdi:calendar-clock
          {% endif %}

Salut.
Vite fait sans pour autant être certain les as_timestamp(xxx) sont de templates avec des valeurs par défaut à préciser et que j’ai jamais réussi à exploiter.
À la place je fais un xxx|as_timestamp c’est plus facile.
Essaye déjà ça
Dans le même genre d’idée moi j’aime mieux les state_attr('xx,' yy') plutôt que states.xx.attributes.yy

Modification faite mais une autre erreur apparait moins importante :

- platform: template
  sensors:
    next_anniversary:
        friendly_name: >-
            {{ (states.calendar.agendamq_anniversaire.attributes.message) }}
        value_template: >-
            {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(0)(now())) /86400+1) | int(0) }} jours
        #  {{ strptime(states.calendar.agendamq_anniversaire.attributes.start_time, "%Y-%m-%d %H:%M:%S").strftime("%A %d %B") }}:
        #  {{ states.calendar.agendamq_anniversaire.attributes.message }}
        #  {%- if states.calendar.agendamq_anniversaire.attributes.location %} at {{ states.calendar.agendamq_anniversaire.attributes.location -}}
        #  {% endif %}
        icon_template: >-
          {% if is_state('calendar.agendamq_anniversaire', 'on') %}
            mdi:crown
          {% else %}
            mdi:calendar-clock
          {% endif %}

- platform: template
  sensors:
    next_anniversary2:
        friendly_name: >-
            {{ (states.calendar.agendamq_anniversaire.attributes.message) }}
        value_template: >-
             {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(0)(now())) /86400+1) | int(0) }}
        #  {{ strptime(states.calendar.agendamq_anniversaire.attributes.start_time, "%Y-%m-%d %H:%M:%S").strftime("%A %d %B") }}:
        #  {{ states.calendar.agendamq_anniversaire.attributes.message }}
        #  {%- if states.calendar.agendamq_anniversaire.attributes.location %} at {{ states.calendar.agendamq_anniversaire.attributes.location -}}
        #  {% endif %}
        icon_template: >-
          {% if is_state('calendar.agendamq_anniversaire', 'on') %}
            mdi:crown
          {% else %}
            mdi:calendar-clock
          {% endif %}
          

Erreur:

Logger: homeassistant.helpers.template
Source: helpers/template.py:537
First occurred: 17:45:02 (56 occurrences)
Last logged: 17:58:02

Template variable warning: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'start_time' when rendering '{{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(0)(now())) /86400+1) | int(0) }} jours'
Template variable warning: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'start_time' when rendering '{{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(0)(now())) /86400+1) | int(0) }}'

Ça c’est probablement une entité vide. Donc pas de start_time

C’est bon cette fois-ci:

voici la solution:

- platform: template
  sensors:
    next_anniversary2:
        friendly_name: >-
            {{ (states.calendar.agendamq_anniversaire.attributes.message) }}
        value_template: >-
           {% if states.calendar.agendamq_anniversaire.attributes.start_time %}
              {{((as_timestamp(states.calendar.agendamq_anniversaire.attributes.start_time) - as_timestamp(now())) / 60) | default(99) | int }}
            {%- else -%}
              -1
            {%- endif %} 
        icon_template: >-
          {% if is_state('calendar.agendamq_anniversaire', 'on') %}
            mdi:crown
          {% else %}
            mdi:calendar-clock
          {% endif %}