Google Calendar integration Termine suchen

Moin zusammen,
ich habe den Google Calendar installiert und er hat auch alle meine Termine.

Nun wollte ich mir eine Automation bauen, sie einen Schalter setzt, wenn ein bestimmter Titel im Kalender steht.

Um zu sehen was der Template Editor überhaupt ausgibt, habe ich folgendes dort eingetragen:

{% set eintraege = state_attr('calendar.kalender', 'all_events') or [] %}
{% for e in eintraege %}
  - {{ e.start_time[:10] }} → {{ e.summary }}
{% endfor %}

Aber das Ergebnis sieht so aus:
Ergebnistyp: string
Dieses Template abonniert die folgenden Ereignisse zu Zustandsänderungen:

  • Entität: calendar.kalender

Dann habe ich versucht mir alle Termine für heute und Morgen anzeigen zu lassen:

{% set start = now() %}
{% set ende = now() + timedelta(days=2) %}
{% set eintraege = state_attr('calendar.kalender', 'entries') or [] %}
{% for e in eintraege %}
  {% set beginn = as_datetime(e.start) %}
  {% if beginn >= start and beginn <= ende %}
    {{ beginn.date() }} → {{ e.summary }}
  {% endif %}
{% endfor %}

Aber da kommt auch nur das hier:
Ergebnistyp: string
Dieses Template wird zu Beginn jeder Minute aktualisiert.
Dieses Template abonniert die folgenden Ereignisse zu Zustandsänderungen:

  • Entität: calendar.kalender

Kann mir jemand sagen, wie ich heute oder Morgen dort nach allem oder bsw. einem Kalender Titel “Urlaub Familie” suchen kann und mir das dann ausgegeben wird?

1000 Dank

Poste doch mal einen Screenshot der Kalender-Attribute.

Moin,

So sieht das gerade aus.
Es gibt aber noch einen Termin von heute der von 05:00-23:59 läuft.
Scheinbar kann der Kalender zeitgleich nur 1 Termin in einem Zeitraum sehen um den dann auszuwerten. Oder irre ich mich da?

Danke für Deine Hilfe.

bei der lokalen Kalender Integration und bei CalDav wird immer nur der nächste Termin angezeigt. Bei Google scheint es genauso zu sein. In dem Fall musst du deine Termine über die Aktion calendar.get_events abrufen.

Moin,
ich habe jetzt Stunden probiert.
Aber mit calendar.get_events bekomme ich keine Termine zurück.

Ich habe jetzt mal ChatGPT gefragt und der hat mir die Debug Ausgabe gebaut.

alias: TEST – get_events Ausgabe mit Terminliste
triggers:
  - at: "15:00:00"
    trigger: time
actions:
  - data:
      entity_id: calendar.kalender
      start_date_time: "{{ now().replace(hour=0, minute=0, second=0).isoformat() }}"
      end_date_time: >-
        {{ (now() + timedelta(days=6)).replace(hour=23, minute=59,
        second=59).isoformat() }}
    response_variable: muell_debug
    action: calendar.get_events
  - data:
      title: get_events Testausgabe
      message: |
        {% set events = muell_debug or [] %} {% if events | length == 0 %}
          Keine Termine gefunden.
        {% else %}
          Gefundene Termine ({{ events | length }}):
          {% for e in events %}
          • {{ e.start }} → {{ e.summary }}
          {% endfor %}
        {% endif %}
    action: persistent_notification.create

Da ich Morgen nur Mülltonnen Termine drin habe, steht “muell_debug” im Code.

Das kommt dabei raus.

Geht das mit der Google Kalender Integration nicht?

Meine TrashCard als Bespiel greift auch auf diesen Kalender zu.
Dort habe ich alle meine Termine. Privat und auch Mülltermine.
Und der sieht alle Termine. Oder eben wenn man nach Müllbegriffen filtert zeigt er nur die an.

Somit sollte es doch möglich sein ,nach bsw: “Urlaub Familie” zu suchen mit dem Ziel, dass einen Tag vor dem Termin ein input boolean auf “AN” gesetzt wird.

Ich weiss leider nicht mehr weiter.

Die ganzen frei verfügbaren „AI“ plappern ja auch nur stumpf nach, was sie im Netz gefunden haben. Der Code oben ist falsch.


      message: |
        {% set events = muell_debug['calendar.DEINKALENDER'].events or [] %}

1 „Gefällt mir“

Guten Morgen Kitty,
ich danke Dir sehr für die Hilfe.

Ich kenne mich mit den ganzen Befehlen noch nicht aus.
Bin noch am lernen. Mir ist bewusst, dass KI oft auch Blödsinn und im Kreis redet.
Manchmal erkenne ich das. Aber bei diesem Thema habe ich keinen Plan.

Ich habe Deine Zeilen jetzt mal eingebaut:

alias: TEST – get_events Ausgabe mit Terminliste
triggers:
  - at: "15:00:00"
    trigger: time
actions:
  - data:
      entity_id: calendar.kalender
      start_date_time: "{{ now().replace(hour=0, minute=0, second=0).isoformat() }}"
      end_date_time: >-
        {{ (now() + timedelta(days=6)).replace(hour=23, minute=59,
        second=59).isoformat() }}
    response_variable: muell_debug
    action: calendar.get_events
  - data:
      title: get_events Testausgabe
      message: |
        {% set events = muell_debug['calendar.kalender'].events or [] %}	
          Keine Termine gefunden.
        {% else %}
          Gefundene Termine ({{ events | length }}):
          {% for e in events %}
          • {{ e.start }} → {{ e.summary }}
          {% endfor %}
        {% endif %}
    action: persistent_notification.create

