Geburtstags abfrage im Kalender mit ToDo eintragung

Hallo zusammen,

ich würde gerne das einmal am Tag meine Termine in einem Geburtstagskalender abgerufen sind und mir via Notify als Liste geschickt werden. Das funktioniert auch schon soweit sehr gut.

Nun würde ich gerne jeden einzelen Termin in eine ToDo-Liste schreiben.
z.B. ToDo-Liste: Termine
- Geburtstag 1
Beginn 18 Uhr
- Geburtstag 2
Beginn 19 Uhr

alias: Termine pro Tag/ToDo
description: >-
  Erzeugt eine Benachrichtigung pro Tag um 7:30 Uhr, welche auch einen
  ToDo-Eintrag in der Termine ToDo-Liste erzeugt.
triggers:
  - trigger: time
    at: "07:30:00"
  - trigger: homeassistant
    event: start
conditions: []
actions:
  - action: calendar.get_events
    metadata: {}
    data:
      duration:
        hours: 48
        minutes: 0
        seconds: 0
    target:
      entity_id: calendar.stephi_martin
    response_variable: antwort
  - action: notify.mobile_app_iphone_von_martin
    metadata: {}
    data:
      title: "📅 Privat Termine für den: {{ now().strftime('%d.%m.%Y') }}:"
      message: >-
        {%- for event in antwort["calendar.stephi_martin"]["events"] %}    
        {{"\n"}}- {{ as_timestamp(event.start) | timestamp_custom('%H:%M') }}:
        {{ event.summary }}  
        {% endfor -%}
      data:
        notification_icon: mdi:calendar
        push:
          interruption-level: critical
  - action: todo.add_item
    metadata: {}
    data:
      item: >-
        {% set events = state_attr('calendar.stephi_martin', 'events') %} 
        {%- for event in antwort["calendar.stephi_martin"]["events"] %}         
        {{ event.summary }}                  
        {% endfor -%}
      description: >-
        {% set events = state_attr('calendar.stephi_martin', 'events') %} 
        {%- for event in antwort["calendar.stephi_martin"]["events"] %}         
        {{ as_timestamp(event.start) | timestamp_custom('%H:%M') }}               
        {% endfor -%}
    target:
      entity_id: todo.termine
mode: queued

Es müssen auch nicht immer ganztägige Events sein es kann auch sein das dass Event Zeitlich begrenzt ist an einem Tag.
Bei meiner Automatisierung werden zwar ToDo Einträge erzeugt aber immer nur einer mit mehreren Events drin. Ich würde das ganze halt gerne als ToDo-Task pro Event haben.

Lg Martin

Ich habe es nicht selbst mit Kalender Items probiert aber eigentlich müßte es eine Liste sein, die man durchiterieren könnte (alternativ holt man die sich über einen eigenen Template Sensor und macht eine Liste draus). Dann nimmt man ein Wiederholen - für jedes Element … und triggert jedesmal action: todo.add_item

Hier ist ein funktionierendes Beispiel von mir in einem Script mit dem ich aber von einer Todo Liste Items lösche.

repeat:
  for_each: "{{ all_items[todo_name]['items'] }}"
  sequence:
    - data:
        item: "{{ repeat.item.summary }}"
      target:
        entity_id: "{{todo_name}}"
      action: todo.remove_item

Ist schon eine Weile her und ich erinnere mich das Automatisieren einer HA Todo Liste war frickelig.

Gutes Gelingen!

@Bacardi Du bist ein schatz. Vielen Lieben dank dir.

Ich muss ganz ehrlich sagen ich stehe da gerad ein bissel auf dem schlauch.
Ich habe mir einen Sensor angelegt der mir Diverse Attribute pro Event setzt.

Wie bekomme ich denn nun diese Werte z.B. Name = Summary = item in der ToDo in einen jeweils eigenen Task der ToDo-Liste ???

Du bist auf einem gutem Weg!

Unten ein Beispielcode eines Scriptes.

