7.3 KiB
Frigate Camera Control Bridge
PL
Ten projekt jest uniwersalnym sidecarem dla pojedynczej instancji Frigate.
Kontener pobiera konfiguracje Frigate przez /api/config, wykrywa kamery z
go2rtc oraz z bezposrednich URL-i ffmpeg.inputs[].path, a potem wystawia
sterowanie swiatlem/syrena przez MQTT Discovery dla Home Assistant i awaryjne
GUI HTTP.
Najwazniejsze zalozenia:
- Ten sam obraz obsluguje Podman dzisiaj i Kubernetes pozniej.
- Konfiguracja runtime jest przez zmienne srodowiskowe, bez montowania pliku konfiguracyjnego Frigate.
- Sidecar czeka na Frigate przy starcie i ponawia odczyt
/api/config. - Jesli
ffmpeg.inputs[].pathwskazuje nartsp://127.0.0.1:8554/..., sidecar traktuje to jako brame go2rtc i szuka prawdziwego URL-a kamery wgo2rtc.streams. - Aktualny Podman uzywa pliku env per sidecar, np.
/etc/frigate-camera-control-bridge/frigate-main.env. - Kubernetes powinien podawac
MQTT_HOST,MQTT_USER,MQTT_PASSWORD,DEFAULT_CAMERA_USER,DEFAULT_CAMERA_PASSWORDprzezSecret/ConfigMap. - W trybie env brak tych wartosci jest bledem startu; sidecar nie szuka credentiali w Quadletach ani w konfiguracji Frigate.
- GUI fallback domyslnie slucha na
5011, bo5001jest juz uzywany przez czesc instancji Frigate. - Jezyki GUI sa standardowym gettext:
locale/<lang>/LC_MESSAGES/*.poi.mo.
Podstawowe zmienne:
| Zmienna | Znaczenie |
|---|---|
FRIGATE_NAME |
Nazwa tej instancji, np. frigate-main. |
FRIGATE_URL |
URL API Frigate, np. http://frigate-main.example.test:5000. |
MQTT_HOST, MQTT_PORT |
Broker MQTT. |
MQTT_USER, MQTT_PASSWORD |
Credentiale MQTT. |
DEFAULT_CAMERA_USER, DEFAULT_CAMERA_PASSWORD |
Domyslne credentiale kamer odkrytych z Frigate. |
BASE_TOPIC |
Bazowy topic MQTT, np. frigate_camera_control/frigate-main. |
DISCOVERY_PREFIX |
Prefix Home Assistant MQTT Discovery, zwykle homeassistant. |
UI_LANGUAGE |
Domyslny jezyk GUI i encji HA, domyslnie en. |
HTTP_PORT |
Port GUI fallback, domyslnie 5011. |
HTTP_TOKEN |
Opcjonalny token dla GUI/API HTTP. |
SNAPSHOT_RETRY_SECONDS |
Co ile probowac ponownie, gdy migawki brakuja, domyslnie 600. |
SNAPSHOT_REFRESH_SECONDS |
Co ile odswiezac poprawnie pobrane migawki, domyslnie 3600. |
SNAPSHOT_LIVE_ON_GUI |
Czy pobierac swieza migawke z Frigate przy otwieraniu GUI, domyslnie true. |
Przyklad /etc/frigate-camera-control-bridge/frigate-main.env:
MQTT_HOST=mqtt.example.test
MQTT_PORT=1883
MQTT_USER=...
MQTT_PASSWORD=...
DEFAULT_CAMERA_USER=admin
DEFAULT_CAMERA_PASSWORD=...
Budowanie:
docker build -t frigate-camera-control-bridge:1.0 .
docker build -f Dockerfile.dev -t frigate-camera-control-bridge:dev .
Przyklady uruchomienia:
- Podman Quadlet:
examples/podman-quadlet/ - Kubernetes sidecar:
examples/kubernetes-sidecar.yaml
Lokalny test kontenera:
docker run --rm \
-e FRIGATE_NAME=example \
-e FRIGATE_URL=http://frigate:5000 \
-e MQTT_HOST=mqtt.local \
-e MQTT_USER=user \
-e MQTT_PASSWORD=password \
-e DEFAULT_CAMERA_USER=admin \
-e DEFAULT_CAMERA_PASSWORD=password \
-p 5011:5011 \
frigate-camera-control-bridge:1.0 --check
Jezyki:
- Dodaj katalog
locale/de/LC_MESSAGES/. - Skopiuj
frigate_camera_control_bridge.pozlocale/en/LC_MESSAGES/. - Przetlumacz
msgstr. - Uruchom
python3 tools/compile_gettext.py locale. - Po przebudowaniu obrazu GUI samo pokaze nowy jezyk.
Manualne komendy w kontenerze:
/app/frigate-camera-control-bridge.py --list
/app/frigate-camera-control-bridge.py --check
/app/frigate-camera-control-bridge.py --all-off
/app/frigate-camera-control-bridge.py --action frigate_main_camera_a_red_blue off
HTTP fallback:
http://<ip-frigate>:5011/
http://<ip-frigate>:5011/?lang=pl
http://<ip-frigate>:5011/api/actions
http://<ip-frigate>:5011/snapshot/<action_id>.jpg
http://<ip-frigate>:5011/healthz
http://<ip-frigate>:5011/readyz
Jesli ustawiono HTTP_TOKEN, dodaj ?token=<token> albo naglowek
X-Bridge-Token: <token>.
EN
This project is a generic sidecar for one Frigate instance. The container reads
Frigate configuration from /api/config, discovers cameras from go2rtc and
direct ffmpeg.inputs[].path stream URLs, then exposes light/siren controls
through Home Assistant MQTT Discovery plus an emergency HTTP fallback GUI.
Main design points:
- One image works for Podman now and Kubernetes later.
- Runtime configuration is environment-based; no Frigate config mount is needed.
- The sidecar waits for Frigate startup and retries
/api/config. - If
ffmpeg.inputs[].pathpoints atrtsp://127.0.0.1:8554/..., the sidecar treats it as a go2rtc gateway and resolves the real camera URL fromgo2rtc.streams. - Current Podman deployment uses one env file per sidecar, for example:
/etc/frigate-camera-control-bridge/frigate-main.env. - Kubernetes should pass
MQTT_HOST,MQTT_USER,MQTT_PASSWORD,DEFAULT_CAMERA_USER, andDEFAULT_CAMERA_PASSWORDfrom aSecret/ConfigMap. - In env mode, missing values are startup errors; the sidecar does not look up credentials in Quadlets or Frigate config.
- The fallback GUI listens on
5011by default because5001is already used by some Frigate instances. - GUI languages use standard gettext files:
locale/<lang>/LC_MESSAGES/*.poand.mo.
Core env vars:
| Variable | Meaning |
|---|---|
FRIGATE_NAME |
Instance name, for example frigate-main. |
FRIGATE_URL |
Frigate API URL, for example http://frigate-main.example.test:5000. |
MQTT_HOST, MQTT_PORT |
MQTT broker. |
MQTT_USER, MQTT_PASSWORD |
MQTT credentials. |
DEFAULT_CAMERA_USER, DEFAULT_CAMERA_PASSWORD |
Default credentials for cameras discovered from Frigate. |
BASE_TOPIC |
MQTT base topic, for example frigate_camera_control/frigate-main. |
DISCOVERY_PREFIX |
Home Assistant MQTT Discovery prefix, usually homeassistant. |
UI_LANGUAGE |
Default GUI and HA entity language, defaults to en. |
HTTP_PORT |
Fallback GUI port, defaults to 5011. |
HTTP_TOKEN |
Optional HTTP GUI/API token. |
SNAPSHOT_RETRY_SECONDS |
Retry interval while a snapshot is missing, defaults to 600. |
SNAPSHOT_REFRESH_SECONDS |
Refresh interval after snapshots are available, defaults to 3600. |
SNAPSHOT_LIVE_ON_GUI |
Fetch a fresh Frigate snapshot when the GUI loads, defaults to true. |
Build:
docker build -t frigate-camera-control-bridge:1.0 .
docker build -f Dockerfile.dev -t frigate-camera-control-bridge:dev .
Run examples:
- Podman Quadlet:
examples/podman-quadlet/ - Kubernetes sidecar:
examples/kubernetes-sidecar.yaml
Development container:
docker run --rm -it \
-v "$PWD":/workspace \
frigate-camera-control-bridge:dev
HTTP fallback:
http://<frigate-ip>:5011/
http://<frigate-ip>:5011/?lang=pl
http://<frigate-ip>:5011/api/actions
http://<frigate-ip>:5011/snapshot/<action_id>.jpg
http://<frigate-ip>:5011/healthz
http://<frigate-ip>:5011/readyz
Kubernetes sidecar notes:
- Put the bridge container in the same pod as Frigate, or point
FRIGATE_URLat the Frigate service. - Use
readinessProbeon/readyz. - Pass secrets through env vars from
Secret. - Keep
/var/lib/frigate-camera-control-bridgeon a small persistent volume if you want stale Home Assistant discovery cleanup to survive pod recreation.