Frigate NVR et intégration dans Home Assistant - aureOhwo - 09/05/2024
Frigate est un logiciel NVR à base d'IA dont l'objectif est de gérer des caméras IP et tout ce qui va avec : snapshot, détection, enregistrement
Voici ses avantages à mon sens :
- Excellente détection
- Pas de licence à payer
- Intégration parfaite dans Home Assistant
Je l'utilise depuis un an environ, dans un premier temps en parallèle de Surveillance Station, avant de basculer complètement sur Frigate.
L'achat d'un tpu Coral est souvent conseillé pour gérer la détection de manière plus rapide et économiser la ressource CPU du serveur, en ce qui me concerne je n'en vois pas l'utilité sur mon mini PC en Ryzen 5650u.
Il peut être installé en tant qu'addon pour Home Assistant, ou en tant que conteneur Docker. C'est cette deuxième solution que j'ai choisi et que je vais décrire.
Voici la documentation d'installation : https://docs.frigate.video/frigate/installation/
Le plus simple est de créer un stack avec Portainer, voici mon docker compose :
Code : version: "3.9"
services:
frigate:
container_name: frigate
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "128mb" # update for your cameras based on calculation above
volumes:
- /etc/localtime:/etc/localtime:ro
- /home/aurelien/frigate/config/:/config/
- video-surveillance:/media/frigate
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "8555:8555/tcp" # WebRTC over tcp
- "8555:8555/udp" # WebRTC over udp
- "8554:8554"
environment:
FRIGATE_RTSP_PASSWORD: "password"
volumes:
video-surveillance:
driver: local
driver_opts:
type: "nfs4"
o: "addr=192.168.1.10,rw"
device: ":/volume1/surveillance"
Le volume "video-surveillance" correspond à un partage NFS qui se situe sur mon NAS afin de stocker les enregistrements des caméras.
Tout le reste sera stocké (base de données et configuration) en local sur le mini pc.
Voici mon fichier de configuration config.yml à positionner dans le répertoire que vous avez défini sur votre docker composer (dans mon cas : /home/aurelien/frigate/config/config.yml) :
Code : mqtt:
host: 192.168.1.11
port: 1883
user: frigate
password: 'password'
objects:
track:
- person
filters:
person:
min_area: 5000
max_area: 100000
min_score: 0.7
threshold: 0.8
birdseye:
enabled: false
rtmp:
enabled: false
detectors:
cpu1:
type: cpu
num_threads: 3
cpu2:
type: cpu
num_threads: 3
cpu3:
type: cpu
num_threads: 3
cpu4:
type: cpu
num_threads: 3
cpu5:
type: cpu
num_threads: 3
go2rtc:
streams:
jardin:
- rtsp://admin:password@192.168.1.19:554/Streaming/Channels/101
jardin_sub:
- rtsp://admin:password@192.168.1.19:554/Streaming/Channels/102
terrasse:
- rtsp://admin:password@192.168.1.15:554/Streaming/Channels/101
terrasse_sub:
- rtsp://admin:password@192.168.1.15:554/Streaming/Channels/102
garage:
- rtsp://admin:password@192.168.1.18:554/Streaming/Channels/101
garage_sub:
- rtsp://admin:password@192.168.1.18:554/Streaming/Channels/102
devanture:
- rtsp://admin:password@192.168.1.16:554/Streaming/Channels/101
devanture_sub:
- rtsp://admin:password@192.168.1.16:554/Streaming/Channels/102
salon:
- rtsp://admin:password@192.168.1.17:554/Streaming/Channels/101
salon_sub:
- rtsp://admin:password@192.168.1.17:554/Streaming/Channels/102
cameras:
jardin:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/jardin
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/jardin_sub
input_args: preset-rtsp-restream
roles:
- detect
detect:
width: 640
height: 360
fps: 4
snapshots:
enabled: True
record:
enabled: True
retain:
days: 0
events:
retain:
default: 10
mode: active_objects
terrasse:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/terrasse
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/terrasse_sub
input_args: preset-rtsp-restream
roles:
- detect
detect:
width: 640
height: 360
fps: 4
snapshots:
enabled: True
record:
enabled: True
retain:
days: 0
events:
retain:
default: 10
mode: active_objects
devanture:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/devanture
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/devanture_sub
input_args: preset-rtsp-restream
roles:
- detect
detect:
width: 640
height: 360
fps: 4
snapshots:
enabled: True
record:
enabled: True
retain:
days: 0
events:
retain:
default: 10
mode: active_objects
salon:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/salon
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/salon_sub
input_args: preset-rtsp-restream
roles:
- detect
detect:
width: 640
height: 480
fps: 4
snapshots:
enabled: True
record:
enabled: True
retain:
days: 0
events:
retain:
default: 10
mode: active_objects
garage:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/garage
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/garage_sub
input_args: preset-rtsp-restream
roles:
- detect
detect:
width: 640
height: 480
fps: 4
snapshots:
enabled: True
record:
enabled: True
retain:
days: 0
events:
retain:
default: 10
mode: active_objects
La partie MQTT correpond à votre broker mqtt (en ce qui me concerne, ce broker tourne sur home assistant, c'est donc l'ip Home Assistant qu'il faudra saisir si vous faites comme moi.
La partie Go2RTC permet de déclarer vos flux de caméras, j'en utilise 2 par caméra, un en basse résolution pour la détection et un en haute résolution pour l'enregistrement.
Une fois votre configuration réalisée, vous pouvez redémarrer votre stack Docker depuis Portainer (par exemple) et accèder à l'interface Web pour vérifier que tout est ok : http://ipdocker:5000/
L'étape suivante consiste à ajouter l'intégration Frigate pour Home Assistant afin de pouvoir visualiser vos caméras et vos enregistrements depuis l'application Home Assistant (il n'existe pas d'application Frigate à ma connaissance) : https://github.com/blakeblackshear/frigate-hass-integration
Vous pourrez enfin ajouter des cartes frigate dans vos dashboards pour visualiser vos caméras, mais également les switchs créés automatiquement pour activer / désactiver la détection :
Code : type: entities
entities:
- entity: switch.frigate_detect
- entity: switch.devanture_detect
- entity: switch.terrasse_detect
- entity: switch.jardin_detect
- entity: switch.garage_detect
- entity: switch.salon_detect
title: Détection
show_header_toggle: false
J'essaierai de compléter un peu ce tuto et d'ajouter des images quand j'aurai un peu plus de temps, d'ici la si il vous manque des infos n'hésitez pas à me le signaler !
|