Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save fbloemhof/ff49666ed960df4ddcefc06601fa00be to your computer and use it in GitHub Desktop.
Save fbloemhof/ff49666ed960df4ddcefc06601fa00be to your computer and use it in GitHub Desktop.
blueprint:
name: Send actionable notifications for Android with Camera Snapshot
description: "# Send actionable notifications to an Android device.
Customized from vorion's blueprint. \n\n
## Changes:
- Added support for notification icon, channel and tag.\n
- Added support for additional actions to execute directly.\n
- Remove notify_device integration requirement to allow notify groups to be used.\n
- Removed trigger_entity domain input_boolean requirement. \n
- Removed reset of input_boolean from actions. (For use in detecting doorbell rings from sensor)\n
- Added camera snapshot for doorbell capture (required).\n
\n\n
For each action, you can open an URL, an application on the device or load a lovelace view/dashboard.\n\n
- If you plan to use a lovelace view the format would be /lovelace/test where test is replaced by your defined path in the defined view.\n
- If you plan to use a lovelace dashboard the format would be /lovelace-dashboard/view where /lovelace-dashboard/ is replaced by your defined dashboard URL and view is replaced by the defined path within that dashboard.\n
- To pick the application to open, prefix app:// to the the package name.\n
- If the device does not have the application installed then the Home Assistant application will open to the default page.\n
- If you define an action and an URI for a button, URI will take precedence over action.\n
"
domain: automation
input:
notify_device:
name: Device to notify
description:
Device or group of devices for notification through mobile_app notification service. For example
`notify.mobile_app_iphone`, `notify.all_devices`, `notify.notify`
selector:
text:
type: search
trigger_entity:
name: Trigger entity
description: Send the notification when this boolean turns on
selector:
entity:
doorbell_cam:
name: Camera
description: The Camera from wich take photo for notification.
selector:
entity:
filter:
- domain: camera
notification_title:
name: Notification title (Optional)
description: The title of the notification
default: ""
notification_message:
name: Notification message (Optional)
description: The message of the notification
default: ""
persistent_notification:
name: Create persistent notification?
description: Persistent notifications cannot be dimissed by swiping away
default: false
selector:
boolean:
notification_channel:
name: Notification channel (Optional)
description: The channel of the notification (e.g. `alarm_stream`)
default: ""
notification_tag:
name: Notification tag (Optional)
description: The tag of the notification
default: ""
notification_icon:
name: Notification icon (Optional)
description: The icon of the notification
default: ""
selector:
icon:
# Direct Action
direct_action:
name: Additional action
description: Action to run when the automation is triggered
default: []
selector:
action: {}
# Action 1
action_1_title:
name: First action name
description: Name of the first button
default: ""
action_1_uri:
name: URI for action 1 (Optional)
description: Optional URI for the first action
default: ""
first_action:
name: Action 1
description: "Action to run when the first action is clicked"
default: []
selector:
action:
# Action 2
action_2_title:
name: Second action name
description: Name of the second button
default: ""
action_2_uri:
name: URI for action 2 (Optional)
description: Optional URI for the second action
default: ""
second_action:
name: Action 2
description: Action to run when the second action is clicked"
default: []
selector:
action:
# Action 3
action_3_title:
name: Third action name
description: Name of the third button
default: ""
action_3_uri:
name: URI for action 3 (Optional)
description: Optional URI for the third action
default: ""
third_action:
name: Action 3
description: "Action to run when the third action is clicked"
default: []
selector:
action:
mode: restart
max_exceeded: silent
variables:
notify_device: !input notify_device
trigger_entity: !input trigger_entity
doorbell_cam: !input doorbell_cam
notification_title: !input notification_title
notification_message: !input notification_message
notification_icon: !input notification_icon
notification_channel: !input notification_channel
notification_tag: !input notification_tag
persistent_notification: !input persistent_notification
direct_action: !input direct_action
action_1_title: !input action_1_title
action_1_uri: !input action_1_uri
first_action: !input first_action
action_2_title: !input action_2_title
action_2_uri: !input action_2_uri
second_action: !input second_action
action_3_title: !input action_3_title
action_3_uri: !input action_3_uri
third_action: !input third_action
image_file: '/local/doorbell/{{ expand(trigger_entity)[0].last_changed | as_timestamp | timestamp_custom("%Y-%m-%d_%H-%M-%S") }}.jpg'
triggers:
- trigger: state
entity_id: !input trigger_entity
from: "off"
to: "on"
actions:
# Create camera snapshot
- data_template:
entity_id: !input doorbell_cam
filename:
/config/www/doorbell/{{ expand(trigger_entity)[0].last_changed | as_timestamp |
timestamp_custom("%Y-%m-%d_%H-%M-%S") }}.jpg
action: camera.snapshot
- parallel:
# Send actionable notification
- service: !input notify_device
data:
title: "{{ notification_title }}"
message: "{{ notification_message }}"
data:
tag: "{{ notification_tag }}"
persistent: "{{ persistent_notification }}"
notification_icon: "{{ notification_icon }}"
channel: "{{ notification_channel }}"
image: "{{ image_file }}"
ttl: 0
priority: high
actions: >
{% set titles = [action_1_title, action_2_title, action_3_title] %}
{% set uris = [action_1_uri, action_2_uri, action_3_uri] %}
{% set actions = namespace(data = []) %}
{% for title in titles %}
{% if title|length %}
{% set uri = uris[loop.index - 1] %}
{% set action_name = "action" + loop.index|string %}
{% set action = {
"action": "URI" if uri|length else action_name,
"title": title,
"uri": uri
}
%}
{% set actions.data = actions.data + [action] %}
{% endif %}
{% endfor %}
{{ actions.data }}
- alias: direct_action
choose:
- conditions:
- "{{ direct_action | length > 0 }}"
sequence: !input direct_action
# Wait for the user to select an action
- wait_for_trigger:
trigger: event
event_type: mobile_app_notification_action
# Do the action that the user selected
- choose:
- conditions: "{{ wait.trigger.event.data.action == 'action1' }}"
sequence: !input first_action
- conditions: "{{ wait.trigger.event.data.action == 'action2' }}"
sequence: !input second_action
- conditions: "{{ wait.trigger.event.data.action == 'action3' }}"
sequence: !input third_action
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment