Kalender: Welche Startzeit hat ein Ganztages-Event?

Hallo liebe Community!

Nachdem @simon42 nun ja so schön im letzten Video erklärt hat, wie man seine(n) Apple iCloud Kalender integrieren und damit Automatisierungen machen kann, hab ich das gleich mal versucht, nachzuvollziehen.
Der erstbeste Usecase, der mir eingefallen ist: Am Abend vor der Müllabfuhr eine Erinnerungsnachricht auf einem meiner Ulanzi Clack Displays einblenden, dass ich die Tonnen noch rausstellen muss.
Die Müllabfuhrtermine sind in einem Kalender, der vom örtlichen Abfuhrunternehmen kommt als Ganztages-Events eingetragen.
Jetzt würde ich halt gerne x Stunden vorher (also am Abend des Vortags) den Trigger haben. Die Annahme, dass so ein Ganztages-Event eine Startzeit von 00:00 Uhr hat, hat sich leider als falsch herausgestellt. Ich hatte das heute um 12 Uhr mittags mal getestet (für morgen steht so ein Termin im entspr. Kalender), mit einem Offset von -12h. Da triggerte leider nichts.

Hat vielleicht jemand eine Idee? Vielleicht hat so ein Termin ja auch gar keine Startzeit? Hatte schon versucht, in den Developer Tools das herauszufinden, komme aber irgendwie nicht an die einzelnen Events eines Kalenders dran … :thinking:

Herzlichen Dank euch! :hugs:

Stefan.

Ich würde vermuten, dass es als Ganzzahl (int) abgespeichert wird.
Bsp: 1684240417
Tuesday, 16. May 2023 12:33:37
Dann wäre noch Thema Zeitzone und Offset etc.

1 „Gefällt mir“

Danke fürs Mitdenken, @oderturm! :hugs:

Das hat mich angeregt, mal zu forschen, ob ich nicht irgendwie herausbekommen kann, welche Uhrzeit im iCal Event steckt.

Da fiel mir Apple Script wieder ein und ich habe mal ein bisschen herumgespielt und es sieht so aus, als ob doch tatsächlich 00:00 Uhr in so einem “all-day” Event steckt:

(Warum der “first event” jetzt im Dezember liegt sei mal dahin gestellt; es sind ja alle Termine in diesem Kalender gleich …)

Warum dann aber mein Trigger mit -12h nicht geklappt hat … :thinking: => Muss weiter forschen! :wink:

Nachtrag:
Oder vielleicht ist 00:00 Uhr eines “all-day” Termins ja nicht der START des Tages, sondern das ENDE bzw. der Start des nächsten Tages?! :thinking: Misteriös …

:crayon:by HarryP: Zusammenführung Doppelpost
*@metawops *
Bitte zukünftig für Nachträge/Korrekturen die “bearbeiten” Funktion (geht 24h) verwenden. Danke!

Hast du geschaut ob die Automation ausgelöst wurde? Evtl. konnte nur die Aktion nicht stattfinden.

1 „Gefällt mir“

Ja, hatte ich, kein Trigger. Die Aktion funktioniert soweit (die kann man ja einzeln auf Knopfdruck testen). :wink:

Kleine Erkenntnis: HA hat offenbar ein Problem damit, wenn ein Kalendername ein Emoji enthält! :-1:
Ich habe in den vorhandenen Kalender mal manuell einen Event für morgen 00:00 Uhr (aber eben keinen “all-day” Event) hinzugefügt und den Before-Offset so eingestellt, dass es triggern sollte – tat’s nicht.
Dann den Kalender umbenannt – ohne Emoji im Namen – und danach klappte der Trigger für diesen Event.
Leider klappen aber die “all-day” Events immer noch nicht. Meh. :disappointed:

Ich könnte natürlich mit einem kleinen Apple Script Skript allen diesen “all-day” Events einfach eine explizite Startzeit geben und sie so in “normale” Events verwandeln … :thinking: Aber das ist ja auch nur ein blöder Workaround …

Nachtrag:
Habe mit einem kleinen Shortcuts Workflow die Original all-day Events in einen neuen Kalender kopiert und die dortigen Events nicht als “all-day”, sondern mit Startzeit 00:00 Uhr angelegt. – Und schon klappt die Triggerung!
Gut, Problem also irgendwie umschifft. Aber es bleibt die Frage offen, wie man in einer HA Automatisierung mit einem Offset im Kalender Trigger bei “all-day” Events umgehen kann. :man_shrugging:

Ich habe es gerade mit meinem Feiertagskalender in Google getestet. Es ist ein All Day Event, was um 00:00:00 Uhr am 18.05. anfängt. Offset von -30:44:0 hat ausgelöst. Evtl stimmt noch etwas mit deinem Kalender nicht.

Evtl. Sonderzeichen im Termin?

2 „Gefällt mir“

Hmmm … Nein, keine Sonderzeichen im Termin.
Vielleicht funktionieren Events in einem Google Kalender anders als in einem iCal Kalender? :flushed:

Aber interessanter Hinweis, @sirector, werde mal weiter experimentieren!

Hallo Stefan,

mich würde mal interessieren, wie du die Termine auf der Ulanzi Uhr anzeigen lassen willst.
Ich gehe mal davon aus, daß du Awtrix Light geflasht hast.

Willst du immer ein notify senden pro Abfuhr?
Wenn zwei Termine am Tag anstehen (z.B. Biotonne und Restmüll) ist das ein bischen unglücklich.

Gruß
Stefan

Hallo Namensvetter :hugs:,

die Idee war, im Falle von zwei Tonnen am selben Tag, dann einen Notification Text zu machen à la “Biotonne und Restmülltonne rausstellen” o.ä.
Das kann man ja in Node Red vorher in einem function Knoten in JavaScript entsprechend gestalten.

Ja, habe meine Ulanzis mit Awtrix geflasht. Anzeigen lassen würde ich die Termine, indem ich via MQTT eine Notification hinschicke. Das klappt einwandfrei. Ich mache das mit Node-Red, da fällt es mir leichter. Aber muss man natürlich nicht, man könnte sicher auch eine “klassische” Automatisierung direkt in HA basteln.

In Node-Red bin ich nicht so bewandert, aber vielleicht magst du ja deinen Flow gern teilen. :grinning:
Ich bin sicher, dass würde auch anderen helfen.
Dafür hat Blueforcer ja extra eine Seite eingerichtet. Ich habe gesehen, das du auch in dem Discord “Forum” unterwegs bist. :+1:

1 „Gefällt mir“

Hoppla, habe jetzt erst mitbekommen, dass Du hier nochmal geantwortet hast. (Note to self: Notifications checken! :joy:)

Ja, im Awtrix Discord bin ich auch unterwegs. Und meine Frage nach “gestackten” Notifications rührte genau auch aus o.g. Use Case mit den Müllabfuhr-Terminen. :see_no_evil: Aber ich denke, eine Notification, die ggfs. mehr als eine Tonne nennt, ist am schlauesten.

Wie das mit dem Einreichen von Workflows bei Blueforcer geht, habe ich noch nicht geblickt. :man_shrugging:
Und ich sehe gerade, dass mein Node-Red-Workflow fürs Thema Mülltonne-ruasstellen-Erinnerung irgendwie flöten gegangen ist! :scream: => ich werde den bei Gelegenheit nochmal nachbauen und dann hier posten (und schauen, wie das bei Blueforcer geht).

Herzliche Grüße & ein schönes Wochenende
Stefan.

UPDATE:
Ich habe offenbar in letzter Zeit zu viel mit Node-Red in HA gemacht, dass ich dachte, ich hätte auch den Mülltonnen Workflow dort gebaut. Au contraire! Ich hatte den “ganz normal” direkt in HA gebaut – aber noch nicht mit dem kombinierten Text, falls am selben Tag mehrere Tonnen abgeholt werden. Hier aber schonmal in YAML Form die Automatisierung:

alias: "iCloud Kalender: Mülltonnen Reminder"
description: ""
trigger:
  - platform: calendar
    event: start
    offset: "-6:39:0"
    entity_id: calendar.mull_events_fur_ha
condition: []
action:
  - if:
      - condition: template
        value_template: "{{ trigger.calendar_event.summary is search('Gelbe Behaelter') }}"
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          payload: >-
            { "text": "Gelbe Tonne rausstellen!", "textCase": 2, "color":
            "#ffff00", "icon": "22618", "hold": true }
          topic: awtrix_2fbd70/notify
    else: []
  - if:
      - condition: template
        value_template: "{{ trigger.calendar_event.summary is search('Papierbehaelter') }}"
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          topic: awtrix_2fbd70/notify
          payload: >-
            { "text": "Papiertonne rausstellen!", "textCase": 2, "color":
            "#0000ff", "icon": "22619", "hold": true }
  - if:
      - condition: template
        value_template: "{{ trigger.calendar_event.summary is search('Restabfallbehaelter') }}"
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          topic: awtrix_2fbd70/notify
          payload: >-
            { "text": "Restmüll-Tonne rausstellen!", "textCase": 2, "color":
            "#a0a0a0", "icon": "22621", "hold": true }
  - if:
      - condition: template
        value_template: "{{ trigger.calendar_event.summary is search('Bioabfallbehaelter') }}"
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          topic: awtrix_2fbd70/notify
          payload: >-
            { "text": "Biomüll-Tonne rausstellen!", "textCase": 2, "color":
            "#40a000", "icon": "22620", "hold": true }
mode: single

Das setzt natürlich den entsprechenden Kalender voraus, darin die entsprechenden Events (mit Uhrzeit, nicht als Ganztagsevents; siehe die Diskussion oben :wink:) und diese müssen die entsprechenden Worte enthalten, nach denen in der Automatisierung Condition gesucht wird.
Die Icon IDs muss man vorher nachschlagen und auf seine Ulanzi Clock mit Awtrix Firmware speichern.

Um wirklich nur eine Notification zu bekommen, die dann ggfs. mehrere Tonnen umfasst, muss man halt jetzt noch mehr IF Fälle einbauen für die entspr. Kombinationen. Mühsam. War ich zu faul zu. :see_no_evil:

1 „Gefällt mir“

Hallo Stefan,

vielen Dank für die Rückmeldung und dein Code-Schnipsel. :+1:

Ich nutze jetzt einfach den Sensor, so wie im Blogbeitrag von Simon42.

Das funktioniert dann auch ohne Kalenderabfrage und wenn zwei Tonnen abgeholt werden, stehen sie zusammen im Sensor.

Gruß
Stefan

Hi Stefan,

kämpfe eben ein wenig damit die Daten auf der Awtrix anzuzeigen. Würdest Du eventuell Deinen Code dazu mit uns teilen? Danke schon mal… :wink:

Habe schon die aufgearbeiteten Daten. Wenn ich es richtig verstehe, kann ich den Kalender nicht auslesen, wenn es Ganztagestermine sind.

Die "Müll"daten für die Automation habe ich schon parat, brauche jetzt die Automation. Dachte Du könntest mir da eventuell weiterhelfen. MQTT ist Neuland für mich.

Was ich z. B. nicht verstehe: Im Code weiter oben wird mit “hold”: true gearbeitet. Wie kriege ich das wieder weg?

LG aus MA

Hmmm, mal sehen, ob ich Dich richtig verstehe.

Um auf der Awtrix etwas anzuzeigen, muss man entweder per MQTT oder per HTTP eine “App” (de facto einem JSON String) schicken. Das ist dann das, was oben unter payload steht. In dem Fall wird es also über den mqtt.publish Service an eins meiner Displays (das mit dem MQTT topic awtrix_2fbd70) geschickt. Hier ist es allerdings keine APP, sondern eine Notification.
Die Entwickler Doku von Awtrix kann einen da aufschlauen. :wink:

Sprich, der “Code”, um auf einem Awtrix Display eine Notification darzustellen steckt oben im Automation YAML Code in den ganzen payloads.

wird in dem angezeigten Beispiel genutzt. Außerdem habe ich es wohl so hingebogen, dass es für mich funktioniert ohne Kalender. Schauen wir mal beim nächsten Termin… :wink:

“hold” ist ja klar, die Anzeige bleibt stehen. Wie bekomme ich die dazu wieder weiter zu laufen?

Ups, selber “gefunden”: ‘awtrix/notify/dismiss’

Wie schicke ich das am elegantesten los? Mit einem Knopf oder so?

War das einfach mit dem “dismiss”… Da gibt es eine “entity” und ich schon am heftig rummurksen, aber es kann so einfach sein…

type: custom:mushroom-template-card
primary: Gehaltene Meldung löschen....
secondary: |-
  {% set awtrix_app = states( "sensor.awtrix_current_app" ) %} 
  App: "{{ awtrix_app }}"
icon: mdi:clock-digital
layout: vertical
badge_color: ''
badge_icon: ''
icon_color: green
hold_action:
  action: none
double_tap_action:
  action: none
entity: button.awtrix_dismiss_notification
tap_action:
  action: toggle
fill_container: true
card_mod:
  style: |
    {% set awtrix_app = states( 'sensor.awtrix_current_app' ) %}

    ha-card { 
      
      {% if awtrix_app == 'Notification' %}

      --ha-card-border-radius: 6px; 
      --ha-card-border-color: #990000;
      --ha-card-border-width: 1px; 
      --card-mod-icon-color: white;

      mushroom-shape-icon { 
        --shape-color: #990000 !important;
        --shape-color-disabled: none !important;}
    }   

    {% else %}

      --ha-card-border-radius: 6px; 
      --ha-card-border-color: blue;
      --ha-card-border-width: 0px; 
      --card-mod-icon-color: white;

      mushroom-shape-icon { 
        --shape-color: blue !important;
        --shape-color-disabled: none !important;}

      {% endif %}

    :host {
    --mush-icon-symbol-size: 0.8em;
    }

Sollte es jemanden interessieren, so habe ich das gemacht ohne den Kalender und nur mit dem “Waste Collection Schedule”. Noch ist das “hold” nicht drin, bin mir nicht sicher, wie ich es am elegantesten "dismiss"e!!

Danke an metawops für die obige Inspiration!!!

Noch nicht sicher was passiert, wenn Papier, Bio und Rest auf einen Tag fallen!!! Habe es mal ausprobiert. Die Meldungen “stapeln” sich dann und bei jedem “dismiss” rückt die nächste gehaltene Meldung nach!!! Ist ja irgendwie echt logisch!!! :wink:

alias: Awtrix - Mülltonnen Reminder
description: ""
trigger:
  - platform: template
    value_template: >-
      {# Get the next pickup date #}
      {% set next_pickup = states.sensor.abfallnaechster.attributes | first |
      as_timestamp |timestamp_custom("%d.%m.%Y") %}

      {# Get the next pickup date, MINUS the day #}
      {% set todays_date = now().timestamp() | timestamp_custom('%d.%m.%Y') %}

      {# Is there a pickup today, then show todays date #}
      {% if next_pickup == todays_date %}
         true
      {% else %}
         false
      {% endif %}
condition: []
action:
  - if:
      - condition: template
        value_template: >-
          {% set next_pickup = states.sensor.abfallgelbersacknext.attributes |
          first | as_timestamp |timestamp_custom("%d.%m.%Y") %}

          {% set todays_date = now().timestamp() | timestamp_custom('%d.%m.%Y')
          %}

          {% if next_pickup == todays_date %}
            true
          {% else %} 
            false
          {% endif %}  
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          payload: >-
            { "text": "Gelber Sack", "textCase": 2, "color": "#ffff00", "icon":
            "22618" }
          topic: awtrix/notify
    else: []
    enabled: true
  - if:
      - condition: template
        value_template: >-
          {% set next_pickup = states.sensor.abfallbiotonnenext.attributes |
          first | as_timestamp |timestamp_custom("%d.%m.%Y") %}

          {% set todays_date = now().timestamp() | timestamp_custom('%d.%m.%Y')
          %}

          {% if next_pickup == todays_date %}
            true
          {% else %} 
            false  
          {% endif %}  
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          topic: awtrix/notify
          payload: >-
            { "text": "Bio", "textCase": 2, "color": "#40a000", "icon": "22620"
            }
  - if:
      - condition: template
        value_template: >-
          {% set next_pickup = states.sensor.abfallrestmuellnext.attributes |
          first | as_timestamp |timestamp_custom("%d.%m.%Y") %}

          {% set todays_date = now().timestamp() | timestamp_custom('%d.%m.%Y')
          %}

          {% if next_pickup == todays_date %}
            true
          {% else %} 
            false
          {% endif %}  
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          topic: awtrix/notify
          payload: >-
            { "text": "Restmüll", "textCase": 2, "color": "#a0a0a0", "icon":
            "22621" }
    enabled: true
  - if:
      - condition: template
        value_template: >-
          {% set next_pickup = states.sensor.abfallpapiertonnenext.attributes |
          first | as_timestamp |timestamp_custom("%d.%m.%Y") %}

          {% set todays_date = now().timestamp() | timestamp_custom('%d.%m.%Y')
          %}

          {% if next_pickup == todays_date %}
            true
          {% else %} 
            false
          {% endif %}  
    then:
      - service: mqtt.publish
        data:
          qos: "0"
          retain: false
          topic: awtrix/notify
          payload: >-
            { "text": "Papier", "textCase": 2, "color": "#0000ff", "icon":
            "22619"}
    enabled: true
mode: single
1 „Gefällt mir“