Kalender Automation

Hallo Leute!

Vorwort
Seit mehreren Tagen probiere ich diese Automation zu realisieren, mit Hilfe von Videos, Foren, Home Assistant Anleitungen und der KI, aber ich bekomme es einfach nicht hin und würde mich freuen von euch Hilfe und Unterstützung zu erhalten.

Die Automation ist mir sehr wichtig, da ich dadurch ein physisches Gerät ersetzen / ablösen kann und das durch eine Softwarelösung, das würde mich wirklich sehr freuen.

Situation
Das Smartphone wird als Wecker genutzt. Sollte es mal, aus welchen Gründen auch immer ausfallen (ist glaub ich erst einmal passiert in den letzten zwei Jahren), habe ich ein zweites Smartphone, mit einem weiteren Wecker. Da das Hauptsmartphone aber sehr zuverlässig ist, ist es unnötig ein weiteres Smartphone am Bett zu haben, zu laden, ständig den Wecker zu deaktivieren wenn ich Urlaub habe usw. usf. Beim Hauptsmartphone wird der Wecker bei Urlaub und freien Tagen automatisiert (MacroDroid) deaktiviert.

Automation
Die Automation soll vergleichbar wie bei der MacroDroid Automation ablaufen. Wenn es 04:30 Uhr ist, soll Home Assistant prüfen ob Licht A angeschaltet ist (Licht A wird bei deaktivieren des Weckers vom Smartphone automatisch eingeschaltet, ist es also nicht eingeschaltet, hat der Wecker nicht geklingelt oder das Smartphone ist aus oder was auch immer). Des Weiteren soll Home Assistant im Kalender prüfen, dass wenn das Licht nicht eingeschaltet ist, ob ich an diesem Tag evtl. Urlaub habe oder einen freien Tag oder ich oder ein Kind krank ist. Ist dies nicht der Fall, dann kann mit den weiteren Schritten fortgefahren werden, die ich soweit alleine realisiert habe.

Ich habe alles mögliche mit dem trigger.calendar_event.summary ausprobiert, aber es leider nicht hinbekommen. Ich finde es auch seltsam, dass man Kalender Trigger ausschließlich als “Sobald” (If) auswählen kann und nicht auch unter “Und wenn (optional)”.

Wie bereits geschrieben, würde ich mich riesig über Hilfe freuen.
Vielen Dank im Voraus!

Mein Kalender heißt Termine. Eintragungen wie Urlaub und freier Arbeitstag sind immer als ganztägige / und / oder wiederkehrende Termine angelegt.

Du kannst einen Kalender als Bedingung auswählen, allerdings nur als Entität.

conditions:
  - condition: state
    entity_id: calendar.arbeit
    state: "on"

„on“ bedeutet, dass ein Termin eingetragen ist, „off“ bedeutet kein Termin.

1 „Gefällt mir“

Geht doch über Entität - Zustand

  - condition: state
    entity_id: calendar.xyz
    attribute: message
    state: Urlaub
2 „Gefällt mir“

Das reicht mir leider nicht. Wir sind ein Fünf-Personen-Haushalt. Es stehen jeden Tag sehr viele Sachen im Kalender. Es ist ein Haushaltskalender. Home Assistant sollte schon prüfen können, ob die Einträge Urlaub, Freier Arbeitstag und auch die ganzen Feiertage vorhanden sind an dem Tag oder nicht.

Gott hab Dich seelig! Vielen Dank maxe. Ich ärgere mich, mich nicht schon viel früher hier gemeldet zu haben. Ich behaupte immer gern, dass ich sehr viel Ahnung von Technik habe. Meine MacroDroid Automatisierungen sind auch extrem komplex, in Home Assistant habe ich 170 Geräte und 500 Entitäten, aber die Automatisierungen in Home Assistant finde ich stellenweise nicht sehr intuitiv.

Es läuft jetzt wie gewünscht, vielen Dank!

1 „Gefällt mir“

Zwei Ergänzende Fragen für weitere Automatisierungen und der gewünschten Abhängigkeit zum Kalender haben sich ergeben:

1.) Gibt es für den Zustand / state auch Platzhalter, dass er nur nach einem bestimmten Wort im Titel des Kalendereintrages sucht. Zum Beispiel “Urlaub”, aber der Kalendereintrag heißt “Urlaub in Mecklenburg-Vorpommern”.

