Kalender ganz tätiges Ereignis als Trigger

Hi zusammen,

ich brauche mal wieder eure Unterstützung. Neben dem Workday-Sensor versuche ich gerade, meinen Kalender nach Urlaubseinträgen auszulesen – aber irgendwie klappt das nicht so richtig.

Könnte es vielleicht daran liegen, dass es sich um ein ganztägiges Ereignis handelt?
Ich bin für jeden Tipp dankbar!

Viele Grüße

alias: Kalender UrlaubHELFER Workday Sensor
description: >-
triggers:
  - trigger: calendar
    entity_id: calendar.urlaub
    event: start
    offset: "0:0:0"
    id: Urlaub beginnt
  - trigger: calendar
    entity_id: calendar.urlaub
    event: end
    offset: "0:0:0"
    id: Urlaub beendet
conditions: []
actions:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.calendar_event.summary is search('Urlaub') }}"
        sequence:
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Urlaub eingeschaltet
          - action: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id:
                - input_boolean.urlaubshelfer
      - conditions:
          - condition: not
            conditions:
              - condition: template
                value_template: "{{ trigger.calendar_event.summary is search('Urlaub') }}"
        sequence:
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Urlaub ausgeschaltet
          - action: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id:
                - input_boolean.urlaubshelfer
mode: single

Hi, habe mir die Automatisierung jetzt nicht weiter angeschaut, aber du hast Recht, die ganztägigen Kalendereinträge werden etwas anders behandelt.
Sie beginnen um Mitternacht (00:00:00) am Startdatum. Die Integration löst den trigger (start) nur exakt zu diesem Zeitpunkt aus. Wenn Home Assistant zu diesem Zeitpunkt neu gestartet wurde oder nicht lief, wird der Trigger nicht ausgelöst und es gibt auch keine Wiederholung während des Tages.

Ich glaube daher besser wäre es, wenn du nach dem Wort Urlaub den Kalender durchsuchst und das im Anschluss ausgibst.

2 „Gefällt mir“

Hi,
und wie mache ich das?
Oder würde es evtl auch schon reichen, wenn bei „Terminbeginn“ oder „Terminende“ eine Zeit eintrage?
Bin mir auch unsicher ob mein Template so richtig ist, da ich das auch nur aus einem Video kopiert habe :see_no_evil:
Viele Grüße

Deine Automatisierung sieht eigentlich ganz gut aus. Ich würde aber den Aufbau wie gesagt anders angehen. Hier mal ein Beispiel das jeden Tag um 6:00 Uhr prüft und schaut ob im kalender ein Eintrag mit dem Namen Urlaub vorhanden ist, wenn ja dann wird der Helfer auf on geschalten und wenn nicht auf off. (In deinem Beispiel wird der Helfer beim finden von Urlaub auf off geschalten, macht ja eigentlich keinen Sinn)

alias: Kalender UrlaubHELFER
description: Schaltet den Urlaubshelfer ein/aus nach Kalender Urlaub
mode: single
triggers:
  - at: "06:00:00"
    trigger: time
conditions: []
actions:
  - choose:
      - conditions:
          - condition: template
            value_template: |
              {{ 'Urlaub' in (state_attr('calendar.urlaub', 'message') or '') }}
        sequence:
          - data:
              message: Urlaub erkannt – HELFER eingeschaltet
            action: notify.mobile_app_dane_s_iphone_13
          - target:
              entity_id: input_boolean.urlaubshelfer
            action: input_boolean.turn_on
            data: {}
      - conditions: []
        sequence:
          - data:
              message: Kein Urlaub – HELFER ausgeschaltet
            action: notify.mobile_app_dane_s_iphone_13
          - target:
              entity_id: input_boolean.urlaubshelfer
            action: input_boolean.turn_off
            data: {}

1 „Gefällt mir“

Cool, vielen Dank.
Bei mir sollte er den Helfer eigentlich auch Ein/Aus schalten - hat nur nicht so geklappt.
Werde es gleich testen :upside_down_face:

1 „Gefällt mir“

Hat leider noch nicht ganz geklappt.
Erschaltet nur aus, aber nicht ein. Also selbst wenn „Urlaub“ ist, nimmt er die Option 2 und schaltet aus :thinking:

alias: Kalender UrlaubHELFER
description: Schaltet den Urlaubshelfer ein/aus nach Kalender Urlaub
triggers:
  - trigger: time
    at: "06:00:00"
conditions: []
actions:
  - sequence:
      - action: calendar.get_events
        metadata: {}
        data:
          duration:
            hours: 23
            minutes: 59
            seconds: 59
          start_date_time: >-
            {{ now().replace(hour=0, minute=0, second=0) | as_timestamp |
            timestamp_custom('%Y-%m-%d %H:%M:%S') }}
        target:
          entity_id: calendar.urlaub
        response_variable: vacation_today
      - if:
          - condition: template
            value_template: >-
              {{ 'Urlaub' in (vacation_today['calendar.urlaub']['events'] |
              map(attribute='summary') | join(' ')) }}
        then:
          - action: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.urlaubshelfer
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Urlaub erkannt – HELFER eingeschaltet
        else:
          - action: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.urlaubshelfer
            alias: "Boolesche Eingabe: \"Urlaubshelfer\" wird ausgeschaltet"
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Kein Urlaub – HELFER ausgeschaltet
mode: single

Erklärung:

Die Automation wird um 6:00 Uhr getriggert dabei wird dann der Kalender Urlaub für den aktuellen Tag von 0:00 bis 23:59:59 Uhr ausgelesen. Das Ergebnis wird in der Variablen vacation_today gespeichert und anschließend prüft die Bedingung ob ein Termin mit dem Titel Urlaub in der Variablen vorhanden ist. Je nachdem was zutrifft werden dann die von dir vorgegebenen Aktionen ausgeführt.

