Easy to create actionable notifications with a timeout feature.
Simple script blueprint, to be used with other automations or scripts.
Compatible with iOS and Android.
Notes:
Use at your own risk, no guarantees provided; it’s my first publicly shared blueprint.
Instructions and explanations are provided for each input.
Requirements:
Home Assistant 2023.11.0 or newer
iOS: Home Assistant Companion 2023.4 or newer
Android: Home Assistant Companion 2023.8.2 or newer
How To Use:
TL;DR
Create a notification script from this blueprint, then call the created notification script from other automations/scripts.
This blueprint is a script that makes configuration of notifications easier.
It is meant to be paired with a separate automation or script of your choosing.
Show/Hide: How to create a notification script
Import this blueprint using the Import Blueprint links.
Navigate to your blueprints dashboard:
Create a new script using the blueprint you’ve just imported by clicking on it:
Give your new script a meaningful name, and configure your required features.
Quick Example:
Name: “My Test Notification”
Device to notify: “My iPhone”
Message: “This is a test notification!”
Click on Save Script to ensure your new script is created. Once your script has been created and saved, the Save Script button should slide out of your screen.
Optionally configure the other options based on your requirements.
Show/Hide: How to use this notification script from other automations or scripts
Ensure that you have a working script that has already been configured.
If you need help on creating your script, refer to the collapsible section above.
Navigate to the automation or script that will trigger your notification.
In the following examples, an empty automation will be used as a guide, feel free to tweak as required.
Add an action, this action can be nested in other conditional actions if required, as per normal automation or script behaviour.
Test that your automation successfully sends the notification by running it manually.
Similar to testing your notification script, you can run the automation actions manually without having any triggers or conditions checked.
The actions can be run manually via the dropdown menu, on the top right of the configuration page.
Experimental variants are versions spun off to support specifically requested features.
These variants may or may not be merged to the main branch
These variants might affect stability of other core features.
Added: ⌛️ Enable Timeout Action(s) option and field.
Notes:
When enabling boolean fields with value of false, be sure to toggle them to true once, and then to false.
There seems to be a bug where the boolean value is not passed if it’s enabled and value is false without the toggle.
If you rely on 📲 Service to notify, do not upgrade, Version 1.6.1 will be the last version supporting that feature.
Fixed: Missing default values for a couple of inputs
Updated: Input description style
Known Issues:
iOS Notifications do not respect Clear after Timeout, issue since version 1.3, slated for fix in version 1.4 (Mid July)
Scripts created from blueprint always defaults to mode: single, bug raised with Home Assistant and fixed, hopefully this will be resolved in future releases.
Update your instances manually if you’re facing any issues with sending multiple notifications within your timeout duration.
Only feature I would like to see is the ability to notify a group of mobile devices instead of one individual. It’s not a big deal to set up 2 scripts for myself and my wife, but it would be slightly easier to be able to use a notify group.
Thanks! I love the timeout feature.
Edit: I modified and created my own version based off of this. I added the ability to choose a notify service in order to send the same notification to my notifcation groups. I also added a notification icon and icon color (Android only)
blueprint:
name: My Notifications
description: Forked from v1.1 of https://github.com/samuelthng/t-house-blueprints/blob/main/notifications.yaml
domain: script
input:
notify_device:
name: "Notify service (use 'notify.*'. Create a group for multiple)"
description: Device needs to run the official Home Assistant app to receive
notifications.
selector:
text:
type: search
title:
name: "Title"
description: The notification title.
default: ''
selector:
text: {}
message:
name: "Message"
description: The notification message body
selector:
text: {}
icon:
name: "Icon (Android Only)"
selector:
icon: {}
icon_color:
name: "Icon Color (Android Only, hex or color name)"
selector:
text: {}
confirm_text:
name: Confirmation Text
description: Text to show on the confirmation button
default: Confirm
selector:
text: {}
confirm_action:
name: Confirmation Action
description: Action to run when notification is confirmed
default: []
selector:
action: {}
dismiss_text:
name: Dismiss Text
description: Text to show on the dismiss button
default: Dismiss
selector:
text: {}
dismiss_action:
name: Dismiss Action
description: Action to run when notification is dismissed
default: []
selector:
action: {}
timeout:
name: Timeout Duration
description: Amount of time to wait for a confirm/dismiss response before firing
timeout action.
selector:
duration:
enable_day: false
timeout_action:
name: Timeout Action
description: Action to run when notification response is timed out.
default: []
selector:
action: {}
tag:
name: Tag
description: Used for unique identification of the notification. Must not use underscores.
selector:
text: {}
clear_on_timeout:
name: "Clear notification on timeout - ⚠️ Tag Required"
description: Dismiss the notification after action selection times out.
default: leave_notification
selector:
boolean: {}
persist:
name: "(Android Only) Persistent Notification - ⚠️ Tag Required"
description: Ensures that notification cannot be dismissed by swiping away.
default: false
selector:
boolean: {}
channel:
name: (Android Only) Notification Channel
description: Defines the channel, to be used with Importance. Relates to the
importance of the notification.
default: General
selector:
select:
options:
- label: General
value: General
- label: Alarm
value: Alarm
- label: Brewery
value: Brewery
- label: Door
value: Door
multiple: false
custom_value: true
importance:
name: (Android Only) Notification Channel Importance
description: https://companion.home-assistant.io/docs/notifications/notifications-basic/#notification-channel-importance
default: default
selector:
select:
options:
- label: Urgent (Makes a sound with heads-up notification)
value: high
- label: Default (Makes a sound)
value: default
- label: Silent (Makes no sound)
value: low
- label: Low (Makes no sound, doesn't appear in status bar)
value: min
multiple: false
custom_value: false
interruption_level:
name: (IOS Only) Interruption Level
description: https://companion.home-assistant.io/docs/notifications/notifications-basic/#interruption-level
default: active
selector:
select:
options:
- label: Silent (Makes no sound, does not wake screen)
value: passive
- label: Default
value: active
- label: Important (Overrides Focus)
value: time-sensitive
- label: Critical (Overrides Focus and Mute, restricted features)
value: critical
multiple: false
custom_value: false
mode: restart
sequence:
- alias: Set up variables
variables:
action_confirm: '{{ ''CONFIRM_'' ~ context.id }}'
action_dismiss: '{{ ''DISMISS_'' ~ context.id }}'
clear_on_timeout: !input clear_on_timeout
persist: !input persist
- alias: Send notification
service: !input notify_device
data:
title: !input title
message: !input message
data:
actions:
- action: '{{ action_confirm }}'
title: !input confirm_text
- action: '{{ action_dismiss }}'
title: !input dismiss_text
tag: !input tag
notification_icon: !input icon
color: !input icon_color
persistent: !input persist
timeout: !input timeout
channel: !input channel
importance: !input importance
push:
interruption-level: !input interruption_level
- alias: Awaiting response
wait_for_trigger:
- platform: event
event_type: mobile_app_notification_action
event_data:
action: '{{ action_confirm }}'
- platform: event
event_type: mobile_app_notification_action
event_data:
action: '{{ action_dismiss }}'
timeout: !input timeout
continue_on_timeout: true
- choose:
- conditions: '{{ wait.trigger.event.data.action == action_confirm }}'
sequence: !input confirm_action
- conditions: '{{ wait.trigger.event.data.action == action_dismiss }}'
sequence: !input dismiss_action
- conditions: '{{ wait.trigger == none }}'
sequence: !input timeout_action
- if:
- alias: Clear Notification Enabled
condition: template
value_template: '{{ clear_on_timeout == true }}'
then:
- alias: Send notification
service: !input notify_device
data:
message: "clear_notification"
data:
tag: !input tag
@ablyes this is just a script that you need to call from something else. So in your case, create an automation with triggers for garage door state open for 2 hours and another trigger for after 10pm with condition garage door open. Then in the action, you would simply call this script that you created and saved.
Thank you for sharing your changes! Have added a link to your comment under the forks subheader, and will review the changes to be added in future versions!
P.S. may take awhile, got a bad case of COVID , will do testing and changes after I’m back.
Sounds good! I’m certainly no power user, so I’m sure it could be done better.
Another frustration I have that I don’t see a way to fix is the timeout function.
If you don’t clear the notification on timeout, the action buttons no longer work. But a timeout is required, so you either have to set a very long timeout (for example 24 hours) and don’t clear the notification, or you have to use a timeout action.
I think the answer for me is going to be create a blueprint without the timeout functionality for when I don’t need it, but I was curious of your thoughts.
Edit: For now I’ve created another blueprint without any timeout functions. I’m sure there’s a way to set a variable to either use or not use the timeout function if it’s set, but I don’t have the know-how to do that!
That’s a good point that I did not face in my use case.
I’ll have to do some digging into the docs to see if we can use some data payloads when triggering the script.
It’s a great suggestion and valid use case, I’ll add that to the list of things to think about!
Maybe just to help me understand better, could you go into a little more detail for your use case? The ideal flow you’re expecting the script to be capable of, and the context would be helpful!
@samuelthng I have a few other ideas I’d like to see about implementing. Namely a clickAction so that if you tap on the notification it opens a URL/navigates to a specific spot in the app.
It’s a simple call under data, in the same spot as the icon and color. Unfortunately, it’s named clickAction for Android, and just url for iPhone… so there’s probably not a good way to implement this universally and easily.
I had a weird case today where the timeout occurred when my phone was without reception. It did not receive the clear_notification notification from the automation timing out, so the notification remained even though the script had already timed out.
It might be a bit cleaner to include the following in the notification itself if timeout is enabled. That way the app on the phone removes the notification instead of relying on home assistant to send a clear_notification to the device. This is also under data: in the notification setup and would only be set if clear_on_timeout and timeout_duration are both set.
timeout: 600 # How many seconds the notification should be received by the device
I’ve had a few different blueprints for notifications and this has quickly become my favorite by far!
Again, thanks to joe.cole1 for the insights in this minor release.
Also, thanks to RemyyB for identifying the incorrect variable and raising a PR.
Sorry to everyone for taking a week to fix this. 🙇🏻♂️
( Color picker is easy enough to configure, so it shouldn’t be absolutely breaking to warrant a major)