{"id":47636353,"url":"https://github.com/trowaflo/frigate-event-manager","last_synced_at":"2026-04-02T00:10:33.947Z","repository":{"id":346233900,"uuid":"1174755255","full_name":"trowaflo/frigate-event-manager","owner":"trowaflo","description":"Home Assistant custom integration for Frigate NVR — rich, intelligent notifications via HA Companion.","archived":false,"fork":false,"pushed_at":"2026-03-23T13:21:13.000Z","size":356,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-23T16:37:49.720Z","etag":null,"topics":["frigate","hacs","hacs-integration","home-assistant","integration","mqtt","nvr"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trowaflo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-06T20:02:38.000Z","updated_at":"2026-03-23T13:20:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/trowaflo/frigate-event-manager","commit_stats":null,"previous_names":["trowaflo/frigate-event-manager"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/trowaflo/frigate-event-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trowaflo%2Ffrigate-event-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trowaflo%2Ffrigate-event-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trowaflo%2Ffrigate-event-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trowaflo%2Ffrigate-event-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trowaflo","download_url":"https://codeload.github.com/trowaflo/frigate-event-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trowaflo%2Ffrigate-event-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["frigate","hacs","hacs-integration","home-assistant","integration","mqtt","nvr"],"created_at":"2026-04-02T00:10:33.414Z","updated_at":"2026-04-02T00:10:33.912Z","avatar_url":"https://github.com/trowaflo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable first-line-heading MD033 --\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/trowaflo/frigate-event-manager/main/icon.png\"\n     alt=\"Frigate Event Manager icon\"\n     width=\"20%\"\n     align=\"right\"\n     style=\"float: right; margin: 10px 0px 20px 20px;\" /\u003e\n\n[![Release](https://img.shields.io/github/v/release/trowaflo/frigate-event-manager)](https://github.com/trowaflo/frigate-event-manager/releases)\n[![Build](https://github.com/trowaflo/frigate-event-manager/actions/workflows/validation.yml/badge.svg)](https://github.com/trowaflo/frigate-event-manager/actions/workflows/validation.yml)\n[![Coverage](https://codecov.io/gh/trowaflo/frigate-event-manager/branch/main/graph/badge.svg)](https://codecov.io/gh/trowaflo/frigate-event-manager)\n[![HACS](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://hacs.xyz)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/trowaflo/frigate-event-manager/blob/main/LICENSE)\n\n# Frigate Event Manager\n\nHome Assistant integration that listens to [Frigate NVR](https://frigate.video) events via MQTT,\napplies configurable filters, and sends rich notifications to the HA Companion app.\n\n[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=trowaflo\u0026repository=frigate-event-manager\u0026category=integration)\n\n## Features\n\n- **Per-camera configuration** — each camera is an independent config entry with its own filters, throttle and notification settings\n- **Smart filtering** — filter by zone, object label, time of day and severity (`alert` / `detection`)\n- **Anti-spam** — configurable cooldown (per camera) and debounce to group rapid detections\n- **Rich notifications** — snapshot, clip and preview URLs (presigned HMAC-SHA256), action buttons, iOS critical alerts\n- **Silent mode** — mute a camera for a configurable duration directly from the notification\n- **Jinja2 templates** — fully customisable title, message and critical condition\n\n## Prerequisites\n\n- Home Assistant 2024.11+\n- [Frigate NVR](https://frigate.video) with MQTT enabled\n- MQTT broker integrated in Home Assistant (`Settings \u003e Devices \u0026 Services \u003e MQTT`)\n- [HA Companion app](https://companion.home-assistant.io/) for mobile notifications (optional — `persistent_notification` is also supported)\n\n## Installation\n\n### Via HACS (recommended)\n\n1. Click the button above, or open HACS → Integrations → ⋮ → Custom repositories\n2. Add `https://github.com/trowaflo/frigate-event-manager` — type **Integration**\n3. Install **Frigate Event Manager**\n4. Restart Home Assistant\n\n### Manual\n\nCopy `custom_components/frigate_event_manager/` to your `\u003cconfig\u003e/custom_components/` directory and restart.\n\n## Configuration\n\nGo to **Settings → Devices \u0026 Services → Add integration → Frigate Event Manager**.\n\nThe setup wizard has 5 steps:\n\n| Step | What you configure |\n| --- | --- |\n| **Connection** | Frigate URL, notification target (`notify.mobile_app_xxx` or `persistent_notification`) |\n| **Camera** | Camera to monitor, MQTT topic |\n| **Filters** | Zones, object labels, disabled hours, severity (`alert` / `detection` / both) |\n| **Behaviour** | Cooldown (s), debounce (s), silent duration (min), tap action, 3 action buttons |\n| **Notifications** | Title template, message template, critical condition, sound and volume |\n\nRepeat for each camera. Reconfiguration is available from the integration options at any time.\n\n## Entities per camera\n\n| Entity | Type | Description |\n| --- | --- | --- |\n| Notifications | `switch` | Enable / disable notifications for this camera |\n| Motion | `binary_sensor` | `on` when a Frigate event is active |\n| Active silence | `binary_sensor` | `on` while the camera is silenced |\n| Silent mode | `button` | Activate silence for the configured duration |\n| Cancel silence | `button` | Cancel an active silence immediately |\n| Silence end | `sensor` | Timestamp when notifications will resume |\n\n## Notification templates\n\nTitle, message and critical condition support [Jinja2 templates](https://www.home-assistant.io/docs/configuration/templating/).\n\nQuick examples:\n\n```jinja2\n{# Title #}\n{{ label | title }} — {{ camera | replace('_', ' ') | title }}\n\n{# Message #}\n{{ severity | upper }} at {{ start_time | timestamp_custom('%H:%M') }}{% if zones %} · {{ zones | join(', ') }}{% endif %}\n\n{# Critical — alert only #}\n{{ severity == 'alert' }}\n```\n\nFull variable reference and filter examples → [`docs/notifications.md`](docs/notifications.md)\n\n## Action buttons\n\nUp to 3 action buttons can be configured per camera:\n\n| Value | Behaviour |\n| --- | --- |\n| `clip` | Opens the event clip (presigned URL) |\n| `snapshot` | Opens the snapshot image |\n| `preview` | Opens the animated preview |\n| `silent_30min` | Silences the camera for 30 minutes |\n| `silent_1h` | Silences the camera for 1 hour |\n| `dismiss` | Dismisses the notification |\n\nWhen all buttons are set to `none`, a default **Silence 30 min** button is added automatically.\n\n## Media URLs (presigned proxy)\n\nNotification media links (snapshot, clip, preview) are served through **HA's own HTTP server**, not directly from Frigate.\n\n### How it works\n\nWhen the integration starts, HA generates an ephemeral HMAC-SHA256 signing key (32 random bytes, in memory only, never stored). The key **rotates automatically every 24 hours** — no restart needed. Each media URL contains a slot ID (`kid`) so the correct key is used for verification:\n\n```text\nhttps://\u003cyour-ha\u003e/api/frigate_em/media/api/events/\u003cid\u003e/snapshot.jpg?exp=\u003ctimestamp\u003e\u0026kid=\u003cslot\u003e\u0026sig=\u003chmac\u003e\n```\n\nWhen the mobile app opens the link, HA verifies the signature and expiry, then proxies the request to Frigate internally. **Your mobile app never needs direct access to Frigate.**\n\nURLs expire after a configurable TTL (default **1 hour**, adjustable in the connection step: 5 min → 24 h). All invalid or expired URLs return a generic `404` — no information about why the request failed is exposed to the caller.\n\nWhen a URL with an **invalid or forged signature** is rejected, the integration automatically:\n\n- Logs a `WARNING` in the HA logs (path + client IP)\n- Fires a `frigate_em_security_event` event on the HA event bus\n- Creates a **persistent notification** in the HA frontend\n\nYou can build an automation on this event to alert on suspicious activity:\n\n```yaml\nautomation:\n  trigger:\n    platform: event\n    event_type: frigate_em_security_event\n  action:\n    service: notify.mobile_app_your_phone\n    data:\n      title: \"Frigate EM — suspicious request\"\n      message: \"Invalid URL from {{ trigger.event.data.ip }}\"\n```\n\n### Prerequisite\n\nHA's URL must be configured in **Settings → System → Network**. The integration uses the external URL first, then the internal URL as a fallback.\n\n- **External URL set** → works from anywhere\n- **Internal URL only** → works only on your home network\n- **Neither set** → presigned URLs are disabled entirely and no media links are included in notifications\n\n### Why not use Frigate's native proxy?\n\nThe official Frigate HA integration links directly to Frigate URLs. This integration signs URLs through HA instead, so:\n\n- Only HA needs to be reachable from outside (standard setup for remote push notifications)\n- Frigate can stay fully isolated on your local network\n- No Frigate credentials are exposed in notification payloads\n\n## License\n\n[MIT](LICENSE) — © 2026 trowaflo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrowaflo%2Ffrigate-event-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrowaflo%2Ffrigate-event-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrowaflo%2Ffrigate-event-manager/lists"}