142 lines
5.3 KiB
YAML
142 lines
5.3 KiB
YAML
|
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.
|
||
|
|
||
|
Inspired by awesome work of Jeeftor '
|
||
|
domain: automation
|
||
|
input:
|
||
|
awtrix:
|
||
|
name: AWTRIX Device
|
||
|
description: Select the Awtrix light
|
||
|
selector:
|
||
|
device:
|
||
|
integration: mqtt
|
||
|
manufacturer: Blueforcer
|
||
|
model: AWTRIX Light
|
||
|
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:
|
||
|
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:
|
||
|
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:
|
||
|
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
|
||
|
default: '{"light green bin":"trash_light_green","green bin":"trash_green","blue
|
||
|
bin":"trash_blue"}'
|
||
|
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 %}\n{%- set ns =
|
||
|
namespace(devices=[]) %} {%- for device_id in device_ids %}\n {%- set device=get_device_topic(device_id)|replace('
|
||
|
','') %}\n {% set ns.devices = ns.devices + [ device ~ '/custom/' ~ app_name]
|
||
|
%}\n{%- 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
|
||
|
icon: '{%- set icon_map_json = icon_map|from_json %} {{icon_map_json[state_attr(calendar,message_attr_name)]}}'
|
||
|
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: '{{ iif(now() >= state_attr(calendar,start_time_attr_name)| as_datetime
|
||
|
| default(now(), true)|as_local - timedelta(hours = hours_before), payload_internal,
|
||
|
"{}") }}'
|
||
|
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 }}'
|
||
|
payload: '{{payload}}'
|