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?
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?
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.
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.
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’]
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.
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.