Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Notifications of Frigate detections #334

Draft
wants to merge 33 commits into
base: master
Choose a base branch
from
Draft
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f267af3
Basic notification by email
kylegordon Nov 10, 2021
01d2cb9
Fix missing newline
kylegordon Nov 10, 2021
92181d6
Merge branch 'master' into frigate-notifications
kylegordon Nov 19, 2021
7dc4638
Merge branch 'master' into frigate-notifications
kylegordon Nov 19, 2021
0bc99df
Merge branch 'master' into frigate-notifications
kylegordon Nov 20, 2021
36129c5
Rename
kylegordon Nov 21, 2021
576b384
Not in a package
kylegordon Nov 21, 2021
869fe7f
More fix
kylegordon Nov 21, 2021
e844fe1
Better subject, message, and dump trigger payload
kylegordon Nov 22, 2021
88aa88c
Fix quotes
kylegordon Nov 22, 2021
1ad8aa9
Merge branch 'master' into frigate-notifications
kylegordon Nov 28, 2021
837de74
Use snapshots
kylegordon Dec 3, 2021
0aaf916
Merge branch 'frigate-notifications' of github.com:kylegordon/home-as…
kylegordon Dec 3, 2021
61e13b8
Merge branch 'master' into frigate-notifications
kylegordon Dec 31, 2021
21e6f04
Update frigate integration
kylegordon Jan 31, 2022
77280ae
Merge branch 'frigate-notifications' of github.com:kylegordon/home-as…
kylegordon Jan 31, 2022
d7ab6b7
Merge branch 'master' into frigate-notifications
kylegordon Jan 31, 2022
5e79e37
Fix merge
kylegordon Feb 9, 2022
8568143
Merge branch 'master' into frigate-notifications
kylegordon Feb 9, 2022
231d742
First copypasta
kylegordon Feb 13, 2022
63d8679
Merge branch 'master' into frigate-notifications
kylegordon Feb 16, 2022
7b0ab63
Merge branch 'master' into frigate-notifications
kylegordon Apr 3, 2022
b52f405
Merge branch 'master' into frigate-notifications
kylegordon May 20, 2022
82f8aac
Improve remarklint
kylegordon May 20, 2022
5c1a191
Merge branch 'master' into frigate-notifications
kylegordon May 22, 2022
15e23dd
Merge branch 'master' into frigate-notifications
kylegordon May 22, 2022
dbd7d02
Merge branch 'master' into frigate-notifications
kylegordon May 24, 2022
7d3f6dc
Merge branch 'master' into frigate-notifications
kylegordon Jun 4, 2022
ae219e4
Merge branch 'master' into frigate-notifications
kylegordon Jul 1, 2022
2e10261
Merge branch 'master' into frigate-notifications
kylegordon Feb 2, 2023
d2c2386
Merge branch 'master' into frigate-notifications
kylegordon Oct 10, 2023
cdd86bf
Merge branch 'master' into frigate-notifications
kylegordon Feb 11, 2024
6193b88
Merge branch 'master' into frigate-notifications
kylegordon Feb 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
152 changes: 152 additions & 0 deletions automation/frigate_notifications.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
---
alias: Frigate detection email
trigger:
platform: mqtt
topic: frigate/events
payload: camera.driveway
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' # Android
attachment: # iOS
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' # Android
attachment: # iOS
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' # iOS
clickAction: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' # Android
image: '/api/frigate/notifications/{{id}}/thumbnail.jpg?format=android' # Android
sound: none
attachment: # iOS
url: '/api/frigate/notifications/{{id}}/thumbnail.jpg'
# lazy: true
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' # iOS
clickAction: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' # Android
image: '/api/frigate/notifications/{{id}}/thumbnail.jpg?format=android' # Android
sound: none
attachment: # iOS
url: '/api/frigate/notifications/{{id}}/thumbnail.jpg'
# lazy: true
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

# action:
# # https://github.com/stmrocket/Home-Assistant-Config/blob/9cc4001397ca81f39e76157d5054a0a88916a66a/automation/cctv.yaml
# - service: camera.snapshot
# data:
# entity_id: camera.driveway
# filename: /config/www/cctv/driveway_full.jpg
# - service: camera.snapshot
# data:
# entity_id: camera.front_door
# filename: /config/www/cctv/front_door_full.jpg
# - service: notify.email_kyle
# data_template:
# title: '{{trigger.payload_json["after"]["label"]}} detected on camera'
# message: 'A {{trigger.payload_json["after"]["label"]}} was detected.
# --------------------------------------------------------------------------------
# {{trigger.payload_json}}'
# data:
# image: 'http://viewpoint.house:8123/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android'
# tag: '{{trigger.payload_json["after"]["id"]}}'
# when: '{{trigger.payload_json["after"]["start_time"]|int}}'
# data:
# images:
# - /config/www/cctv/driveway_full.jpg
# - /config/www/cctv/front_door_full.jpg