Archives par mot-clé : frigate

Mageia 10 et module réseau YT6801

J’ai fait une mise à jour de ma Mageia 10 sur mon serveur cerbere sur lequel tourne Frigate. C’est un Ninkear n10 Pro basé sur un processeur N150 qui est placé au garage dans un carton de fortune pour le protéger de la poussière. Pour qu’il ne prenne pas trop chaud, j’ai fixé un ventilateur branché sur le port USB pour l’aérer en permanence. C’est un peu cheap mais ça fait le job !

Pour en revenir à la mise à jour, il a échoué à compiler le module yt6801 pour mon interface réseau Motorcomm YT6801. Voilà les informations renvoyées par lspci :

01:00.0 Ethernet controller: Motorcomm Microelectronics. YT6801 Gigabit Ethernet Controller (rev 01)
02:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter

C’est assez surprenant pour une distribution et un noyau relativement récent (6.18). Je me suis retrouvé avec un serveur non accessible par le réseau et j’ai dû l’extraire de son carton pour pouvoir travailler dessus directement.

J’ai trouvé une version du module compilé pour les noyaux Linux 6.15.9 et au delà sur github. On fait un zip en clonant le master. Ensuite j’ai tapé les commandes suivantes en tant que root :

cp yt6801-linux-driver-main.zip /usr/src
unzip https://github.com/h4rm00n/yt6801-linux-driver
mv yt6801-linux-driver-main/ yt6801-1.0.30
cd yt6801-1.0.30
cp src/dkms.conf .
dkms add -m yt6801 -v 1.0.30
dkms build -m yt6801 -v 1.0.30
dkms install -m yt6801 -v 1.0.30

il faut pas s’inquiéter si on a cette erreur :

Skipping BTF generation for yt6801.ko due to unavailability of vmlinux

En fait c’est juste un warning le BTF permet le débogage et le traçage avancés et ne gène en rien la génération du module. La commande lsmod | grep yt6801 permettra de voir que le module est bien chargé.

A partir de là, à chaque mise à jour du noyau, il construira automatiquement le module.

Passage à Frigate 0.18

Je suis passé à la version 0.18 du logiciel de vidéosurveillance Frigate, c’est une version majeure qui m’a permis de faire un bond en terme de fonctionnalités que je vais détailler ici.

Tout d’abord on pointera l’intégration de l’IA générative qui permet de générer une description pour les alertes, comme on peut le voir ci-dessous (en anglais à ce stade) :

Il dispose même d’un module de chat où on peut discuter avec elle (cette fois-ci en français)

Pour cela, j’ai dû choisir un moteur de LLM/VLM sur lequel je pouvais m’appuyer pour envoyer les requêtes de mon système. J’ai choisi ollama car c’est gratuit (enfin du moins pour l’instant il m’a rien réclamé !) et on peut faire des requêtes et faire mouliner les modèles à distance sur le cloud d’ollama, ça éviter d’avoir des modèles qui tournent en local et qui consomment de la ressource. Avec l’inconvénient notable qu’on ne sait pas ce qu’il advient des données qu’on envoie.

Autre fonctionnalité, jusqu’à présent j’avais jamais réussi à activer la notification via navigateur qui était intégrée de base dans Frigate, je m’en étais sorti en activant MQTT avec mosquitto et j’avais bricolé avec l’aide de l’IA un script qui me renvoyait les alertes sous Signal. Il se trouve que je n’ai jamais réussi à faire fonctionner MQTT avec la version 0.18 de Frigate, il était incapable de se connecter, probablement que ça pouvait venir du fait que j’utilise un reverse proxy Traefik pour que Frigate soit accessible du monde extérieur pour mon téléphone mobile. Finalement la notification via un navigateur marche très bien maintenant et me renvoie même le texte généré par l’IA générative :

Du coup j’ai laissé tomber MQTT, et j’utilise maintenant les notifications Firefox pour recevoir les alertes à distance. J’ai quand même aménagé le script d’envoi des alertes sous Signal pour l’adapter à la 0.18 et à l’abandon de MQTT, mais il est perfectible, il ne renvoie pas le texte généré et il ne capte qu’une alerte s’il y en a toute une série à intervalle proche.

