Cleanup and prepping for bed presence

This commit is contained in:
CeeWeasel
2025-06-29 22:39:39 -04:00
parent 790850f397
commit 20322b2251
14 changed files with 2450 additions and 572 deletions
File diff suppressed because it is too large Load Diff
@@ -1,225 +0,0 @@
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'