2.) Gibt es eine Möglichkeit, den Kalendereintrag des nächsten Tages auf ein Stichwort prüfen zu lassen? Also prüfe um 19:00 Uhr ob morgen im Kalender “Urlaub” steht?

  1. Mit einem Template z.B.
{{ 'Urlaub' in state_attr('calendar.xxx', 'message') }}
1 „Gefällt mir“

Ich habe es noch nie versucht, aber eine Idee wäre

alias: test
description: ""
trigger:
  - platform: calendar
    event: start
    offset: "-5:0:0"
    entity_id: calendar.xyz
condition: []
action:
  - condition: template
    value_template:  >
      {{ 'Urlaub' in state_attr('calendar.xyz', 'message') }}
  - service: light.turn_on
    data: {}
    target:
      entity_id: light.xyz
mode: single
1 „Gefällt mir“

Funktioniert leider nicht, Ergebnis falsch, obwohl morgen der zweite Weihnachtstag ist.

Über weitere Ideen und Vorschläge wäre ich sehr dankbar!

Bei mir im Kalender steht “2. Weihnachtstag”. Bist Du sicher, dass Du den richtigen String suchst? Vermutlich muss auch auf Groß- Kleinschreibung geachtet werden.

1 „Gefällt mir“

Ja, diesbezüglich liegt kein Fehler vor. Bei anderen Test mit anderen Einstellungen hat er im Trace sogar angezeigt, suche nach Zweiter Weihnachtstag, Ergebnis Erster Weihnachtstag. Also er hat den richtigen Kalender überprüft aber wieder nur auf den heutigen Tag geschaut.

Ich nutze Google Kalender (Feiertage in Deutschland), da ist seit jeher Erster und Zweiter Weihnachtstag ausgeschrieben hinterlegt und nicht mit Zahlen.

Geprüft wird imho nur das aktuelle/nächste Kalenderevent.

1 „Gefällt mir“

Prinzipiell sollte das gehen:

alias: Kalender Test
description: ""
triggers:
  - trigger: time
    at: "19:00:00"
conditions: []
actions:
  - action: calendar.get_events
    data:
      start_date_time: "{{ today_at('0:01') + timedelta(days=1) }}"
      end_date_time: "{{ today_at('23:59') + timedelta(days=1) }}"
    target:
      entity_id: calendar.feiertage_in_deutschland
    response_variable: ereignisse
  - action: notify.persistent_notification
    metadata: {}
    data:
      message: >-
            {%- set events = ereignisse['calendar.feiertage_in_deutschland']['events'] %}
            {%- set ns = namespace(events=[]) %}
            {%- for event in events if 'zweiter weihnachtstag' in (event.summary|lower ) %}
            {%- set ns.events=ns.events+[event.summary] %}
            {%- endfor %}
            {% set erg =ns.events|length > 0 %}
            Morgen steht 'Zweiter Weihnachtstag' {{ iif(erg, '', 'nicht') }} im Kalender!! 
mode: parallel
1 „Gefällt mir“

Das funktioniert jetzt irgendwie schon ein wenig, aber sobald der Termin über mehrere Tage geht, funktioniert es wieder nicht. Alles sehr kompliziert. Ich denke dann verzichte ich auf die Umsetzung.

Geplant war eigentlich wenn morgen Termin xy nicht im Kalender steht, dann schalte Licht um 21:00 Uhr aus.

Ich dachte es ging um das “morgen“, ich schau nachher nochmal.

Habe gerade nochmal einen ganztägigen Termin über 2 Tage und einen normalen Termin über mehrere Tage erstellt, da hat es aber funktioniert. Wie sehen denn deine Termine genau aus?

1 „Gefällt mir“

Es geht auch absolut um das morgen. Für mich ist es seit Jahren normal, dass ich Automatisierungen habe, die abhängig davon, was morgen für ein Tag ist und was morgen im Kalender steht (immer bezogen auf die Arbeit, ob ich arbeiten muss oder nicht) die dann entsprechend ausgeführt werden.

Seltsam, dass die Integration dieses Szenarios in Home Assistant nicht oder nur sehr schwer darstellbar ist.

Servus Leute!

