{"id":7161,"date":"2026-04-16T13:32:06","date_gmt":"2026-04-16T12:32:06","guid":{"rendered":"https:\/\/olivier.hoarau.org\/?p=7161"},"modified":"2026-04-16T13:32:06","modified_gmt":"2026-04-16T12:32:06","slug":"systeme-de-videosurveillance","status":"publish","type":"post","link":"https:\/\/olivier.hoarau.org\/?p=7161","title":{"rendered":"Syst\u00e8me de vid\u00e9osurveillance"},"content":{"rendered":"\n<p>\u00c7a va finir par devenir une obsession, mais apr\u00e8s le post de <a href=\"https:\/\/olivier.hoarau.org\/?p=6947\">d\u00e9couverte de Frigate et Frigate+<\/a>, celui de pr\u00e9sentation du syst\u00e8me de <a href=\"https:\/\/olivier.hoarau.org\/?p=6951\">notification sur un groupe Signal <\/a>et le dernier concernant la mise en place d&rsquo;un <a href=\"https:\/\/olivier.hoarau.org\/?p=7157\">serveur d\u00e9di\u00e9 \u00e0 base de N150<\/a>,  voil\u00e0 un post et une image qui r\u00e9sume \u00e0 lui tout seul mon syst\u00e8me complet de vid\u00e9osurveillance bas\u00e9 sur <strong>Frigate<\/strong> et <strong>Frigate+<\/strong> qui arrive \u00e0 peu pr\u00e8s \u00e0 maturit\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/funix.org\/fr\/linux\/images\/video\/videosurveillance\/reseau-videosurveillance.jpg?w=474&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<p><strong>Frigate<\/strong> tourne sur <a href=\"https:\/\/funix.org\/fr\/linux\/index.php?ref=videosurveillance#Le_serveur_de_vid\u00e9osurveillance\">un mini PC d\u00e9di\u00e9<\/a> accessible d&rsquo;internet avec connexion chiffr\u00e9e via un certificat <a href=\"https:\/\/letsencrypt.org\/fr\/\">Let&rsquo;s Encrypt<\/a> le tout g\u00e9r\u00e9 par <a href=\"https:\/\/traefik.io\/\">traefik<\/a> qui g\u00e8re \u00e9galement l&rsquo;authentification, les deux tournent sous l&rsquo;outil de <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Conteneur_(virtualisation)\">conteneurisation<\/a> <a href=\"https:\/\/www.docker.com\/\">docker<\/a>. Localement ce mini PC se nomme <strong>Cerbere,<\/strong> il est assist\u00e9 d&rsquo;un poste secondaire nomm\u00e9 <strong>Ultra<\/strong> qui sert \u00e0 g\u00e9rer une cam\u00e9ra bas co\u00fbt dont l&rsquo;<a href=\"https:\/\/funix.org\/fr\/linux\/index.php?ref=videosurveillance#G\u00e9rer_les_cam\u00e9ras_dont_ladresse_du\">adresse RTSP fluctue r\u00e9guli\u00e8rement<\/a> et sur lequel tourne \u00e9galement un serveur <a href=\"https:\/\/funix.org\/fr\/linux\/index.php?ref=apache2\">apache httpd<\/a>. <strong>Cerbere<\/strong> utilise une cl\u00e9 <a href=\"https:\/\/funix.org\/fr\/linux\/index.php?ref=videosurveillance#Google_Coral_USB\">Google Coral TPU<\/a> pour acc\u00e9l\u00e9rer l&rsquo;exploitation des mod\u00e8les d&rsquo;apprentissage. Six cam\u00e9ras IP sont connect\u00e9es au total r\u00e9parties en ext\u00e9rieur, 4 sont en connexion ethernet POE (alimentation par le c\u00e2ble ethernet), 3 utilisent les fonctions <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Cam%C3%A9ra_pan_tilt_zoom\">PTZ<\/a> et sont mobiles. Dans les cam\u00e9ras on trouve un visiophone qui est pilot\u00e9 d&rsquo;un \u00e9cran lui m\u00eame connect\u00e9 en int\u00e9rieur en <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Alimentation_%C3%A9lectrique_par_c%C3%A2ble_Ethernet\">ethernet POE<\/a>, on trouve \u00e9galement une cam\u00e9ra bas co\u00fbt connect\u00e9 via un r\u00e9p\u00e9teur WIFI qui se trouve dans un local ext\u00e9rieur \u00e9lectrifi\u00e9.<br>Physiquement mon syst\u00e8me est r\u00e9parti sur plusieurs zones :<br><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ext\u00e9rieur : localisation des cam\u00e9ras, qui toutes supportent tr\u00e8s bien les intemp\u00e9ries et le cagnard du sud.<\/li>\n\n\n\n<li>garage : localisation de mon serveur <strong>Cerbere<\/strong> et de toutes les arriv\u00e9es r\u00e9seau de la maison avec un switch classique sur lequel est brass\u00e9 les c\u00e2bles RJ45 qui desservent les diff\u00e9rentes pi\u00e8ces de la maison (et qui ont remplac\u00e9 les c\u00e2bles t\u00e9l\u00e9phoniques) et un switch POE pour les cam\u00e9ras.<\/li>\n\n\n\n<li>mezzanine : localisation de ma box, de mon routeur et de mon autre serveur<strong> Ultra<\/strong>.<\/li>\n\n\n\n<li>local ext\u00e9rieur : localisation d&rsquo;un r\u00e9p\u00e9teur WIFI pour \u00e9tendre la port\u00e9e d&rsquo;une cam\u00e9ra.<\/li>\n\n\n\n<li>cuisine : localisation de l&rsquo;\u00e9cran du visiophone dont la cam\u00e9ra est int\u00e9gr\u00e9e au syst\u00e8me.<\/li>\n<\/ul>\n\n\n\n<p>Il y a pl\u00e9thore de cam\u00e9ras IP sur le march\u00e9, les moins ch\u00e8res sont souvent des mod\u00e8les chinois li\u00e9es \u00e0 une application qui fonctionne sous Android et \u00e0 la s\u00e9curit\u00e9 plus que douteuse. Les crit\u00e8res de choix sont :<br><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cam\u00e9ras qui g\u00e9n\u00e8rent un flux vid\u00e9o <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Real_Time_Streaming_Protocol\">RTSP<\/a> avec une adresse fixe et qui vont s&rsquo;int\u00e9grer tr\u00e8s facilement \u00e0 <strong>ZoneMinder<\/strong> ou <strong>Frigate.<\/strong> Des sites comme <a href=\"https:\/\/www.ipcamlive.com\/rtspdatabase\">ipcamlive<\/a> ou <a href=\"https:\/\/www.ispyconnect.com\/cameras\">ispyconnect<\/a> recensent les cam\u00e9ras par marque ayant une adresse <strong>RTSP<\/strong> fixe. Malgr\u00e9 \u00e7a, comme je n&rsquo;avais pas int\u00e9gr\u00e9 ce crit\u00e8re initialement, j&rsquo;ai une cam\u00e9ra dont l&rsquo;adresse <strong>RSTP<\/strong> change r\u00e9guli\u00e8rement, ce n&rsquo;est pas insurmontable mais \u00e7a complexifie l&rsquo;installation car il faudra mettre en place des scripts qui vont rendre l&rsquo;adresse fixe pour <strong>ZoneMinder<\/strong> ou <strong>Frigate<\/strong>.<br><\/li>\n\n\n\n<li>cam\u00e9ras configurables en se connectant en indiquant leur adresse IP dans un navigateur sans avoir \u00e0 passer par une application. Pour les cam\u00e9ras bas co\u00fbt, j&rsquo;ai d\u00fb n\u00e9anmoins passer par l&rsquo;application Android pour pouvoir les param\u00e9trer.<br><\/li>\n\n\n\n<li>param\u00e8tres d&rsquo;administration qui permettent de changer les param\u00e8tres r\u00e9seau pour les connecter \u00e0 un r\u00e9seau local, les cam\u00e9ras ne doivent pas directement accessibles sur internet mais uniquement via <strong>Frigate<\/strong> ou <strong>ZoneMinder<\/strong><\/li>\n\n\n\n<li>ce n&rsquo;est pas strictement obligatoire, mais c&rsquo;est mieux que la cam\u00e9ra puisse se connecter en ethernet POE \u00e7a permet d&rsquo;avoir un seul fil (pas de c\u00e2ble d&rsquo;alimentation, tout passe par le c\u00e2ble ethernet), sur de longues distances, (mon c\u00e2ble le plus long fait 30m)avec une connexion fiable et de bonne qualit\u00e9<strong>. <\/strong>J&rsquo;ai n\u00e9anmoins deux cam\u00e9ras bas co\u00fbt qui ne sont pas POE et qui sont aliment\u00e9es avec un c\u00e2ble d\u2019alimentation en plus d&rsquo;\u00eatre connect\u00e9es par ethernet de mani\u00e8re classique, l&rsquo;une d&rsquo;entre elle est \u00e0 plus d&rsquo;une cinquantaine de m\u00e8tre, elle est connect\u00e9e \u00e0 un r\u00e9p\u00e9teur WIFI dont le choix a \u00e9t\u00e9 d\u00e9licat car il me fallait un mod\u00e8le totalement param\u00e9trable pour les param\u00e8tres r\u00e9seau.<\/li>\n<\/ul>\n\n\n\n<p><br>Il existe \u00e9galement un autre acteur qui m&rsquo;a donn\u00e9 beaucoup de fil \u00e0 retordre, il s&rsquo;agit du firewall <a href=\"https:\/\/funix.org\/fr\/linux\/index.php?ref=intrusions#Installer_un_firewall_avec_shorewall\">shorewall<\/a>. Il faut qu&rsquo;il soit \u00e0 la fois tr\u00e8s restrictif pour interdire tout acc\u00e8s aux cam\u00e9ras directement via internet mais \u00e9galement qu&rsquo;il puisse ouvrir les routes au juste besoin pour que <strong>Frigate<\/strong> soit accessible en s\u00e9curit\u00e9 d&rsquo;un mobile sur internet via <strong>traefik<\/strong>, qui assure la connexion chiffr\u00e9e avec un certificat valid\u00e9 par<strong> let&rsquo;s encrypt <\/strong>et puisse communiquer avec les bases de donn\u00e9es<strong> Frigate+<\/strong>. Et je dois avouer que je n&rsquo;y serais pas arriv\u00e9 sans l&rsquo;aide de <a href=\"https:\/\/gemini.google.com\/app\">gemini<\/a> enfin du moins pas aussi rapidement.<\/p>\n\n\n\n<p>Les pages d\u00e9di\u00e9es sur mon site <a href=\"https:\/\/www.funix.org\">funix.org<\/a> :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/funix.org\/fr\/linux\/index.php?ref=videosurveillance\">La page<\/a> sur l&rsquo;installation du hardware, gestion des cam\u00e9ras et de la cl\u00e9 Google Coral TPU<\/li>\n\n\n\n<li><a href=\"https:\/\/funix.org\/fr\/linux\/index.php?ref=frigate\">La page<\/a> sur l&rsquo;installation et la configuration de Frigate et Frigate+<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c7a va finir par devenir une obsession, mais apr\u00e8s le post de d\u00e9couverte de Frigate et Frigate+, celui de pr\u00e9sentation du syst\u00e8me de notification sur un groupe Signal et le dernier concernant la mise en place d&rsquo;un serveur d\u00e9di\u00e9 \u00e0 base de N150, voil\u00e0 un post et une image qui r\u00e9sume \u00e0 lui tout seul &hellip; <a href=\"https:\/\/olivier.hoarau.org\/?p=7161\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Syst\u00e8me de vid\u00e9osurveillance<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_share_on_mastodon":"0"},"categories":[5,12,10],"tags":[113,109],"class_list":["post-7161","post","type-post","status-publish","format-standard","hentry","category-logiciels-libres","category-vie-de-funix","category-vie-de-mes-sites","tag-frigate","tag-videosurveillance"],"share_on_mastodon":{"url":"https:\/\/mastodon.social\/@funix\/116414396930136408","error":""},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/peOjJ-1Rv","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/7161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7161"}],"version-history":[{"count":1,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/7161\/revisions"}],"predecessor-version":[{"id":7162,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/7161\/revisions\/7162"}],"wp:attachment":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}