diff --git a/docs/docs/guides/ha_notifications.md b/docs/docs/guides/ha_notifications.md new file mode 100644 index 000000000..9013cad40 --- /dev/null +++ b/docs/docs/guides/ha_notifications.md @@ -0,0 +1,56 @@ +--- +id: ha_notifications +title: Home Assistant Notifications +--- + +The best way to get started with notifications for Frigate is to use the [Blueprint](https://community.home-assistant.io/t/frigate-mobile-app-notifications/311091). You can use the yaml generated from the Blueprint as a starting point and customize from there. + +It is generally recommended to trigger notifications based on the `frigate/events` mqtt topic. This provides the event_id needed to fetch [thumbnails/snapshots/clips](/integrations/home-assistant#notification-api) and other useful information to customize when and where you want to receive alerts. The data is published in the form of a change feed, which means you can reference the "previous state" of the object in the `before` section and the "current state" of the object in the `after` section. You can see an example [here](/integrations/mqtt#frigateevents). + +Here is a simple example of a notification automation of events which will update the existing notification for each change. This means the image you see in the notification will update as frigate finds a "better" image. + +```yaml +automation: + - alias: Notify of events + trigger: + platform: mqtt + topic: frigate/events + action: + - service: notify.mobile_app_pixel_3 + data_template: + message: 'A {{trigger.payload_json["after"]["label"]}} was detected.' + data: + image: 'https://your.public.hass.address.com/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}}' +``` + +## Conditions + +Conditions with the `before` and `after` values allow a high degree of customization for automations. + +When a person enters a zone named yard + +```yaml +condition: + - "{{ trigger.payload_json['after']['label'] == 'person' }}" + - "{{ 'yard' in trigger.payload_json['after']['entered_zones'] }}" +``` + +When a person leaves a zone named yard + +```yaml +condition: + - "{{ trigger.payload_json['after']['label'] == 'person' }}" + - "{{ 'yard' in trigger.payload_json['before']['current_zones'] }}" + - "{{ not 'yard' in trigger.payload_json['after']['current_zones'] }}" +``` + +Notify for dogs in the front with a high top score + +```yaml +condition: + - "{{ trigger.payload_json['after']['label'] == 'dog' }}" + - "{{ trigger.payload_json['after']['camera'] == 'front' }}" + - "{{ trigger.payload_json['after']['top_score'] > 0.98 }}" +``` diff --git a/docs/docs/integrations/home-assistant.md b/docs/docs/integrations/home-assistant.md index 6de583423..165eef1c4 100644 --- a/docs/docs/integrations/home-assistant.md +++ b/docs/docs/integrations/home-assistant.md @@ -1,7 +1,6 @@ --- id: home-assistant -title: Integration with Home Assistant -sidebar_label: Home Assistant +title: Home Assistant Integration --- The best way to integrate with Home Assistant is to use the [official integration](https://github.com/blakeblackshear/frigate-hass-integration). @@ -77,131 +76,34 @@ Home Assistant > Configuration > Integrations > Frigate > Options The integration provides: -- Rich UI with thumbnails for browsing event recordings -- Rich UI for browsing 24/7 recordings by month, day, camera, time +- Browsing event recordings with thumbnails +- Browsing snapshots +- Browsing recordings by month, day, camera, time This is accessible via "Media Browser" on the left menu panel in Home Assistant. -## API +## Notification API -- Notification API with public facing endpoints for images in notifications +Many people do not want to expose Frigate to the web, so the integration creates some public API endpoints that can be used for notifications. -### Notifications - -Frigate publishes event information in the form of a change feed via MQTT. This -allows lots of customization for notifications to meet your needs. Event changes -are published with `before` and `after` information as shown -[here](#frigateevents). Note that some people may not want to expose frigate to -the web, so you can leverage the HA API that frigate custom_integration ties -into (which is exposed to the web, and thus can be used for mobile notifications -etc): - -To load an image taken by frigate from Home Assistants API see below: +To load a thumbnail for an event: ``` https://HA_URL/api/frigate/notifications//thumbnail.jpg ``` -To load a video clip taken by frigate from Home Assistants API : +To load a snapshot for an event: ``` -https://HA_URL/api/frigate/notifications///clip.mp4 +https://HA_URL/api/frigate/notifications//snapshot.jpg ``` -Here is a simple example of a notification automation of events which will update the existing notification for each change. This means the image you see in the notification will update as frigate finds a "better" image. +To load a video clip of an event: -```yaml -automation: - - alias: Notify of events - trigger: - platform: mqtt - topic: frigate/events - action: - - service: notify.mobile_app_pixel_3 - data_template: - message: 'A {{trigger.payload_json["after"]["label"]}} was detected.' - data: - image: 'https://your.public.hass.address.com/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}}' ``` - -```yaml -automation: - - alias: When a person enters a zone named yard - trigger: - platform: mqtt - topic: frigate/events - condition: - - "{{ trigger.payload_json['after']['label'] == 'person' }}" - - "{{ 'yard' in trigger.payload_json['after']['entered_zones'] }}" - action: - - service: notify.mobile_app_pixel_3 - data_template: - message: "A {{trigger.payload_json['after']['label']}} has entered the yard." - data: - image: "https://url.com/api/frigate/notifications/{{trigger.payload_json['after']['id']}}/thumbnail.jpg" - tag: "{{trigger.payload_json['after']['id']}}" - when: '{{trigger.payload_json["after"]["start_time"]|int}}' -``` - -```yaml -- alias: When a person leaves a zone named yard - trigger: - platform: mqtt - topic: frigate/events - condition: - - "{{ trigger.payload_json['after']['label'] == 'person' }}" - - "{{ 'yard' in trigger.payload_json['before']['current_zones'] }}" - - "{{ not 'yard' in trigger.payload_json['after']['current_zones'] }}" - action: - - service: notify.mobile_app_pixel_3 - data_template: - message: "A {{trigger.payload_json['after']['label']}} has left the yard." - data: - image: "https://url.com/api/frigate/notifications/{{trigger.payload_json['after']['id']}}/thumbnail.jpg" - tag: "{{trigger.payload_json['after']['id']}}" - when: '{{trigger.payload_json["after"]["start_time"]|int}}' -``` - -```yaml -- alias: Notify for dogs in the front with a high top score - trigger: - platform: mqtt - topic: frigate/events - condition: - - "{{ trigger.payload_json['after']['label'] == 'dog' }}" - - "{{ trigger.payload_json['after']['camera'] == 'front' }}" - - "{{ trigger.payload_json['after']['top_score'] > 0.98 }}" - action: - - service: notify.mobile_app_pixel_3 - data_template: - message: "High confidence dog detection." - data: - image: "https://url.com/api/frigate/notifications/{{trigger.payload_json['after']['id']}}/thumbnail.jpg" - tag: "{{trigger.payload_json['after']['id']}}" - when: '{{trigger.payload_json["after"]["start_time"]|int}}' -``` - -If you are using telegram, you can fetch the image directly from Frigate: - -```yaml -automation: - - alias: Notify of events - trigger: - platform: mqtt - topic: frigate/events - action: - - service: notify.telegram_full - data_template: - message: 'A {{trigger.payload_json["after"]["label"]}} was detected.' - data: - photo: - # this url should work for addon users - - url: 'http://ccab4aaf-frigate:5000/api/events/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg' - caption: 'A {{trigger.payload_json["after"]["label"]}} was detected on {{ trigger.payload_json["after"]["camera"] }} camera' +https://HA_URL/api/frigate/notifications//clip.mp4 ``` @@ -282,6 +184,6 @@ which server they are referring to. ## FAQ -### If I am detecting multiple objects, how do I assign the correct `binary_sensor` to the camera in HomeKit? +#### If I am detecting multiple objects, how do I assign the correct `binary_sensor` to the camera in HomeKit? The [HomeKit integration](https://www.home-assistant.io/integrations/homekit/) randomly links one of the binary sensors (motion sensor entities) grouped with the camera device in Home Assistant. You can specify a `linked_motion_sensor` in the Home Assistant [HomeKit configuration](https://www.home-assistant.io/integrations/homekit/#linked_motion_sensor) for each camera. diff --git a/docs/docs/integrations/howtos.md b/docs/docs/integrations/howtos.md deleted file mode 100644 index 9392caf0a..000000000 --- a/docs/docs/integrations/howtos.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: howtos -title: Community Guides -sidebar_label: Community Guides ---- - -## Communitiy Guides/How-To's - -- Best Camera AI Person & Object Detection - How to Setup Frigate w/ Home Assistant - digiblurDIY [YouTube](https://youtu.be/V8vGdoYO6-Y) - [Article](https://www.digiblur.com/2021/05/how-to-setup-frigate-home-assistant.html) -- Even More Free Local Object Detection with Home Assistant - Frigate Install - Everything Smart Home [YouTube](https://youtu.be/pqDCEZSVeRk) -- Home Assistant Frigate integration for local image recognition - KPeyanski [YouTube](https://youtu.be/Q2UT78lFQpo) - [Article](https://peyanski.com/home-assistant-frigate-integration/) diff --git a/docs/sidebars.js b/docs/sidebars.js index 104ee2937..267f4ed0b 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -9,6 +9,7 @@ module.exports = { 'guides/camera_setup', 'guides/getting_started', 'guides/false_positives', + 'guides/ha_notifications', ], Configuration: [ 'configuration/index',