Urlaubschalter Kalenderereignis anderer Lösungsweg

Ich habe im Moment eine Automation die einen Schalter setzt je nachdem ob Urlaub im Kalender steht oder nicht. Diese funktioniert auch. Jetzt wollte ich mal sehen welchen Lösungsweg es noch gibt.
Ich hatte mal was mit dem Kalendertrigger laufen, aber da wurde der Schalter nicht auf aus gesetzt.
Daher diese Automation.

alias: Urlaubstrigger an
description: ""
trigger:
  - alias: Jeden Tag um 3Uhr
    platform: time
    at: "03:00:00"
condition: []
action:
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{ 'Urlaub' in state_attr('calendar.+++++++_gmail_com',
              'message') }}
        sequence:
          - alias: wird der Urlaubsschalter auf an gesetzt
            service: input_boolean.turn_on
            data: {}
            target:
              entity_id: input_boolean.urlaubsmode
            enabled: true
      - conditions:
          - condition: template
            value_template: >-
              {{ 'Urlaub' not in state_attr('calendar.+++++_gmail_com',
              'message') }}
        sequence:
          - alias: wird der Urlaubsschalter auf aus gesetzt
            service: input_boolean.turn_off
            data: {}
            target:
              entity_id: input_boolean.urlaubsmode
            enabled: true
mode: single

die echte Kalenderadresse habe ich natürlich drin stehen.

Ich weiß nicht genau was du damit machst, aber die Automation sieht plausibel aus und die würde ich vermutlich auch so machen.

Ich schalte einen Schalter bezogen auf den Eintrag Urlaub oder nicht im Kalender. Wegen des Lerneffekt wollte ich mal eure Ideen dazu sehen.

Urlaub ist ja ein ganztägiges Event, richtig?

Wäre es ein Event mit einer bestimmten Uhrzeit, könnte man den Trigger an diese Uhrzeit koppeln

trigger:
  - platform: calendar
    event: start
    entity_id: calendar.xxxx_gmail_com
condition:
  - condition: template
    value_template: "{{ 'Terminname' in trigger.calendar_event.summary }}"

Aber als ganztägiges Event würde ich es genau so machen.

Als Bedingung kannst du auch “Zustand” wählen und dort als Entität deinen Kalender. Als Attribut dann Message:

condition: state
entity_id: calendar.xxxxx_gmail_com
state: Urlaub
attribute: message

Würde es auch besser mit dem input_boolean machen. Falls sich mal was ändert, muss man es nicht an x Stellen ändern.

Was man damit so alles machen kann: Ich steuere damit meine Rollladen dynamisch. Schlafzimmer erst hoch um 10 am Wochenende, Feiertags oder halt an einem Urlaubstag. Als Raucher bleibt die Rolllade zur Terrasse auf, bis der Schlafsensor anschlägt. Bin ich auf Dienstreise, kann die Rolllade auch, wie alle anderen, bei -4 Grad Sonnenneigung geschlossen werden. Dafür nutze ich auch den Kalender mit Einträgen “Urlaub” oder “Unterwegs:*”.

ganztägig funktioniert doch auch mit dem Kalendertrigger oder nicht? Ich meine ich hatte das mal darüber gemacht, aber er hatte nur bei start nicht bei ende getriggert. Daher der jetzige Lösungsweg.

Danke für den Hinweis.

Genau deshalb habe ich es. Wecker die vergessen wurden auszustellen und dann um 5 Uhr klingeln. Sauger die zu früh fahren…

Ganztägig funktioniert natürlich auch mit dem Kalender Trigger. Man kann dann auch mit offset arbeiten, da ganztägig immer von 0:00 bis 0:00 geht. Da du 3 Uhr geschrieben hast, macht der Zeit Trigger meiner Meinung nach mehr Sinn.

Nun ist mir vorgestern aufgefallen, habe ich 2 x ganztägige Einträge (es war ein Geburtstag). Dann funktioniert das ganze nicht mehr. Schaue ich in den Entwicklerwerkzeugen nach, bekomme ich nur den letzten Eintrag zu sehen.

Aber ich denke mal das ist ein Thema für die Entwickler.
Ich denke ich werde doch nicht der einzige sein der diese Funktion nutzen möchte.:thinking:

Du könntest überlegen, ob Du nicht mit den Variablen des calendar trigger was machen kannst. Mit trigger.calendar_event.all_day kannst Du ein Ganztagesevent und mit trigger.calendar_event.summary den Titel abfragen und darüber einen input_boolean schalten. Wenn Du z.B. Urlaub im Titel stehen hast, schalte den Helfer ein. Dann kannst Du den in allerlei Automationen verwenden. Um 23:59 setzt Du den dann zurück, falls aktiviert gewesen, und um 0:00 kommt dann ja das nächste Event oder halt auch nicht.

Hier stehen noch weitere Variablen:

Irgendwie sowas:

  trigger:
    - platform: calendar
	  entity_id: ...
  condition:
    - condition: template
	  value_template: "{{ trigger.calendar_event.all_day and 'Urlaub' in trigger.calendar_event.summary }}"
  action:
    - service: input_boolean.turn_on
      entity_id: ...

Ungetestet mangels Google Kalender.

Danke. Die Kalender Trigger hatte ich schon getestet. Aber da hatte es auch nicht funktioniert.
Bis jetzt hatte meine Lösung auch super funktioniert um meinen Helfer zu setzen.

Ich werde aber deinen Vorschlag testen und berichten.

btw, was ist ein Schlafsensor :smiley:

Ein Sensor, der schläft. :smiley:

Und im Ernst: Ein Sensor, der Schlafphasen, Atmung, Herzschlag etc. misst.

Ich verwende dafür die Integration “Workday” und trage die Urlaubstage als zusätzliche Feiertage ein.

Willkommen!
Viel zu umständlich.

Magst Du Deine Aussage bitte auch noch begründen? Sind Feiertage und Wochenenden nicht interessant?

Ich nutze den Workday Sensor schon, aber das eintragen der zusätzlichen Feiertage ist zu umständlich.

Danke für die Ergänzung. Dann könnte das hier ein Ansatz sein? Eine Kombination aus Kalender und Workday.

Kalender Konfiguration:

- cal_id: Urlaubskalender
  entities:
  - device_id: Urlaub
    name: "Roland Urlaub"
    track: true
    search: "Urlaub"

Und dann ein Binary Template Sensor:

arbeitstag:
    friendly_name: Arbeitstag
    value_template: >-
      {{ is_state("binary_sensor.workday", "on")
         and not is_state("calendar. Urlaub", "on") }}

:crayon:by HarryP: Codezeilen in Code-TAG’s überführt.

meine Automation funktioniert so wie gewünscht. Hier ging es um andere Lösungswege.