alias: 1 forum todo
sequence:
  - variables:
      personen: |
        [
          {
            "Datum": "21.11.2024",
            "Name": "Christian S.",
            "Notiz": "1989",
            "Alter": 35,
            "Hinweis": "",
            "Geburtstag": "in 2 Tagen"
          },
          {
            "Datum": "22.11.2024",
            "Name": "Landow",
            "Notiz": "1986",
            "Alter": 38,
            "Hinweis": "",
            "Geburtstag": "in 3 Tagen"
          }
        ]
  - repeat:
      sequence:
        - action: todo.add_item
          target:
            entity_id: todo.forum
          data:
            item: |
              Datum: {{repeat.item.Datum}}, 
              Name: {{repeat.item.Name}},
              etc.
      for_each: "{{personen}}"
description: ""

Die Variable habe ich gesetzt um Daten zu haben. Bei Dir sollte es mit Deinem Sensor gehen.

1 „Gefällt mir“

@Bacardi jetzt ist hab ich es glaube ich kapiert.
Habe trotzdem noch ein Problem. Wenn ich jetzt das Fälligkeitsdatum setzen möchte:

due_date: "{{repeat.item.Datum}}"

Spuckt er mir “Could not parse date for dictionary value @ data[‘due_date’]” als Fehler aus.

Ich vermute spontan, daß das Datum nicht als Datum erkannt wird was aber due Date braucht. Ich probiere das morgen mal. Gute Nacht

1 „Gefällt mir“

Mich hats grippemäßig voll entschärft, melde mich wenn ich wieder klar im Kopf bin.

Oh ha, ja dann mal gute Besserung.

Lg Martin

Danke, ich konnte es doch nicht lassen

alias: 1 forum todo
sequence:
  - variables:
      personen: |
        [
          {
            "Datum": "30.11.2024",
            "Name": "Christian S.",
            "Notiz": "1989",
            "Alter": 35,
            "Hinweis": "",
            "Geburtstag": "in 2 Tagen"
          },
          {
            "Datum": "01.12.2024",
            "Name": "Landow",
            "Notiz": "1986",
            "Alter": 38,
            "Hinweis": "",
            "Geburtstag": "in 3 Tagen"
          }
        ]
  - repeat:
      sequence:
        - target:
            entity_id: todo.forum
          data:
            item: |
              Name: {{ repeat.item.Name }},
              etc.
            due_date: >-
              {% set datum = repeat.item.Datum %}
              {% set parts = datum.split('.') %}
              {% set neues_datum = "{}-{}-{}".format(parts[2], parts[1], parts[0]) %}
              {{ neues_datum }}
          action: todo.add_item
      for_each: "{{ personen }}"
description: ""

Du mußt hier aber sehr aufpassen. Sollte sich das Datumsformat in Deinem Kalender aus irgendein Grund von DD.MM.YYYY abweichen, wird die Mechanik nicht funktionieren. In Deinem Sensor würde ich sowas einbauen wie if kein valides Datum, nimm das von heute {{ now().strftime('%Y-%m-%d') }}

Schönes Wochenende

1 „Gefällt mir“

Super Sache. Vom Prinzip her ziemlich selbsterklärend. Hatte mir so etwas auch schon gedacht, nur tue ich mich irgendwie sehr schwer in der Doku die richtigen Einträge hierzu zu finden. Ich wüsste jetzt z.B. spontan nicht wo ich in der Doku was zum “Datum.split” finde. Das selbe hatte ich auch zuvor bei der “sequence” Sache.

Vielen dank dir für die ganze mühe du hast mir bei meinem Problem mehr als nur geholfen und ich glaube auch übergreifend auch andere Themen in HA sind ein paar Groschen gefallen bei mir. Hoffe dir geht es auch wieder besser.

Lg Martin

Danke, gern geschehen.

Erst wollte ich gar nicht weil ich die ToDo als frickelig in Erinnerung hatte, wie hier ja auch sehen. Aber seit dem dem habe ich den Umgang mit ChatGPT und nicht bedingungslosem Folgen der Ergebnisse erlernt. Die Idee einen den Datumstring einfach in eine Liste zu wandeln und die Bestandteile neu zusammenzusetzen, hatte ich auch von da und finde ihn super.

Bis zum nächsten Mal.