Forked from McDAlexander/actionable_notifications_for_android_with_cam.yaml
Last active
February 19, 2025 15:20
-
-
Save fbloemhof/ff49666ed960df4ddcefc06601fa00be to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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