Google Kalender auswerten

Hallo zusammen.

Nun dachte ich, dass ich meine Jalousie-Automation endlich fertig habe und dann kommt im „live-Betrieb“ dann doch wieder was Neues.

Kurz zum Hintergrund…
Ich möchte meine Jalousien zu unterschiedlichen Zeitpunkten öffnen lassen. Diese Zeitpunkte sind davon abhängig, was in meinem google-Kalender steht. Reagiert wird auf Einträge, die entweder das Wort Urlaub oder Ferien im Titel haben. Diese habe ich da als Ganztagestermin drin.

Das hat auch schon funktioniert, auch als „langer“ Termin über mehrere Tage.
Nun habe ich bemerkt, dass die Auswertung nicht funktioniert, wenn mehrere Ganztagestermine vorhanden sind und mein Triggertermin „nicht an erster Stelle“ steht.

Hier ist „an erster Stelle“ aber meine Wortwahl, da ich die Logik dahinter nicht nachvollziehen kann. Vielleicht ist es alphabetisch. Der weitere Ganztagestermin mit dem Triggerwort Urlaub wird nicht mehr überprüft. Irgendwie muss man HA dazu bekommen, dass alle Termine im definierten Kalender geprüft werden. Hat da jemand eine Idee?

Anmerkung: Ich setze einen boolean-helper auf on, um dessen Statusänderung in meiner Jalousieautomation auszuwerten.

alias: Auto Prüfung ob Urlaub oder Ferien im Kalender stehen
description: ""
triggers:
  - alias: Trigger jeden Tag um 00:01 Uhr
    at: "00:01:00"
    trigger: time
conditions: []
actions:
  - choose:
      - conditions:
          - alias: Prüfe, ob Urlaub ODER Ferien im Kalender stehen
            condition: or
            conditions:
              - condition: template
                value_template: >-
                  {{ 'Urlaub' in state_attr('calendar.mykalender',
                  'message') }}
                alias: TRUE, wenn Urlaub im Kalender steht
              - condition: template
                value_template: >-
                  {{ 'Ferien' in state_attr('calendar.mykalender',
                  'message') }}
                alias: TRUE, wenn Ferien im Kalender steht
        sequence:
          - alias: Setze Boolean-Ferien-Urlaub auf AN
            data: {}
            enabled: true
            action: input_boolean.turn_on
            target:
              entity_id: input_boolean.boolean_ferien_urlaub
        alias: >-
          Setze Boolean-Ferien-Urlaub auf TRUE, wenn Urlaub ODER Ferien im
          Kalender stehen
      - conditions:
          - alias: Prüfe, ob Urlaub UND Ferien NICHT im Kalender stehen
            condition: and
            conditions:
              - condition: template
                value_template: >-
                  {{ 'Urlaub' not in state_attr('calendar.mykalender',
                  'message') }}
                alias: " TRUE, wenn Urlaub NICHT im Kalender steht"
              - condition: template
                value_template: >-
                  {{ 'Ferien' not in state_attr('calendar.mykalender',
                  'message') }}
                alias: " TRUE, wenn Ferien NICHT im Kalender steht"
        sequence:
          - alias: Setze Boolean-Ferien-Urlaub auf AUS
            data: {}
            enabled: true
            action: input_boolean.turn_off
            target:
              entity_id: input_boolean.boolean_ferien_urlaub
        alias: >-
          Setze Boolean-Ferien-Urlaub auf FALSE, wenn Urlaub UND Ferien NICHT im
          Kalender stehen
mode: single

Versuche mal den mode:single ganz am Ende des Codes auf parallel zu stellen, dann können beide Bedingungen aus der Automatisierung gleichzeitig ablaufen.

1 „Gefällt mir“

Das Problem liegt meinem Test nach nicht in der Automation an sich.
Ich hatte einen Test, da gab es nur einen Ganztagestermin im angefragten Kalender, in dem das Wort Urlaub auftrat. Dann hat die Auswertung funktioniert. Sobald ich aber 2 Ganztagestermine im Kalender habe, einen mit dem Triggerwort und eine mit irgendwas anderem, dann wird der wichtige Eintrag nicht gefunden, bzw. nicht ausgewertet.
In meinen Augen hat das eher was mit der Abfrage des Google Kalenders als solches zu tun.

