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.