[Tuto] Installation de Frigate LXC (+ HA Core LXC + MQTT LXC) via Proxmox

Bonjour à tous,

Sujet déjà abordé de nombreuses fois ou je vois souvent des références au tuto d’installation de Frigate via Docker et c’est un peu l’usine à gaz je trouve.

D’autre part, j’utilisais précédemment une VM HA lourde et peu stable, chargée d’Addons et notamment avec une erreur de type :

xhci_hcd 0000:13:00.0: Error Transfer event TRB DMA prt not part of current TD ep_index 2 comp_code 1

qui saturait la mémoire de ma VM HA sans explication.

Du coup, j’ai voulu tout réinstaller proprement et je suis parti sur une solution Proxmox à base de LXC natifs.
Pour Frigate, il existe une solution plus récente d’un Frigate LXC nettement plus simple a déployer je trouve que celle via Docker :

Pour ma part j’ai :

  1. installé un HA Core LXC via
    Proxmox VE Helper-Scripts

  2. installé un Frigate LXC via
    Proxmox VE Helper-Scripts

  3. installé un MQTT LXC via
    Proxmox VE Helper-Scripts

proxmox lxc

Vous fixez vos IP pour les 3 sur votre réseau local (soit par un IP statique ou bail DHCP dans votre box Internet par exemple)

Puis installation de Frigate via HACS dans Home Assistant
Puis configuration de Frigate via le menu Paramètres, appareils et services, puis dans l’ajout de la nouvelle entrée Frigate, l’URL que vous saisissez en bas est l’IP de votre LXC Frigate local:
http://ip_de_mon_frigate_en_local:5000

Concernant la config de Frigate, il y a deux fichiers à éditer.

  1. Fichier de configuration du container LXC Frigate

Le premier directement dans le Shell de proxmox:
nano /etc/pve/lxc/104.conf

(ici 104.conf est l’identifiant du container LXC comme vous pouvez le voir dans la capture d’écran du début)

et vous ajoutez en bas de ce fichier les 2 lignes pour l’accélération hardware via le CPU + Google Coral :

# entree pour le CPU
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file 0, 0
#entree pour le Google Coral en USB
lxc.mount.entry: /dev/bus/usb/002/ dev/bus/usb/002/ none bind,optional,create=dir 0,0
  1. Configuration de Frigate

Après pour la config de Frigate, allez dans le shell du LXC et faire la config via :
nano /opt/frigate/docker-compose.yml

Puis ajout du broker MQTT:
(pour info, MQTT vous sert à récupérer les commandes PTZ de vos caméras dans HA ou par exemple à remonter les switch vous permettant d’activer/désactiver la détection des caméras directement dans HA)

Concrètement, dans Frigate vous auriez ça pour activer la détection d’une caméra
enable_detect_dans_frigate

Grace à MQTT, vous pourriez intégrer cette fonctionnalité dans une carte HA :
enable_detect_dans_ha

mqtt:
  enabled: true
  host: 192.168.1.xxx #===> ip locale de mon broker MQTT LXC
  port: 1883
  user: login #==> nom d'utilisateur du broker MQTT
  password: mot_de_passe #==> mot de passe défini pour le broker MQTT

Il y a un topic complémentaire Post Install sur MQTT LXC pour le mot de passe :

PS: Si ces commandes (detect ou autres) Frigate ne sont pas disponibles dans HA, supprimer votre intégration Frigate dans HA et réajouter l’entrée Frigate.

Puis ajout de la section detectors avec une particularité, j’ai viré mon Google Coral USB remplacé par OpenVino qui gère efficacement le CPU + GPU intégré au processeur Intel à partir de la 6eme gen.

detectors:
#  coral:       
#    type: edgetpu
#    device: usb
ov:
  type: openvino
  device: CPU
model:
  width: 300
  height: 300
  input_tensor: nhwc
  input_pixel_format: bgr
  path: /openvino-model/FP16/ssdlite_mobilenet_v2.xml
  labelmap_path: /openvino-model/coco_91cl_bkgr.txt

Pour moi ça marche nickel, j’ai entre 10 et 20% de charge CPU sur le LXC Frigate pour 6 caméras en détection, juste avec le CPU Intel sans le Google Coral. (Oui j’ai un vieux CPU Intel(R) Core™ i3-6100T CPU @ 3.20GHz mais il est de 6eme gen, donc ca passe…)
N’hésitez pas à allouer des cœurs à votre container LXC afin qu’il soit très à l’aise sur 4 cœurs par exemple plutôt qu’il ne force sur 1 seul. Cela lissera la charge de votre CPU vers le bas et donc sa conso.

