mirror of
https://github.com/CeeWeasel/fresh-home.git
synced 2026-08-10 02:50:12 -04:00
226 lines
9.0 KiB
YAML
226 lines
9.0 KiB
YAML
blueprint:
|
|
name: Frigate Notification
|
|
description: "## Frigate Mobile App Notification\n\nThis blueprint will send a notification\
|
|
\ to your device when a Frigate event for the selected camera is fired. The notification\
|
|
\ will initially include the thumbnail of the detection, but will update to include\
|
|
\ actionable notifications allowing you to view the saved clip/snapshot when available,\
|
|
\ or silence the notification for a configurable amount of time.\n\nWith this\
|
|
\ blueprint, you may send the notification to multiple devices by leaving \"Device\"\
|
|
\ blank and instead use a [notification group][1].\n\n### Required entities:\n\
|
|
\ - Frigate Camera Name\n - Mobile App Device **or** the name of a Notification\
|
|
\ Group\n\n### Optional features:\n - You can limit notifications to objects\
|
|
\ entering **any** pre-defined [zones][2] in Frigate.\n - You can specify which\
|
|
\ [zones][2] to be notified about. This must be a list (e.g.):\n ```yaml\n\
|
|
\ - backyard\n ```\n - You can specify what type of [objects][3] to be\
|
|
\ notified about. This must be a list (e.g.):\n ```yaml\n - person\n \
|
|
\ - car\n ```\n - You can disable notifications if a presence entity or group\
|
|
\ is \"home\".\n - You can configure a cooldown for the camera to reduce the\
|
|
\ number of notifications when back-to-back events occur.\n - You can silence\
|
|
\ future notifications for a defined amount of time through actionable notifications.\
|
|
\ This is helpful in situations where you know you will be triggering detections\
|
|
\ for an extended period of time, like when the kids are playing outside.\n\n\
|
|
[1]: https://companion.home-assistant.io/docs/notifications/notifications-basic#sending-notifications-to-multiple-devices\n\
|
|
[2]: https://blakeblackshear.github.io/frigate/configuration/cameras#zones\n[3]:\
|
|
\ https://blakeblackshear.github.io/frigate/configuration/objects\n"
|
|
domain: automation
|
|
source_url: https://gist.github.com/hunterjm/23c1588a9f2b8b9c2a62ffc364e17f8c
|
|
input:
|
|
camera:
|
|
name: Frigate Camera
|
|
description: The name of the camera as defined in your frigate configuration.
|
|
notify_device:
|
|
name: Device
|
|
description: The device must run the official Home Assistant app to receive
|
|
notifications.
|
|
default: false
|
|
selector:
|
|
device:
|
|
integration: mobile_app
|
|
notify_group:
|
|
name: Notification Group
|
|
description: The name of the notification group to call.
|
|
default: ''
|
|
base_url:
|
|
name: (Optional) Base URL
|
|
description: 'The external url for your Home Assistant instance. This will default
|
|
to a relative URL and will open the clips in the app instead of the browser,
|
|
which may cause issues on some devices.
|
|
|
|
'
|
|
default: ''
|
|
zone_filter:
|
|
name: (Optional) Zone Filter
|
|
description: Only notify if object has entered a defined zone.
|
|
default: false
|
|
selector:
|
|
boolean: {}
|
|
zones:
|
|
name: (Optional) Trigger Zones
|
|
description: A list (-) of zones you wish to recieve notifications for.
|
|
default: []
|
|
selector:
|
|
object: {}
|
|
labels:
|
|
name: (Optional) Trigger Objects
|
|
description: A list (-) of objects you wish to recieve notifications for.
|
|
default: []
|
|
selector:
|
|
object: {}
|
|
presence_filter:
|
|
name: (Optional) Presence Filter
|
|
description: Only notify if selected presence entity is not "home".
|
|
default: ''
|
|
selector:
|
|
entity: {}
|
|
cooldown:
|
|
name: (Optional) Cooldown
|
|
description: Delay before sending another notification for this camera after
|
|
the last event.
|
|
default: 30
|
|
selector:
|
|
number:
|
|
max: 300.0
|
|
min: 0.0
|
|
unit_of_measurement: seconds
|
|
step: 1.0
|
|
mode: slider
|
|
silence_timer:
|
|
name: (Optional) Silence Notifications
|
|
description: 'How long to silence notifications for this camera when requested
|
|
as part of the actionable notification.
|
|
|
|
'
|
|
default: 30
|
|
selector:
|
|
number:
|
|
max: 300.0
|
|
min: 0.0
|
|
unit_of_measurement: minutes
|
|
step: 1.0
|
|
mode: slider
|
|
mode: single
|
|
max_exceeded: silent
|
|
trigger:
|
|
platform: mqtt
|
|
topic: frigate/events
|
|
payload: !input 'camera'
|
|
value_template: '{{ value_json[''after''][''camera''] }}'
|
|
variables:
|
|
id: '{{ trigger.payload_json[''after''][''id''] }}'
|
|
camera: '{{ trigger.payload_json[''after''][''camera''] }}'
|
|
camera_name: '{{ camera | replace(''_'', '' '') | title }}'
|
|
object: '{{ trigger.payload_json[''after''][''label''] }}'
|
|
label: '{{ object | title }}'
|
|
entered_zones: '{{ trigger.payload_json[''after''][''entered_zones''] }}'
|
|
type: '{{ trigger.payload_json[''type''] }}'
|
|
base_url: !input 'base_url'
|
|
group_target: !input 'notify_group'
|
|
zone_only: !input 'zone_filter'
|
|
input_zones: !input 'zones'
|
|
zones: '{{ input_zones | list }}'
|
|
input_labels: !input 'labels'
|
|
labels: '{{ input_labels | list }}'
|
|
presence_entity: !input 'presence_filter'
|
|
condition:
|
|
- '{{ type != ''end'' }}'
|
|
- '{{ not zone_only or entered_zones|length > 0 }}'
|
|
- '{{ not zones|length or zones|select(''in'', entered_zones)|list|length > 0 }}'
|
|
- '{{ not labels|length or object in labels }}'
|
|
- '{{ not presence_entity or not is_state(presence_entity, ''home'') }}'
|
|
action:
|
|
- choose:
|
|
- conditions: '{{ not group_target }}'
|
|
sequence:
|
|
- device_id: !input 'notify_device'
|
|
domain: mobile_app
|
|
type: notify
|
|
message: A {{ label }} was detected on the {{ camera_name }} camera.
|
|
data:
|
|
tag: '{{ id }}'
|
|
group: frigate-notification-{{ camera }}
|
|
image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android
|
|
attachment:
|
|
url: /api/frigate/notifications/{{id}}/thumbnail.jpg
|
|
default:
|
|
- service: notify.{{ group_target }}
|
|
data:
|
|
message: A {{ label }} was detected on the {{ camera_name }} camera.
|
|
data:
|
|
tag: '{{ id }}'
|
|
group: frigate-notification-{{ camera }}
|
|
image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android
|
|
attachment:
|
|
url: /api/frigate/notifications/{{id}}/thumbnail.jpg
|
|
- repeat:
|
|
sequence:
|
|
- wait_for_trigger:
|
|
- platform: mqtt
|
|
topic: frigate/events
|
|
payload: '{{ id }}'
|
|
value_template: '{{ value_json[''after''][''id''] }}'
|
|
timeout:
|
|
minutes: 2
|
|
continue_on_timeout: false
|
|
- condition: template
|
|
value_template: '{{ wait.trigger.payload_json[''type''] == ''end'' }}'
|
|
- choose:
|
|
- conditions: '{{ not group_target }}'
|
|
sequence:
|
|
- device_id: !input 'notify_device'
|
|
domain: mobile_app
|
|
type: notify
|
|
message: A {{ label }} was detected on the {{ camera_name }} camera.
|
|
data:
|
|
tag: '{{ id }}'
|
|
group: frigate-notification-{{ camera }}
|
|
url: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4'
|
|
clickAction: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4'
|
|
image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android
|
|
sound: none
|
|
attachment:
|
|
url: /api/frigate/notifications/{{id}}/thumbnail.jpg
|
|
actions:
|
|
- action: URI
|
|
title: View Clip
|
|
uri: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4'
|
|
- action: URI
|
|
title: View Snapshot
|
|
uri: '{{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg'
|
|
- action: silence-{{ camera }}
|
|
title: Silence Notifications
|
|
destructive: true
|
|
default:
|
|
- service: notify.{{ group_target }}
|
|
data:
|
|
message: A {{ label }} was detected on the {{ camera_name }} camera.
|
|
data:
|
|
tag: '{{ id }}'
|
|
group: frigate-notification-{{ camera }}
|
|
url: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4'
|
|
clickAction: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4'
|
|
image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android
|
|
sound: none
|
|
attachment:
|
|
url: /api/frigate/notifications/{{id}}/thumbnail.jpg
|
|
actions:
|
|
- action: URI
|
|
title: View Clip
|
|
uri: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4'
|
|
- action: URI
|
|
title: View Snapshot
|
|
uri: '{{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg'
|
|
- action: silence-{{ camera }}
|
|
title: Silence Notifications
|
|
destructive: true
|
|
until: '{{ wait.trigger.payload_json[''type''] == ''end'' }}'
|
|
- wait_for_trigger:
|
|
- platform: event
|
|
event_type: mobile_app_notification_action
|
|
event_data:
|
|
action: silence-{{ camera }}
|
|
timeout:
|
|
seconds: !input 'cooldown'
|
|
continue_on_timeout: false
|
|
- delay:
|
|
minutes: !input 'silence_timer'
|