Get garbage notifications from up to 4 sensors. You will receive 1 notification with the friendly names of the sensors (comma separated) that have a matching date. The sensors date format is configurable. Works out of the box with integrations like TwenteMilieu or the afvalbeheer integration on HACS but can even be used for anything else that needs reminder notifications based on sensors with a date as state value.
A date offset, combined with an input for notification time is added so you can be notified on the garbage collection date (0) or any amount of days before.
I added a text input for the notifier so you can use all notification channels. Currently you have to select a value for all 4 sensors because there is no user friendly solution for this at the moment until there are multiselect entity inputs. As a workaround set the value to a sensor that has a non-date type string value when you have less than 4 sensors.
Blueprint
Click the badge to import this Blueprint: (needs Home Assistant Core 2021.3 or higher)
Or import this Blueprint by using the forum topic URL:
blueprint:
name: Garbage reminder
domain: automation
input:
reminder_time:
name: Reminder time
description: At what time the day before do you want to be reminded
default: '18:00:00'
selector:
time: {}
day_offset:
name: Day offset
description: Amount of days to be added to the triggers date to check for sensor
value matches. E.g. 1 to be notified the day before or 0 for notification
on the garbage collection day.
default: 1
date_format:
name: Date format
description: Valid strftime date format. Default %Y-%m-%d
default: '%Y-%m-%d'
reminder_title:
name: Reminder title
description: Shown as title in the notification
default: Garbage reminder
reminder_message:
name: Reminder message
description: Accompanying text in the notification
default: 'The following garbage will be picked up tomorrow: '
notifier:
name: Notifier
description: Name of integration you prefer to use for notifications. E.g. notify.notify
default: notify.notify
garbage_sensor_1:
name: Garbage sensor 1
description: Sensor should be a date string formatted according to the date format input
default: ''
selector:
entity:
domain: sensor
garbage_sensor_2:
name: Garbage sensor 2
description: Sensor should be a date string formatted according to the date format input
default: ''
selector:
entity:
domain: sensor
garbage_sensor_3:
name: Garbage sensor 3
description: Sensor should be a date string formatted according to the date format input
default: ''
selector:
entity:
domain: sensor
garbage_sensor_4:
name: Garbage sensor 4
description: Sensor should be a date string formatted according to the date format input
default: ''
selector:
entity:
domain: sensor
variables:
garbage_sensor_1: !input 'garbage_sensor_1'
garbage_sensor_2: !input 'garbage_sensor_2'
garbage_sensor_3: !input 'garbage_sensor_3'
garbage_sensor_4: !input 'garbage_sensor_4'
reminder_title: !input 'reminder_title'
reminder_message: !input 'reminder_message'
day_offset: !input 'day_offset'
date_format: !input 'date_format'
sensors_tomorrow: '{{ [(state_attr(garbage_sensor_1, ''friendly_name''), states(garbage_sensor_1)), (state_attr(garbage_sensor_2, ''friendly_name''), states(garbage_sensor_2)), (state_attr(garbage_sensor_3, ''friendly_name''), states(garbage_sensor_3)), (state_attr(garbage_sensor_4, ''friendly_name''), states(garbage_sensor_4))] | selectattr(''1'', ''eq'', (now() + timedelta(days = day_offset | int)).strftime(date_format)) | join('', '', attribute=0) }}'
trigger:
platform: time
at: !input 'reminder_time'
condition:
condition: template
value_template: "{{ sensors_tomorrow != '' }}"
action:
service: !input 'notifier'
data:
title: '{{ reminder_title }}'
message: '{{ reminder_message }}{{ sensors_tomorrow }}'
Great that you created a blueprint for this. I use the Twentemilieu integration myself so could use it out-of-the-box.
In the blueprint it says the following:
Amount of days to be added to the triggers date to check for sensor value matches. E.g. 1 to be notified the day before or 0 for notification on the garbage collection day.
I just don’t see this reflected anywhere in the blueprint and if I make it an automation I get a message every day at the set time. Am i missing something or is there a trigger option missing?
The sensors are fed from a garbage collection integration that fetches the collection dates for various types of garbage from an API. So no hardware sensors here to measure amounts of garbage etc.
I installed this Blueprint and set it up correctly… I can receive notifications correctly, however it doesn’t pass the sensor name into the message. It just shows "The following garbage will be picked up tomorrow: " I’ve tried adding all 4 sensors, and also confirmed the date format is the same in the Garbage Collection integration as it is in this blueprint ( %d-%b-%Y ).
As a quick test, I changed the Garbage Collection - Collection Days to all 7 days and re-ran it, but it still isn’t showing a sensor name in the push notification. I’m assuming this is a bug, but I just wanted to check if this is working for anyone else?
Thanks for replying. It does not. The only attributes I see are Next Date, Days, Last Collection, Last Updates and Holidays.
I’d be okay with manually setting a friendly_name in the blueprint config, if that’s an option, even if it doesn’t pull a friendly name from the actual sensor.
I modified the blueprint provided above specifically for the HACS garbage collection addin as the above code was not working properly and kept sending empty notices. You can review/add the code from here: GarbageCollection.yaml (github.com)
This specific blueprint looks at all sensors generated by the Garbage Collection addin and checks for sensors with a “days until” value equal to what you define in the in the template and then sends out notification at the time specified, but only if there is actually values returned (hence fixing the issue of blank notifications. Hopefully this helps anyone leveraging that add in who had a similar issue with the original version of this blueprint.
Big thanks to @westenberg for the original code that made this update possible!