Calendar Notifier
Home Assistant Blueprint

Calendar Notifier

Automation to send notification about upcoming calendar event to your AWTRIX lite device
A flow by Brunas

Import blueprint Download blueprint

Flow Details

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

This blueprint will print notification when calendar event happens.

Google calendar integration was used for initial testing. Other calendars might work too.

Any icons can be used to describe calendar events. Upload them to AWTRIX ICONS folder and make sure your event title is mapped to them in icon map setting of your automation. I've used trash bins of various colours to remind me about need to take appropriate bin to the street :).

Sounds are also supported. Separate map should be populated to make it work. If no sounds are set, obviously no sound is triggered. Make sure configured sounds are uploaded to AWTRIX MELODIES folder. More details are here

Message is shown every 5 minutes in interval from configurable amount of hours before event start time till event start.

Sound is sent using separate topic every 5 minutes from the event start time till event end time which suggests to provide more care with event scheduling :)

Inspired by awesome work of Jeeftor

blueprint: name: AWTRIX Calendar Notifier description: "This blueprint will print notification when calendar event happens. [Google calendar integration](https://www.home-assistant.io/integrations/google) was used for initial testing. Other calendars might work too. Any icons can be used to describe calendar events. Upload them to AWTRIX ICONS folder and make sure your event title is mapped to them in icon map setting of your automation. I've used trash bins of various colours to remind me about need to take appropriate bin to the street :). Message is shown every 5 minutes in interval from configurable amount of hours before event start time till event start. Sounds are also supported. Separate map should be populated to make it work. If no sounds are set, obviously no sound is triggered. Make sure configured sounds are uploaded to AWTRIX MELODIES folder. More details are [here](https://blueforcer.github.io/awtrix3/#/sounds) Sound is sent using separate topic every 5 minutes from the event start time till event end time which suggests to provide more care with event scheduling :) Inspired by awesome work of Jeeftor " domain: automation input: awtrix: name: AWTRIX Device description: Select the Awtrix device selector: device: integration: mqtt manufacturer: Blueforcer model: AWTRIX 3 multiple: true app_name: name: Awtrix Application name description: This is the app name listed in the MQTT topic - it should be unique selector: text: multiple: false multiline: false default: calendar_notifier calendar: name: Calendar with schedule description: A calendar with schedule selector: entity: multiple: false message_attr_name: name: Name of calendar event message attribute description: This is the name of calendar event message attribute selector: text: multiple: false multiline: false default: message start_time_attr_name: name: Name of calendar event start time attribute description: This is the name of calendar event start time attribute selector: text: multiple: false multiline: false default: start_time hours_before: name: Number of Hours before Event description: Number of hours to start notify before actual event selector: number: max: 96.0 min: 0.0 unit_of_measurement: hours mode: box step: 1.0 default: 15 icon_map: name: An event message-to-icon name map description: An event message-to-icon name map in JSON format selector: text: multiline: true multiple: false default: '{"light green bin":"trash_light_green","green bin":"trash_green","blue bin":"trash_blue"}' default_icon: name: A default icon name description: A default icon name used in case when event is not defined in icon_map. Default - empty. default: "" sound_map: name: An event message-to-sound name map description: An event message-to-sound name map in JSON format selector: text: multiline: true multiple: false default: '{"light green bin":"mahna"}' default_sound: name: A default sould name description: A default sound name used in case when event is not defined in sound_map. Default - empty. default: "" duration: name: Duration (in seconds) description: Sets how long the app or notification should be displayed. default: "10" lifetime: name: Lifetime of the app (in seconds) description: Removes the custom app when there is no update after the given time in seconds. Keep this value higher than 59 seconds to get the AWTRIX app automatically deleted when disabling the automation. default: "70" push_icon: name: Icon Mode description: "Please select the pushIcon setting for the icon\n\n - `0` Icon doesn't move\n\n - `1` Icon moves with text and will not appear again\n\n \ - `2` Icon moves with text but appears again when the text starts to scroll again\n" selector: select: options: - label: Icon doesn't move (default) value: "0" - label: Icon moves with text and will not appear again value: "1" - label: Icon moves with text but appears again when the text starts to scroll again value: "2" custom_value: false multiple: false sort: false source_url: https://raw.githubusercontent.com/Brunas/HomeAssistant/master/blueprints/automation/awtrix_calendar_notifier.yaml mode: single variables: device_ids: !input awtrix app_name: !input app_name devices_topics: >- {%- macro get_device_topic(device_id) %} {{- states((device_entities(device_id) | select('search','device_topic') | list)[0]) }} {%- endmacro %} {%- set ns = namespace(devices=[]) %} {%- for device_id in device_ids %} {%- set device=get_device_topic(device_id)|replace(' ','') %} {% set ns.devices = ns.devices + [ device ] %} {%- endfor %} {{ ns.devices | reject('match','unavailable') | list}} calendar: !input calendar message_attr_name: !input message_attr_name start_time_attr_name: !input start_time_attr_name hours_before: !input hours_before icon_map: !input icon_map default_icon: !input default_icon sound_map: !input sound_map default_sound: !input default_sound icon: >- {%- set icon_map_json = icon_map|from_json %} {%if icon_map_json[state_attr(calendar,message_attr_name)] is defined %} {{icon_map_json[state_attr(calendar,message_attr_name)]}} {% else %} {{default_icon}} {% endif %} sound: >- {%- set sound_map_json = sound_map|from_json %} {%if sound_map_json[state_attr(calendar,message_attr_name)] is defined %} {{sound_map_json[state_attr(calendar,message_attr_name)]}} {% else %} {{default_sound}} {% endif %} duration: !input duration lifetime: !input lifetime push_icon: !input push_icon payload_internal: "{\"icon\":\"{{icon}}\",\n \"text\":\"{{state_attr(calendar,start_time_attr_name)}} {{state_attr(calendar,message_attr_name)}}\",\n \"pushIcon\":\"{{push_icon}}\",\n \"repeat\":1,\"textCase\":2,\"textOffset\":33,\"duration\":{{duration}},\"lifetime\":{{lifetime}}}" payload: >- {%- set event_timestamp = state_attr(calendar,start_time_attr_name)| as_datetime | default(now(), true)|as_local %} {{ iif(now() >= event_timestamp - timedelta(hours = hours_before), payload_internal, "{}") }} sound_payload: >- {%- set event_timestamp = state_attr(calendar,start_time_attr_name)| as_datetime | default(now(), true)|as_local %} {{ iif(now() >= event_timestamp - timedelta(minutes = 5), '{"sound":"' ~ sound ~ '"}', "{}") }} trigger: - platform: time_pattern minutes: /5 condition: [] action: - repeat: for_each: "{{ devices_topics }}" sequence: - service: mqtt.publish data: qos: 0 retain: false topic: "{{ repeat.item }}/custom/{{app_name}}" payload: "{{payload}}" - service: mqtt.publish data: qos: 0 retain: false topic: "{{ repeat.item }}/sound" payload: "{{sound_payload}}"
-- Flow first published on July 19, 2023, last updated on June 23, 2024 at 10:25.