Concernant le stockage des vidéos, j’ai mis 50Go de disque dur pour le LXC Frigate et ca me suffit largement. (A voir selon vos usages directement dans la partie monitoring du stockage Frigate.)

Puis ajout des cams selon la documentation Frigate classique.

Autre particularité de ce HA Core, il n’y a pas d’éditeur de fichier de configuration natif.
J’ai trouvé une astuce qui consiste à lancer la commande suivante directement dans le shell de HA LXC, ce qui permet d’installer Filebrowser.
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/homeassistant-core.sh)"

To Update, Install HACS or Filebrowser, run the command below (or type update) in the LXC Console .

En deux mots, cela permet d’accéder à tous les fichiers de configuration HA directement sur l’IP locale de votre Home Assistant en local en ajoutant le port 8080
http://ip_de_mon_ha_en_local:8080

Au final, j’ai 3 container LXC ultra légers et dédiés plutôt qu’une énorme VM HA avec tous les Addons. :grinning:
La VM était beaucoup trop lourde en terme de ressources matérielles et surtout moins stable.

La ca tourne sans broncher avec une faible charge du serveur Proxmox. :ok_hand:
charge_proxmox

Merci pour le partage…

A titre personnel, j’ai un « problème » avec le principe des scripts de tteck.
Ca permet de faire des choses assez compliquées en lançant un shell. Ca c’est super.

Mais, quand les choses compliquées ne vont plus marcher (c’est le propre des trucs compliqués de tomber en panne), il va falloir comprendre comment ça marche sous le capot. Et là, pas simple si on n’a pas une culture linux suffisante. Et si on a cette culture, alors pas (vraiment) besoin des scripts.

Donc, d’un côté, on peut faire des trucs compliqués simplement, très bien. Mais après…

Par exemple, le LXC de Frigate, il n’y a pas d’upgrade possible. Il faut récupérer les fichiers sur le LXC, en installer un nouveau et remettre les fichiers. Comment ?

function update_script() {
  header_info
  check_container_storage
  check_container_resources
  if [[ ! -f /etc/systemd/system/frigate.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
  msg_error "To update Frigate, create a new container and transfer your configuration."
  exit  
}

Salut :smile:

Les scripts de tteck sont suivis par une communauté donc ils sont pérennes et mis à jour.

Après oui, si le débutant ne cherche pas à comprendre ce qu’il y a derrière le script c’est dommage mais bon, le pourcentage de ceux qui vont réellement creuser doit être faible…
Et puis les scripts c’est fait pour automatiser les choses en faisant abstraction de la complexité.

Perso je trouve que c’est très simple de déployer 3 LXC en 3 clics, et ca c’est magique.

Si tu ne mets jamais à jour ton Frigate LXC, et bien soit, mais au moins il va fonctionner versus une usine à gaz qui ne fonctionnera pas.

Effectivement pour le mettre à jour tu dois réinstaller un nouveau container Frigate LXC via le même script qui installera la dernière MAJ de Frigate, puis tu y copies les deux seuls fichiers de config de Frigate de ton ancien LXC:

  1. Fichier de configuration du container LXC Frigate
    Le premier fichier directement dans le Shell de Proxmox dans le dossier :
    /etc/pve/lxc/[id_de_mon_container_lxc].conf

  2. Configuration de Frigate
    Le second fichier est le fichier de configuration de Frigate directement accessible depuis le Shell du LXC dans le dossier :
    /opt/frigate/docker-compose.yml

Et voila.

C’est tout l’intérêt du container LXC, c’est qu’il est indépendant et notamment de HA.
Tu ne touches pas à la config de HA en réinstallant un Frigate LXC.

Perso j’ai également ajouté la fonctionnalité de réception des notifications de Frigate sur Telegram, c’est bijou ce truc. :smile:

Au delà de toute considération sur les scripts, je partage cette solution pour ceux qui veulent faire abstraction de la difficulté d’installer Frigate via Docker et ainsi obtenir une solution de NVR complète open source fonctionnelle.

Bonjour

Moi aussi , mais plutôt avec le fait qu’en installation par défaut ces scripts configurent le container LXC en mode privileged, donc accès root sur l’hôte.

script venant d’internet, plus mode privileged et accès root sur l’hôte, ça pose question
mais bon , à chacun de faire les choix d’installation qui lui conviennent, à partir du moment ou on sait ce qu’on fait et qu’on en est averti