Sinon il existe maintenant une notion de profil, j’ai donc pu créer un profil système armé et un profil système non armé, histoire de pouvoir l’activer ou le désactiver simplement suivant qu’on soit là ou pas. Pour l’instant il s’active via l’interface en tant qu’administrateur, donc ça n’a pas beaucoup d’intérêt, ça va faire l’objet d’une prochaine recherche pour l’activer d’un mobile.

A part ça je peux constater que le N150 de mon petit serveur est bien reconnu, il vient assister utilement le détecteur Coral et le CPU.

j’ai mis à jour la page Frigate sur mon site Funix pour plus de détails.

Système de vidéosurveillance

Ça va finir par devenir une obsession, mais après le post de découverte de Frigate et Frigate+, celui de présentation du système de notification sur un groupe Signal et le dernier concernant la mise en place d’un serveur dédié à base de N150, voilà un post et une image qui résume à lui tout seul mon système complet de vidéosurveillance basé sur Frigate et Frigate+ qui arrive à peu près à maturité.

Frigate tourne sur un mini PC dédié accessible d’internet avec connexion chiffrée via un certificat Let’s Encrypt le tout géré par traefik qui gère également l’authentification, les deux tournent sous l’outil de conteneurisation docker. Localement ce mini PC se nomme Cerbere, il est assisté d’un poste secondaire nommé Ultra qui sert à gérer une caméra bas coût dont l’adresse RTSP fluctue régulièrement et sur lequel tourne également un serveur apache httpd. Cerbere utilise une clé Google Coral TPU pour accélérer l’exploitation des modèles d’apprentissage. Six caméras IP sont connectées au total réparties en extérieur, 4 sont en connexion ethernet POE (alimentation par le câble ethernet), 3 utilisent les fonctions PTZ et sont mobiles. Dans les caméras on trouve un visiophone qui est piloté d’un écran lui même connecté en intérieur en ethernet POE, on trouve également une caméra bas coût connecté via un répéteur WIFI qui se trouve dans un local extérieur électrifié.
Physiquement mon système est réparti sur plusieurs zones :

  • extérieur : localisation des caméras, qui toutes supportent très bien les intempéries et le cagnard du sud.
  • garage : localisation de mon serveur Cerbere et de toutes les arrivées réseau de la maison avec un switch classique sur lequel est brassé les câbles RJ45 qui desservent les différentes pièces de la maison (et qui ont remplacé les câbles téléphoniques) et un switch POE pour les caméras.
  • mezzanine : localisation de ma box, de mon routeur et de mon autre serveur Ultra.
  • local extérieur : localisation d’un répéteur WIFI pour étendre la portée d’une caméra.
  • cuisine : localisation de l’écran du visiophone dont la caméra est intégrée au système.

Il y a pléthore de caméras IP sur le marché, les moins chères sont souvent des modèles chinois liées à une application qui fonctionne sous Android et à la sécurité plus que douteuse. Les critères de choix sont :

  • caméras qui génèrent un flux vidéo RTSP avec une adresse fixe et qui vont s’intégrer très facilement à ZoneMinder ou Frigate. Des sites comme ipcamlive ou ispyconnect recensent les caméras par marque ayant une adresse RTSP fixe. Malgré ça, comme je n’avais pas intégré ce critère initialement, j’ai une caméra dont l’adresse RSTP change régulièrement, ce n’est pas insurmontable mais ça complexifie l’installation car il faudra mettre en place des scripts qui vont rendre l’adresse fixe pour ZoneMinder ou Frigate.
  • caméras configurables en se connectant en indiquant leur adresse IP dans un navigateur sans avoir à passer par une application. Pour les caméras bas coût, j’ai dû néanmoins passer par l’application Android pour pouvoir les paramétrer.
  • paramètres d’administration qui permettent de changer les paramètres réseau pour les connecter à un réseau local, les caméras ne doivent pas directement accessibles sur internet mais uniquement via Frigate ou ZoneMinder
  • ce n’est pas strictement obligatoire, mais c’est mieux que la caméra puisse se connecter en ethernet POE ça permet d’avoir un seul fil (pas de câble d’alimentation, tout passe par le câble ethernet), sur de longues distances, (mon câble le plus long fait 30m)avec une connexion fiable et de bonne qualité. J’ai néanmoins deux caméras bas coût qui ne sont pas POE et qui sont alimentées avec un câble d’alimentation en plus d’être connectées par ethernet de manière classique, l’une d’entre elle est à plus d’une cinquantaine de mètre, elle est connectée à un répéteur WIFI dont le choix a été délicat car il me fallait un modèle totalement paramétrable pour les paramètres réseau.


