Geht das? Kalender mit einem Cronjob auf mehrtägige Ereignisse prüfen

Hi,

ich komme vom ioBroker und hatte mir dort ein kleines Javaskipt erzeugt, dass nachts um 0:15 Uhr meinen in der iCloud hinterlegten privaten Kalender auf den Eintrag “*rlaub” und meinen Feiertagskalender auf heutige und morgige Feiertage überprüfte. In Abhängigkeit davon wurden unter anderem entsprechende Systemvariablen meiner HomeMatic zur Heizungssteuerung gesetzt.

Hier mal das Skript:

schedule('15 0 * * *', function(){
  var contentIcal0 = getState('ical.0.data.html').val;
  var contentIcal1 = getState('ical.1.data.text').val;

  /*
  log(contentIcal0.search("iCal-Feiertage\">Heute"));
  log(contentIcal0.search("iCal-Feiertage\">Morgen"));
  log(contentIcal1.search(/heute.*urlaub/i)); log(contentIcal1.search(/noch.*urlaub/i));
  */
  
  if((contentIcal0.search("iCal-Feiertage\">Heute") != -1) || (contentIcal1.search(/heute.*urlaub/i) != -1) || (contentIcal1.search(/noch.*urlaub/i) != -1)){
    setState("alexa2.0.Echo-Devices.GSM42706540303LR.Alarm.471a168d-5cc2-415e-a986-a4ba14c7a626.enabled", false); // Wecker ausschalten
    
    if(contentIcal0.search("iCal-Feiertage\">Heute") != -1) setState("hm-rega.0.10618", true);  // Systemvariable "Feiertag heute" auf wahr setzen
    else(setState("hm-rega.0.10618", false)) // Systemvariable "Feiertag heute" auf falsch setzen
    
    if((contentIcal1.search(/heute.*rlaub/i) != -1) || (contentIcal1.search(/noch.*urlaub/i) != -1)) setState("hm-rega.0.10620", true); // Systemvariable "Urlaub heute" auf wahr setzen
    else(setState("hm-rega.0.10620", false)) // Systemvariable "Urlaub heute" auf falsch setzen
  } 
  else{
    setState("alexa2.0.Echo-Devices.GSM42706540303LR.Alarm.471a168d-5cc2-415e-a986-a4ba14c7a626.enabled", true); // Wecker einschalten
    setState("hm-rega.0.10618", false); // Systemvariable "Feiertag heute" auf falsch setzen
    setState("hm-rega.0.10620", false); // Systemvariable "Urlaub heute" auf falsch setzen
  }
    
  if(contentIcal0.search("iCal-Feiertage\">Morgen") != -1) setState("hm-rega.0.10619", true); // Systemvariable "Urlaub morgen" auf wahr setzen
  else(setState("hm-rega.0.10619", false)) // Systemvariable "Urlaub morgen" auf falsch setzen
});

Ich frage mich nun, ob ich sowas auch irgendwie mit dem Home Assitant hinbekomme.

Das Problem scheint nämlich, dass das summary von mehrtägigen Terminen nur an ihrem Anfang und Ende erkannt werden kann, aber nicht zwischendrin. Hier funktioniert ein Cronjob also nicht. Ich fände das aber sicherer, falls ein System zwischendrin mal neu starten muss. So wird spätestens beim nächsten Triggerzeitpunkt wieder alles korrekt gesetzt.

Ich habe mir jetzt erst mal damit beholfen, dass ich in der entsprechenden Automation nur auf den Beginn und das Ende der Termine mit dem template

{{ 'urlaub' in trigger.calendar_event.summary }}

auslöse. Bei den Feiertagen ist es nicht so dramatisch, da die ja eh nur einzelne Ganztagestermine sind.

Ganztägige Ereignisse im iCloud-Kalender sind so einen merkwürdige Geschihte in HA, das hat bei mir bisher auch nur semigut funktioniert.