Ich bin hier am ausrasten mit der Umsetzung der Kalender Automation! Nach Stunden habe ich jetzt herausgefunden, warum der eine Kalender funktioniert und der andere nicht.

Unbenannt-1

Die Kalender wo vorne ein Häkchen haben, lassen sich nicht über die Entität auslesen. Geht man mit dem Mauszeiger über das Häkchen steht dort “on”. Kein Termin darin lässt sich über den Entitätsstatus auslesen.

Wie bekomme ich den Kalender “off”? Es ist ein freigegebener Kalender, wo mehrere Personen Zugriff drauf haben.

Edit 1:
Nach weiteren Stunden der Forschung denke ich, dass es doch nicht an der Freigabe liegt, sondern, dass Home Assistant immer nur ein Kalendereintrag pro Kalender auslesen kann. Fallen mehrere Termine zur gleichen Zeit an, nimmt Home Assistant nur den Termin, der schon am längsten aktiv ist, siehe Screenshot:

Unbenannt-1

Kann das irgendwer bestätigen? Es wäre sehr unpraktisch, wenn dies wirklich so wäre. Wer hat nur einen Termin pro Tag in seinem Kalender stehen, der ausgelesen werden muss? Es ist alles so umständlich.

Edit 2:
Um es noch weiter zu verdeutlichen:

Der Kalender für heute. Auslesen kann ich lediglich den obigen Termin Weihnachtsferien. Wie kann ich die anderen Termine in Home Assistant auslesen?

Ich nochmal. Die ursprünglich benötigte Automation wird aktiv genutzt und funktioniert super. Nun brauch ich eine weitere, die in die gleiche Richtung geht.

Aufgabe:
Prüfen ob morgen ein Feiertag oder ein Arbeitstag ist, wenn ja, dann Musik abspielen.

Aber Home Assistant bleibt immer bei der Kalenderabfrage stehen und schreibt:
Fehler: Service call requested response data but did not match any entities

alias: Schlaflieder
description: ""
triggers:
  - at: "19:00:00"
    trigger: time
  - at: "19:40:00"
    trigger: time
conditions:
  - condition: time
    weekday:
      - mon
      - tue
      - thu
      - wed
      - fri
      - sun
actions:
  - action: calendar.get_events
    data:
      start_date_time: "{{ today_at('0:01') + timedelta(days=1) }}"
      end_date_time: "{{ today_at('23:59') + timedelta(days=1) }}"
    target:
      entity_id: calendar.termine
    response_variable: ereignissetermine
  - action: calendar.get_events
    data:
      start_date_time: "{{ today_at('0:01') + timedelta(days=1) }}"
      end_date_time: "{{ today_at('23:59') + timedelta(days=1) }}"
    target:
      entity_id: calendar.feiertage_in_deutschland
    response_variable: ereignissefeiertage
  - if:
      - condition: not
        conditions:
          - condition: template
            value_template: >-
              {%- set events = ereignissetermine['calendar.termine']['events']
              %} {%- set ns =
                namespace(events=[]) %} {%- for event in events if (event.summary|lower ) in
                ('freier arbeitstag (papa)','urlaub (papa)','kind krank (papa)') %} {%- set ns.events=ns.events+[event.summary] %}
                {%- endfor %} {{ ns.events|length > 0 }} 
          - condition: template
            value_template: >-
              {%- set events =
              ereignissefeiertage['calendar.feiertage_in_deutschland']['events']
              %} {%- set ns =
                namespace(events=[]) %} {%- for event in events if (event.summary|lower ) in
                ('neujahrstag','heilige drei könige (regionaler feiertag)','karfreitag','ostermontag','tag der arbeit','christi himmelfahrt','pfingstmontag','tag der deutschen einheit','reformationstag (regionaler feiertag)','erster weihnachtstag','zweiter weihnachtstag') %} {%- set ns.events=ns.events+[event.summary] %}
                {%- endfor %} {{ ns.events|length > 0 }} 
    then:
      - action: google_assistant_sdk.send_text_command
        data:
          command: Arbeitsindikator einschalten
      - delay:
          hours: 0
          minutes: 1
          seconds: 0
          milliseconds: 0
      - action: google_assistant_sdk.send_text_command
        data:
          command: Arbeitsindikator ausschalten
mode: single

Kann wer helfen?