Il existe également un autre acteur qui m’a donné beaucoup de fil à retordre, il s’agit du firewall shorewall. Il faut qu’il soit à la fois très restrictif pour interdire tout accès aux caméras directement via internet mais également qu’il puisse ouvrir les routes au juste besoin pour que Frigate soit accessible en sécurité d’un mobile sur internet via traefik, qui assure la connexion chiffrée avec un certificat validé par let’s encrypt et puisse communiquer avec les bases de données Frigate+. Et je dois avouer que je n’y serais pas arrivé sans l’aide de gemini enfin du moins pas aussi rapidement.

Les pages dédiées sur mon site funix.org :

  • La page sur l’installation du hardware, gestion des caméras et de la clé Google Coral TPU
  • La page sur l’installation et la configuration de Frigate et Frigate+

Recevoir des alertes Frigate avec Signal via MQTT

Grâce à l’aide de ChatGPT en mode itératif, j’ai construit un script qui me permet d’envoyer les alertes Frigate de détection de personnes et de voitures sur la messagerie Signal sur mon mobile. Il se base sur MQTT (Message Queuing Telemetry Transport) qui est un protocole de messagerie qui fonctionne sur le principe de souscription / publication, c’est à dire qu’un serveur (ou broker) peut publier des notifications sur un canal et des clients peuvent souscrire pour visualiser les notifications.

Cela donne quelque chose comme cela :

Pour MQTT j’ai utilisé Mosquitto qu’il faudra lancer en tant que service systemd. Frigate génére un certain nombre de messages MQTT comme on peut le voir ici. On utilisera Frigate/events qui est diffusé sur un canal MQTT, un script s’abonnera à ce canal et déclenchera l’envoi de mail et un message Signal dès déclenchement d’une alerte avec détection de personnes ou de voitures.

La suite détaillée c’est par ici.

Système de vidéosurveillance Frigate+

Finalement après avoir testé le système de vidéosurveillance Frigate depuis quelques semaines, je suis conquis, ça me change de ZoneMinder qu est vraiment une usine à gaz que j’avais le plus grand mal à régler. Je suis donc naturellement passé à la version payante Frigate+, qui pour un abonnement modique de 50$ annuel (payable via paypal) permet de pouvoir bénéficier d’un modèle personnalisé pour la détection des objets. Il se base sur les modèles partagés par la communauté et accessibles avec l’abonnement et on peut l’enrichir par apprentissage en l’alimentant en validant les vrais positifs, en créant des objets non détectés ou en invalidant des faux positifs.

Invalidation d’un faux positif

A force d’apprentissage le modèle personnalisé deviendra de plus en plus précis et nécessitera de moins en moins de ressource. Au point qu’on peut abaisser les seuils de détection pour capter davantage d’objets.

Tant qu’à faire, par défaut Frigate génère un certificat auto signé pour utiliser le port 8971 ce qui génère un avertissement de sécurité dans le navigateur. Sous Firefox on peut accepter le risque pour pouvoir y accéder, mais ce n’est quand même pas terrible, d’autant plus si on accède à Frigate d’internet. J’ai donc utilisé Let’s Encrypt qui se repose sur mon serveur apache et non nginx comme c’est présenté un peu partout sur le net, tout simplement parce qu’apache tourne déjà sur mon serveur et il était inutile de faire tourner un serveur doublon. J’ai dû modifier également le chemin d’accès par défaut de Frigate car la place était déjà prise.

  • Pour la configuration de Frigate avec Let’s Encrypt c’est par ici
  • Pour la configuration et l’utilisation de Frigate+ c’est par là