Ich das bei mir so gelöst ( kamm aus irgenteinen Forum ), das caldav nutze und in eine calender.yaml erstellt hab, wo alle Kalender aus icloud, die ich in HA haben will, eingebunden werden und zusötzlich pro Ereigniss ( Urlaub, HomeOffice, krank, usw. ) weitere custom_Kalender auf Basis des “normalen Kalenders” erstellt werden.

Das sieht dann so aus, das ich neben dem normalen Kalender eine weiteren habe, wo nur Urlaub, wo nur Freizeit, HomeOffice usw. jeweils drin steht. Die kann man im Dashboard dann ja ausblenden.

Wichtig ist nur, das die entsprechenden Entitäten dann nutzbar sind ( z.b. calender.kalender_urlaub )

Das funktioniert aber nur für den aktuellen Tag, für die Entitäten hab ich dann in einem Dashboard einfache Anzeigen, die nur sichbar sind, wenn das Ereigniss aktiv.

Hm. Klingt ein bisschen nach “von hinten durch die Brust ins Auge”. :wink: Ganztägige Kalender sind ja keine Problem. Nur mehrtägige. Die erscheinen nämlich überhaupt nicht im Kalender.

In calendar.privat müsste eigentlich “Erholungsurlaub” auftauchen. Wieder mal etwas, was im ioBroker problemlos funktoiniert und im HA nicht. Na ja, muss ich wohl mit leben.

Was heißt eigentich “supported_features”?

alias: 1_forum_test_mehrtage
description: ""
triggers: []
conditions: []
actions:
  - variables:
      MeinKalender: calendar.google_abfall
  - action: calendar.get_events
    target:
      entity_id: "{{MeinKalender}}"
    data:
      start_date_time: "{{ now() }}"
      end_date_time: "{{ now().replace(hour=23, minute=59, second=59) }}"
    response_variable: kalender_ereignisse
  - action: notify.gmxolaf3
    metadata: {}
    data:
      title: Mail Termine heute
      message: |
        {% set events = kalender_ereignisse[MeinKalender].events %}
        {% if events | length == 0 -%}
        Heute gibt es keine Termine mehr.
        {% elif events | length == 1 -%}
        Heute gibt es noch folgenden Termin:
        {% set e = events[0] %}
        {{ as_datetime(e.start).strftime('%H:%M Uhr') }} {{ e.summary }}
        {% else -%}
        Heute gibt es noch folgende {{ events | length }} Termine:
        {% for e in events -%}
        {{ as_datetime(e.start).strftime('%H:%M Uhr') }} {{ e.summary }}
        {% endfor -%}
        {% endif %}
mode: single

-----Ursprüngliche Nachricht-----
Von: Homeassi
Gesendet: Mittwoch, 7. Januar 2026 16:32
An: Olaf xxx
Betreff: Mail Termine heute

Heute gibt es noch folgende 2 Termine:
00:00 Uhr Blaue Tonne
00:00 Uhr Test mehrtägig !!!

  • Als Trigger kannst Du z.B. eine Uhrzeit setzen oder einen Button der geklickt wurde etc.
  • Anstelle der Mail kannst Du auch Deine Heizungswerte setzen
  • Anstelle des Mail Jinja kannst Du auch so eine Stichwortsuche machen “Urlau” in …

PS: Die Forumsuche ist auch sinvoll.

Schön. Und wie mache ich das jetzt für mehrtägige Termine, die mir gar nicht im Kalender angezeigt werden?

Hast Du mal mit oberer Lösung probiert oder nur per

?

Bei einer Lösung wurden auch die mehrtägigen Termine angezeigt.

Ja, aber funktioniert seit ich es nutze problemlos.

Das ist die komplette Konfig:

# Apple Kalender
calendar:
  - platform: caldav
    url: https://caldav.icloud.com
    username: !secret userIcloud
    password: !secret passIcloud
    calendars:
      - Kalender
      - Familie
      - Feiertage-NRW
      - Ferien-NRW
  - platform: caldav
    url: https://caldav.icloud.com
    username: !secret userIcloud
    password: !secret passIcloud
    custom_calendars:
      - name: "HomeOffice"
        calendar: "Kalender"
        search: "HomeOffice"
      - name: "Office"
        calendar: "Kalender"
        search: "Office"
      - name: "Urlaub"
        calendar: "Kalender"
        search: "Urlaub"
      - name: "Gleitzeit"
        calendar: "Kalender"
        search: "Gleitzeit"
      - name: "Freizeit"
        calendar: "Kalender"
        search: "Freizeit"
      - name: "krank"
        calendar: "Kalender"
        search: "krank"

und das sich meine Variablen ( paar kommen von anderen Integrationen ) daraus, die ich dann für sonstwas nutze.: Abfallkalender ist z.b. anders gelöst

Das mit den mehrtägigen Terminen ist meiner Ansicht nach aber ein Problem der iCloud-Kalender, nicht von HA. Mit Google funktioniert das wohl einfacher.

1 „Gefällt mir“

Dann dürfte es aber ja nicht mit dem iCal-Adapter im ioBroker funktionieren. Nur mal so als Info, was der so aus meinem iCloud-Kalender „Privat“ ausliest:

…“date”:“Noch eine Woche”,“event”:“Erholungsurlaub”,“\_class”:“ical_Privat ical_today”,“\_date”:“2025-12-21T23:00:00.000Z”,“\_end”:“2026-01-13T23:00:00.000Z”,“\_IDID”:“xxx-xxx-xxx-xxx-xxx”,“\_allDay”:true,“\_private”:false,“\_rule”:" “,“location”:”“,”\_calName":“Privat”,“\_calColor”:“#ffffff”,“\_object”:{“type”:“VEVENT”,“params”:[ ],“created”:“2025-10-23T12:30:34.000Z”,“end”:“2026-01-13T23:00:00.000Z”,“dtstamp”:“2025-10-23T12:30:53.000Z”,“start”:“2025-12-21T23:00:00.000Z”,“datetype”:“date”,“lastmodified”:“2025-10-23T12:30:52.000Z”,“sequence”:“1”,“summary”:“Erholungsurlaub”,“uid”:

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
s.a.: (Neues Update & Features - Hier in der Community 🫶)

Ich sag mal ganz ehrlich, ich hab keine Lust mehr drauf, da rum zu experimentieren, da hab ich schon zig Stunden mit verbracht und es hat nie funktioniert, etliche Vorschläge aus dem Netz probiert. Der iCloud arbeitet da bei mehrtägigen Einträge merkwürdig, mit dem Goolgle-Kalender ist das kein Problem, aber ich nutze den nicht, weil ich Apple-User bin ( meine Partnerin ebenso )

Die Lösung, die ich aktuell habe, funktioniert einwandfrei und brauch ich einen neuen Eintrag zum Filtern, sind das die drei Zeilen unter Custom-Calender im YAML und fertig.
Und die Kalender-Ansicht in HA hab ich eh ausgeblendet, den brauch ich dort nicht, nur die Einträge für Steuerungen.

Auch mit iCloud-Kalendern? @Tuxtom007 hatte ja bereits bestätigt, dass mehrtägige Events in iCloud-Kalendern nicht für jeden einzelnen Tag sichtbar sind, sondern eben nur als Balken vom Anfangs- bis zum Endevent des jeweiligen Kalenderereignisses.

Wie lässt du denn deine Custom-Kalender erstellen? Das sind doch auch iCloud-Kalender, oder? Oder lässt du die entsprechenden iClould-Einträge in Google-Calender übertragen, um sie dann per HA auszulesen?

Gib es denn keine andere iCal-Integration für den HA, die das besser kann?

Ja, die Lösung funktioniert aber Du siehst im Code den entscheidenden Hinweis → Google

  - variables:
      MeinKalender: calendar.google_abfall

Google ist keine Option. Ich nutze nur iCloud-Kalender. Also funktioniert deine Lösung leider nicht für mich.

Das ist schade aber irgendwo muß ja Google auch mal besser sein :wink: Ich beneide Euch seit Jahren um Eure Handy Backup Funktion.

1 „Gefällt mir“