Frigate NVR¶
Host: frigate (10.0.20.15)
OS: Debian-based
CPU: Intel Core i5-7500T @ 2.70GHz
RAM: 2 GB
GPU: Intel HD Graphics 630 (OpenVINO via /dev/dri/renderD128)
Frigate version: 0.17-0 (ghcr.io/blakeblackshear/frigate:stable)
Architecture¶
┌─────────────┐ RTSP (stream1/stream2) ┌─────────────┐
│ Tapo C320WS│ ──────────────────────────▶ │ Frigate │
│ 10.0.50.101 │ │ 10.0.20.15 │
└─────────────┘ │ │
│ Web UI:5000 │
│ RTSP :8554 │
│ WebRTC:8555 │
│ go2rtc:1984 │
│ API :8971 │
└──────┬──────┘
│
┌──────▼──────┐
│ Mosquitto │
│ MQTT:1883 │
└─────────────┘
Frigate connects to a Tapo C320WS camera via RTSP over the CCTV VLAN (50). Object detection runs on OpenVINO using the integrated Intel GPU for inference.
Services (Docker)¶
| Container | Image | Ports | Status |
|---|---|---|---|
| frigate | ghcr.io/blakeblackshear/frigate:stable |
5000, 8554, 8555, 1984, 8971 | Up (healthy) |
| mosquitto | eclipse-mosquitto:2 |
1883, 9001 | Up |
| frigate-notifier | frigate-notifier:latest |
— | Up |
Camera¶
Tapo C320WS¶
- IP:
10.0.50.101 - Location: Exterior CCTV
- Streams:
- Stream 1 (main):
rtsp://CAM_USERNAME:[email protected]:554/stream1— 1280×720, 5 fps, detection - Stream 2 (sub):
rtsp://CAM_USERNAME:[email protected]:554/stream2— recording + audio - Detection: Person tracking only
- Recording:
- Continuous: 1 day
- Motion: 7 days
- Alerts: 7 days (motion mode)
- Detections: 7 days (motion mode)
- Snapshots: Enabled, 7 day retention
Object Detection Stack¶
- Detector: OpenVINO (
type: openvino,device: GPU) - Model:
ssdlite_mobilenet_v2.xml(300×300, via/openvino-model/) - Hardware acceleration: VAAPI via
/dev/dri/renderD128 - Tracked objects:
persononly
Note: Current model is 300×300. The expanded config from the UI shows 320×320 with the CPU fallback tflite model — the raw config file is authoritative.
Storage¶
- Base path:
/opt/frigate/storage(mounted as/media/frigatein container) - Recordings:
/opt/frigate/storage/recordings/— ~91 MB - Clips & snapshots:
/opt/frigate/storage/clips/— ~60 MB - Exports:
/opt/frigate/storage/exports/— 512 bytes - Cache: tmpfs in container (
/tmp/cache, 1 GB limit)
MQTT¶
Mosquitto runs alongside Frigate:
| Setting | Value |
|---|---|
| Host | mosquitto (Docker network) |
| Port | 1883 |
| User | frigate |
| Auth | Hashed password (see mosquitto pwfile) |
Frigate publishes detection events to MQTT at topic prefix frigate.
Networking¶
- Frigate and mosquitto share the Docker network
frigate_default(172.18.0.0/16) - Host bridge:
10.0.20.15/24on VLAN 20 (LAB) - Camera accessed across VLANs via R1 firewall rules (LAB → CCTV allowed)
Notifications¶
A custom Python notifier (frigate-notifier) listens to Frigate MQTT events and pushes detection clips/snapshots to a Telegram chat.
See the dedicated page for full details: Frigate Notifier
Frigate's built-in notifications are disabled (enabled: false) — all notification traffic goes through this custom notifier.
Disabled Features¶
| Feature | Status |
|---|---|
| Semantic search | disabled (model_size: small) |
| Face recognition | disabled |
| License plate recognition | disabled |
| Bird classification | disabled |
| Audio detection | disabled at config level (UI has bark/fire/scream/speech/yell listeners but not used) |
| GenAI review | disabled |
Raw Config¶
The canonical config file is at config.yml in the docker-compose directory. Below is the sanitized version with placeholders:
mqtt:
enabled: true
host: mosquitto
port: 1883
user: frigate
password: MQTT_PASSWORD # <-- actual: hashed in mosquitto pwfile
record:
enabled: true
motion:
days: 7
ffmpeg:
hwaccel_args: ""
detectors:
ov:
type: openvino
device: GPU
model_path: /openvino-model/ssdlite_mobilenet_v2.xml
model:
width: 300
height: 300
objects:
track:
- person
cameras:
tapo:
enabled: true
ffmpeg:
inputs:
- path: rtsp://CAM_USERNAME:[email protected]:554/stream1
roles:
- detect
- record
detect:
enabled: true
width: 1280
height: 720
fps: 5
motion:
threshold: 8
contour_area: 10
improve_contrast: true
objects:
track:
- person
live:
streams:
Stream 1: tapo
go2rtc:
streams:
tapo:
- rtsp://CAM_USERNAME:[email protected]:554/stream1
snapshots:
enabled: true
retain:
default: 7
semantic_search:
enabled: false
model_size: small
face_recognition:
enabled: false
lpr:
enabled: false
classification:
bird:
enabled: false
version: 0.17-0
Docker Compose¶
version: "3.9"
services:
frigate:
container_name: frigate
restart: unless-stopped
stop_grace_period: 30s
image: ghcr.io/blakeblackshear/frigate:stable
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./config:/config
- ./storage:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
- "1984:1984"
- "8971:8971"
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
environment:
- FRIGATE_RTSP_PASSWORD=RTSP_PASSWORD # <-- placeholder
- CONFIG_FILE=/config/config.yml
cap_add:
- CAP_PERFMON
shm_size: "512mb"
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
environment:
- TZ=America/Santo_Domingo
.env¶
FRIGATE_RTSP_PASSWORD=RTSP_PASSWORD
TZ=America/Santo_Domingo
Mosquitto Config¶
Path: ./mosquitto/config/mosquitto.conf
allow_anonymous false
password_file /mosquitto/config/pwfile
listener 1883
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
The pwfile contains a hashed entry for user frigate.
SSH Access¶
ssh -i /home/gntech/.ssh/openclaw_ed25519 [email protected]
Related Firewall Rules¶
On R1, the following rules allow Frigate traffic:
Allow all VLANs to server 10.0.20.30(LAB host running Frigate)Allow Frigate host to CCTV VLAN— src10.0.20.15and10.0.20.30→ dst10.0.50.0/24
This lets Frigate containers on the LAB VLAN reach cameras on the CCTV VLAN.