Skip to content

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: person only

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/frigate in 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/24 on 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]

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 — src 10.0.20.15 and 10.0.20.30 → dst 10.0.50.0/24

This lets Frigate containers on the LAB VLAN reach cameras on the CCTV VLAN.