Leider kann ich die Automation dann nicht speichern.
Es kommt diese Meldung:

Message malformed: template value should be a string for dictionary value @ data[‘actions’][1][‘data’]

Kopier den message-Code mal in Entwicklerwerkzeuge —> Template :wink:

Das hatte ich auch probiert. Habe ich vergessen zu erwähnen.
Da kommt dann folgende Fehlermeldung:

Ähm… da steht noch die Beispiel-Id drin.

Oh Gott. Durch das rumprobieren hab ich Dir den falschen Screenshot gesendet.
Sorry

Jetzt ist es der richtige:

Nein, ich meinte den message-Block deiner Automation.


{% set events = muell_debug['calendar.kalender'].events or [] %}	
  Keine Termine gefunden.
{% else %}
  Gefundene Termine ({{ events | length }}):
  {% for e in events %}
  • {{ e.start }} → {{ e.summary }}
  {% endfor %}
{% endif %}

Mini-Spoiler: Da fehlt was.

Hi Kitty,
ich blicke da echt nicht mehr durch.
Danke nochmal, dass Du mir da hilfst.
Was fehlt denn da?

Ich habe Deinen Code trotzdem mal reinkopiert:

Dann quäl ich dich mal nicht weiter: Das if-Statement fehlt, vgl. Ursprungs-Code:


{% set events = muell_debug or [] %}
{% if events | length == 0 %}
          Keine Termine gefunden.

Guten Morgen Kitty,
erstmal vielen Dank.
Ich denke mal, dass ich es jetzt wieder falsch eingetragen habe.
Habe jetzt 2 Fassungen probiert.


und

Die Ausgabe • → hatte ich schon bei dem ganzen probieren schon öfter bekommen.

Kannst Du mir vielleicht den ganzen Code schreiben, der funktionieren sollte?
Dankeschön.
LG

Diese Zeile fehlt in deiner Automation im Block message: (vgl.deinen ursprünglichen Code).

In den Entwicklerwerkzeugen erhältst du eine Fehlermeldung, weil die variable muell_debug nicht definiert ist. Die Entwicklerwerkzeuge können ja nicht wissen, was du in deiner Automation definiert hast. Das musst du händisch eingeben via Entwicklerwerkzeuge —> actions —> action: calendar.get_events und nach Ausführung def Aktion unten rechts auf kopieren (Template) klicken.

Hallo Kitty,
ich habe es jetzt nochmal versucht in der Automation anzupassen.

alias: TEST – get_events Ausgabe mit Terminliste2
description: ""
triggers:
  - at: "15:00:00"
    trigger: time
actions:
  - data:
      entity_id: calendar.kalender
      start_date_time: "{{ now().replace(hour=0, minute=0, second=0).isoformat() }}"
      end_date_time: >-
        {{ (now() + timedelta(days=6)).replace(hour=23, minute=59,
        second=59).isoformat() }}
    response_variable: muell_debug
    action: calendar.get_events
  - data:
      title: get_events Testausgabe
      message: |
        {% set events = muell_debug or [] %}
        {% if events | length == 0 %}
          Keine Termine gefunden.
        {% else %}
          Gefundene Termine ({{ events | length }}):
          {% for e in events %}
          • {{ e.start }} → {{ e.summary }}
          {% endfor %}
        {% endif %}
    action: persistent_notification.create

Die Ausgabe ist immer noch falsch.

Siehe meinen Beitrag Nr. 7:

Hi Kitty,

zu allerst muss ich mich echt bei Dir für Deine Geduld bedanken.

Habe den Code jetzt folgendermassen angepasst:

alias: TEST – get_events Ausgabe mit Terminliste2
description: ""
triggers:
  - at: "15:00:00"
    trigger: time
actions:
  - data:
      entity_id: calendar.kalender
      start_date_time: "{{ now().replace(hour=0, minute=0, second=0).isoformat() }}"
      end_date_time: >-
        {{ (now() + timedelta(days=6)).replace(hour=23, minute=59,
        second=59).isoformat() }}
    response_variable: muell_debug
    action: calendar.get_events
  - data:
      title: get_events Testausgabe
      message: |
        {% set events = muell_debug['calendar.kalender'].events or [] %}       
        {% if events | length == 0 %}
          Keine Termine gefunden.
        {% else %}
          Gefundene Termine ({{ events | length }}):
          {% for e in events %}
          • {{ e.start }} → {{ e.summary }}
          {% endfor %}
        {% endif %}
    action: persistent_notification.create

Und so sieht das Ergebnis aus:

Jetzt versuche ich mal weiterzumachen.

Freue mich total!
LG

Prima!
Falls du das Datum noch aufrüschen willst:

      {% for e in events %}
      • {{ (e.start|as_datetime).strftime('%d.%m.%Y, %R').replace(', 00:00','') }} → {{ e.summary }}
      {% endfor %}

Ergebnis:
        
        
          Gefundene Termine (2):
          
          • 12.05.2025 → test ganztägig
          
          • 12.05.2025, 16:00 → test

—> strftime()

Allerdings muss ich dazu sagen, dass ich aus reiner Faulheit mit .replace gearbeitet habe. Das ist quick & dirty. Solltest du einen Termin haben, der um 0:00 Uhr startet und, sagen wir mal, 2:00 Uhr morgens endet, wird das 00:00 natürlich ebenfalls entfernt. Kann man aber auch ordentlich machen. :wink: