ich versuche seit Tagen eine Automation zu erstellen die mich rechtzeitig daran erinnert meinen Müll im Büro rauszustellen.
Und zwar bei folgendem Szenario.
Montags morgen wird der Müll abgeholt, da ich am WE aber nicht im Büro bin muss ich Freitags daran erinnert werden. ABER AUCH wenn Dienstags Abholtag ist, und Montags Feiertag muss ich auch am Freitag erinnert werden. Kurz gesagt muss ich am letzten Arbeitstag VOR Müll abholung erinnert werden.
Ich nutze die Integration Waste_Collection Schedule, die mir die Abholtage im Homeassistant Kalender anzeigt.
Außerdem nutze ich das Addon für Workday Sensor, was mir einen Sensor anzeigt ob heute ein Arbeitstag ist oder nicht.
Ich habe viele verschiedene Logiken bereits ausprobiert, komme aber nicht zum gewünschten Ergebnis und hoffe das mir hier jemand weiterhelfen kann oder vielleicht schon eine solche Automation nutzt und mir diese zur Verfügung stellen kann.
Leg doch noch einen Sensor bei Arbeitstag an, mit einem Versatz von 3 Tagen. Freitags prüfst du zusätzlich, ob am Di Abholtag ist und dein neuer Arbeitstag Versatz um 3 Tage Aus ist.
Du nutzt doch Garbage Collection und kannst Dir anzeigen lassen wie viele Tage bis zur nächsten Abholung. Wenn die nächste Abholung am Freitag nicht in drei Tagen (Montag) ist, lässt Du Dich erinnern…
der Sensor gibt scheinbar nicht nur die Tage zurück.
Kann man so machen… Was ist denn wenn Montag und Dienstag Feiertag ist oder der Freitag ein Feiertag ist? - Worauf ich hinaus will ist, dass ich das alles in einer Automation haben möchte, am besten mit einer template Abfrage zu realisieren und nicht 5 verschiedene Automationen um ein Ergebnis zu bekommen.
Wie schlage sich Abwesenheitstage nieder? Urlaub, Dienstreisen etc. Öffentliche Feiertage kommen über Worksensor rein, lese ich in der Doku. Man müßte einen zentralen Abwesenheitskalender pflegen und gegen diesen prüfen.
Abwesenheitstage werden über den Workday Sensor gepflegt, also Wochenenden und gesetzliche Feiertage. Urlaub und Dienstreisen ausgenommen.
Meine Gedanken sind folgende. Ich habe mir mit dem Workday Sensor 7 Tage erstellt, also heute und dann jeweils 6 einzelne Sensoren mit jeweils ein Tag + N Versatz.
In dem Template was jeden Tag um 14Uhr läuft muss ich prüfen wieviele Tage mir der Sensor für die nächste Abholung zurück gibt, sagen wir 5 Tage. Das Template muss dann prüfen ob vor der Abholung Werktage sind. Sollte der Tag an dem geprüft wird der letzte Werktag vor der Abholung sein, muss es $true zurückgeben und ich werde Benachrichtigt. So die Theorie.
Leider scheitert es an meinen mangelnden Programmierkenntnissen.
Das paßt aus meiner Sicht weil Du mit Deinem Jinja richtigerweise abfragst
{% if 'morgen' in abhol_text | lower %}
ob das Wort “morgen” vorkommt.
Interessanter Fall weil übersehen.
Man müßte vor dem Tag einer Abwesenheit informiert werden sofern am ersten Tag nach Abwesenheit Müll abgeholt werden.
Ich muß da mal kurz drüber nachdenken, melde mich später per EDIT
Das hatte es in sich und ich mußte auch ein paar Mal probieren/korrigieren
Aut. nur wenn heute = Arbeitstag ist
wenn morgen Müll, dann Email
wenn morgen kein Müll aber frei, dann ermittle den ersten Tag nach frei und prüfe(*) ob dann Müll abgeholt wird → wenn ja, dann Email
(*) Prüfung erfolgt ob Differenz Tage zu heute in Waste Collection “in xxx Tagen” vorkommt
Ich habe etwas getestet und denke es funktioniert aber man weiß nie. Teste Du auf jeden Fall gründlicher.
alias: 1_test_forum_workday
description: >-
Prüft an einem Arbeitstag ob morgen oder nach Abwesenheit am darauffolgenden
Tag Müll abgeholt wird
und verschickt eine Email
triggers:
- trigger: time
at: "14:00:00"
conditions:
- condition: state
entity_id: binary_sensor.workday_sensor
state: "on"
actions:
- variables:
comment: Da ich kein Waste Collection habe, behelfe ich mich über eine Variable
waste_text: "in 2 Tagen: Bio"
- if:
- condition: template
value_template: "{{ 'morgen' in waste_text | lower }}"
then:
- action: notify.gmxolaf3
metadata: {}
data:
title: Müll rausbringen - Wird morgen abgeholt
message: Müll rausbringen - Wird morgen abgeholt
else:
- action: workday.check_date
metadata: {}
data:
check_date: "{{ (now() + timedelta(days=1)).date() }}"
target:
entity_id: binary_sensor.workday_sensor
response_variable: check_tomorrow
enabled: true
- action: workday.check_date
metadata: {}
data:
check_date: >
{#
Zum Testen wenn Freitag ist und Montag (in 2 Tagen) Müll abgeholt
wird
#}
{% set now = strptime('2025-08-22', '%Y-%m-%d') %}
{{ (now + timedelta(days=1)).date() }}
target:
entity_id: binary_sensor.workday_sensor
response_variable: check_tomorrow
enabled: false
- if:
- condition: template
value_template: >-
{# Der nächste Tag ist kein Arbeitstag #}
{{ not check_tomorrow['binary_sensor.workday_sensor']['workday']
}}
enabled: true
then:
- variables:
naechstenArbeitstagGefunden: false
TageBisAbholung: >-
{{ (waste_text | regex_findall('in (\\d+) tagen',
ignorecase=True))[0] | int }}
- repeat:
while:
- condition: template
value_template: >
{{ not naechstenArbeitstagGefunden and repeat.index <
TageBisAbholung }}
sequence:
- variables:
abstand_zu_heute: "{{ repeat.index + 1 }}"
datum: "{{ (now() + timedelta(days=abstand_zu_heute)).date() }}"
- action: workday.check_date
data:
check_date: "{{ datum }}"
target:
entity_id: binary_sensor.workday_sensor
response_variable: check_tag
- if:
- condition: template
value_template: >-
{{ check_tag['binary_sensor.workday_sensor']['workday']
== true }}
then:
- variables:
naechstenArbeitstagGefunden: true
- if:
- condition: template
value_template: >
{# Taucht die Zahl 'in xxx Tagen' in der nächsten
Müllabholung im waste Collection Sensor auf ? Ja =
Müll wird am ersten Arbeitstag nach Abwesenheit
abgeholt #}
{{ abstand_zu_heute | string in waste_text }}
then:
- action: notify.gmxolaf3
data:
title: >-
Müll rausbringen – Dieser wird an dem Tag abgeholt
wo Du wieder arbeitest
message: >-
Müll rausbringen – Dieser wird an dem Tag abgeholt
wo Du wieder arbeitest {{abstand_zu_heute}}
mode: single
Ich würde an deiner Stelle erstmal das Format des Müllabfuhr Sensor auf reine Zahl umstellen, dann hast nicht das “in xxx Tage” oder “morgen” sondern reine Zahlen. In den Einstellungen zum Wastecalendar im entsprechenden “Tage bis” Sensor das Format {{value.daysTo}} eintragen. Siehe Bild angehängt.
Und die Logik würde ich in einer eizelnen Automatisierung ganz “dumm” abfragen ohne Programmieren. Du musst es ja später bei Änderungen auch wieder verstehen. Logik einfach jeden Tag bis 6 Tage vorher mit “or” verbinden.
Workday_plus1 = bedeutet, Workday mit Versatz 1. Also ist morgen ein Arbeitstag. Workday_plus2 = bedeutet, Workday mit Versatz 2. Also, ist übermorgen ein Werktag.
Prüfungen jeweils mit OR verknüpft. Kann nur eines wahr werden. Wenn eines Wahr ist wird eine Aktion ausgeführt. Z.b. Benachrichtigung.
Prüfung 1: Heute Arbeitstag + morgen Abfuhr
workday_today = on UND
Abfuhr = 1 (also morgen)
Prüfung 2: Heute Arbeitstag + Morgen kein Arbeitstag + Abfuhr übermorgen
workday_today = on
UND workday_today_plus1 = off
UND Abfuhr = 2 (übermorgen)
Prüfung 3: Heute Arbeitstag, 2 freie Tage + Abfuhr “nachübermorgen”
workday_today = on
UND workday_today_plus1 = off
UND workday_today_plus2 = off
UND Abfuhr = 3 (nachübermorgen)
Mit 6 Prüfungen müsstest du alles abdecken, Heilig Abend Mittwoch, 1/2 Weihnachstfeiertage + Wochenende und Abfuhr am Montag
Habe jetzt nur 3 der 6 Prüfen eingeklopft.
alias: testtonne
description: ""
triggers:
- trigger: time
at: "14:00:00"
conditions:
- condition: or
conditions:
- condition: and
conditions:
- condition: state
entity_id: sensor.abfallbionext
state: "1"
- condition: state
entity_id: binary_sensor.wd_today
state: "on"
- condition: and
conditions:
- condition: state
entity_id: sensor.abfallbionext
state: "2"
- condition: state
entity_id: binary_sensor.wd_today_plus1
state: "off"
- condition: state
entity_id: binary_sensor.wd_today
state: "on"
- condition: and
conditions:
- condition: state
entity_id: sensor.abfallbionext
state: "3"
- condition: state
entity_id: binary_sensor.wd_today_plus2
state: "off"
- condition: state
entity_id: binary_sensor.wd_today_plus1
state: "off"
- condition: state
entity_id: binary_sensor.wd_today
state: "on"
actions:
- action: notify.notify
metadata: {}
data:
message: Tonne raus stellen
mode: single
@i4mr00t Ich finde die Lösung meines Vorredners einfacher und robuster für die Zukunft. Ich würde es an Deiner Stelle so machen.
Wenn ich gewußt hätte, daß man die Waste Collection in Zahlen wandeln lassen könnte, hätte ich meinen Ansatz noch etwas vereinfachen können. Den Vorteil meines Ansatz sehe ich in nur eine Automatisation und keine zusätzliche Helfer.
Ich prüfe nun ausgiebig ob die Automation funktioniert. - Danke erstmal, ich melde mich wieder!
@mostie Verstehe ich das richtig. Ich habe 6 verschiedene Abfallarten (Bio,Glas,Papier, etc.) und muss in der Automation zu jeder Art 6 Or-Prüfungen machen, also insgesamt 36 Prüfungen für alle Abfallarten?
Sorry für die fehlenden Infos.
Die Tage der jeweiligen Abfallarten werden mir bereits in Tagen angezeigt. Bsp: sensor.bio_abfall = 0 ← HEUTE oder sensor.gelbe_tonne = 11 ← in 11 Tagen
Nein, nicht nötig. Schau dir die Doku von Waste Calendar an. Ich habe nach Müllart getrennt automatisiert und darum hab ich Biotonne in meinem Beispiel.
Du kannst dir einen Sensor anlegen der generell die Tage bis zur nächsten Tonne ausgibt. Du darfst bei der Anlage des Sensors keine spezielle Müllart auswählen sonst schränkst du genau auf diese ein. Wenn du einen neuen Sensor anlegst der nur “{{value.daysTo}}” enthält sonst alles default müsste es das schon sein.
Zum rumspielen kannst du dir einen zweiten Waste-Calendar einrichten dann zerstörst dir deinen aktuellen nicht. Für das Beispiel unten habe ich mir eine Adresse in München rausgesucht und schnell angelegt.
Wenn du bei der Anlage eines weiteren Sensors alles default lässt bekommst du die zweite Anzeige mit z. b. “Biotonne in 3 days” welches du for notification nutzen kannst.
In der Automation würde ich dann den Sensor “days” mit den Zahlen als Bedigung ntuzen, und den Sensor “all” für den Nachricht. Du kannst natürlich auch Attribute zerlegen aber 2 separate Sensoren sind einfacher zu verstehen. Du musst aber dann mal testen wie es aussieht wenn an einem Tag 2 Tonnen geleert werden.
Ja stimmt, wenn ich einfach nur einen Sensor (days wie in deinem Beispiel) für die Tage aller Abholarten nehme reichen die Bedingungen. Danke, das macht die Automation deutlich übersichtlicher!
Für die Meldung würde ich den Vorhandenen Sensor bei mir sensor.nachste_abholung nutzen. Der kann auch zwei Müllarten anzeigen wenn beide am gleichen Tag sind. (Bsp.: “in 2 Tagen: Bio“ oder “in 2 Tagen: Bio, Papier“)
Edit: 6 Bedingungen weil du ja meintest “Mit 6 Prüfungen müsstest du alles abdecken, Heilig Abend Mittwoch, 1/2 Weihnachstfeiertage + Wochenende und Abfuhr am Montag”
Hier nochmal mein kompletter aktueller yaml-code (schon angepasst):
alias: testtonne
description: ""
triggers:
- trigger: time
at: "14:00:00"
conditions:
- condition: or
conditions:
- condition: and
conditions:
- condition: state
entity_id: sensor.tage_bis_nachste_abholung
state: "1"
- condition: state
entity_id: binary_sensor.workday_sensor
state: "on"
- condition: and
conditions:
- condition: state
entity_id: sensor.tage_bis_nachste_abholung
state: "2"
- condition: state
entity_id: binary_sensor.workday_sensor_in_1_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor
state: "on"
- condition: and
conditions:
- condition: state
entity_id: sensor.tage_bis_nachste_abholung
state: "3"
- condition: state
entity_id: binary_sensor.workday_sensor_in_2_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_1_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor
state: "on"
- condition: and
conditions:
- condition: state
entity_id: sensor.tage_bis_nachste_abholung
state: "4"
- condition: state
entity_id: binary_sensor.workday_sensor_in_3_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_2_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_1_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor
state: "on"
- condition: and
conditions:
- condition: state
entity_id: sensor.tage_bis_nachste_abholung
state: "5"
- condition: state
entity_id: binary_sensor.workday_sensor_in_4_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_3_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_2_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_1_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor
state: "on"
- condition: and
conditions:
- condition: state
entity_id: sensor.tage_bis_nachste_abholung
state: "6"
- condition: state
entity_id: binary_sensor.workday_sensor_in_5_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_4_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_3_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_2_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor_in_1_days
state: "off"
- condition: state
entity_id: binary_sensor.workday_sensor
state: "on"
actions:
- data:
message: "Erinnerung: Müllabholung {{ states('sensor.nachste_abholung') }}"
action: rest_command.send_message_to_teams_waste
mode: single