Das ist ggf. viel komplexer als das was bisher angedacht bzw. vorgeschlagen wurde. Aber ich nutze diese Art der Automation bereits seit Monaten für meinen eigenen Arbeitstagsensor da mir die Workday-Integration zu unflexibel ist.

1 „Gefällt mir“

Hi,

sorry für meine späte Rückmeldung – und vielen Dank nochmal für deine Unterstützung!

Ich habe deine Automation direkt mal getestet und mir für Montag einen Urlaubstag eingetragen. Der Helfer wurde am Montagmorgen um 6 Uhr auch wie geplant aktiviert :slight_smile:
Allerdings wurde er am Dienstag leider nicht wieder deaktiviert. Erst heute Morgen (Mittwoch) ist er automatisch ausgeschaltet worden.

Warum es da zu dieser Verzögerung kam, kann ich leider nicht genau sagen. Ich hatte den Urlaubstag gestern Abend wieder aus dem Kalender gelöscht, nicht das ich denke, ich hätte dort wirklich Urlaub gehabt. :innocent:

Viele Grüße!

alias: Kalender UrlaubHELFER - Test
description: Schaltet den Urlaubshelfer ein/aus nach Kalender Urlaub
triggers:
  - trigger: time
    at: "06:00:00"
conditions: []
actions:
  - sequence:
      - action: calendar.get_events
        metadata: {}
        data:
          duration:
            hours: 23
            minutes: 59
            seconds: 59
          start_date_time: >-
            {{ now().replace(hour=0, minute=0, second=0) | as_timestamp |
            timestamp_custom('%Y-%m-%d %H:%M:%S') }}
        target:
          entity_id: calendar.urlaub
        response_variable: vacation_today
      - if:
          - condition: template
            value_template: |-
              {% set events = vacation_today['calendar.urlaub']['events'] %}
              {{ events 
                 | selectattr('summary', 'equalto', 'Urlaub') 
                 | selectattr('start', 'search', now().strftime('%Y-%m-%d')) 
                 | list | count > 0 }}
        then:
          - action: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.urlaubshelfer
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Urlaub erkannt – HELFER eingeschaltet
        else:
          - action: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.urlaubshelfer
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Kein Urlaub – HELFER ausgeschaltet
mode: single

So hier der Bugfix für dich. :wink:

Das Problem was du hattest war das der Termin ein ganztägiger Termin ist, somit beginnt der Termin wie in deinem Beispiel am Montag 30.06.2025 um 0:00 Uhr, allerdings endet der Termin am 01.07.2025 um 0:00 Uhr. Da der Zeitraum der Prüfung von 0:00 Uhr bis 23:59:59 Uhr geht wurde der Termin am Dienstag dem 01.07.2025 weiterhin erfasst. Und erst am 02.07.2025 nicht mehr erkannt.

Was ich geändert habe ist das jetzt nach einem Termin mit der Bezeichnung Urlaub und dem Terminbeginn mit dem heutigen Datum gesucht wird. Und je nachdem ob die Bedingung erfüllt ist oder nicht, werden deine gewünschten Aktionen diesmal korrekt ausgeführt.

Hab das ganze bei mir getestet, hat bei mir super funktioniert. Hoffe ich habe keine Bugs drin, falls doch sag mir Bescheid dann schau ich natürlich nochmal rein.

2 „Gefällt mir“

Hi,
ich hatte mir testweise am Freitag und Sonntag schnell Urlaub eingetragen.

Am Freitag hat alles super funktioniert: Der Helfer wurde korrekt aktiviert und am Samstag auch wieder deaktiviert – vielen Dank dafür!
Aber heute (Sonntag) wurde der Helfer leider nicht wieder eingeschaltet. Das verstehe ich nicht ganz.

Ich trage jetzt mal Urlaub für Dienstag ein und beobachte, ob sich bis dahin etwas ändert.

Viele Grüße!


Ich guck mir nochmal den Code an, da der Termin korrekt als ganztägiger Termin und mit dem korrektem Titel erstellt wurde sehe ich erstmal keinen Fehler im Kalender selbst.

Vielleicht haut da die Prüfung des Termins aus der Variablen noch nicht ganz hin.

Edit:

alias: Kalender UrlaubHELFER - Test
description: Schaltet den Urlaubshelfer ein/aus nach Kalender Urlaub
triggers:
  - trigger: time
    at: "06:00:00"
conditions: []
actions:
  - sequence:
      - action: calendar.get_events
        metadata: {}
        data:
          duration:
            hours: 23
            minutes: 59
            seconds: 59
          start_date_time: >-
            {{ now().replace(hour=0, minute=0, second=0) | as_timestamp |
            timestamp_custom('%Y-%m-%d %H:%M:%S') }}
        target:
          entity_id: calendar.urlaub
        response_variable: vacation_today
      - if:
          - condition: template
            value_template: |
              {% set events = vacation_today['calendar.urlaub']['events'] %}
              {% set today = now().date().isoformat() %}
              {{ events
                 | selectattr('summary', 'equalto', 'Urlaub')
                 | selectattr('start', 'equalto', today)
                 | list
                 | count > 0 }}
        then:
          - action: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.urlaubshelfer
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Urlaub erkannt – HELFER eingeschaltet
        else:
          - action: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.urlaubshelfer
          - action: notify.mobile_app_dane_s_iphone_13
            metadata: {}
            data:
              message: Kein Urlaub – HELFER ausgeschaltet
mode: single

Probier den mal aus. :wink:

2 „Gefällt mir“

Hi,
hat jetzt alles funktinoniert :smiley:
Vielen Dank nochmals !!!

1 „Gefällt mir“

Super freut mich zu hören. :wink:

1 „Gefällt mir“