Automation nur wenn KEIN Kalendereintrag

Hallo zusammen. Ich habe eine funktionierende Automation zu laufen. Ich möchte diese nun erweitern, dass diese nur ausgeführt werden soll, wenn in einem bestimmten Kalender kein Eintrag ist. Konkret geht es um einen Urlaubskalender. Wenn dieser leer ist bzw. keinen Eintrag an diesem Tag hat, soll die Automation nicht ausgeführt werden. Es gibt aber nur den Trigger “Aktiver Termin im Kalender x”, jedoch nicht das Gegenteil.

Vielleicht gibt es noch einen anderen Lösungsansatz, als meine Idee?

Trigger das ganze auf Zeitbasis. Und dann als “Nicht” Baustein.

description: ''
mode: single
triggers:
  - trigger: time_pattern
    minutes: /10
    id: Periodisch abfragen
conditions: []
actions:
  - if:
      - condition: and
        conditions:
          - condition: trigger
            id:
              - Periodisch abfragen
          - condition: not
            conditions: []
    then: []

oder als Bedingung:

{{ is_state('calendar.deine_kalender_entitaet', 'off') }}

Okay, werde ich mal probieren. Was mir gerade bei meinen CalDav Kalendern auffällt, dass dieser gar nicht richtig angezeigt wird. Habe gerade einen Termin heute 17 Uhr im Kalender “privat” drin. Bei der Prüfung im Editor zeigt er mir aber an, dass kein aktiver Kalender drin sei… Also kann man sich ja darauf auch nicht wirklich verlassen. Oder übersehe ich etwas?

Bildschirmfoto 2026-09-07 um 15.54.56

Hier wäre ich vorsichtig.

  • ganztägiger Termin heute → calendar… = ON
  • ganztägiger Termin morgen → heute noch OFF

Sowas wäre mein Vorschlag:

description: ''
mode: single
triggers:
  - trigger: time_pattern
    minutes: /10
actions:
  - action: calendar.get_events
    target:
      entity_id: calendar.1sonos_alle_boxen
    data:
      start_date_time: '{{ today_at() + timedelta(days=1) }}'
      end_date_time: '{{ today_at() + timedelta(days=2) }}'
    response_variable: kalender_morgen
  - if:
      - condition: template
        value_template: '{{ kalender_morgen[''calendar.1sonos_alle_boxen''].events | count > 0 }}'
    then: []

Was ist denn der Sinn hier nach Kalender Morgen zu schauen? Ich möchte es nur verstehen.

Meine Automation wird Mo-Fr zu einer bestimmten Uhrzeit ausgeführt und soll nicht ausgeführt werden, wenn Urlaubskalender nicht leer ist.

Warum muss da jetzt nach morgen geschaut werden? Danke

PS: wird der Termin nur angezeigt, wenn er ganztägig ist und nicht wenn es einen gab oder gibt der 1h z.b. ging?

Sorry, vielleicht hat ich falsch gedacht. Ich dachte, Du tust eine Aktion an dem Tag vor dem Urlaub und entsprechend oberen Code wäre es egal ob ein Termin ganztägig oder nicht ist.

Wenn Du am Urlaubstag erst abfragst und bspw.
{{ is_state('calendar.dein_urlaubskalender', 'off') }}
als Bedingung setzt ob die Automatisation ausgeführt wird, reicht das.

Das kannst Du einfach ausprobieren.
Wenn Du zu einer Zeit fragst, wo kein Termin eingestellt ist, dann wird diese Bedingung true sein ansonsten false. Die Frage ist eher wann Du die Automatisation prüfen läßt.

Ja das würde mir reichen. Doofe Frage. Ich mache eigentlich alles im Editor. Wo trage ich das denn ein? Wenn ich eine Bedingung auf yaml umstelle und den Code dort ersetze, funktioniert das nicht.

Ich würde es einfach nur so haben wollen, dass generell geprüft wird, ob ein Eintrag vorhanden ist oder war (also schon abgelaufen ist, aber noch im Kalender steht). Also ohne bestimmte Prüfungen zu einer Uhrzeit.

Template auswählen


und dort den Code hinterlegen

So einfach wird es einem nicht gemacht bzw. so eine Funktion gibt es nicht.
Man muß

  • entweder wie oben einen Kalender abfragen ob gerade ein Termin aktiv ist (man könnte auch nach Titel fragen etc) → mit einem Ganztagestermin wäre man auf sicherer Seite
  • oder man gib der Kalender Abfrage einen Zeitraum mit indem der Kalender durchsucht werden soll, ob es einen Termin gab/gibt

Im obigen Beispiel mache ich das für den Zeitraum morgen

  - action: calendar.get_events
    target:
      entity_id: calendar.1sonos_alle_boxen
    data:
      start_date_time: '{{ today_at() + timedelta(days=1) }}'
      end_date_time: '{{ today_at() + timedelta(days=2) }}'

Das Abfrage Ergebnis landet in der Variable kalender_morgen und später frage ich die Variable ab, ob es einen Termin gab.

Kannst du mir vielleicht beim Code weiterhelfen?

Meine erste Bedingung lautet:

trigger: time
at:
  entity_id: sensor.schlafzimmer_nachster_alarm
  offset: '00:15:00'
weekday:
  - mon
  - tue
  - wed
  - thu
  - fri
id: Wecker ist gestellt

Möchte nun eine zweite Bedingung haben mit ID “Wecker ist nicht gestellt”. Was benötige ich da für einen Code? Wie kann ich da das Template einbauen?

{{ states('sensor.schlafzimmer_nachster_alarm') not in ['unavailable', 'unknown', 'none'] }}

Ich kann es leider so nicht auswählen, dass geprüft wird ob der Wecker nicht gestellt ist. Und das ebenfalls von Mo-FR.

Edit: Sorry ist ja hier gar nicht das richtige Thema. Nun kann ich es hier aber nicht löschen.

Das ist ein Trigger, keine Bedingung. Das ist klugsch… aber es sollen keine Mißverständnisse entstehen.

Ich würde als 2. Trigger eine Zeit nehmen, die nach Deiner Einschätzung möglichst immer vor dem Wecker ist und dem Trigger auch eine ID geben.

Später im Code fragst Du z. B. über IF/Then oder Optionen als Bedingung ein Ausgelöst durch ab, dann die Trigger ID und als weitere Bedingung Dein

ab. Das Ergebnis ist true wenn ein Wecker gestellt ist.

Ich hatte auch überlegt, Dir diesen Trigger zu empfehlen

triggers:
  - trigger: template
    value_template: >
      {{ states('sensor.schlafzimmer_nachster_alarm')
         not in ['unavailable', 'unknown', 'none'] }}
    id: "Wecker ist gerade gestellt wurden"

aber dies wäre bei einmalig eingestellten aber sich wiederholenden Wecker weniger hilfreich.