Deploy Frigate NVR stack with Mosquitto, Ntfy, and frigate-notify #190

Merged
eblume merged 20 commits from deploy-frigate-nvr into main 2026-02-14 21:27:45 -08:00

20 commits

Author SHA1 Message Date
4cc6759938 Move ReoLink camera plan to completed, update changelog
Plan verified and marked complete with all checklist items checked
(except IoT VLAN isolation which is a separate plan). Updated open
questions with resolved decisions. Updated changelog fragment to
reflect full scope of deployment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 21:26:39 -08:00
a153843d7e Switch Frigate detector from CPU/TFLite to ONNX with YOLO-NAS-s
Uses YOLO-NAS-s model exported at 320x320 resolution, stored on NFS
at /media/frigate/models/yolo_nas_s.onnx. Significantly better
detection accuracy than the default SSD MobileNet V1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 21:20:12 -08:00
f46806b458 Upgrade Frigate from 0.15.1 to 0.16.4-standard-arm64
Switches to native ARM64 image (was likely running under Rosetta/QEMU).
No config breaking changes for our setup (CPU detector, no audio, no
TensorRT/ROCm).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:41:11 -08:00
95f9294fb6 Add stationary object timeout to stop alerts on parked cars
Cars stop being tracked after ~30s stationary (150 frames at 5fps).
Other objects get ~5 minutes (1500 frames) before being dropped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:25:46 -08:00
256ba7658e Add frigate and frigate-notify to services-check
Also update ntfy health check URL from Tailscale to Caddy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:15:49 -08:00
6ac2505317 Fix ntfy X-Actions header YAML format from string to map
The Go type for headers is []map[string]string, so the YAML entry
must be a map (- Key: "value") not a quoted string (- "Key: value").
The string format silently failed unmarshaling, causing the default
"View Clip" button to always appear instead of custom actions.

Also fix camera URL path (added / before # fragment).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:17:50 -08:00
79e5673fb8 Replace View Clip button with Open Event and Open Camera buttons
View Clip linked to raw H.265 MP4 which doesn't play in browsers.
Open Event links to Frigate's review page (built-in player handles
transcoding), Open Camera links to the live camera view.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:06:31 -08:00
0e431d921e Add View Event action button to ntfy notifications
Uses frigate-notify's EventLink template variable with ntfy's
X-Actions header to link to the Frigate event page, which has
a built-in player that handles H.265 transcoding.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:02:10 -08:00
020c525ad8 Add public_url to frigate-notify for notification links
Clip/snapshot links in notifications were using the internal
cluster URL (frigate:5000). Set public_url to nvr.ops.eblu.me
so links work from phones.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:51:10 -08:00
a3e19198a2 Enable attachments on ntfy for snapshot images
frigate-notify sends detection snapshots as attachments, which
requires ntfy to have attachment support configured.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:47:21 -08:00
ee141edeb0 Fix frigate-notify config structure
Use MQTT-only event collection (disable webapi), fix ntfy alert
config nesting to match frigate-notify's expected format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:41:18 -08:00
0a871a40b4 Switch go2rtc streams from HTTP-FLV to RTSP
Camera had HTTP/RTMP disabled. RTSP is the Frigate-recommended
protocol for ReoLink cameras.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:37:25 -08:00
74a572084c Switch Frigate detector from ONNX to CPU (TFLite)
ONNX detector was crashing due to missing model path config.
CPU/TFLite works out of the box on ARM64 and is sufficient for
single-camera detection of large objects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:30:59 -08:00
efc71c9f22 Add upstream relay config to ntfy for instant iOS push notifications
Configures ntfy to forward poll requests through ntfy.sh for APNs
delivery. Without this, iOS delays notifications by 20-30+ minutes.
Free tier allows 250 messages/day (no account needed).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:24:56 -08:00
7cdd7c7196 Add ntfy checks to services-check
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:09:53 -08:00
c765255733 Add mosquitto pod check to services-check
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:06:22 -08:00
84badbc446 Rename hajimari to homepage in Caddy config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:56:06 -08:00
15c932922d Update homepage layout for new group structure
Replace Misc group with Infrastructure and Services in the homepage
layout configuration to match the reorganized ingress annotations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:55:20 -08:00
7b17729085 Address PR #190 review feedback
- Add bird to tracked objects (catches escaped chickens/ducks)
- Add DHCP reservation comment for GableCam IP
- Remove explicit detect dimensions (Frigate auto-detects from stream)
- Reorganize homepage groups: ArgoCD/Prometheus/PyPI to Infrastructure,
  CV/Docs/TeslaMate/Transmission to Services

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:53:38 -08:00
d0360c1585 Deploy Frigate NVR stack with Mosquitto, Ntfy, and frigate-notify
Add four new services for cloud-free camera recording and alerting:
- Mosquitto MQTT broker (shared service in mqtt namespace)
- Ntfy push notifications (tailnet-accessible)
- Frigate NVR with GableCam via HTTP-FLV, ONNX detection, NFS recordings
- frigate-notify bridging detection events to Ntfy

Also adds Prometheus scrape target, Grafana dashboard, and Caddy
reverse proxy entries for nvr.ops.eblu.me and ntfy.ops.eblu.me.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:39:02 -08:00