Ah ok, ja dann wird es wirklich eher an der Abfrage liegen.

Edit: hast mal versucht entries zu nutzen

{{ 'Urlaub' in state_attr('calendar.mykalender', 'entries') }}

statt message. Bei entries kommt eigentlich immer eine Liste heraus. Die kann man dann nach den Begriffen Ferien und Urlaub durchsuchen.

{{ 'Urlaub' in state_attr('calendar.mykalender', 'message') }}

Das schaue ich mir gern an. Danke für den Tipp. Habe gerade auch noch die Google Kalender Integration überflogen. Da steht leider auch eindeutig, dass die Kalenderentität nur das erste Event verarbeitet. Das ist natürlich Mist für eine genetische Kalenderauswertung. Vielleicht hilft Dein Ansatz. Ich berichte :grinning:

Schau dir dafür mal die Integration „workday“ an. Ist meiner Meinung einfacher auszuwerten für solche Automationen.

Ich habe das nun ohne weiter zu lesen, einfach mal ausprobiert. Die Variante führt nicht zum Erfolg. Es wirkt sogar, dass die Bedingungen gar nicht geprüft werden, da die farbliche Darstellung ganz anders ist, als wenn da message drin steht.

Steht entries drin, wird die Prüfung grau dargestellt, steht message drin, wird sie orange (oder im Gut-Fall grün) dargestellt.

Die Beschreibung der Integration klingt für viele Anwendungsfälle vielversprechend. Aber die individuelle Urlaubsvariante bekomme ich da nicht unter.

Mit dem Grundthema hier will ich ja auch eine Lösung für andere Dinge schaffen, wo anhand eines individuellen Termins in einem einfachen google Kalender irgendwas passiert.

Ich mache das über

{{ ‚Urlaub‘ in trigger.calendar_event.summary }}

Die Kalender von allen in der Familie sind dann die trigger. Bei mir funktioniert das auch bei mehreren Eingrägen.

Ich bin für alles offen :grinning:.
Könntest Du da den „umliegenden“ Code auch Posten, dass ich genauer weiß, wie Du das machst?


alias: Urlaub
description: "Google Kalender Urlaub "
triggers:
  - alias: Urlaub 1 (Start)
    trigger: calendar
    entity_id: calendar.person1
    event: start
    offset: "0:0:0"
    id: person1_On
  - alias: Urlaub 1 (Ende)
    trigger: calendar
    entity_id: calendar.person1
    event: end
    offset: "0:0:0"
    id: person1_Off
conditions:
  - condition: template
    value_template: "{{ 'Urlaub' in trigger.calendar_event.summary }}"
actions:
  - alias: Person1 hat Urlaub
    if:
      - condition: trigger
        id:
          - person1_On
    then:
      - action: input_boolean.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.person1_urlaub
  - alias: "Person1 hat keinen Urlaub"
    if:
      - condition: trigger
        id:
          - Bjoern_Off
    then:
      - action: input_boolean.turn_off
        target:
          entity_id:
            - input_boolean.person1_uriaub
        data: {}
mode: parallel
max: 10

Das ist eine gekürzte Fassung, das Peinzip sollte aber klar werden.

1 „Gefällt mir“

Nun habe ich es endlich. Der Trigger darf nicht sein Zeitpunkt sein, wo danach eine Entität eines Kalender abgefragt wird.

Nachdem ich mir die Doku zur Google Kalender Integration gaaanz genau :wink: durchgelesen habe und dem Hinweis gefolgt von, als Trigger calender selbst zu verwenden, funzt es.

Nun wird auf jeden neuen Termin beim Start und beim Ende dessen regiert und ein boolean entsprechend gesetzt. Das mache ich nun separat für Urlaub und Ferien. Naja, und dann gibt es eine 3.Automation, die die boolean auswertet via logischem Oder.

Schwere Geburt und doch so einfach.
Ich danke allen, die hier ihre Ideen beisteuerten.

Thema closed