<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://blog.lfz.ovh/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Blog LFZ</title>
	<link>https://blog.lfz.ovh/</link>
	<description></description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://blog.lfz.ovh/spip.php?page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Changement d'infrastructure serveur ???</title>
		<link>https://blog.lfz.ovh/spip.php?article5</link>
		<guid isPermaLink="true">https://blog.lfz.ovh/spip.php?article5</guid>
		<dc:date>2025-10-27T17:51:54Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>johann</dc:creator>



		<description>
&lt;p&gt;L'id&#233;e de derri&#232;re tout ceci : &lt;br class='autobr' /&gt;
Je suis les vid&#233;os YouTube de Raynox, dont l'infrastructure domotique ressemble beaucoup &#224; la mienne, tout comme la logique qui nous a amen&#233; &#224; ce type d'architecture. L'une de ses vid&#233;os a particuli&#232;rement retenu mon attention : il y expose des arguments pertinents, notamment celui du choix d'ex&#233;cuter un conteneur Docker &#224; l'int&#233;rieur d'une machine virtuelle QEMU/KVM ou d'un conteneur LXC, autrement dit, une virtualisation en deux niveaux. &lt;br class='autobr' /&gt;
Intuitivement, on (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.lfz.ovh/spip.php?rubrique2" rel="directory"&gt;Domotique&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='https://blog.lfz.ovh/IMG/logo/podman.png?1761587901' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt; L'id&#233;e de derri&#232;re tout ceci : &lt;/h2&gt;
&lt;p&gt;Je suis les vid&#233;os YouTube de &lt;a href=&#034;https://www.youtube.com/@Raynoxis&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Raynox&lt;/a&gt;, dont l'infrastructure domotique ressemble beaucoup &#224; la mienne, tout comme la logique qui nous a amen&#233; &#224; ce type d'architecture. L'une de ses vid&#233;os a particuli&#232;rement retenu mon attention : il y expose des arguments pertinents, notamment celui du choix d'ex&#233;cuter un conteneur Docker &#224; l'int&#233;rieur d'une machine virtuelle QEMU/KVM ou d'un conteneur LXC, autrement dit, une virtualisation en deux niveaux.&lt;/p&gt;
&lt;p&gt;Intuitivement, on sent bien que cette approche n'est pas optimale.&lt;/p&gt;
&lt;center&gt;&lt;iframe width=&#034;640&#034; height=&#034;360&#034; src=&#034;https://www.youtube.com/embed/-fXW1gx0i1Y&#034; title=&#034;BYE PROXMOX &#9760;&#65039; - (Je vous ai &#233;cout&#233; &#128591;) - Optimisation CONTENEURS &#128170; (MaJ Architecture / Cockpit) #2&#034; frameborder=&#034;0&#034; allow=&#034;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#034; referrerpolicy=&#034;strict-origin-when-cross-origin&#034; allow4ullscreen&gt;&lt;/iframe&gt;&lt;/center&gt;
&lt;p&gt;Dans un second temps, il pr&#233;sente une alternative que je ne connaissais pas : une distribution Fedora int&#233;grant l'interface web Cockpit, qui permet de g&#233;rer aussi bien des conteneurs Podman (&#233;quivalents de Docker) que des machines virtuelles QEMU/KVM. &lt;/p&gt;
&lt;p&gt;J'avais un mini-PC (Ryzen 5 3500U) qui prenait la poussi&#232;re dans un coin ... et une carte Hailo 8L en PCIe fra&#238;chement command&#233;e. Alors, par curiosit&#233; et un peu pour le fun de la bidouille, je me suis dit :&lt;/p&gt;
&lt;center&gt;&lt;i&gt;&#8220;Allez, voyons ce que &#231;a peut donner !&#8221;&lt;/i&gt;&lt;/center&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;1. Installation de Fedora Server &lt;/h2&gt;
&lt;p&gt;L'installation de &lt;strong&gt;Fedora Server&lt;/strong&gt; ne pr&#233;sente pas de difficult&#233; particuli&#232;re, m&#234;me si son installateur peut sembler un peu d&#233;routant lorsqu'on vient plut&#244;t de l'univers &lt;strong&gt;Debian&lt;/strong&gt; ou &lt;strong&gt;Manjaro&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le processus recommande de &lt;strong&gt;d&#233;sactiver le compte root&lt;/strong&gt; et de cr&#233;er &#224; la place un &lt;strong&gt;compte utilisateur disposant des privil&#232;ges sudo&lt;/strong&gt;, qui servira &#224; l'administration du syst&#232;me.&lt;/p&gt;
&lt;p&gt;J'ai opt&#233; pour une &lt;strong&gt;installation minimaliste&lt;/strong&gt; de Fedora Server, sans s&#233;lectionner d'autres paquets : tout le reste sera ajout&#233; plus tard, selon les besoins.&lt;/p&gt;
&lt;p&gt;Le &lt;strong&gt;serveur SSH&lt;/strong&gt; est op&#233;rationnel et activ&#233; par d&#233;faut, tout comme &lt;strong&gt;Cockpit&lt;/strong&gt;, la suite d'administration web int&#233;gr&#233;e &#224; Fedora.&lt;/p&gt;
&lt;p&gt;En fin d'installation, la machine est imm&#233;diatement &lt;strong&gt;accessible &#224; distance&lt;/strong&gt;, que ce soit en SSH pour la ligne de commande ou via Cockpit pour la gestion graphique.&lt;/p&gt;
&lt;p&gt;Pour identifier l'adresse IP de votre serveur, deux options s'offrent &#224; vous : soit &lt;strong&gt;consulter les informations de votre serveur DHCP&lt;/strong&gt; (par exemple dans l'interface de votre routeur/box), soit &lt;strong&gt;vous connecter physiquement (clavier + &#233;cran)&lt;/strong&gt; &#224; la machine et ex&#233;cuter la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ip -a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Une fois votre serveur identifi&#233; sur le r&#233;seau, la premi&#232;re op&#233;ration est de &lt;strong&gt;mettre &#224; jour la machine&lt;/strong&gt;, en ligne de commande avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo dnf upgrade --refresh -y&lt;/code&gt; ou &#224; partir de l'interface cockpit.&lt;/p&gt;
&lt;p&gt;Les outils logiciels pour la gestion des containers Podman et des machines virtuelles sont installables dans le menu &#171; Outils &#187; / &#171; Applications &#187; de l'interface de Cockpit.&lt;/p&gt;
&lt;p&gt;Dans le menu r&#233;seau, il est &#233;galement possible de d&#233;finir une adresse &lt;strong&gt;ipv4 statique&lt;/strong&gt; et de cr&#233;er une &lt;strong&gt;interface bridge&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#9888;&#65039; Gestion d'espace disque sous Fedora (LVM)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lors d'une installation par d&#233;faut de Fedora utilisant le gestionnaire de volumes logiques (LVM), tout l'espace disque disponible n'est pas imm&#233;diatement allou&#233; au volume logique racine (/dev/mapper/fedora-root). Pour visualiser l'&#233;tat en cours &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;df -h&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo vgs&lt;/code&gt; permet pour voir les d&#233;tails du groupe de volumes et l'espace libre non allou&#233; (Colonne VFree).&lt;/p&gt;
&lt;p&gt;Pour l'assigner,en totalit&#233; ou en partie &#224; la partition racine, la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt; sudo lvextend -r -L+XXX.XXg /dev/mapper/fedora-root&lt;/code&gt; est a ex&#233;cuter, avec XXX.XXg la valeur en Gb, selon la quantit&#233; de disque disponible indiqu&#233; par la commande vgs&lt;/p&gt;
&lt;p&gt;Enfin pour confirmer : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;df -h&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;2. Installation de Frigate dans un container Podman &lt;/h2&gt;
&lt;p&gt;L'un des avantages majeurs de Podman par rapport &#224; Docker est sa capacit&#233; &#224; ex&#233;cuter des conteneurs en mode &lt;strong&gt;rootless&lt;/strong&gt;, c'est-&#224;-dire sans privil&#232;ges administrateur. Les conteneurs tournent alors avec les droits d'un simple utilisateur du syst&#232;me, ce qui renforce consid&#233;rablement la s&#233;curit&#233;.&lt;/p&gt;
&lt;p&gt;Pour cela, il suffit de cr&#233;er un &lt;strong&gt;utilisateur d&#233;di&#233;&lt;/strong&gt;, ici nomm&#233; &#171; &lt;strong&gt;frigate&lt;/strong&gt; &#187;, qui sera responsable de l'ex&#233;cution du conteneur Podman Frigate. Cette cr&#233;ation peut se faire aussi bien en ligne de commande qu'&#224; partir de l'interface web Cockpit.&lt;/p&gt;
&lt;p&gt;L'utilisateur frigate doit pouvoir &lt;strong&gt;acc&#233;der au GPU&lt;/strong&gt; de la machine afin de b&#233;n&#233;ficier de l'acc&#233;l&#233;ration mat&#233;rielle pour le d&#233;codage des flux vid&#233;o.&lt;/p&gt;
&lt;p&gt;Sous Linux, les p&#233;riph&#233;riques graphiques /dev/dri/cardX et /dev/dri/renderD128 appartiennent respectivement &lt;strong&gt;aux groupes video et render&lt;/strong&gt;. Il est donc n&#233;cessaire d'ajouter notre utilisateur frigate &#224; ces deux groupes afin qu'il puisse y acc&#233;der avec les commandes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo usermod -aG video frigate&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo usermod -aG render frigate&lt;/code&gt;&lt;/p&gt;
&lt;div class='spip_document_52 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/compte_frigate.png?1761322533' width='500' height='231' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le syst&#232;me Fedora est maintenant op&#233;rationnel, avec deux comptes bien distincts :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un &lt;strong&gt;utilisateur administrateur&lt;/strong&gt;, disposant des droits sudo pour g&#233;rer la machine,&lt;/li&gt;&lt;li&gt; et un &lt;strong&gt;utilisateur standard&lt;/strong&gt;, d&#233;di&#233; &#224; l'ex&#233;cution du conteneur Frigate avec des droits sur le GPU.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;i&gt;Cette distinction est importante, car certaines commandes devront &#234;tre ex&#233;cut&#233;es par l'un ou l'autre de ces comptes, selon qu'elles concernent la configuration du syst&#232;me h&#244;te ou celle du conteneur.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Il s'agit &#224; pr&#233;sent de mettre en place un &lt;strong&gt;conteneur Frigate&lt;/strong&gt; basique, &lt;strong&gt;sans acc&#233;l&#233;ration mat&#233;rielle pour la d&#233;tection&lt;/strong&gt; (c'est-&#224;-dire sans module Hailo-8L).&lt;/p&gt;
&lt;p&gt;Par d&#233;faut, Fedora Server est prot&#233;g&#233; par un &lt;strong&gt;pare-feu actif&lt;/strong&gt;. Il faut donc autoriser l'acc&#232;s aux ports utilis&#233;s par Frigate, avec le &lt;strong&gt;compte administrateur&lt;/strong&gt;, soit directement depuis l'interface web Cockpit, soit en ligne de commande avec les instructions suivantes :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo firewall-cmd --add-port=5000/tcp --permanent sudo firewall-cmd --add-port=8555/tcp --permanent sudo firewall-cmd --add-port=8554/tcp --permanent sudo firewall-cmd --add-port=8554/udp --permanent sudo firewall-cmd --add-port=8555/udp --permanent&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le &lt;strong&gt;d&#233;marrage&lt;/strong&gt; du conteneur Frigate, dans un terminal de l'&lt;strong&gt;utilisateur standard&lt;/strong&gt; Frigate, s'effectue &#224; l'aide de la commande suivante :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;frigate@localhost:~$ podman run -d --name frigate --restart=unless-stopped --shm-size=256m --device /dev/dri:/dev/dri -v /etc/localtime:/etc/localtime:ro -v /home/frigate/config:/config:z -v /home/frigate/media:/media/frigate:z --tmpfs /tmp/cache:size=1000000000,mode=1777 -p 5000:5000 -p 1935:1935 -p 8554:8554 -p 8555:8555/tcp -p 8555:8555/udp -e FRIGATE_RTSP_PASSWORD='monMotdePasse' ghcr.io/blakeblackshear/frigate:stable ff900b6866c639bd85ac0b183cb3789059c404c93deee2ae051966bfff9fd428 frigate@localhost:~$&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le conteneur d&#233;marre correctement, mais le fichier de configuration par d&#233;faut de Frigate provoque quelques probl&#232;mes dans mon cas.&lt;br class='autobr' /&gt;
J'ai donc d&#251; l'adapter &#224; ma configuration, puis effectuer un red&#233;marrage forc&#233; du conteneur depuis l'interface Cockpit pour que les modifications soient prises en compte.&lt;/p&gt;
&lt;div class='spip_document_53 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/2cam_cpu_only_detector.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/2cam_cpu_only_detector.png?1761478077' width='500' height='116' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;center&gt;&lt;p style='font-size:10pt;font-style: italic;margin-top:-30px;'&gt;Vitesse du d&#233;tecteur de frigate avec 2 cameras h264 2k et une d&#233;tection sur CPU uniquement&lt;/p&gt;
&lt;/center&gt;
&lt;p&gt;Les performances sont pour l'instant modestes, mais l'ajout de l'inf&#233;rence mat&#233;rielle pour la d&#233;tection devrait normalement les am&#233;liorer de mani&#232;re significative.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;3. D&#233;tails de la commande &#171; podman run &#187;&lt;/h2&gt;
&lt;p&gt;Je d&#233;taille ci-dessous, pour m&#233;moire, la commande de base pr&#233;sent&#233;e ci-dessus, accompagn&#233;e d'options et d'explications compl&#233;mentaires, pas toujours &#233;videntes &#224; saisir au premier abord, notamment en ce qui concerne les implications en mati&#232;re de s&#233;curit&#233;.&lt;br class='autobr' /&gt;
L'objectif &#233;tant de mettre en place un conteneur rootless, il serait dommage de tout compromettre en n&#233;gligeant ces aspects.&lt;/p&gt;
&lt;p&gt;&#9881;&#65039; &lt;strong&gt; Options g&#233;n&#233;rales Podman &lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;podman run -d \ --name frigate \ --restart=unless-stopped \ .... ghcr.io/blakeblackshear/frigate:stable&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;podman run&lt;/code&gt; initialise un nouveau conteneur nomm&#233; &#171; frigate &#187;, en utilisant l'image sp&#233;cifi&#233;e &#224; la fin de la commande. Le conteneur est lanc&#233; en mode d&#233;tach&#233;, c'est-&#224;-dire qu'il s'ex&#233;cute en arri&#232;re-plan comme un d&#233;mon, et il est configur&#233; pour red&#233;marrer automatiquement, sauf lorsqu'il est arr&#234;t&#233; manuellement.&lt;/p&gt;
&lt;p&gt;&#128190; &lt;strong&gt;M&#233;moire et p&#233;riph&#233;riques&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--shm-size=256m&lt;/code&gt; permet de d&#233;finir la taille du segment m&#233;moire partag&#233; (/dev/shm), utile au buffering vid&#233;o (FFmpeg et TensorFlow l'utilisent)&lt;/p&gt;
&lt;p&gt;L'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--device /dev/dri:/dev/dri&lt;/code&gt; permet au conteneur Podman d'acc&#233;der directement &#224; la carte graphique de l'h&#244;te, activant ainsi l'acc&#233;l&#233;ration mat&#233;rielle (hardware) pour le traitement vid&#233;o.&lt;br class='autobr' /&gt;
Pour que cela fonctionne correctement, l'utilisateur ex&#233;cutant le conteneur (dans mon cas frigate) doit appartenir aux groupes video et render, afin d'avoir les permissions n&#233;cessaires sur les p&#233;riph&#233;riques GPU.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;frigate@localhost:~$ ls -al /dev/dri total 0 drwxr-xr-x. 3 root root 100 23 oct. 17:41 . drwxr-xr-x. 20 root root 4040 23 oct. 17:41 .. drwxr-xr-x. 2 root root 80 23 oct. 17:41 by-path crw-rw----. 1 root video 226, 1 23 oct. 17:41 card1 crw-rw-rw-. 1 root render 226, 128 23 oct. 17:41 renderD128 frigate@localhost:~$ sudo usermod -aG render frigate frigate@localhost:~$ sudo usermod -aG video frigate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#128274; &lt;strong&gt;S&#233;curit&#233; et permissions&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; --group-add keep-groups \ --security-opt label=disable \ --cap-add CAP_PERFMON \ --cap-add SYS_ADMIN \&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--group-add keep-groups&lt;/code&gt; autorise le conteneur &#224; h&#233;riter des groupes secondaires de l'utilisateur h&#244;te.&lt;br class='autobr' /&gt;
Cependant, ici, elle est superflue : les p&#233;riph&#233;riques GPU sont explicitement mont&#233;s via &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--device /dev/dri:/dev/dri&lt;/code&gt;, et l'utilisateur qui lance le conteneur &lt;i&gt;rootless&lt;/i&gt; est d&#233;j&#224; membre des groupes n&#233;cessaires (video et render).&lt;br class='autobr' /&gt;
Cette ligne est conserv&#233;e uniquement &#224; titre informatif.&lt;/p&gt;
&lt;p&gt;Sur une distribution &lt;strong&gt;Fedora Server&lt;/strong&gt;, la configuration par d&#233;faut de &lt;strong&gt;SELinux&lt;/strong&gt; emp&#234;che un conteneur rootless d'acc&#233;der aux statistiques du GPU, ce qui g&#233;n&#232;re l'erreur :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Unable to poll intel GPU stats: Failed to initialize PMU! (Operation not permitted)&lt;/code&gt;.&lt;br class='autobr' /&gt;
Les options permettent simplement de contourner cette restriction et d'obtenir l'acc&#232;s aux statistiques GPU, au prix d'un compromis sur la s&#233;curit&#233;.&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--security-opt label=disable&lt;/code&gt; : D&#233;sactive l'isolation SELinux. &lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--cap-add CAP_PERFMON&lt;/code&gt; : Autorise la lecture des compteurs de performance mat&#233;riels (GPU/CPU).	Requis pour la t&#233;l&#233;m&#233;trie GPU (intel_gpu_top, Frigate GPU stats).&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--cap-add SYS_ADMIN&lt;/code&gt; : Donne un large acc&#232;s syst&#232;me (quasi root).&lt;/p&gt;
&lt;p&gt;
Pour m&#233;moire &#233;galement, l'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--privileged&lt;/code&gt; conf&#232;re au conteneur des privil&#232;ges quasi &#233;quivalents &#224; ceux du root de l'h&#244;te. Cela permet l'acc&#232;s direct &#224; tous les p&#233;riph&#233;riques (/dev/dri/*, /dev/video*, etc.), rendant superflue la configuration des groupes pour l'acc&#232;s GPU.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En environnement de production, l'acc&#232;s aux statistiques du GPU n'&#233;tant pas vital, il est conseill&#233; de retirer ces options afin de r&#233;duire les risques et renforcer la s&#233;curit&#233;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#128194; &lt;strong&gt;Volumes et r&#233;pertoires mont&#233;s&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;-v /etc/localtime:/etc/localtime:ro	. -v /home/frigate/config:/config:z -v /home/frigate/media:/media/frigate:z&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ces options sont classiques sous Docker ou Podman et permettent de partager certains fichiers ou volumes entre l'h&#244;te et le conteneur.&lt;br class='autobr' /&gt;
Il faut toutefois pr&#234;ter une attention particuli&#232;re au montage des volumes : l'ajout de l'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;:z&lt;/code&gt; est n&#233;cessaire sous &lt;strong&gt;SELinux&lt;/strong&gt; afin d'ajuster automatiquement le contexte de s&#233;curit&#233; et permettre l'acc&#232;s aux donn&#233;es par le conteneur.&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--tmpfs /tmp/cache:size=1000000000,mode=1777&lt;/code&gt;&lt;br class='autobr' /&gt;
Cette option cr&#233;ee un Ramdisk temporaire en m&#233;moire vive (&#8776; 1 Go) pour le cache vid&#233;o (plus rapide que le disque), accessible &#224; tous (mode=1777)&lt;/p&gt;
&lt;p&gt;&#127760; R&#233;seau et ports expos&#233;s&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; -p 5000:5000 \ -p 1935:1935 \ -p 8554:8554 \ -p 8555:8555/tcp \ -p 8555:8555/udp \&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ces options sont &#233;galement classiques sous Docker ou Podman et permettent d'exposer les ports de l'interface web de frigate (5000), des flux RTMP(1935) , des flux RTSP restream&#233;s (8554) et des flux WebRTC faible latence (8555 / UDP &amp; TCP)&lt;/p&gt;
&lt;p&gt;&#127807; &lt;strong&gt;Variables d'environnement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;-e FRIGATE_RTSP_PASSWORD=''monMotdePasse''&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Frigate int&#232;gre un serveur RTSP interne qui permet de restreamer les flux vid&#233;o des cam&#233;ras (par exemple pour les visualiser dans Home Assistant, VLC ou d'autres clients RTSP). La variable d'environnement FRIGATE_RTSP_PASSWORD sert &#224; d&#233;finir le mot de passe RTSP utilis&#233; pour acc&#233;der &#224; ces flux restream&#233;s sur &lt;i&gt;rtsp ://ip_du_serveur:8554/nom_de_camera ?user=frigate&amp;password='monMotdePasse'&lt;/i&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;4. Hailo 8L / Compilation &lt;/h2&gt;
&lt;p&gt;Le syst&#232;me logiciel Hailo est une pile d'&#233;l&#233;ments qui interagissent ensemble.&lt;/p&gt;
&lt;p&gt;1&#65039;&#8419; Pilote PCIe (Kernel Driver) : C'est le module bas niveau qui permet au syst&#232;me d'exploitation (Fedora Server) de voir le p&#233;riph&#233;rique et de communiquer avec lui (lecture/&#233;criture sur le bus PCIe).&lt;/p&gt;
&lt;p&gt;2&#65039;&#8419; Firmware (hailo8_fw.bin) : C'est le microcode qui est charg&#233; sur le Hailo-8L lui-m&#234;me par le pilote au d&#233;marrage. Il g&#232;re le fonctionnement interne de la puce.&lt;/p&gt;
&lt;p&gt;3&#65039;&#8419; Runtime HailoRT : C'est la biblioth&#232;que que vos applications utilisent pour envoyer des mod&#232;les et des donn&#233;es au p&#233;riph&#233;rique.&lt;/p&gt;
&lt;p&gt;Le pilote PCIe (driver), le runtime HailoRT (biblioth&#232;que logicielle) et le firmware du Hailo-8L doivent &lt;strong&gt;id&#233;alement &#234;tre de la m&#234;me version&lt;/strong&gt;, cela &#233;vite d'avoir &#224; ce poser des questions lorsque cela ne fonctionne pas.&lt;/p&gt;
&lt;p&gt;&#9881;&#65039; &lt;strong&gt;V&#233;rification de la d&#233;tection physique (PCIe)&lt;/strong&gt;&lt;br class='autobr' /&gt;
La commande lspci permet de v&#233;rifier la pr&#233;sence de la carte Hailo sur le bus PCI Express :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;johann@localhost:~$ lspci -nnk | grep -i hailo 04:00.0 Co-processor [0b40]: Hailo Technologies Ltd. Hailo-8 AI Processor [1e60:2864] (rev 01) Subsystem: Hailo Technologies Ltd. Hailo-8 AI Processor [1e60:2864] Kernel driver in use: hailo Kernel modules: hailo_pci&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si la carte est d&#233;tect&#233;e, une ligne mentionnant l'appareil devrait apparaitre. Les ligne &#171; Kernel driver in use &#187; et &#171; Kernel driver &#187; devraient &#234;tre vide &#224; ce stade, mais vous voyez un retour car, au moment o&#249; j'&#233;cris ceci, mon syst&#232;me est op&#233;rationnel et le pilote est d&#233;j&#224; charg&#233;.&#034;&lt;/p&gt;
&lt;p&gt;Si rien n'appara&#238;t : La carte n'est pas d&#233;tect&#233;e. Le probl&#232;me est mat&#233;riel (mauvaise installation, slot PCIe d&#233;sactiv&#233;/d&#233;fectueux, ou alimentation, ...).&lt;/p&gt;
&lt;p&gt;&#128269; &lt;strong&gt;Identification de la version du Runtime HailoRT&lt;/strong&gt;&lt;br class='autobr' /&gt;
Comme indiqu&#233; pr&#233;c&#233;demment, les trois composants de la pile logicielle Hailo doivent id&#233;alement &#234;tre de versions compatibles. Le driver s'ex&#233;cute sur le syst&#232;me h&#244;te, tandis que le runtime et les biblioth&#232;ques logicielles fonctionnent &#224; l'int&#233;rieur du conteneur Frigate. Une fois le conteneur op&#233;rationnel, la commande podman ci-dessus permet de v&#233;rifier la version du runtime utilis&#233;e par l'image Frigate.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;frigate@localhost:~$ podman exec frigate hailortcli --version HailoRT-CLI version 4.21.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#9881;&#65039; &lt;strong&gt;Compilation du pilote PCIe (Kernel Driver)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La documentation et les fichiers n&#233;cessaires pour la carte Hailo-8L requi&#232;rent la cr&#233;ation d'un compte d&#233;veloppeur sur le site &lt;a href=&#034;https://hailo.ai/developer-zone/software-downloads/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Hailo.ai&lt;/a&gt;. Bien qu'un paquet .deb pr&#234;t &#224; l'emploi soit fourni pour Ubuntu, aucune solution n'est propos&#233;e pour Fedora. &lt;br class='autobr' /&gt;
Pour contourner ce probl&#232;me, je me suis appuy&#233; sur la &lt;a href=&#034;https://docs.frigate.video/frigate/installation#hailo-8l&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation de Frigate&lt;/a&gt;, qui fournit un &lt;a href=&#034;https://github.com/blakeblackshear/frigate/blob/dev/docker/hailo8l/user_installation.sh&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;script&lt;/a&gt; (&#224; adapter), permettant de t&#233;l&#233;charger directement les fichiers depuis le GitHub librement accessible, et les &#233;tapes de compilation.&lt;/p&gt;
&lt;p&gt;Avec le compte &lt;strong&gt;utilisateur administrateur&lt;/strong&gt;, voici l'ensemble des commandes que j'ai rentr&#233; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo dnf install -y gcc make cmake kernel-devel kernel-headers dkms git hailo_version='4.21.0' git clone --depth 1 --branch v${hailo_version} https://github.com/hailo-ai/hailort-drivers.git cd hailort-drivers/linux/pcie sudo make all sudo make install cd ../../ ./download_firmware.sh sudo mkdir /lib/firmware/hailo sudo cp hailo8_fw.4.21.0.bin /lib/firmware/hailo sudo ln -s /lib/firmware/hailo/hailo8_fw.4.21.0.bin /lib/firmware/hailo/hailo8_fw.bin sudo cp ./linux/pcie/51-hailo-udev.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules &amp;&amp; sudo udevadm trigger&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La r&#232;gle udev fixe les permissions sur /dev/hailo0 &#224; 0666&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cat ./linux/pcie/51-hailo-udev.rules #Change mode rules for Hailo's PCIe driver SUBSYSTEM=='hailo_chardev', MODE='0666'&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et enfin un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo modprobe hailo_pci&lt;/code&gt;, si tout c'est correctement d&#233;roul&#233;, entraine avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo dmesg&lt;/code&gt; le chargement du driver :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[161447.538082] hailo: Init module. driver version 4.21.0 [161447.538197] hailo 0000:04:00.0: Probing on: 1e60:2864... [161447.538205] hailo 0000:04:00.0: Probing: Allocate memory for device extension, 13192 [161447.549591] hailo 0000:04:00.0: Probing: Device enabled [161447.549626] hailo 0000:04:00.0: Probing: mapped bar 0 - 000000007146fbe2 16384 [161447.549639] hailo 0000:04:00.0: Probing: mapped bar 2 - 000000002a9ea0a1 4096 [161447.549650] hailo 0000:04:00.0: Probing: mapped bar 4 - 0000000064a2fabf 16384 [161447.549657] hailo 0000:04:00.0: Probing: Setting max_desc_page_size to 4096, (page_size=4096) [161447.549749] hailo 0000:04:00.0: Probing: Enabled 64 bit dma [161447.549755] hailo 0000:04:00.0: Probing: Using userspace allocated vdma buffers [161447.549761] hailo 0000:04:00.0: Disabling ASPM L0s [161447.549767] hailo 0000:04:00.0: Successfully disabled ASPM L0s [161447.552467] hailo 0000:04:00.0: soft reset finished [161447.552471] hailo 0000:04:00.0: Soft reset done [161447.552475] hailo 0000:04:00.0: Writing file hailo/hailo8_fw.bin [161447.599845] hailo 0000:04:00.0: File hailo/hailo8_fw.bin written successfully [161447.599849] hailo 0000:04:00.0: Writing file hailo/hailo8_board_cfg.bin [161447.599929] hailo 0000:04:00.0: File hailo/hailo8_board_cfg.bin written successfully [161447.599931] hailo 0000:04:00.0: Writing file hailo/hailo8_fw_cfg.bin [161447.599985] hailo 0000:04:00.0: File hailo/hailo8_fw_cfg.bin written successfully [161447.689228] hailo 0000:04:00.0: NNC Firmware loaded successfully [161447.689238] hailo 0000:04:00.0: FW loaded, took 138 ms [161447.700933] hailo 0000:04:00.0: Probing: Added board 1e60-2864, /dev/hailo0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il faut maintenant adapter la commande de lancement du conteneur Frigate pour qu'elle prenne en compte le nouveau p&#233;riph&#233;rique /dev/hailo0, fra&#238;chement reconnu par le syst&#232;me.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;podman run --replace -d --name frigate --restart=unless-stopped --shm-size=256m --device /dev/hailo0:/dev/hailo0 --device /dev/dri:/dev/dri -v /etc/localtime:/etc/localtime:ro -v /home/frigate/config:/config:z -v /home/frigate/media:/media/frigate:z --tmpfs /tmp/cache:size=1000000000,mode=1777 -p 5000:5000 -p 1935:1935 -p 8554:8554 -p 8555:8555/tcp -p 8555:8555/udp -e FRIGATE_RTSP_PASSWORD='monMotdePasse' ghcr.io/blakeblackshear/frigate:stable&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La commande &lt;strong&gt;hailortcli fw-control identify&lt;/strong&gt; lanc&#233;e &#224; l'int&#233;rieur du conteneur Frigate retourne l'&lt;strong&gt;erreur 13 (Permission denied)&lt;/strong&gt;, indiquant un d&#233;faut de permission d'acc&#232;s au Hailo.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;frigate@localhost:~$ podman exec frigate hailortcli fw-control identify [HailoRT] [error] CHECK failed - Failed to open device file /dev/hailo0 with error 13 [HailoRT] [error] CHECK_SUCCESS failed with status=HAILO_DRIVER_OPERATION_FAILED(36) [HailoRT] [error] CHECK_SUCCESS failed with status=HAILO_DRIVER_OPERATION_FAILED(36) [HailoRT] [error] CHECK_SUCCESS failed with status=HAILO_DRIVER_OPERATION_FAILED(36) [HailoRT CLI] [error] CHECK_SUCCESS failed with status=HAILO_DRIVER_OPERATION_FAILED(36)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;N'ayant pas install&#233; le runtime HailoRT sur l'h&#244;te, il n'est pas possible de tester la commande directement depuis celui-ci.&lt;br class='autobr' /&gt;
Cependant, les droits d'acc&#232;s sur /dev/hailo0 &#233;tant corrects et le driver PCIe correctement charg&#233;, SELinux appara&#238;t comme le principal suspect de ce probl&#232;me.&lt;/p&gt;
&lt;p&gt;Dans le terminal &lt;strong&gt;utilisateur administrateur&lt;/strong&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;johann@localhost:~$ sudo ausearch -m AVC -ts recent ---- time-&gt;Mon Oct 27 09:46:00 2025 type=AVC msg=audit(1761554760.453:1201): avc: denied { read write } for pid=75883 comm=&#034;hailortcli&#034; name=&#034;hailo0&#034; dev=&#034;devtmpfs&#034; ino=812 scontext=system_u:system_r:container_t:s0:c132,c197 tcontext=system_u:object_r:device_t:s0 tclass=chr_file permissive=0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les &lt;strong&gt;logs SELinux&lt;/strong&gt; indique bien un soucis. Je &lt;strong&gt;d&#233;sactive temporairement SELinux&lt;/strong&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;johann@localhost:~$ getenforce Enforcing johann@localhost:~$ sudo setenforce 0 johann@localhost:~$ getenforce Permissive&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et dans le terminal &lt;strong&gt;utilisateur frigate&lt;/strong&gt;, on relance la commande :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;frigate@localhost:~$ podman exec frigate hailortcli fw-control identify Executing on device: 0000:04:00.0 Identifying board Control Protocol Version: 2 Firmware Version: 4.21.0 (release,app,extended context switch buffer) Logger Version: 0 Board Name: Hailo-8 Device Architecture: HAILO8L Serial Number: HLDDxxxxxxxxxxxx Part Number: HMxxxxxxxxxx Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Bingo !!!&lt;/strong&gt; mais ne pas oublier de r&#233;tablir le mode &#171; Enforcing &#187; de SELinux avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo setenforce 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Je ne suis clairement pas un expert de SELinux, loin de l&#224;. Heureusement, ChatGPT m'a traduit tout &#231;a dans un langage enfin compr&#233;hensible par des &#234;tres humains. &#128517;&lt;/p&gt;
&lt;div class='spip_document_54 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/chatgpt_selinux_hailo.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/chatgpt_selinux_hailo.png?1761556820' width='500' height='236' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;johann@localhost:~$ ls -Z /dev/hailo0 system_u:object_r:device_t:s0 /dev/hailo0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tout comme Gemini :&lt;br class='autobr' /&gt;
&lt;i&gt;Gemini : Ce message de refus (AVC denied) de SELinux est tr&#232;s pr&#233;cis et indique clairement que le contexte de s&#233;curit&#233; de votre conteneur (container_t) n'a pas la permission d'acc&#233;der en lecture et en &#233;criture (read write) au p&#233;riph&#233;rique Hailo (hailo0), qui a le contexte de p&#233;riph&#233;rique g&#233;n&#233;rique (device_t).&lt;/i&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;5. Hailo 8L / SELinux &lt;/h2&gt;
&lt;p&gt;Apr&#232;s plusieurs &#233;changes avec les IA et quelques tests, deux solutions se d&#233;gagent. Pour ma part, j'ai mis en &#339;uvre avec succ&#232;s la seconde, bas&#233;e sur la cr&#233;ation d'une politique SELinux sp&#233;cifique car c'est la solution pr&#233;conis&#233;e par Cockpit dans le menu SELinux de l'interface.&lt;/p&gt;
&lt;div class='spip_document_58 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/capture_cockpit_selinux.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/capture_cockpit_selinux.png?1761608821' width='500' height='229' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;1&#65039;&#8419; &lt;strong&gt;Solution semanage / restorecon&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; sudo semanage fcontext -a -t container_file_t '/dev/hailo0'&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Ceci &#233;tablit une r&#232;gle persistante (une &#034;policy file context&#034;) dans la base de donn&#233;es de SELinux.&lt;/li&gt;&lt;li&gt;La r&#232;gle dit : &#034;Chaque fois que le syst&#232;me rencontre le chemin /dev/hailo0, il doit lui attribuer le type container_file_t.&#034;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; sudo restorecon -v /dev/hailo0 :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Ceci est la commande d'ex&#233;cution. Elle applique imm&#233;diatement la r&#232;gle d&#233;finie par semanage fcontext.&lt;/li&gt;&lt;li&gt; Elle change le contexte de s&#233;curit&#233; actuel du fichier /dev/hailo0 en container_file_t.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;La probl&#233;matique de cette approche est qu'elle autorise tous les conteneurs &#224; faire toutes les op&#233;rations (lecture/&#233;criture, etc.) sur /dev/hailo0.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour att&#233;nuer cette probl&#233;matique, on peut s'assurer que le p&#233;riph&#233;rique /dev/hailo0 appartient &#224; un groupe sp&#233;cifique (par exemple, le groupe hailo). L'utilisateur ex&#233;cutant le conteneur Frigate (en mode rootless) doit ensuite &#234;tre ajout&#233; &#224; ce m&#234;me groupe pour h&#233;riter des droits d'acc&#232;s.&#034;&lt;/p&gt;
&lt;p&gt;Le fichier &#171; /etc/udev/rules.d/51-hailo-udev.rules &#187; serait modifier pour contenir &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;SUBSYSTEM=='hailo_chardev', GROUP='hailo', MODE='0660'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;2&#65039;&#8419; &lt;strong&gt;Solution audit2allow&lt;/strong&gt;&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;i&gt;Installation des Outils N&#233;cessaires&lt;/i&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo dnf install policycoreutils-devel -y&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Identification des refus dans les logs&lt;/i&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo ausearch -m avc | grep hailo&lt;/code&gt;&lt;br class='autobr' /&gt;
Toutes les tentatives infructueuses devraient s'afficher&lt;/li&gt;&lt;li&gt; &lt;i&gt;G&#233;n&#233;ration d'une r&#232;gle de politique SELinux&lt;/i&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo ausearch -m avc -c hailortcli | audit2allow -M hailo&lt;/code&gt;&lt;br class='autobr' /&gt;
&#128073; Cela cr&#233;e deux fichiers dans ton r&#233;pertoire courant :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; hailo.te &#8594; le texte de la r&#232;gle SELinux&lt;/li&gt;&lt;li&gt; hailo.pp &#8594; le module compil&#233; pr&#234;t &#224; &#234;tre charg&#233;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;module hailo 1.0; require { type container_t; type device_t; class chr_file { ioctl open read write }; } #============= container_t ============== #!!!! This avc can be allowed using the boolean 'container_use_devices' allow container_t device_t:chr_file { ioctl read write }; #!!!! This avc is allowed in the current policy allow container_t device_t:chr_file open;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;i&gt;Chargement du module de politique hailo&lt;/i&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo semodule -i hailo.pp&lt;/code&gt;&lt;br class='autobr' /&gt;
Cette r&#232;gle devient persistante entre les red&#233;marrages.&lt;/li&gt;&lt;li&gt; &lt;i&gt;V&#233;rification Finale&lt;/i&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo semodule -l | grep hailo&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Lancez &#224; nouveau dans le terminal utilisateur standard,la commande qui &#233;chouait :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;podman exec -it frigate hailortcli fw-control identify&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Si la politique a &#233;t&#233; correctement appliqu&#233;e, la commande devrait maintenant r&#233;ussir &#224; s'ex&#233;cuter, et vous verrez les d&#233;tails de votre carte Hailo-8L. Votre syst&#232;me reste en mode enforcing, garantissant la s&#233;curit&#233; pour toutes les autres op&#233;rations non li&#233;es &#224; votre carte.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;5. Podman Frigate / Systemd &lt;/h2&gt;
&lt;p&gt;Deux approches sont possibles :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Utiliser Quadlet, la m&#233;thode recommand&#233;e et native pour l'int&#233;gration de Podman avec systemd,&lt;/li&gt;&lt;li&gt; ou Employer la m&#233;thode dite &#171; classique &#187;, d&#233;sormais consid&#233;r&#233;e comme obsol&#232;te mais toujours parfaitement fonctionnelle, via la commande suivante :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;podman generate systemd --name frigate --files --new&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;J'ai mis en oeuvre pour ma part la deuxi&#232;me solution, voici mon mode op&#233;ratoire&lt;br class='autobr' /&gt;
&lt;i&gt;Dans un terminal de l'&lt;strong&gt;utilisateur standard Frigate&lt;/strong&gt; :&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Lancer le container frigate avec ces options d&#233;finitives :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;podman run --replace -d --name frigate --restart=unless-stopped --shm-size=256m --device /dev/hailo0:/dev/hailo0 --device /dev/dri:/dev/dri -v /etc/localtime:/etc/localtime:ro -v /home/frigate/config:/config:z -v /home/frigate/media:/media/frigate:z --tmpfs /tmp/cache:size=1000000000,mode=1777 -p 5000:5000 -p 1935:1935 -p 8554:8554 -p 8555:8555/tcp -p 8555:8555/udp -e FRIGATE_RTSP_PASSWORD='motDePasse' ghcr.io/blakeblackshear/frigate:stable&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; S'assurer du bon fonctionnement de frigate, avec une attention particuli&#232;re pour l'acc&#233;l&#233;ration GPU et NPU Hailo. Les &#171; journaux syst&#232;me &#187; et les &#171; Incateurs syst&#232;mes &#187; du menu permettent d'&#233;tablir rapidement un diagnostique.&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; G&#233;n&#233;rer le fichier container-frigate.service avec la commande&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;podman generate systemd --name frigate --files --new&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Valider le contenu du container-frigate.service : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cat container-frigate.service&lt;/code&gt; et modifier au besoin&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Cr&#233;er le r&#233;pertoire /home/frigate/.config/systemd/user et copier/d&#233;placer le fichier container-frigate.service dans ce r&#233;pertoire&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mkdir -p ~/.config/systemd/user cp ./container-frigate.service ~/.config/systemd/user&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Informer systemd d'une modification des fichiers de configuration : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;systemctl --user daemon-reload&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Activer le service container frigate : &lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;systemctl --user enable --now container-frigate.service&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Dans un terminal de l'&lt;strong&gt;utilisateur administrateur&lt;/strong&gt; :&lt;/i&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo loginctl enable-linger frigate&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Bien que n'ayant pas mis en oeuvre la premi&#232;re solution (Quadlet), le &lt;a href=&#034;https://www.linuxtricks.fr/wiki/quadlet-execution-de-conteneurs-podman-sous-systemd&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;site linuxtricks&lt;/a&gt; propose un &#233;clairage tr&#232;s pertinent sur la m&#233;thode.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;6. Conclusion &lt;/h2&gt;
&lt;p&gt;Je ne pr&#233;tends pas ma&#238;triser tous les aspects de Podman et systemd, et il est possible que certaines &#233;tapes puissent &#234;tre am&#233;lior&#233;es.&lt;br class='autobr' /&gt;
Quoi qu'il en soit, mon installation Frigate est op&#233;rationnelle, et si ce guide peut aider ne serait-ce qu'un peu, l'objectif est atteint.&lt;/p&gt;
&lt;div class='spip_document_56 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/2cam_hailo_detector.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/2cam_hailo_detector.png?1761587361' width='500' height='114' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Apr&#232;s, on ve na pas se mentir, cela est bien plus complexe que la solution actuelle Proxmox + LXC + Docker.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>G&#233;olocalisation et Home assistant</title>
		<link>https://blog.lfz.ovh/spip.php?article3</link>
		<guid isPermaLink="true">https://blog.lfz.ovh/spip.php?article3</guid>
		<dc:date>2025-08-07T20:40:28Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>johann</dc:creator>



		<description>
&lt;p&gt;L'objectif est de g&#233;olocaliser une personne &#224; l'aide de son smartphone, puis de transmettre cette information &#224; un serveur domotique (Home Assistant dans mon cas). La position ainsi obtenue permet de d&#233;clencher des automatisations sp&#233;cifiques, comme par exemple l'activation ou la d&#233;sactivation d'une alarme. &lt;br class='autobr' /&gt; Infrastructures envisageables &lt;br class='autobr' /&gt;
Pour atteindre cet objectif, plusieurs solutions techniques peuvent &#234;tre envisag&#233;es : Utiliser l'application companion de Home Assistant : Il s'agit (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.lfz.ovh/spip.php?rubrique2" rel="directory"&gt;Domotique&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='https://blog.lfz.ovh/IMG/logo/logo_geoloc.png?1754212655' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;L'objectif est de g&#233;olocaliser une personne &#224; l'aide de son smartphone, puis de transmettre cette information &#224; un serveur domotique (Home Assistant dans mon cas). La position ainsi obtenue permet de d&#233;clencher des automatisations sp&#233;cifiques, comme par exemple l'activation ou la d&#233;sactivation d'une alarme.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Infrastructures envisageables &lt;/h2&gt;
&lt;p&gt;Pour atteindre cet objectif, plusieurs solutions techniques peuvent &#234;tre envisag&#233;es :&lt;/p&gt;
&lt;div class='spip_document_37 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/illustration.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/illustration.png?1754225382' width='500' height='500' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Utiliser l'application &lt;a href=&#034;https://play.google.com/store/apps/details?id=io.homeassistant.companion.android&amp;hl=fr&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;companion de Home Assistant&lt;/a&gt; :&lt;/strong&gt; &lt;br class='autobr' /&gt;
Il s'agit de la solution la plus simple &#224; mettre en &#339;uvre, tout en offrant une excellente fiabilit&#233;. Toutefois, cette approche pr&#233;sente quelques inconv&#233;nients :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L'utilisateur doit disposer d'un compte avec les droits d'acc&#232;s au syst&#232;me Home Assistant, ce qui n'est pas toujours pertinent ni souhaitable, notamment pour un utilisateur novice.&lt;/li&gt;&lt;li&gt; La fr&#233;quence des mises &#224; jour de position n'est pas enti&#232;rement ma&#238;trisable, ce qui peut limiter la r&#233;activit&#233; des automatisations.&lt;/li&gt;&lt;li&gt; Cette solution restreint l'utilisation &#224; l'&#233;cosyst&#232;me Home Assistant, sauf si l'on met en place dans celui-ci, des actions sp&#233;cifiques permettant de redistribuer l'information, par exemple via un partage des donn&#233;es de g&#233;olocalisation sur un broker MQTT.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Utiliser l'API REST du syst&#232;me domotique :&lt;/strong&gt;&lt;br class='autobr' /&gt;
Cette solution est compatible non seulement avec Home Assistant, mais &#233;galement avec d'autres plateformes domotiques disposant d'une interface REST, comme Jeedom. Elle pr&#233;sente toutefois certains inconv&#233;nients :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une complexit&#233; technique plus &#233;lev&#233;e, notamment en raison de la mise en &#339;uvre de m&#233;canismes d'authentification n&#233;cessaires pour garantir un niveau minimal de s&#233;curit&#233;.&lt;/li&gt;&lt;li&gt; Une adaptation sp&#233;cifique &#224; chaque syst&#232;me domotique, les API REST variant d'un syst&#232;me &#224; l'autre.&lt;br class='autobr' /&gt; Ce point peut n&#233;anmoins &#234;tre vu comme un avantage : il devient possible de cibler plusieurs syst&#232;mes en parall&#232;le en envoyant simplement les m&#234;mes donn&#233;es de g&#233;olocalisation &#224; diff&#233;rentes interfaces via des requ&#234;tes multiples.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt;&lt;strong&gt; Utiliser un broker MQTT :&lt;/strong&gt;&lt;br class='autobr' /&gt;
Il s'agit d'une solution plus universelle, compatible avec tout logiciel prenant en charge le protocole MQTT, tels que Home Assistant, Jeedom ou Node-RED. Elle permet une grande souplesse dans la distribution des donn&#233;es de g&#233;olocalisation entre diff&#233;rents syst&#232;mes.&lt;br class='autobr' /&gt;
Cependant, cette approche implique une mise en &#339;uvre plus complexe. En plus du serveur domotique, il est n&#233;cessaire de d&#233;ployer un broker MQTT, avec toute la configuration associ&#233;e, notamment en mati&#232;re de s&#233;curisation.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il est &#233;galement possible de combiner ces diff&#233;rentes solutions, afin de tirer parti des avantages de chacune.&lt;br class='autobr' /&gt;
Par exemple, l'application compagnon de Home Assistant peut &#234;tre utilis&#233;e en parall&#232;le d'un envoi de donn&#233;es via MQTT ou vers une API REST, permettant ainsi une plus grande flexibilit&#233;, une redondance fonctionnelle et une interop&#233;rabilit&#233; entre plusieurs syst&#232;mes domotiques.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Mise en garde&lt;/h2&gt;
&lt;p&gt;Quelle que soit la solution retenue, le serveur domotique &#8212; ou le broker MQTT dans le cas d'une architecture distribu&#233;e &#8212; doit &#234;tre accessible depuis Internet.&lt;br class='autobr' /&gt;
Cela implique de porter une attention particuli&#232;re &#224; la s&#233;curit&#233; des communications : utilisation de connexions chiffr&#233;es (HTTPS/TLS), authentification robuste, et protection des acc&#232;s.&lt;/p&gt;
&lt;p&gt;Il vous appartient de ma&#238;triser parfaitement les implications techniques de cette acc&#232;s depuis l'Internet, notamment en ce qui concerne :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L'ouverture de ports sur la box Internet,&lt;/li&gt;&lt;li&gt; La mise en place &#233;ventuelle d'un reverse proxy s&#233;curis&#233;,&lt;/li&gt;&lt;li&gt; La surveillance des connexions et des tentatives d'intrusion.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;En cas de doute, il est vivement conseill&#233; de s'appuyer sur des solutions s&#233;curis&#233;es pr&#234;tes &#224; l'emploi comme &lt;a href=&#034;https://www.nabucasa.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Nabu Casa&lt;/a&gt; propos&#233; par l'offre Cloud Home Assistant.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Application mobile Home Assistant &lt;a href=&#034;https://play.google.com/store/apps/details?id=io.homeassistant.companion.android&amp;hl=fr&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;companion&lt;/a&gt; :&lt;/h2&gt;&lt;div class='spip_document_38 spip_document spip_documents spip_document_image spip_documents_right spip_document_right'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/local/cache-vignettes/L435xH588/creer_user_ha-27cf7.png?1771485815' width='435' height='588' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&#192; moins d'avoir un besoin sp&#233;cifique et/ou d'&#234;tre l'administrateur de l'instance Home Assistant, il est recommand&#233; de cr&#233;er un utilisateur d&#233;di&#233; &#224; l'utilisation de l'application compagnon.&lt;br class='autobr' /&gt;
Cette cr&#233;ation se fait via le menu Param&#232;tres &gt; Personnes dans Home Assistant. L'utilisateur ainsi cr&#233;&#233; devra disposer des droits n&#233;cessaires pour se connecter &#224; l'instance&lt;/p&gt;
&lt;p&gt;L'installation et la configuration de l'application mobile Companion restent relativement accessibles. Il est n&#233;cessaire de renseigner l'adresse externe (accessible depuis Internet) de votre instance Home Assistant, ainsi que les identifiants de l'utilisateur pr&#233;alablement cr&#233;&#233;.&lt;/p&gt;
&lt;div class='spip_document_39 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/companion_global.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/companion_global.png?1754383021' width='500' height='148' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;L'autorisation d'acc&#232;s &#224; la localisation doit &#233;galement &#234;tre accord&#233;e &#224; l'application. Cette &#233;tape d&#233;clenchera des messages de configuration du syst&#232;me Android relatifs aux droits d'acc&#232;s &#224; la position.&lt;br class='autobr' /&gt;
Il est important de configurer ces permissions en ad&#233;quation avec l'objectif recherch&#233; (suivi en temps r&#233;el, en arri&#232;re-plan, etc.), afin d'assurer un fonctionnement fiable des automatisations bas&#233;es sur la g&#233;olocalisation.&lt;/p&gt;
&lt;p&gt;Une fois ces &#233;tapes termin&#233;es et valid&#233;es, une entit&#233; de type device_tracker devrait appara&#238;tre automatiquement dans Home Assistant (dans mon exemple &lt;i&gt;device_tracker.portableBlogUser&lt;/i&gt;)&lt;br class='autobr' /&gt;
Cette entit&#233; a un &#233;tat indiquant le lieu (home, not_home, maison, etc....), et expose plusieurs attributs utiles tels que la latitude, la longitude, la vitesse, la pr&#233;cision de localisation, etc.&lt;/p&gt;
&lt;div class='spip_document_40 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/device_tracker.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/device_tracker.png?1754413033' width='500' height='323' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Par ailleurs, dans l'application mobile Companion, via le menu Param&#232;tres de l'application &gt; G&#233;rer les capteurs, il est possible d'activer la remont&#233;e d'autres donn&#233;es pertinentes comme par exemple le niveau de batterie. Ces informations peuvent pr&#233;sent&#233;es un int&#233;r&#234;t dans les automatisations pour affiner les sc&#233;narios domotiques.&lt;/p&gt;
&lt;div class='spip_document_41 spip_document spip_documents spip_document_image spip_documents_right spip_document_right'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/local/cache-vignettes/L346xH614/association_tracker_person-f69ab.png?1771485815' width='346' height='614' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Home Assistant distingue les entit&#233;s de type &lt;i&gt;device_tracker&lt;/i&gt; des entit&#233;s de type &lt;i&gt;person&lt;/i&gt;, m&#234;me si le &#171; tracker &#187; a &#233;t&#233; g&#233;n&#233;r&#233; via le compte d'un utilisateur donn&#233;.&lt;br class='autobr' /&gt;
Il est donc n&#233;cessaire d'associer manuellement le &#171; tracker &#187; nouvellement cr&#233;&#233; &#224; une ou plusieurs personnes, afin de permettre &#224; Home Assistant de suivre leur pr&#233;sence de mani&#232;re coh&#233;rente. Pour effectuer cette association :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Connectez-vous en tant qu'administrateur.&lt;/li&gt;&lt;li&gt; Rendez-vous dans le menu Param&#232;tres &gt; Personnes.&lt;/li&gt;&lt;li&gt; S&#233;lectionnez la personne &#224; laquelle vous souhaitez associer le &#171; tracker &#187;.&lt;/li&gt;&lt;li&gt; En bas de la fen&#234;tre, &#224; l'endroit intitul&#233; &#171; S&#233;lectionnez les appareils qui appartiennent &#224; cette personne &#187;, choisissez ou saisissez le nom du &#171; tracker &#187;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une fois cette association r&#233;alis&#233;e, Home Assistant combinera automatiquement les informations du &#171; tracker &#187; avec l'&#233;tat de pr&#233;sence de la personne&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;Nota : Une version de l'application &lt;a href=&#034;https://apps.apple.com/fr/app/home-assistant/id1099568401&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Companion&lt;/a&gt; existe &#233;galement pour les appareils Apple (iOS). N'&#233;tant pas familier de cet environnement, je ne peux pas d&#233;tailler pr&#233;cis&#233;ment sa configuration. Toutefois, les principes g&#233;n&#233;raux restent similaires : connexion &#224; l'instance Home Assistant via une adresse externe, authentification avec un utilisateur d&#233;di&#233;, et autorisation de la g&#233;olocalisation afin de permettre les automatisations bas&#233;es sur la position.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;API REST de Home Assistant&lt;/h2&gt;
&lt;p&gt;L'objectif est d'envoyer les donn&#233;es de g&#233;olocalisation directement vers une entit&#233; device_tracker de Home Assistant, en utilisant une requ&#234;te HTTP/HTTPS adress&#233;e &#224; son API REST. Pour cela, plusieurs &#233;tapes sont n&#233;cessaires des deux c&#244;t&#233;s : c&#244;t&#233; Home Assistant et c&#244;t&#233; smartphone.&lt;/p&gt;
&lt;div class='spip_document_42 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/ha_rest_illustration.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/ha_rest_illustration.png?1754466554' width='500' height='243' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&#128295; C&#244;t&#233; Home Assistant :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; V&#233;rifier et ajuster la configuration pour autoriser l'acc&#232;s &#224; l'API REST,&lt;/li&gt;&lt;li&gt; Cr&#233;er un jeton (token) d'authentification pour le smartphone &#233;metteur,&lt;/li&gt;&lt;li&gt; Cr&#233;er l'entit&#233; &lt;i&gt;device_tracker cible&lt;/i&gt;, afin qu'elle puisse &#234;tre mise &#224; jour depuis une requ&#234;te externe.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&#128241; C&#244;t&#233; smartphone :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Mettre en place une solution capable de collecter la position GPS,&lt;/li&gt;&lt;li&gt; Transmettre &#224; Home Assistant via une requ&#234;te HTTP(S)&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;C&#244;t&#233; smartphone, plusieurs applications permettent d'automatiser la r&#233;cup&#233;ration et l'envoi de la g&#233;olocalisation. Parmi les solutions envisageables : Tasker, Automate, Node-RED (en version mobile), IFTTT, etc.&lt;/p&gt;
&lt;p&gt;Pour ma part, j'ai choisi &lt;a href=&#034;https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&amp;hl=fr&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Tasker&lt;/a&gt;, principalement pour sa simplicit&#233; de mise en &#339;uvre et sa grande flexibilit&#233;, m&#234;me il est n&#233;cessaire d'acqu&#233;rir la version payante. Internet regorge de comparatifs et de tutoriels si vous souhaitez explorer d'autres solutions logicielles que celle pr&#233;sent&#233;e ici.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&#128295; V&#233;rifier et ajuster la configuration pour autoriser l'acc&#232;s &#224; l'API REST&lt;/strong&gt;&lt;br class='autobr' /&gt;
Il est important de v&#233;rifier le contenu du fichier configuration.yaml de Home Assistant. Dans la plupart des cas, la configuration est d&#233;j&#224; correcte si vous avez mis en place un acc&#232;s externe (autre que via Nabu Casa).&lt;/p&gt;
&lt;p&gt;Par exemple, dans mon cas, l'acc&#232;s est autoris&#233; via un reverse proxy et depuis ma passerelle Internet, ce qui permet aux requ&#234;tes entrantes d'atteindre Home Assistant de mani&#232;re s&#233;curis&#233;e.&lt;/p&gt;
&lt;pre&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http: ip_ban_enabled: true login_attempts_threshold: 3 use_x_forwarded_for: true trusted_proxies: - 192.168.5.240/32 # Reverse Proxy on Local Lan - 192.168.5.254/32 # Gateway on Local Lan - 172.20.0.0/16 # Depend on HA Docker network&lt;/code&gt; &lt;/pre&gt;&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;Conseil pour les tests : Il est recommand&#233; de d&#233;sactiver &lt;strong&gt;temporairement&lt;/strong&gt; l'option ip_ban_enabled durant les phases de configuration et de test. Cela &#233;vite un bannissement en cas de tentatives incorrectes. Une fois la solution valid&#233;e et fonctionnelle, &lt;strong&gt;r&#233;activez cette option pour renforcer la s&#233;curit&#233;&lt;/strong&gt; de votre installation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;
&lt;strong&gt; &#128273; Cr&#233;er un jeton d'acc&#232;s &#224; longue dur&#233;e&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour g&#233;n&#233;rer un jeton d'acc&#232;s (long-live token) :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Cliquez sur votre nom et/ou avatar situ&#233; en bas de la barre lat&#233;rale gauche pour ouvrir le menu Profil.&lt;/li&gt;&lt;li&gt; Rendez-vous dans l'onglet &#034;S&#233;curit&#233;&#034;.&lt;/li&gt;&lt;li&gt; En bas de la page, cliquez sur le bouton &#171; Cr&#233;er un jeton &#187;.&lt;/li&gt;&lt;li&gt; Donnez un nom explicite &#224; votre jeton (par exemple : tasker_gps_tracker) et validez.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;&#9888;&#65039; Important : Copiez et sauvegardez imm&#233;diatement le jeton g&#233;n&#233;r&#233;. Il ne sera affich&#233; qu'une seule fois. Si vous le perdez, il faudra en g&#233;n&#233;rer un nouveau.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous rencontrez des difficult&#233;s lors de la mise en &#339;uvre avec Home Assistant, vous pouvez consulter ce &lt;a href=&#034;https://www.scrample.xyz/utilisation-de-tasker-avec-home-assistant/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;tutoriel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;
&lt;strong&gt; &#128736;&#65039; Cr&#233;ation de l'entit&#233; &lt;i&gt;device_tracker&lt;/i&gt; cible&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L'&#233;tape de cr&#233;ation manuelle de l'entit&#233; &#171; device_tracker &#187; via un appel au service &#171; device_tracker.see &#187;, comme d&#233;crit ci-dessous, &lt;strong&gt;n'est pas indispensable&lt;/strong&gt;. &lt;br class='autobr' /&gt;
En effet, lors de la premi&#232;re requ&#234;te valide &#233;mise par le smartphone via l'API REST, si l'entit&#233; sp&#233;cifi&#233;e n'existe pas, Home Assistant se chargera automatiquement de la cr&#233;er.&lt;/p&gt;
&lt;p&gt;Il est important de noter que la moindre erreur de syntaxe dans le nom de l'entit&#233; (champ dev_id) entra&#238;nera la cr&#233;ation d'une nouvelle entit&#233; incorrecte. Par cons&#233;quent, vous risquez de chercher une entit&#233; qui n'existe pas, simplement &#224; cause d'une faute de frappe. &lt;br class='autobr' /&gt;
C'est pourquoi je pr&#233;f&#232;re, dans ma propre d&#233;marche, cr&#233;er manuellement l'entit&#233; &#171; device_tracker &#187; dans Home Assistant avant toute automatisation c&#244;t&#233; smartphone. Cela pr&#233;sente plusieurs avantages :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &#201;viter les erreurs de nommage susceptibles de g&#233;n&#233;rer des entit&#233;s fant&#244;mes ou incorrectes,&lt;/li&gt;&lt;li&gt; Mieux structurer la configuration en ayant une vue claire sur les entit&#233;s existantes.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#192; ce jour, sauf m&#233;connaissance de ma part, Home Assistant ne permet pas de cr&#233;er directement une entit&#233; &lt;a href=&#034;https://www.home-assistant.io/integrations/device_tracker/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;i&gt;device_tracker&lt;/i&gt;&lt;/a&gt; de type gps via un menu ou par une configuration YAML (documentation officielle).&lt;/p&gt;
&lt;p&gt;&#128161; Astuce : Pour forcer la cr&#233;ation de l'entit&#233;, il est possible de simuler une mise &#224; jour via l'appel du service &#171; device_tracker.see &#187; sur une entit&#233; encore inexistante. D&#232;s la premi&#232;re mise &#224; jour re&#231;ue, Home Assistant cr&#233;era automatiquement l'entit&#233; si elle n'existe pas encore. Cette m&#233;thode n'est pas de moi, mais provient d'un &#233;change sur le &lt;a href=&#034;https://community.home-assistant.io/t/user-can-make-own-device-tracker/749072/1&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;forum officiel Home Assistant&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;service: device_tracker.see data: dev_id: fake_tracker gps: - 48.67 - 12.5 gps_accuracy: 10&lt;/code&gt; &lt;/pre&gt;
&lt;p&gt;L'acc&#232;s au service &#171; device_tracker.see &#187; se fait par le menu Outils de d&#233;veloppement, puis l'onglet Actions. Les valeurs saisies n'ont pour l'instant aucune importance.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&#128241; C&#244;t&#233; smartphone&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour la suite de cette mise en &#339;uvre, j'utiliserai l'application &lt;a href=&#034;https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&amp;hl=fr&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Tasker&lt;/a&gt; sur Android. Avant d'entrer dans les d&#233;tails, il est important de bien comprendre deux concepts fondamentaux de ce logiciel :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Les Profils&lt;/strong&gt; : ils d&#233;finissent les conditions ou d&#233;clencheurs (ex. changement de position, niveau de batterie, heure, connexion &#224; un WIFI particulier, etc.). Il peuvent &#234;tre &lt;strong&gt;actifs&lt;/strong&gt; ou &lt;strong&gt;inactifs&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Les Actions&lt;/strong&gt; : ce sont les t&#226;ches ex&#233;cut&#233;es lorsque les conditions d'un profil sont remplies (ex. envoi d'une requ&#234;te HTTP, affichage de notification, etc.).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans un premier temps, pour assurer une mise &#224; jour r&#233;guli&#232;re de la position, il est possible de d&#233;finir un profil cyclique dans Tasker. Par exemple, un d&#233;clenchement toutes les 5 minutes permet un bon compromis entre pr&#233;cision et consommation de batterie.&lt;/p&gt;
&lt;p&gt;La cr&#233;ation d'un tel profil se fait depuis l'onglet &#171; Profils &#187; de Tasker :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Appuyez sur le bouton &#171; + &#187; pour ajouter un nouveau profil.&lt;/li&gt;&lt;li&gt; S&#233;lectionnez le contexte &#034;Heure&#034;.&lt;/li&gt;&lt;li&gt; D&#233;finissez :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Heure de d&#233;but : 00:00&lt;/li&gt;&lt;li&gt; Heure de fin : 23:59&lt;/li&gt;&lt;li&gt; Fr&#233;quence : toutes les 5 minutes (ou autre selon vos besoins)
&lt;div class='spip_document_44 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/local/cache-vignettes/L303xH643/profil_tasker_5mn-6b36f.png?1771485815' width='303' height='643' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;Ce param&#233;trage permet au profil d'&#234;tre actif en continu tout au long de la journ&#233;e, avec une activation toutes les 5 minutes. &lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une fois la configuration du profil valid&#233;e (en appuyant sur la fl&#232;che retour en haut &#224; gauche), Tasker vous proposera d'associer une t&#226;che, soit une nouvelle t&#226;che, soit une t&#226;che existante.&lt;/p&gt;
&lt;p&gt;Cette t&#226;che sera ex&#233;cut&#233;e automatiquement &#224; chaque fois que le profil devient actif . Pour ma part, j'ai choisi de cr&#233;er une nouvelle t&#226;che que j'ai nomm&#233;e &#171; Localisation &#187;. Bien entendu, ces valeurs sont &#224; adapter selon votre propre sc&#233;nario.&lt;/p&gt;
&lt;p&gt;Ce profil s'activera bri&#232;vement &#224; l'intervalle sp&#233;cifi&#233;. Lorsqu'il est actif, l'action associ&#233;e &#171; Localisation &#187; aura pour r&#244;le de :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Acqu&#233;rir la position GPS actuelle du smartphone (latitude, longitude),&lt;/li&gt;&lt;li&gt; Formater ces donn&#233;es dans un un payload JSON,&lt;/li&gt;&lt;li&gt; Envoyer une requ&#234;te HTTPS/POST sur l'API REST Home Assistant, en incluant le token d'acc&#232;s pr&#233;alablement g&#233;n&#233;r&#233;.&lt;/li&gt;&lt;/ul&gt;&lt;div class='spip_document_43 spip_document spip_documents spip_document_image spip_documents_right spip_document_right'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/jpg/http_request_task_details.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/jpg/http_request_task_details.jpg?1754512544' width='500' height='833' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&#034;font-size: 10px;&#034;&gt;&lt;pre&gt; Task: Localisation A1: Get Location v2 [ Timeout (Seconds): 30 ] A2: HTTP Request [ Method: POST URL: https://IP_EXTERNE_HA/api/services/device_tracker/see Headers: Authorization:Bearer YOUR_TOKEN content-type:application/json Body: { &#034;dev_id&#034; : &#034;fake_tracker&#034;, &#034;gps&#034; : [%gl_latitude, %gl_longitude ], &#034;gps_accuracy&#034; : %gl_coordinates_accuracy, &#034;battery&#034; : %BATT } Timeout (Seconds): 30 Automatically Follow Redirects: On Structure Output (JSON, etc): On Continue Task After Error:On ] &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#192; ce stade, &lt;strong&gt;la g&#233;olocalisation doit &#234;tre fonctionnelle&lt;/strong&gt; et les donn&#233;es de position doivent remonter correctement dans Home Assistant. Il reste cependant une &#233;tape importante : associer l'entit&#233; &#171; device_tracker &#187; &#224; une personne.&lt;br class='autobr' /&gt;
Cette op&#233;ration se fait dans le menu Param&#232;tres &gt; Personnes, comme d&#233;crit pr&#233;c&#233;demment dans le paragraphe sur l'application Companion.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;&#128161; Il est tout &#224; fait possible d'associer plusieurs device_tracker &#224; une m&#234;me personne. Dans mon propre syst&#232;me, l'application Android Home Assistant Companion et une automatisation Tasker personnalis&#233;e remontent toutes deux ma position g&#233;ographique.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une simple action de localisation toutes les x minutes peut suffire, mais il ne faut pas n&#233;gliger l'impact de l'usage r&#233;p&#233;t&#233; du GPS sur la batterie du smartphone.&lt;/p&gt;
&lt;p&gt;Or, dans la vie quotidienne, nous restons souvent longtemps dans des lieux familiers comme le domicile, le travail ou chez des proches. Il est donc pertinent d'exploiter cette stabilit&#233; g&#233;ographique pour optimiser la fr&#233;quence des requ&#234;tes de g&#233;olocalisation, en adaptant le comportement de Tasker selon le contexte.&lt;/p&gt;
&lt;p&gt;Tasker permet justement de d&#233;finir des profils conditionnels, activ&#233;s par exemple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la connexion (ou la possibilit&#233; de connexion) &#224; un r&#233;seau Wi-Fi sp&#233;cifique,&lt;/li&gt;&lt;li&gt; la d&#233;tection de certaines antennes relais GSM (cell tower),&lt;/li&gt;&lt;li&gt; ou d'autres crit&#232;res contextuels.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans mon cas, j'ai choisi de me baser uniquement sur la connexion Wi-Fi. Cela me permet de d&#233;sactiver la g&#233;olocalisation par GPS lorsque le t&#233;l&#233;phone est connect&#233; &#224; mon r&#233;seau domestique ou professionnel, r&#233;duisant ainsi l'usage de la batterie sans perte de pr&#233;cision dans les sc&#233;narios d'automatisation.&lt;/p&gt;
&lt;p&gt;Pour cr&#233;er un profil Tasker qui ne s'active que lorsque le t&#233;l&#233;phone est connect&#233; &#224; un r&#233;seau Wi-Fi sp&#233;cifique (comme votre Wi-Fi domestique).&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Acc&#233;dez &#224; l'onglet &#8220;Profils&#8221; dans Tasker.&lt;/li&gt;&lt;li&gt; Appuyez sur le bouton &#171; + &#187; pour cr&#233;er un nouveau profil.&lt;/li&gt;&lt;li&gt; Choisissez le contexte suivant : &#201;tat &#8594; R&#233;seau &#8594; WiFi connect&#233;&lt;/li&gt;&lt;li&gt;Saisissez le nom du r&#233;seau Wi-Fi (SSID) auquel le profil doit &#234;tre associ&#233;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une fois cette &#233;tape valid&#233;e, Tasker vous proposera automatiquement d'associer une t&#226;che &#224; ce profil. Cette t&#226;che s'ex&#233;cutera lorsque le t&#233;l&#233;phone se connectera au r&#233;seau sp&#233;cifi&#233;.&lt;/p&gt;
&lt;div class='spip_document_45 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/local/cache-vignettes/L302xH280/tasker_profil_wifi-4019e.png?1771485815' width='302' height='280' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Vous pouvez &#233;galement d&#233;finir une t&#226;che lorsque le profil devient inactif, c'est-&#224;-dire quand le t&#233;l&#233;phone se d&#233;connecte du Wi-Fi. &lt;br class='autobr' /&gt;
Une fois le profil cr&#233;&#233;, vous pouvez le renommer en appuyant longuement sur son nom. Choisissez un intitul&#233; clair et explicite (ex. : WiFi Maison connect&#233;) pour faciliter la gestion de vos profils, surtout si vous en avez plusieurs actifs selon diff&#233;rents contextes.&lt;/p&gt;
&lt;p&gt;L'id&#233;e est d&#233;sormais d'associer des coordonn&#233;es GPS fixes aux lieux connus &#8212; c'est-&#224;-dire ceux qui activent un profil sp&#233;cifique &#8212; et de n'utiliser le GPS qu'en l'absence de profil actif. Bien que cette logique puisse &#234;tre r&#233;partie sur plusieurs actions, j'ai choisi de tout centraliser dans la seule t&#226;che &#171; Localisation &#187;.&lt;/p&gt;
&lt;p&gt;Tasker permet de tester si un profil est actif &#224; l'aide de l'expression &#171; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;%PACTIVE ~ *,nom_du_profil,*&lt;/code&gt; &#187;. Cette condition v&#233;rifie si le profil sp&#233;cifi&#233; figure parmi les profils actuellement actifs, d'ou les *.&lt;/p&gt;
&lt;p&gt;Je consid&#232;re, pour la suite, que deux profils ont &#233;t&#233; cr&#233;&#233;s et renomm&#233;s en Wifi_Maison_1 et Wifi_Maison_2. L'action &#171; Localisation &#187; s'articule donc d&#233;sormais comme suit :&lt;/p&gt;
&lt;div style=&#034;font-size: 10px;&#034;&gt;&lt;pre&gt; Task: Localisation A1: If [ %PACTIVE ~ *,Wifi_Maion_1,* ] A2: Variable Set [ Name: %gpsCoord To: [latitude_lieu_1, longitude_lieu_1] Structure Output (JSON, etc): On ] A3: Variable Set [ Name: %gpsAccuracy To: 20 Structure Output (JSON, etc): On ] A4: Else A5: If [ %PACTIVE ~ *,Wifi_Maion_2,* ] A6: Variable Set [ Name: %gpsCoord To: [latitude_lieu_2, longitude_lieu_2] Structure Output (JSON, etc): On ] A7: Variable Set [ Name: %gpsAccuracy To: 20 Structure Output (JSON, etc): On ] A8: Else A9: Get Location v2 [ Timeout (Seconds): 30 ] A10: Variable Set [ Name: %gpsCoord To: [%gl_latitude, %gl_longitude ] Structure Output (JSON, etc): On ] A11: Variable Set [ Name: %gpsAccuracy To: %gl_coordinates_accuracy Structure Output (JSON, etc): On ] A12: End If A13: End If A14: HTTP Request [ Method: POST URL: https://IP_EXTERNE/api/services/device_tracker/see Headers: Authorization:Bearer VOTRE_TOKEN_HA content-type:application/json Body: { &#034;dev_id&#034; : &#034;fake_tracker&#034;, &#034;gps&#034; : %gpsCoord, &#034;gps_accuracy&#034; : %gpsAccuracy, &#034;battery&#034; : %BATT } Timeout (Seconds): 30 Automatically Follow Redirects: On Structure Output (JSON, etc): On Continue Task After Error:On ] &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&#128161; Astuce bonus &#8211; Localiser automatiquement sa voiture :&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt; Tasker permet de cr&#233;er un profil actif lorsque le smartphone est connect&#233; en Bluetooth &#224; un appareil sp&#233;cifique. La majorit&#233; des v&#233;hicules modernes disposent d'un syst&#232;me multim&#233;dia avec une connexion bluetooth.&lt;br class='autobr' /&gt;
Ainsi, en utilisant un profil &#034;Bluetooth connect&#233;&#034;, il devient possible de suivre la position du v&#233;hicule en temps r&#233;el :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Lorsque que la connexion est active, la position du smartphone correspond &#224; la position du v&#233;hicule.&lt;/li&gt;&lt;li&gt; Et lorsque la connexion Bluetooth est coup&#233;e, la derni&#232;re position connue correspond tr&#232;s probablement &#224; l'endroit o&#249; le v&#233;hicule a &#233;t&#233; stationn&#233;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cette m&#233;thode est particuli&#232;rement efficace dans le cas d'un conducteur unique, comme c'est le cas pour moi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Broker MQTT&lt;/h2&gt;
&lt;p&gt;Dans le cas de l'utilisation d'un broker MQTT, la solution initiale consisterait &#224; ouvrir ses ports (par exemple 1883 pour MQTT classique, ou 8083/8084 pour WebSocket). Toutefois, cela soul&#232;ve rapidement des probl&#233;matiques de s&#233;curit&#233; et de chiffrement : un certificat SSL d&#233;di&#233; au broker et &#224; Home Assistant serait n&#233;cessaire.&lt;/p&gt;
&lt;p&gt;Dans mon cas, le certificat est d&#233;j&#224; g&#233;r&#233; par un reverse proxy pour l'ensemble du domaine (certificat wildcard). Il para&#238;t donc plus coh&#233;rent et s&#233;curis&#233; de laisser ce reverse proxy prendre en charge toute la couche HTTPS de l'infrastructure.&lt;br class='autobr' /&gt;
Dans cette optique, et sachant que faire suivre une websocket MQTT &#224; travers mon reverse proxy &#233;tant inaccessible (impossible ou hors de ma comp&#233;tence), une passerelle HTTP vers MQTT (http2mqtt) s'impose naturellement comme solution : elle permet de conserver un point d'entr&#233;e unique, s&#233;curis&#233;, tout en assurant la transmission des donn&#233;es vers le broker interne.&lt;/p&gt;
&lt;div class='spip_document_46 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/geoloc_mqtt.png?1754594560' width='500' height='325' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le serveur http2mqtt est d&#233;ploy&#233; sur une instance Docker. Plusieurs images existent ; pour ma part, j'ai utilis&#233; celles de &lt;a href=&#034;https://github.com/vsimonaitis/http2mqtt&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;vsimonaitis/http_to_mqtt&lt;/a&gt; et &lt;a href=&#034;https://hub.docker.com/r/rsteckler/docker-http-mqtt-bridge&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;rsteckler/docker-http-mqtt-bridge:v1&lt;/a&gt;. Cette solution n&#233;cessite, lors de la configuration du conteneur Docker, la cr&#233;ation d'un token afin de s&#233;curiser l'acc&#232;s. Le docker compose ressemble &#224; :&lt;/p&gt;
&lt;div style=&#034;font-size: 10px;&#034;&gt;&lt;pre&gt; --- services: http2mqtt: image: vsimonaitis/http_to_mqtt container_name: http2mqtt environment: - AUTH_KEY=VotreTokenHttp2Mqtt - MQTT_HOST=mqtt://IP_Interne_LAN_Broker:1883 - MQTT_USER=username_broker_mqtt - MQTT_PASS=mdp_broker_mqtt - PGID=1001 ports: - 5000:5000 restart: unless-stopped &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Avec le Docker Compose propos&#233;, le reverse proxy devra rediriger une URL entrante depuis l'internet (par exemple, &lt;a href=&#034;https://broker.mondomaine.fr&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://broker.mondomaine.fr&lt;/a&gt;) vers l'adresse IP h&#233;bergeant le conteneur http2mqtt, sur le port 5000.&lt;/p&gt;
&lt;p&gt;Le fonctionnement c&#244;t&#233; Tasker / smartphone ne change pas fondamentalement, seules l'adresse et la structure des donn&#233;es envoy&#233;es diff&#232;rent.&lt;/p&gt;
&lt;p&gt;L'adresse vers laquelle la requ&#234;te POST est envoy&#233;e est &lt;a href=&#034;https://broker.mondomaine.fr/post&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://broker.mondomaine.fr/post&lt;/a&gt;. Aucun header sp&#233;cifique n'est requis, bien que le format JSON soit attendu. Veillez cependant &#224; ce que votre reverse proxy transmette correctement la requ&#234;te, car le chemin /post est indispensable.&lt;/p&gt;
&lt;p&gt;La structure des donn&#233;es envoy&#233;es inclut le topic MQTT de destination et le token d&#233;finit pr&#233;c&#233;demment. Son format est le suivant :&lt;/p&gt;
&lt;div style=&#034;font-size: 10px;&#034;&gt;&lt;pre&gt; { &#034;topic&#034;:&#034;loc/fake_tracker&#034;, &#034;key&#034; :&#034;VotreTokenHttp2Mqtt&#034;, &#034;message&#034;:&#034;{\&#034;coordinates\&#034;:[latitude,longitude],\&#034;batt\&#034;:%BATT}&#034; } &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;C&#244;t&#233; Home Assistant, il est n&#233;cessaire de d&#233;finir les trackers via la configuration. La &lt;a href=&#034;https://www.home-assistant.io/integrations/device_tracker.mqtt&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation officielle&lt;/a&gt; pr&#233;sente toutes les options de configuration possibles.&lt;/p&gt;
&lt;p&gt;Disposant de nombreux &#233;quipements communiquant via MQTT, j'ai d&#233;di&#233; un r&#233;pertoire sp&#233;cifique dans Home Assistant pour les g&#233;rer. Mon fichier configuration.yaml contient ainsi la ligne suivante :&lt;/p&gt;
&lt;center&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mqtt: !include_dir_list mqtt&lt;/code&gt;&lt;/center&gt;
&lt;p&gt;ce qui indique que le r&#233;pertoire mqtt regroupe tous les &#233;quipements MQTT non pris en charge directement par l'int&#233;gration MQTT.&lt;/p&gt;
&lt;p&gt;Dans ce r&#233;pertoire, un fichier tracker.yaml g&#232;re les trackers. Son contenu est le suivant :&lt;/p&gt;
&lt;div style=&#034;font-size: 10px;&#034;&gt;&lt;pre&gt; device_tracker: - name: &#034;tracker fake_tracker&#034; json_attributes_topic: &#034;loc/fake_tracker&#034; #state_topic: &#034;loc/fake_trackerForceState&#034; unique_id: tracker fake_tracker &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'attribut &#171; &lt;i&gt;state_topic&lt;/i&gt; &#187; est optionnel et peut &#234;tre omis si &#171; &lt;i&gt;json_attributes_topic&lt;/i&gt; &#187; contient toutes les informations n&#233;cessaires &#224; Home Assistant pour d&#233;terminer l'&#233;tat.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Il est fort probable qu'il existe d'autres solutions ou approches techniques pour atteindre le m&#234;me objectif. Cet article a pour but de partager la mani&#232;re dont je l'ai mise en &#339;uvre, et non de pr&#233;senter la m&#233;thode &#224; suivre.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Domotiser une borne de recharge EV de marque LIDL</title>
		<link>https://blog.lfz.ovh/spip.php?article2</link>
		<guid isPermaLink="true">https://blog.lfz.ovh/spip.php?article2</guid>
		<dc:date>2025-08-01T08:48:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>johann</dc:creator>



		<description>
&lt;p&gt;L'enseigne LIDL commercialise, sous la marque &#171; Ultimate Speed &#187;, une borne de recharge murale USWB11 d&#233;di&#233;e aux v&#233;hicules &#233;lectriques. Cette borne est &#233;quip&#233;e d'une interface de communication de type s&#233;rie RS485. L'objectif du pr&#233;sent article est de pr&#233;senter une d&#233;marche afin de l'int&#233;grer &#224; au syst&#232;me domotique Home Assistant. &lt;br class='autobr' /&gt;
La domotisation de la borne USWB11 a pour double objectif d'optimiser l'autoconsommation en affectant le surplus de production photovolta&#239;que &#224; la recharge du (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.lfz.ovh/spip.php?rubrique1" rel="directory"&gt;Solaire&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='https://blog.lfz.ovh/IMG/logo/logo_borne_ev_esp.png?1754038088' class='spip_logo spip_logo_right' width='150' height='120' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;L'enseigne LIDL commercialise, sous la marque &#171; Ultimate Speed &#187;, une borne de recharge murale &lt;a href=&#034;https://www.lidl.fr/p/ultimate-speed-borne-de-recharge-murale-11-kw/p100368246&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;USWB11&lt;/a&gt; d&#233;di&#233;e aux v&#233;hicules &#233;lectriques. Cette borne est &#233;quip&#233;e d'une interface de communication de type s&#233;rie RS485. L'objectif du pr&#233;sent article est de pr&#233;senter une d&#233;marche afin de l'int&#233;grer &#224; au syst&#232;me domotique &lt;a href=&#034;https://www.home-assistant.io/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Home Assistant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La domotisation de la borne USWB11 a pour double objectif d'optimiser l'autoconsommation en affectant le surplus de production photovolta&#239;que &#224; la recharge du v&#233;hicule &#233;lectrique, et de limiter la puissance appel&#233;e sur le r&#233;seau ENEDIS lors d'une recharge en heures creuses, gr&#226;ce &#224; un seuil de consigne param&#233;trable.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Mise en garde&lt;/h2&gt;
&lt;p&gt;La puissance d'une borne de recharge pour v&#233;hicule &#233;lectrique install&#233;e par un &lt;strong&gt;particulier&lt;/strong&gt; est limit&#233;e &#224; &lt;strong&gt;3,7 kW (16 A)&lt;/strong&gt;. Pour les installations de puissance sup&#233;rieure, le &lt;a href=&#034;https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000043475414&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;d&#233;cret n&#176; 2021-546 du 4 mai 2021, article 15&lt;/a&gt;, impose de faire appel &#224; un professionnel disposant de la &lt;strong&gt;qualification IRVE&lt;/strong&gt; (Infrastructure de Recharge de V&#233;hicules &#201;lectriques).&lt;/p&gt;
&lt;p&gt;L'installation et l'utilisation d'&#233;quipements &#233;lectriques comportent des &lt;strong&gt;risques graves&lt;/strong&gt;, notamment d'incendie et d'&#233;lectrocution. Il est essentiel de&lt;strong&gt; respecter scrupuleusement les normes de s&#233;curit&#233; en vigueur&lt;/strong&gt; et de faire appel &#224; un &lt;strong&gt;professionnel qualifi&#233; si n&#233;cessaire&lt;/strong&gt;. Ce dernier sera en mesure de vous proposer une borne de recharge int&#233;grant par construction les fonctionnalit&#233;s d&#233;crites dans cet article. Vous &#234;tes seul &lt;strong&gt;responsable de vos actions et des cons&#233;quences&lt;/strong&gt; qui en d&#233;coulent.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Raccordement &#233;lectrique&lt;/h2&gt;
&lt;p&gt;En branchement monophas&#233;, la borne LIDL Ultimate Speed &lt;a href=&#034;https://www.lidl.fr/p/ultimate-speed-borne-de-recharge-murale-11-kw/p100368246&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;USWB11&lt;/a&gt; respecte la limitation &#233;voqu&#233;e pr&#233;c&#233;demment de 3,7 kW (16 A).&lt;br class='autobr' /&gt;
&#192; titre informatif, dans mon cas particulier, la protection est assur&#233;e par un interrupteur diff&#233;rentiel de type F, d'une sensibilit&#233; de 30 mA et un disjoncteur magn&#233;to-thermique d'un calibre 16A courbe C. Une protection par disjoncteur diff&#233;rentiel est &#233;galement envisageable (Exemple de produit &lt;a href=&#034;https://elec44.fr/disjonteurs-differentiels-monophases/6787-legrand-disjoncteur-differentiel-dx4500-visvis-un-230v-16a-typef-30ma-courbe-c-2-modules-ref-410753-3245064107532.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Legrand 410753&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;L'installation est compl&#233;t&#233;e par un contacteur heures creuses (HC) mont&#233; en s&#233;rie avec la borne de recharge, ainsi qu'un dispositif de mesure de type Shelly Pro EM-50. Le contacteur heures creuses est command&#233; via le contact sec int&#233;gr&#233; au bo&#238;tier Shelly Pro EM. Ces deux &#233;quipements sont prot&#233;g&#233;s par un disjoncteur C-2A.&lt;/p&gt;
&lt;div class='spip_document_17 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/raccordement-lidl.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/raccordement-lidl.png?1753980006' width='500' height='180' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le raccordement entre la borne de recharge et le tableau &#233;lectrique est r&#233;alis&#233; gr&#226;ce &#224; un c&#226;ble de type 3G6 (soit en 6 mm&#178;) sur les borniers 30, 33 et 34. L'acc&#232;s aux points de connexion, visibles sur l'image D, s'effectue en d&#233;vissant le panneau arri&#232;re de la borne.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Port de communication RS485 : Raccordements &amp; Param&#233;trage&lt;/h2&gt;
&lt;p&gt;La documentation de la borne USWB11 pr&#233;cise qu'elle est compatible avec le protocole &lt;a href=&#034;https://fr.wikipedia.org/wiki/Modbus&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Modbus&lt;/a&gt; et dispose de 3 ports de communication RS485 situ&#233;s &#224; cot&#233; des connexions de puissance, sur le bornier 22.&lt;/p&gt;
&lt;p&gt;La configuration des param&#232;tres de la borne s'effectue via 4 roues codeuses situ&#233;es derri&#232;re la trappe rep&#233;r&#233;e 35, sur le c&#244;t&#233; gauche du bo&#238;tier. Le courant maximal de charge peut &#234;tre r&#233;gl&#233; &#224; l'aide de la roue codeuse n&#176;42, tandis que les adresses &#171; esclaves &#187; Modbus sont d&#233;finies via les roues codeuses 41 (Net1/Net2) et 39-40 (Smart Meter Gateway).&lt;/p&gt;
&lt;p&gt;On notera &#233;galement la pr&#233;sence d'un port USB rep&#233;r&#233; 43 dans le manuel utilisateur.&lt;/p&gt;
&lt;p&gt;Les registres Modbus interrogeables sont &#233;galement document&#233;s dans le manuel utilisateur.&lt;/p&gt;
&lt;div class='spip_document_18 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/modbus_lidl.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/modbus_lidl.png?1753981242' width='500' height='149' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Malgr&#233; toutes mes tentatives, je n'ai pas &#233;t&#233; en mesure de dialoguer directement avec la box depuis un PC, aussi je soup&#231;onnes une impl&#233;mentation sp&#233;ciale du protocole. Plut&#244;t que de chercher &#224; tout r&#233;inventer, je me suis content&#233; de suivre les indications disponibles sur le &lt;a href=&#034;https://github.com/bammab/custom_components_for_esphome/tree/main/components/uswb&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Github de Max Mustermann&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les connexions de la liaison RS485 &#233;tant situ&#233;es &#224; proximit&#233; de l'alimentation en 230 V secteur, il est imp&#233;ratif de les effectuer &lt;strong&gt;HORS TENSION&lt;/strong&gt;, comme pour toute intervention sur des connexions &#233;lectriques, ceci afin d'&#233;liminer tous risques d'&#233;lectrocution.&lt;/p&gt;
&lt;p&gt;Une fois le panneau arri&#232;re referm&#233; et la borne fix&#233;e sur son support mural, le param&#233;trage des roues codeuses situ&#233;es dans la trappe de gauche peut &#234;tre r&#233;alis&#233; sous tension, en respectant &#233;videmment toutes les pr&#233;cautions d'usage. L'ouverture de la trappe rep&#233;r&#233;e 35 prot&#233;geant les roues codeuses est d&#233;tect&#233;e par le switch rep&#233;r&#233; 38 (image E), ce qui active le mode configuration et un affichage sp&#233;cifique sur l'&#233;cran de la borne. Une photo est pr&#233;sent&#233;e ci-dessous.&lt;/p&gt;
&lt;div class='spip_document_19 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/jpg/config-roues_codeuses.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/jpg/config-roues_codeuses.jpg?1753981704' width='500' height='171' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt; &lt;p&gt;Cette affichage reprend le courant de r&#233;glage de la borne (16A), l'adresse Modbus de la liaison RS485 Net1/2 (esclave n&#176;1), l'adresse Modbus de la liaison RS485 &#171; Smart Meter Gateway &#187; (ma&#238;tre adresse 0), ainsi que d'autres &#233;l&#233;ments non pertinent ici.&lt;/p&gt;
&lt;p&gt;Une fois la trappe de gauche referm&#233;e, si la communication &#233;choue, la borne affichera un message d'erreur (Error 19). Cela n'a pas d'impact dans un premier temps, l'installation reste &#224; finaliser.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;J'ai configur&#233; ma borne de recharge avec un courant maximal de 16A et j'utilise le port RS485 Net2, avec l'adresse d'esclave d&#233;finie sur 1.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Communication avec la borne&lt;/h2&gt;
&lt;p&gt;La communication entre &lt;a href=&#034;https://www.home-assistant.io/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Home Assistant&lt;/a&gt; et la borne LIDL se fera via un microcontr&#244;leur ESP32 et une carte d'adaptation RS485. Home Assistant &#233;changera en Wi-Fi avec le microcontr&#244;leur, qui, lui, communiquera en RS485 avec la borne. Plusieurs options sont disponibles pour ces deux composants :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Pour le microcontr&#244;leur, l'&lt;a href=&#034;https://www.upesy.fr/products/upesy-esp32-wroom-low-power-devkit&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ESP32 Wroom Low Power DevKit de uPesy&lt;/a&gt; est un choix convenable, et c'est surtout celui que j'avais en stock. D'autres mod&#232;les d'&lt;a href=&#034;https://www.olimex.com/Products/IoT/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Olimex&lt;/a&gt; ou Aliexpress seraient &#233;galement des choix possibles.&lt;/li&gt;&lt;li&gt; La carte d'adaptation permet d'interfacer les signaux s&#233;rie du micro-contr&#244;leur (en 3.3V), vers une liaison diff&#233;rentielle RS485 (en &#177; 7V). Le &lt;a href=&#034;https://github.com/bammab/custom_components_for_esphome/tree/main/components/uswb&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Github de Max Mustermann&lt;/a&gt;recommande le mod&#232;le &lt;a href=&#034;https://www.waveshare.com/rs485-board-3.3v.htm&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Waveshare 4777 RS485 Board (3.3V)&lt;/a&gt;, mais un mod&#232;le avec &lt;a href=&#034;https://www.waveshare.com/ttl-to-rs485-c.htm&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;s&#233;paration galvanique&lt;/a&gt; &#233;galement propos&#233; par le fabricant Warehouse, conviendrait aussi. En fonction de la carte choisie, il sera peut-&#234;tre n&#233;cessaire d'adapter le sch&#233;ma et l'alimentation de celle-ci (3.3V ou 5V).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour information, Waveshare propose une documentation claire et compl&#232;te des deux mod&#232;les de carte, &lt;a href=&#034;https://www.waveshare.com/wiki/RS485_Board_(3.3V)&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ici (mod&#232;le non isol&#233;)&lt;/a&gt; et &lt;a href=&#034;https://www.waveshare.com/wiki/TTL_TO_RS485_(C)&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ici (mod&#232;le isol&#233;)&lt;/a&gt;.&lt;/p&gt;
&lt;center&gt;&lt;small&gt;&lt;em&gt;source : &lt;a href=&#034;https://github.com/bammab/custom_components_for_esphome/issues/2&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/bammab/custom_components_for_esphome/issues/2&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/center&gt;&lt;div class='spip_document_20 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/raccordement_esp32.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/raccordement_esp32.png?1753982410' width='500' height='187' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Ce sch&#233;ma ne constitue qu'un exemple, les choix des entr&#233;es / sorties sur le micro-contr&#244;leur &#233;tant param&#233;trables depuis l'int&#233;gration ESPHome de Home Assistant, tout comme l'adresse Modbus esclave r&#233;ellement r&#233;gl&#233;e sur la borne de recharge. Les param&#232;tres de la liaison s&#233;rie RS485 sont par contre fixes et impos&#233;s par la borne : 8 bits de donn&#233;es, aucune parit&#233;, 1 bit de stop, vitesse de la ligne 4800 bits/s.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;Pour ma part, j'utilise la version isol&#233;e de la carte d'adaptation RS485. Son raccordement est plus simple, se limitant aux connexions RX, TX et aux deux fils d'alimentation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;ESPHome et int&#233;gration &#224; Home Assistant&lt;/h2&gt;
&lt;p&gt;Pour utiliser ESPHome avec Home Assistant, il est n&#233;cessaire d'ajouter ESPHome au syst&#232;me. L'installation peut &#234;tre r&#233;alis&#233;e en un clic depuis le site officiel du projet &lt;a href=&#034;https://esphome.io/guides/getting_started_hassio.html#installing-esphome-device-builder&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ESPHome&lt;/a&gt;. Cette op&#233;ration installe automatiquement l'add-on &#171; ESPHome Device Builder &#187; qui permet une programmation simplifi&#233;e &#8212; gr&#226;ce &#224; un fichier de configuration YAML &#8212; du micro-contr&#244;leur ESP32 ainsi que l'int&#233;gration &#171; ESPHome &#187; qui mettra &#224; disposition les entit&#233;s Home Assistant cr&#233;&#233;es. Une fois l'installation termin&#233;e, il est alors possible de cr&#233;er un nouvel objet connect&#233; type ESP directement depuis la barre de menu de gauche dans Home Assistant.&lt;/p&gt;
&lt;p&gt;Un fichier de configuration de base pour la borne LIDL est disponible sur le &lt;a href=&#034;https://github.com/bammab/custom_components_for_esphome/tree/main/components/uswb&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Github de Max Mustermann&lt;/a&gt;. Il devra &#234;tre adapt&#233; en fonction de votre c&#226;blage sp&#233;cifique et du mod&#232;le de votre carte d'adaptation RS485. Le premier t&#233;l&#233;versement du code vers le micro-contr&#244;leur ESP32 doit &#234;tre r&#233;alis&#233; via un c&#226;ble USB. Par la suite, les corrections et mises &#224; jour pourront ensuite &#234;tre r&#233;alis&#233;es en WIFI. Ci-dessous mon fichier de configuration :&lt;br class='autobr' /&gt;
&lt;small&gt;&lt;/p&gt;
&lt;pre&gt; esphome: name: lidl friendly_name: Lidl esp32: board: esp32dev framework: type: arduino wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot ap: ssid: &#034;LidlHA&#034; password: &#034;*************&#034; external_components: - source: github://bammab/custom_components_for_esphome uart: id: uswb_uart rx_pin: GPIO23 tx_pin: GPIO22 baud_rate: 4800 stop_bits: 1 uswb: id: uswb_controller uart_id: uswb_uart send_wait_time: 200ms address: 2 update_interval: 10s sensor: - platform: uswb id: requested_current uswb_id: uswb_controller name: &#034;USWB11A1 Requested Current&#034; number: - platform: uswb id: allowed_current uswb_id: uswb_controller name: &#034;USWB11A1 Allowed Current&#034; max_current: 16 &lt;/pre&gt;&lt;/small&gt;
&lt;p&gt;Cette configuration cr&#233;e deux entit&#233;s dans Home Assistant :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une entit&#233; de type sensor (&lt;i&gt;sensor.lidl_uswb11a1_requested_current&lt;/i&gt;) qui contient le courant maximal d&#233;livrable par la borne (ici 16A) et qui a &#233;t&#233; r&#233;gl&#233; pr&#233;c&#233;demment &#224; l'aide de la roue codeuse n&#176;42.&lt;/li&gt;&lt;li&gt; Une entit&#233; de type number (&lt;i&gt;number.lidl_uswb11a1_allowed_current)&lt;/i&gt;, r&#233;glable entre 0 et le courant maximal d&#233;livrable. Cette entit&#233; correspond au courant effectivement d&#233;livr&#233; par la borne et permet d'ajuster la puissance de charge.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Nota :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le courant minimal d&#233;livr&#233; par la borne est de 6A. Bien que l'entit&#233; number autorise une valeur comprise entre 0 et 6A, la borne ne d&#233;livrera pas de courant en dessous de ce seuil.&lt;/li&gt;&lt;li&gt; Les entit&#233;s sont renseign&#233;e uniquement lorsque la borne est sous tension (ESP32 sous tension). Quand la borne est mise hors tension, les entit&#233;s deviennent indisponibles apr&#232;s un d&#233;lai que je n'ai pas encore &#233;valu&#233;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une fois la partie logicielle fonctionnelle, le message d'erreur &#233;ventuel (Error 19) devrait normalement dispara&#238;tre. Vous pouvez red&#233;marrer la borne en coupant l'alimentation si n&#233;cessaire.&lt;/p&gt;
&lt;p&gt;J'ai opt&#233; pour la fixation de la carte micro-contr&#244;leur et de la carte d'adaptation s&#233;rie &#224; l'aide de colliers Colson, directement dans l'emplacement arri&#232;re la borne de recharge. Le micro-contr&#244;leur est aliment&#233; &#224; partir de la prise USB int&#233;gr&#233;e &#224; la borne (rep&#232;re 43). Cela n&#233;cessite le passage d'un c&#226;ble USB type A vers USB type C entre l'emplacement arri&#232;re (zone puissance et RS485) et l'emplacement lat&#233;ral gauche (zone des roues codeuses). Cette op&#233;ration, relativement simple gr&#226;ce &#224; un passe-fil, doit imp&#233;rativement &#234;tre r&#233;alis&#233;e hors tension.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Mesures et Analyses&lt;/h2&gt;
&lt;p&gt;Le courant de charge du v&#233;hicule est d&#233;sormais r&#233;glable directement depuis Home Assistant. J'ai r&#233;alis&#233; quelques essais &#233;lectriques, &#224; partir des donn&#233;es mesur&#233;es par le shelly pro 50 EM pour mon v&#233;hicule &#233;lectrique, une Toyota Bz4X. Les r&#233;sultats sont les suivants :&lt;/p&gt;
&lt;div style=&#034;color:blue;font-size:12px;&#034;&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='ide2e1_c0'&gt; Courant&#171; Home Assistant &#187;&lt;/th&gt;&lt;th id='ide2e1_c1'&gt; Courant mesur&#233; &lt;/th&gt;&lt;th id='ide2e1_c2'&gt; Puissance de charge &lt;/th&gt;&lt;th id='ide2e1_c3'&gt;Facteur de puissance &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;0 A &#8594; 6 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;3,73 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;772W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,9&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;7 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;4,68 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;1008 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,94&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;8 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;6,16 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;1357 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,96&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;9 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;7,45 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;1666W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,97&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;10 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;8,81 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;1984 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,98&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;11 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;9,82 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;2240 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,99&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;12 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;10,84 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;2458 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,99&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;13 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;11,96 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;2711 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,99&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;14 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;12,96 A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;2939 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,99&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;15 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;14,01A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;3176 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,99&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='ide2e1_c0'&gt;&lt;center&gt;16 A&lt;/td&gt;
&lt;td headers='ide2e1_c1'&gt;&lt;center&gt;15,03A&lt;/td&gt;
&lt;td headers='ide2e1_c2'&gt;&lt;center&gt;3408 W&lt;/td&gt;
&lt;td headers='ide2e1_c3'&gt;&lt;center&gt;0,99&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;L'analyse des points &lt;i&gt; 7 A ; 4.68 A ; 1008 W &lt;/i&gt; vs &lt;i&gt; 14 A ; 12.96 A ; 2939 W &lt;/i&gt; ou &lt;i&gt; 8 A ; 6.16 A ; 1357 W &lt;/i&gt; vs &lt;i&gt; 16 A ; 15.03 A ; 3408 W &lt;/i&gt; montre l'absence de lin&#233;arit&#233; entre la puissance r&#233;ellement d&#233;livr&#233;e par la borne de recharge et la consigne de courant dans Home Assistant (&lt;i&gt;number.lidl_uswb11a1_allowed_current&lt;/i&gt;).&lt;/p&gt;
&lt;div class='spip_document_21 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/analyse-courbe-chatgpt.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/analyse-courbe-chatgpt.png?1753990021' width='500' height='315' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;center&gt;&lt;small&gt;ChatGPT confirme la forme quadratique de la courbe.&lt;/small&gt;&lt;/center&gt;
&lt;p&gt;Le pilotage doit s'effectuer en puissance. Toutefois, la conversion de la consigne de puissance en une consigne de courant, n&#233;cessitant l'utilisation d'une fonction r&#233;ciproque, s'av&#232;re complexe et peu adapt&#233;e &#224; une mise en &#339;uvre dans un environnement domotique. Ainsi, deux approches plus pertinentes peuvent &#234;tre envisag&#233;es :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; On observe un &#233;cart de puissance moyen d'environ 260 W entre deux points de consigne de courant cons&#233;cutifs. Les niveaux de puissance &#233;tant d&#233;finis par des paliers discrets, une approche pertinente consisterait &#224; approximer cette caract&#233;ristique par une courbe en escalier, avec des paliers de 260 W. &lt;strong&gt;Ainsi, pour ajuster la consigne de courant dans Home Assistant, que ce soit &#224; la hausse ou &#224; la baisse il suffit de diviser la puissance allouable par 260, puis d'ajouter le r&#233;sultat &#224; la consigne de courant actuelle.&lt;/strong&gt;
&lt;div class='spip_document_22 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/courbe_escalier_puissance.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/courbe_escalier_puissance.png?1753990584' width='500' height='324' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Cette approche revient &#224; se faire un mod&#232;le discret (num&#233;rique) de la courbe, avec une r&#233;solution (quantum) de 260 W. La faible r&#233;solution, &#233;quivalente &#224; une num&#233;risation sur 4 bits, contribue &#224; att&#233;nuer les effets de la non-lin&#233;arit&#233; de la courbe.&lt;/p&gt;
&lt;/li&gt;&lt;li&gt; La seconde approche consisterait &#224; stocker les points mesur&#233;s dans une liste tri&#233;e. Il suffit alors de rechercher dans cette liste la valeur imm&#233;diatement inf&#233;rieure &#224; la puissance recherch&#233;e. L'indice de l'&#233;l&#233;ment trouv&#233; d&#233;terminerait alors la nouvelle consigne de courant &#224; appliquer dans Home Assistant. C'est en effet un algorithme classique de &#171; recherche du maximum sous plafond dans une liste tri&#233;e &#187;. &lt;br class='autobr' /&gt;
Au regard du nombre limit&#233; de points dans la liste, il est envisageable de traiter cela avec des structures &#171; if / then / else &#187;. Cette approche permet d'utiliser un template dans Home Assistant, &#233;vitant ainsi le recours &#224; des solutions plus complexes.
&lt;div style=&#034;color:blue;font-size:11px;&#034;&gt;&lt;pre&gt; {% set power = states('input_number.simul_puissance_solaire') | float(0) %} {% if power &gt;= 3408 %} 16 {% elif 3408 &gt; power &gt;= 3173 %} 15 {% elif 3173 &gt; power &gt;= 2939 %} 14 {% elif 2939 &gt; power &gt;= 2711 %} 13 {% elif 2711 &gt; power &gt;= 2458 %} 12 {% elif 2458 &gt; power &gt;= 2240 %} 11 {% elif 2240 &gt; power &gt;= 1984 %} 10 {% elif 1984 &gt; power &gt;= 1666 %} 9 {% elif 1666 &gt; power &gt;= 1357 %} 8 {% elif 1357 &gt; power &gt;= 1008 %} 7 {% else %} 6 {% endif %}&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une remarque sur ces deux m&#233;thodes : La premi&#232;re m&#233;thode offre une flexibilit&#233; accrue, permettant &#224; la consigne de courant d'&#234;tre ajust&#233;e soit de mani&#232;re relative (en fonction de son &#233;tat pr&#233;c&#233;dent), soit de mani&#232;re absolue. En revanche, la seconde m&#233;thode est plus rigide, car elle ne permet qu'un positionnement absolu de la consigne de courant.&lt;/p&gt;
&lt;p&gt;Tout ce travail pour simplement contr&#244;ler le courant de charge peut sembler peu utile en soi. Cependant, les automatisations offertes par Home Assistant permettront d'apporter des am&#233;liorations int&#233;ressantes &#224; la gestion &#233;nerg&#233;tique .&lt;/p&gt;
&lt;div class='spip_document_23 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/synoptique-elec.png?1753991509' width='500' height='415' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Avant d'aller plus loin, voici quelques pr&#233;cisions sur mon installation &#233;lectrique et les &#233;l&#233;ments d&#233;j&#224; int&#233;gr&#233;s &#224; mon syst&#232;me domotique :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Un contrat de livraison d'&#233;nergie &#233;lectrique Tempo de 6kVA et un compteur Linky, &#233;quip&#233; avec un dispositif TIC (T&#233;l&#233;Information Client) en mode standard, qui informe Home Assistant sur :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; La p&#233;riode tarifaire en cours,&lt;/li&gt;&lt;li&gt; Les consommations pour chacune des p&#233;riodes,&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Deux dispositifs de mesure de type Shelly Pro EM - 50 renvoyant :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L'&#233;tat &#233;lectrique du r&#233;seau Enedis (courant, tension, puissance, ...),&lt;/li&gt;&lt;li&gt; L'&#233;tat &#233;lectrique de la borne de recharge EV (courant, tension, puissance, ...),&lt;/li&gt;&lt;li&gt; L'&#233;tat &#233;lectrique de la maison (courant, tension, puissance, ...),&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Un onduleur solaire hybride de marque Deye avec batterie, et de l'int&#233;gration Solarman sur Home Assistant proposant entre autres :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L'&#233;tat de la batterie (SOC, puissance, courant, ...)&lt;/li&gt;&lt;li&gt; La puissance solaire produite.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Automatisation de la charge EV en &#171; Heures Creuses &#187;&lt;/h2&gt;
&lt;p&gt;Comme mentionn&#233; pr&#233;c&#233;demment, un contrat de fourniture d'&#233;lectricit&#233; Tempo a &#233;t&#233; souscrit avec une puissance apparente limit&#233;e &#224; 6 kVA. L'ajout r&#233;cent d'un v&#233;hicule &#233;lectrique introduit un risque de d&#233;passement de cette puissance contractuelle, notamment lorsque plusieurs appareils &#233;lectrom&#233;nagers ou syst&#232;mes &#233;nergivores fonctionnent simultan&#233;ment.&lt;/p&gt;
&lt;p&gt;L'objectif de l'automatisation est donc de moduler dynamiquement la puissance d&#233;livr&#233;e &#224; la borne de recharge, de mani&#232;re &#224; exploiter au maximum la puissance ENEDIS disponible sans jamais d&#233;passer un seuil de puissance param&#233;trable.&lt;/p&gt;
&lt;p&gt;Voici les relev&#233;s pour une puissance Enedis maximale fix&#233;e &#224; 5000 W :&lt;/p&gt;
&lt;div class='spip_document_24 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/regul-pc-voiture-enedis.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/regul-pc-voiture-enedis.png?1753995641' width='500' height='213' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; En d&#233;but d'heures creuses (22h00), l'automatisation limite la puissance de la borne &#233;lectrique pour &#233;viter de d&#233;passer le seuil de 5000 W cot&#233; Enedis.&lt;/li&gt;&lt;li&gt; Aux alentours de 1h00 du matin, les gros consommateurs ne n&#233;cessitant plus d'&#233;nergie, l'automatisation permet &#224; la borne &#233;lectrique d'atteindre sa puissance maximale.&lt;/li&gt;&lt;li&gt; Le petit pic/creux observ&#233; &#224; 4h30 du matin correspond au d&#233;marrage du lave-linge.&lt;/li&gt;&lt;/ul&gt;&lt;div class='spip_document_25 spip_document spip_documents spip_document_image spip_documents_right spip_document_right'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/interface_borne_ev.png?1753995982' width='500' height='547' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Pour r&#233;gler cette automatisation, nous avons besoin de 2 entit&#233;s :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une entit&#233; de type &#171; input_boolean &#187; qui permet de d'activer ou de d&#233;sactiver la r&#233;gulation &#171; heures creuses &#187; (&lt;i&gt;input_boolean.ev_charge_hc&lt;/i&gt;)&lt;/li&gt;&lt;li&gt; Une entit&#233; de type &#171; input_number &#187; qui permet d'ajuster le seuil de puissance &#224; ne pas d&#233;passer (&lt;i&gt;input_number.ev_threhold_house_max_power&lt;/i&gt;). J'ai retenu pour mon cas, un minimun &#224; 1000, un maximum &#224; 5500 et un pas de 100.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces entit&#233;s sont &#224; cr&#233;er dans l'onglet &#171; Entr&#233;es &#187; des menus &#171; param&#232;tres &#187; / &#171; Appareils et services &#187;.&lt;/p&gt;
&lt;p&gt;La premi&#232;re solution &#233;voqu&#233;e dans le paragraphe pr&#233;c&#233;dent, &#171; Mesures et Analyses &#187;, semble la plus adapt&#233;e pour assurer cette r&#233;gulation, avec ici une quantification &#224; 300 W.&lt;/p&gt;
&lt;p&gt;Elle n&#233;cessite l'ajout d'une troisi&#232;me entit&#233; (&lt;i&gt;sensor.ev_consigne_courant_hc&lt;/i&gt;) de type &#171; template / sensor &#187;, charg&#233;e de recalculer dynamiquement la consigne de courant de la borne &#224; chaque variation du seuil de puissance ou de la puissance Enedis.&lt;/p&gt;
&lt;div class='spip_document_26 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/template_consigne_courant_enedis_hc.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/template_consigne_courant_enedis_hc.png?1753996247' width='500' height='915' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;L'ensemble du calcul sera directement int&#233;gr&#233; dans le code du template au format texte &lt;a href='https://blog.lfz.ovh/IMG/txt/template-regul-courant-hc.txt' class=&#034;spip_in&#034; type='text/plain'&gt;ici&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La suite est relativement simple. &#192; chaque mise &#224; jour de l'entit&#233; contenant la consigne calcul&#233;e &#171; &lt;i&gt;sensor.ev_consigne_courant_hc&lt;/i&gt; &#187;, et si la r&#233;gulation est activ&#233;e &#171; &lt;i&gt;input_boolean.ev_charge_hc&lt;/i&gt; &#187;, la consigne de courant de la borne &#171; &lt;i&gt;number.lidl_uswb11a1_allowed_current&lt;/i&gt; &#187; est ajust&#233;e en cons&#233;quence.&lt;/p&gt;
&lt;p&gt;La condition &#171; Si PC-Voiture power est sup&#233;rieur &#224; 500 &#187; permet simplement de v&#233;rifier que le v&#233;hicule est bien connect&#233; &#224; la borne et que la charge a commenc&#233;. Cette condition est facultative, car un moyen de mesure sur la borne de recharge est alors n&#233;cessaire.&lt;/p&gt;
&lt;p&gt;De m&#234;me, la condition &#171; Si Is_Heures_Creuses est dans l'&#233;tat Activ&#233; &#187; est &#233;galement facultative Je l'ai ajout&#233; pour diff&#233;rencier le fonctionnement en heures creuses de celui bas&#233; sur l'exc&#233;dent solaire. L'information est r&#233;cup&#233;r&#233;e depuis le param&#232;tre ltarf de la t&#233;l&#233;-information du Linky &#224; l'aide du template suivant :&lt;/p&gt;
&lt;div style=&#034;color:blue;font-size:11px;&#034;&gt;&lt;pre&gt; - binary_sensor : - name : &#034;Is Heures Creuses&#034; unique_id : Is Heures Creuses state : &gt; &lt;i&gt;% set zone_tarif = states('sensor.linky_ltarf') | urlencode | replace(&#034;%20&#034;, &#034;&#034;) %&lt;/i&gt; &lt;i&gt;% if zone_tarif == &#034;HCBLEU&#034; or zone_tarif == &#034;HCBLANC&#034; or zone_tarif == &#034;HCROUGE&#034; %&lt;/i&gt; True &lt;i&gt;% else %&lt;/i&gt; False &lt;i&gt;% endif %&lt;/i&gt;
&lt;/div&gt;
&lt;p&gt;Pour palier d'&#233;ventuelles pertes d'&#233;v&#233;nements sur l'entit&#233; &#171; &lt;i&gt;sensor.ev_consigne_courant_hc&lt;/i&gt; &#187; une synchronisation automatique est effectu&#233;e toutes les minutes, garantissant ainsi une mise &#224; jour fiable de la consigne.&lt;/p&gt;
&lt;div class='spip_document_28 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/automatisation_ev_hc.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/automatisation_ev_hc.png?1753998166' width='500' height='802' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le Yaml de l'automatisation est &lt;a href='https://blog.lfz.ovh/IMG/yaml/regulation-ev-hc.yaml' class=&#034;spip_in&#034; type='text/yaml'&gt;t&#233;l&#233;chargeable ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour le fun, et pour anticiper le fonctionnement de la borne en valorisation solaire, on pourrait envisager la solution n&#176;2 du paragraphe pr&#233;c&#233;dent &#171; Mesures et Analyses &#187;. Il est n&#233;cessaire de calculer la puissance disponible correspondant &#224; la diff&#233;rence entre le seuil de puissance fix&#233; et la puissance mesur&#233;e par Enedis et tenant compte de la puissance actuellement d&#233;livr&#233;e par la borne. La connaissance de la puissance absorb&#233;e/d&#233;livr&#233;e par la borne, estim&#233;e par le r&#233;glage en cours ou mesur&#233;e, est donc indispensable. &lt;br class='autobr' /&gt;
La troisi&#232;me entit&#233; (&lt;i&gt;sensor.ev_consigne_courant_hc&lt;/i&gt;) de type &#171; template / sensor &#187; &#233;voqu&#233;e pr&#233;c&#233;demment pourrait ressembler au code suivant :&lt;/p&gt;
&lt;div class='spip_document_30 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/regul_ev_hc_v2.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/regul_ev_hc_v2.png?1753999562' width='500' height='274' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Automatisation de la charge de &#171; valorisation solaire &#187;&lt;/h2&gt;
&lt;p&gt;L'objectif est de prioriser le stockage de l'&#233;nergie solaire dans les batteries et, une fois celles-ci charg&#233;es au-del&#224; d'un seuil ajustable, rediriger l'exc&#233;dent vers la borne de recharge afin d'optimiser l'autoconsommation en chargeant mon v&#233;hicule &#233;lectrique. Ce mode de fonctionnement reproduit simplement le mode &#171; smart load &#187; disponible sur un onduleur Deye.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fonctionnement du mode &#171; valorisation solaire &#187; &lt;/strong&gt;&lt;br class='autobr' /&gt;
La borne de recharge &#171; valorisation solaire &#187; est mise sous tension via le contact sec du Shelly Pro-EM-50 et une entit&#233; Home Assistant remontant son statut passe &#224; actif si toutes les conditions suivantes sont remplies :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le mode &#171; charge solaire &#187; est activ&#233;&lt;/li&gt;&lt;li&gt; La batterie est charg&#233;e au-del&#224; du seuil haut&lt;/li&gt;&lt;li&gt; L'exc&#233;dent solaire est suffisant&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Afin d'&#233;viter des cycles marche/arr&#234;t intempestifs de la borne, notamment en cas de variations de la production solaire (passage d'un nuage, par exemple), une fois activ&#233;e dans ce mode, la borne ajustera dynamiquement sa puissance. Elle pourra &#233;galement puiser dans la batterie de stockage si n&#233;cessaire, jusqu'&#224; atteindre un seuil bas pr&#233;d&#233;fini de celle-ci.&lt;/p&gt;
&lt;p&gt;Si la batterie descend en dessous de ce seuil minimal, quelle que soit la production solaire, la borne sera automatiquement mise hors tension afin de pr&#233;server le stockage d'&#233;nergie ou de permettre sa recharge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entit&#233;s Home Assistant n&#233;cessaires &#224; l'automatisation&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;i&gt;input_boolean.ev_charge_solaire&lt;/i&gt; : Active ou de d&#233;sactive la r&#233;gulation solaire&lt;/li&gt;&lt;li&gt; &lt;i&gt;input_boolean.ev_charge_solaire_statut borne&lt;/i&gt; : Indique si la borne de recharge est sous ou hors tension.&lt;/li&gt;&lt;li&gt; &lt;i&gt;input_number.ev_charge_solaire_batterie_low&lt;/i&gt; : Seuil de batterie bas, ajustable entre 20% et 50%, par pas de 5%&lt;/li&gt;&lt;li&gt; &lt;i&gt;input_number.ev_charge_solaire_batterie_high&lt;/i&gt; : Seuil de batterie haut, ajustable entre 50% et 100%, par pas de 5%&lt;/li&gt;&lt;li&gt; &lt;i&gt;input_number.ev_charge_solaire_seuil_puissance&lt;/i&gt; : Seuil minimal de puissance solaire qui doit &#234;tre disponible pour entrer dans le mode, ajustable entre 800W et 2000W, par pas de 100W&lt;/li&gt;&lt;li&gt; &lt;i&gt;sensor.ev_solaire_consigne_courant_charge&lt;/i&gt; : de type &#171; template/sensor &#187;, cet entit&#233; contient la consigne calcul&#233;e &#224; appliquer &#224; la borne de recharge en mode solaire. Le calcul est r&#233;alis&#233; dans le code du template dispo &lt;a href='https://blog.lfz.ovh/IMG/txt/template-regul-courant-solaire.txt' class=&#034;spip_in&#034; type='text/plain'&gt;ici&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Nota : j'utilise une entit&#233; &lt;i&gt;input_number.simul_puissance_solaire&lt;/i&gt; pour simuler la puissance solaire produite et r&#233;aliser les tests.&lt;/p&gt;
&lt;div class='spip_document_31 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/template_consigne_ev_solaire.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/template_consigne_ev_solaire.png?1754000640' width='500' height='892' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Une entit&#233; de suivi du niveau de charge de la batterie est &#233;galement n&#233;cessaire. Dans mon cas, j'utilise &lt;i&gt;sensor.solarman_battery_soc&lt;/i&gt;, fournie &#233;galement par l'int&#233;gration Solarman,&lt;/p&gt;
&lt;p&gt;Les deux automatisations ci-dessous assurent la mise sous tension et l'arr&#234;t automatique de la borne de recharge en fonction de la production solaire et du niveau de charge de la batterie.&lt;/p&gt;
&lt;div class='spip_document_33 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/jpg/regul-solaire-on_off_borne.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/jpg/regul-solaire-on_off_borne.jpg?1754035955' width='500' height='260' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Interface de pilotage sur le dashboard&lt;/h2&gt;&lt;div class='spip_document_34 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/interface_hc_solaire_grand.png?1754036099' width='500' height='550' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le widget propose deux interrupteurs : l'un permet d'activer le mode recharge solaire, l'autre le mode recharge heures creuses. Il int&#232;gre &#233;galement les param&#232;tres de configuration suivants : seuil maximal de puissance appel&#233;e sur le r&#233;seau ENEDIS, seuil minimal de production solaire requis pour initier la recharge, ainsi que les niveaux de charge minimale et maximale de la batterie du v&#233;hicule.&lt;/p&gt;
&lt;p&gt;Le graphique associ&#233; affiche l'&#233;nergie journali&#232;re d&#233;livr&#233;e par la borne au v&#233;hicule, sans distinction entre l'origine de l'&#233;nergie (solaire ou heures creuses).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Bilan&lt;/h2&gt;
&lt;p&gt;Ce syst&#232;me est con&#231;u pour &#233;voluer. J'envisage d&#233;j&#224; l'ajout d'un mode manuel, permettant de r&#233;gler directement le courant de charge via le widget d&#233;j&#224; pr&#233;sent sur le dashboard Home Assistant.&lt;/p&gt;
&lt;p&gt;C'est pr&#233;cis&#233;ment l'objectif de cette r&#233;alisation : adapter finement la recharge de mon v&#233;hicule &#233;lectrique &#224; mes besoins sp&#233;cifiques, qu'il s'agisse d'optimisation &#233;nerg&#233;tique, de confort d'usage ou de contraintes techniques.&lt;/p&gt;
&lt;p&gt;L'id&#233;e de fond : Le fun bien sur mais &#233;galement op&#233;rer une transition vers un mode de transport plus sain et plus &#233;conomique, malgr&#233; l'investissement initial. Je con&#231;ois bien que tout cela n'est pas &#224; la port&#233;e technique de tous, mais des solutions cl&#233; en main existent.&lt;/p&gt;
&lt;iframe width=&#034;741&#034; height=&#034;417&#034; src=&#034;https://www.youtube.com/embed/E6ibsCOHV50&#034; title=&#034;Borne de parking &#9889; avec GESTION SOLAIRE &#9728;&#65039;(Installer borne LEKTRICO 7kw)&#034; frameborder=&#034;0&#034; allow=&#034;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#034; referrerpolicy=&#034;strict-origin-when-cross-origin&#034; allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;Une vid&#233;o int&#233;ressante illustrant une borne capable de valoriser sa propre production solaire pour la recharge de v&#233;hicule &#233;lectrique. Attention cependant, il s'agit d'une borne de 7kW qui doit &#234;tre install&#233; par un professionnel IRVE.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://blog.lfz.ovh/IMG/txt/template-regul-courant-hc.txt" length="338" type="text/plain" />
		
		<enclosure url="https://blog.lfz.ovh/IMG/yaml/regulation-ev-hc.yaml" length="718" type="text/yaml" />
		
		<enclosure url="https://blog.lfz.ovh/IMG/txt/template-regul-courant-solaire.txt" length="451" type="text/plain" />
		

	</item>
<item xml:lang="fr">
		<title>Production solaire et compteur Linky</title>
		<link>https://blog.lfz.ovh/spip.php?article1</link>
		<guid isPermaLink="true">https://blog.lfz.ovh/spip.php?article1</guid>
		<dc:date>2025-07-31T13:24:31Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>johann</dc:creator>



		<description>
&lt;p&gt;L'objectif est de synth&#233;tiser les difficult&#233;s de t&#233;l&#233;-relev&#233;s rencontr&#233;es avec le compteur Linky et une production solaire. &lt;br class='autobr' /&gt; Production photovolta&#239;que : L'installation repose sur un onduleur solaire hybride de marque Deye, mod&#232;le SG03LP1-EU, qui constitue le c&#339;ur du syst&#232;me. Deux groupes de panneaux solaires assurent la production d'&#233;lectricit&#233; : 6 panneaux solaires de 500 W chacun (Trinasolar TSM-500) sont install&#233;s en toiture, reli&#233;s en s&#233;rie, puis connect&#233;s &#224; l'une des entr&#233;es MPPT de (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.lfz.ovh/spip.php?rubrique1" rel="directory"&gt;Solaire&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='https://blog.lfz.ovh/IMG/logo/logo_solaire_linky.png?1753968213' class='spip_logo spip_logo_right' width='150' height='150' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;L'objectif est de synth&#233;tiser les difficult&#233;s de t&#233;l&#233;-relev&#233;s rencontr&#233;es avec le compteur &lt;strong&gt;Linky&lt;/strong&gt; et une production solaire.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Production photovolta&#239;que : &lt;/h2&gt;
&lt;p&gt;L'installation repose sur un onduleur solaire hybride de marque Deye, mod&#232;le SG03LP1-EU, qui constitue le c&#339;ur du syst&#232;me.&lt;/p&gt;
&lt;div class='spip_document_2 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/synoptique.png?1753885029' width='500' height='274' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Deux groupes de panneaux solaires assurent la production d'&#233;lectricit&#233; :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; 6 panneaux solaires de 500 W chacun (&lt;a href='https://blog.lfz.ovh/IMG/pdf/trina_tds_475-505_vertex-x__neg18r_28_25y_fr.pdf' class=&#034;spip_in&#034; type='application/pdf'&gt;Trinasolar TSM-500&lt;/a&gt;) sont install&#233;s en toiture, reli&#233;s en s&#233;rie, puis connect&#233;s &#224; l'une des entr&#233;es MPPT de l'onduleur hybride. &lt;br class='autobr' /&gt;
Le raccordement en courant continu (DC) &#224; l'onduleur hybride permet &#224; ce dernier de suivre et optimiser la production solaire en temps r&#233;el, et de la stopper si besoin pour &#233;viter toute injection sur le r&#233;seau ENEDIS, dans une logique d'autoconsommation uniquement.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; 4 panneaux solaires de 500 Wc chacun (&lt;a href='https://blog.lfz.ovh/IMG/pdf/dm500m10rt-b60hbt.pdf' class=&#034;spip_in&#034; type='application/pdf'&gt;DM500M10RT-B60HBT&lt;/a&gt;) sont install&#233;s au sol. &lt;br class='autobr' /&gt;
Ils sont reli&#233;s &#224; un micro-onduleur Hypontech (&lt;a href='https://blog.lfz.ovh/IMG/pdf/hms-1600-2000_datasheet.pdf' class=&#034;spip_in&#034; type='application/pdf'&gt;HMS-2000W&lt;/a&gt;) dot&#233; de 4 entr&#233;es MPPT ind&#233;pendantes, permettant d'optimiser la production de chaque panneau s&#233;par&#233;ment, notamment en cas d'ombrage partiel.&lt;br class='autobr' /&gt;
Ce micro-onduleur convertit directement l'&#233;nergie solaire en courant alternatif (AC). Il est ensuite raccord&#233; &#224; l'entr&#233;e &#8220;SmartLoad&#8221; de l'onduleur hybride, une entr&#233;e sp&#233;cialement con&#231;ue pour accueillir ce type de production AC secondaire, selon un principe de couplage AC.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;L'onduleur hybride alimente l'ensemble de l'habitation via sa sortie secourue &#8220;Load&#8221;, &#224; l'exception des consommations fortement &#233;nergivores, comme la borne de recharge pour v&#233;hicule &#233;lectrique (VE), qui est directement raccord&#233;e en amont, sur le r&#233;seau public ENEDIS.&lt;/p&gt;
&lt;p&gt;Gr&#226;ce aux param&#232;tres de configuration de l'onduleur Deye et &#224; sa pince amp&#232;rem&#233;trique, il est toutefois possible de compenser tout ou partie de cette consommation, m&#234;me si elle n'est pas physiquement connect&#233;e &#224; la sortie &#034;Load&#034;. Par exemple, lors de la recharge d'un v&#233;hicule &#233;lectrique en journ&#233;e, l'onduleur injecte automatiquement de l'&#233;nergie solaire vers le r&#233;seau pour r&#233;duire ou compenser la quantit&#233; d'&#233;lectricit&#233; qui aurait du &#234;tre pr&#233;lev&#233;e depuis ENEDIS.&lt;/p&gt;
&lt;p&gt;L'installation int&#232;gre &#233;galement un stockage de 15 kWh, assur&#233;e par trois batteries Pylontech &lt;a href='https://blog.lfz.ovh/IMG/pdf/us5000-datasheet.pdf' class=&#034;spip_in&#034; type='application/pdf'&gt;US5000&lt;/a&gt;. Ce stockage permet de stocker le surplus de production solaire de la journ&#233;e pour une utilisation diff&#233;r&#233;e, notamment le soir ou en cas de coupure r&#233;seau. Ce stockage peut &#233;galement &#234;tre recharg&#233; par le r&#233;seau ENEDIS en cas de journ&#233;e faiblement ensoleill&#233;e ou en pr&#233;vision d'un jour rouge de la tarification &lt;a href=&#034;https://particulier.edf.fr/fr/accueil/gestion-contrat/options/tempo/details.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;EDF Tempo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Probl&#233;matique avec le compteur Linky : &lt;/h2&gt;&lt;div class='spip_document_7 spip_document spip_documents spip_document_image spip_documents_right spip_document_right'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/linky_non_associe.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/linky_non_associe.png?1753901880' width='500' height='734' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;A la suite de mon passage &#224; l'option &lt;a href=&#034;https://particulier.edf.fr/fr/accueil/gestion-contrat/options/tempo/details.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;EDF Tempo&lt;/a&gt;, mes factures ont &#233;t&#233; &#233;tablies sur la base d'estimations, et non plus &#224; partir des t&#233;l&#233;-relev&#233;s automatiques du compteur Linky, comme c'&#233;tait le cas auparavant.&lt;/p&gt;
&lt;p&gt;Dans le cadre d'un changement de contrat, cela ne m'a pas imm&#233;diatement inqui&#233;t&#233; : j'ai suppos&#233; qu'un d&#233;lai de traitement &#233;tait sans doute n&#233;cessaire pour finaliser la transition.&lt;/p&gt;
&lt;p&gt;Vient ensuite la p&#233;riode hivernale, avec l'arriv&#233;e des premiers jours &#8220;blancs&#8221; et &#8220;rouges&#8221;. Je constate alors que si le compteur Linky bascule correctement entre heures pleines et heures creuses, il reste bloqu&#233; en &#8220;jour bleu&#8221;, quel que soit le signal Tempo attendu.&lt;/p&gt;
&lt;p&gt;Le &lt;a href=&#034;https://particulier.edf.fr/fr/accueil/gestion-contrat/options/tempo.html#/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;site EDF de pr&#233;vision des jours Tempo&lt;/a&gt; affiche bien la couleur du jour en cours (bleu, blanc ou rouge), ce qui confirme en apparence la bonne transmission du signal.&lt;br class='autobr' /&gt;
Cependant, il est &#233;galement pr&#233;cis&#233; que seules les informations affich&#233;es sur le compteur Linky font foi contractuellement, les donn&#233;es en ligne n'ayant qu'un caract&#232;re purement indicatif.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;Seules les informations affich&#233;es sur votre compteur sont contractuelles. Les donn&#233;es communiqu&#233;es sur le site internet le sont &#224; titre indicatif. En effet, pour des raisons techniques, des diff&#233;rences peuvent parfois survenir entre la couleur indiqu&#233;e et celle r&#233;ellement pratiqu&#233;e.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je contacte alors mon fournisseur d'&#233;nergie, qui me met en relation avec ENEDIS, le gestionnaire du r&#233;seau &#233;lectrique. C'est &#224; partir de l&#224; que ma d&#233;couverte commence.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Pulsadis 175 Hz vs CPL CENELEC A : &lt;/h2&gt;
&lt;p&gt;Historiquement, EDF utilisait un syst&#232;me de t&#233;l&#233;commande appel&#233; PULSADIS, permettant, depuis les postes de distribution HTA, de d&#233;clencher &#224; distance le changement de tarif des compteurs &#233;lectriques &#224; des horaires pr&#233;d&#233;finis.&lt;/p&gt;
&lt;p&gt;Le principe reposait sur l'injection d'un signal cod&#233; directement dans le r&#233;seau &#233;lectrique, sur une fr&#233;quence porteuse &#224; 175 Hz.&lt;br class='autobr' /&gt;
Les r&#233;cepteurs compatibles, int&#233;gr&#233;s aux compteurs &#233;lectroniques d'ancienne g&#233;n&#233;ration ou &#224; certains &#233;quipements, &#233;taient capables de reconna&#238;tre ce signal et d'ex&#233;cuter automatiquement les commutations appropri&#233;es : passage en heures pleines/heures creuses, changement de couleur tarifaire Tempo.&lt;/p&gt;
&lt;p&gt;Le site de &lt;a href=&#034;http://matthieu.benoit.free.fr/tempo/Pulsadis.htm&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Matthieu Benoit&lt;/a&gt; d&#233;crit cela avec pr&#233;cision. &#192; noter toutefois que ce site est rest&#233; en HTTP non s&#233;curis&#233;, ce qui peut entra&#238;ner des avertissements de s&#233;curit&#233; sur certains navigateurs.&lt;/p&gt;
&lt;p&gt;Avec le d&#233;ploiement du compteur communicant Linky, le syst&#232;me Pulsadis a &#233;t&#233; progressivement abandonn&#233;, au profit d'un syst&#232;me de communication bidirectionnelle par courant porteur en ligne (CPL).&lt;br class='autobr' /&gt;
En France, ce CPL utilise la bande de fr&#233;quence &#8220;CENELEC A&#8221;, qui s'&#233;tend de 35.9 kHz et 90.6 kHz. Ce canal permet &#224; Linky d'&#233;changer des donn&#233;es en temps r&#233;el avec un concentrateur, aussi bien pour la rel&#232;ve, les changements tarifaires, que pour les commandes &#224; distance. Un concentrateur peut g&#233;rer plusieurs centaines de compteurs Linky.&lt;/p&gt;
&lt;p&gt;Les compteurs Linky sont organis&#233;s en grappes, chacun fonctionnant comme un n&#339;ud au sein d'un r&#233;seau local (LAN). Ils disposent d'une adresse IPv6, ce qui leur permet d'&#234;tre identifi&#233;s et interconnect&#233;s de mani&#232;re unique sur le r&#233;seau CPL.&lt;/p&gt;
&lt;center&gt;&lt;small&gt;&lt;em&gt;source : &lt;a href=&#034;http://stop-linky46.fr/tech/cpl.htm&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://stop-linky46.fr/tech/cpl.htm&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/center&gt;&lt;div class='spip_document_9 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/jpg/schema_linky_concentrateur.jpg?1753949104' width='500' height='228' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;La liaison entre les concentrateurs Linky et le syst&#232;me de supervision d'ENEDIS s'effectue via une connexion mobile (GPRS/3G/4G), permettant la transmission des donn&#233;es collect&#233;es vers le syst&#232;me d'information central.&lt;/p&gt;
&lt;p&gt;Lorsqu'un compteur est en communication active avec le concentrateur de quartier, son adresse est dite &#8220;&lt;strong&gt;associ&#233;e&lt;/strong&gt;&#8221;. Par ailleurs, les Linky peuvent &#233;galement jouer un r&#244;le de &lt;strong&gt;r&#233;p&#233;teur&lt;/strong&gt; : ils sont capables de relayer les donn&#233;es des compteurs Linky voisins situ&#233;s hors de port&#233;e directe du concentrateur, ce qui est particuli&#232;rement utile dans des zones peu denses comme la campagne.&lt;/p&gt;
&lt;p&gt;Contrairement au syst&#232;me Pulsadis, qui n'&#233;mettait des signaux qu'&#224; des heures pr&#233;cises et limit&#233;es, le CPL utilis&#233; par les compteurs Linky transmet des &#8220;pings&#8221; toutes les minutes, 24h/24.&lt;br class='autobr' /&gt;
Ce fonctionnement en &#233;mission continue est l'un des points de discorde soulev&#233;s par les opposants au Linky : les rayonnements &#233;lectromagn&#233;tiques g&#233;n&#233;r&#233;s par les c&#226;bles &#233;lectriques sur la bande de fr&#233;quence utilis&#233;e (35.9 kHz et 90.6 kHz), bien que de faible puissance, sont per&#231;us comme pr&#233;sentant des risques sanitaires, le Centre International de Recherche sur le Cancer (CIRC) ayant class&#233; ces rayonnements de basses fr&#233;quences dans la cat&#233;gorie 2B, c'est-&#224;-dire &#8220;potentiellement canc&#233;rog&#232;nes pour l'homme&#8221;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pourquoi toutes ces pr&#233;cisions ?&lt;/strong&gt;&lt;br class='autobr' /&gt;
Parce que les onduleurs sont des appareils d'&#233;lectronique de puissance capables de g&#233;n&#233;rer diff&#233;rents types de courant, notamment du courant alternatif (AC) &#224; partir d'un courant continu (DC), en utilisant des techniques de d&#233;coupage &#224; haute fr&#233;quence (typiquement 10 &#224; 20 kHz)&lt;br class='autobr' /&gt;
Ces op&#233;rations produisent &#233;galement des signaux parasites ou harmoniques sur les lignes &#233;lectriques, dans des bandes de fr&#233;quence proches de celles utilis&#233;es par le CPL Linky.&lt;br class='autobr' /&gt;
Autant cela ne posait aucun probl&#232;me avec le syst&#232;me Pulsadis, qui &#233;tait simple et ponctuel, autant cela devient r&#233;ellement probl&#233;matique avec le CPL utilis&#233; par le Linky, dont la communication continue est plus sensible aux perturbations &#233;lectromagn&#233;tiques.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;&lt;strong&gt;Il faut alors admettre, non sans une certaine ironie, que je suis moi-m&#234;me &#224; l'origine des perturbations. &lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mon propre syst&#232;me solaire, via ses onduleurs et &#233;quipements &#233;lectroniques, interf&#232;re avec la communication CPL de mon compteur Linky.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Linky : &lt;/h2&gt;&lt;center&gt;&lt;small&gt;&lt;em&gt;source : &lt;a href=&#034;https://floressas.jimdofree.com/2017/02/12/la-fronde-anti-linky/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://floressas.jimdofree.com/2017/02/12/la-fronde-anti-linky/&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/center&gt;&lt;div class='spip_document_10 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/infra_linky.png?1753950376' width='500' height='321' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Les compteurs Linky existent en deux versions principales : G1 et G3, correspondant &#224; deux g&#233;n&#233;rations de technologie, principalement diff&#233;renci&#233;es par leur protocole de communication CPL et donc de leurs capacit&#233;s de performance.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Les Linky de type G1 exploitent uniquement 2 fr&#233;quences de la bande CENELEC-A (63.3 et 74 kHz ) avec une &lt;a href=&#034;https://fr.wikipedia.org/wiki/Modulation_par_d%C3%A9placement_de_fr%C3%A9quence&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;modulation FSK&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; Les Linky de type G3 exploitent quant &#224; eux 25 fr&#233;quences porteuses entre 35.9 kHz et 90.6 kHz (porteuse 23 &#224; 38 et 50 &#224; 58) avec une &lt;a href=&#034;https://fr.wikipedia.org/wiki/Orthogonal_frequency-division_multiplexing&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;modulation OFDM&lt;/a&gt; (Orthogonal Frequency Division Multiplexing). Ce choix permet d'atteindre &#224; la fois une meilleure immunit&#233; aux perturbations &#233;lectromagn&#233;tiques et un d&#233;bit de communication plus &#233;lev&#233;, garantissant ainsi une transmission plus fiable.
&lt;center&gt;&lt;small&gt;&lt;em&gt;source : &lt;a href=&#034;http://stop-linky46.fr/tech/cpl.htm&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://stop-linky46.fr/tech/cpl.htm&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/center&gt;&lt;div class='spip_document_8 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/jpg/bande_cpl.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/jpg/bande_cpl.jpg?1753907344' width='500' height='278' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;Nota : Les compteurs Linky de g&#233;n&#233;ration G1 et G3 partagent la m&#234;me bande de fr&#233;quence CENELEC-A ainsi que les m&#234;mes lignes &#233;lectriques pour la communication CPL. Afin d'assurer la cohabitation sans interf&#233;rences, les compteurs G3 laissent volontairement inoccup&#233;es les 11 porteuses situ&#233;es entre les canaux 39 et 49, afin de ne pas perturber les transmissions des compteurs G1 pr&#233;sents sur le r&#233;seau.&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Identifier la g&#233;n&#233;ration de son Linky&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un post du forum &lt;a href=&#034;https://forum-photovoltaique.fr/viewtopic.php?p=452438#p452438&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;forum-photovoltaique.fr&lt;/a&gt; fournit des &#233;l&#233;ments utiles pour identifier les caract&#233;ristiques techniques d'un compteur Linky &#224; partir de son num&#233;ro de s&#233;rie.&lt;/p&gt;
&lt;center&gt;&lt;small&gt;&lt;em&gt;source :&lt;a href=&#034;https://forum-photovoltaique.fr/viewtopic.php?p=452438#p452438&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://forum-photovoltaique.fr/viewtopic.php?p=452438#p452438&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/center&gt;&lt;div class='spip_document_11 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/forum_photovoltaique.png?1753953281' width='500' height='352' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Dans mon cas, le num&#233;ro de s&#233;rie 06 17 64 XXXX XX indique que je poss&#232;de un compteur Linky de marque ITRON (ce qui est &#233;galement visible directement sur le bo&#238;tier), fabriqu&#233; en 2017, de type monophas&#233; 60 A, et appartenant &#224; la g&#233;n&#233;ration CPL G3.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diagnostiquer la communication vers le concentrateur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un appui simultan&#233; et prolong&#233; sur les touches &#8220;+&#8221; et &#8220;&#8211;&#8221; du compteur Linky permet d'acc&#233;der au mode &#8220;maintenance&#8221;. Ce mode affiche des informations avanc&#233;es, notamment sur l'&#233;tat de la communication avec le concentrateur :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; pour un compteur G3, l'&#233;cran indique s'il est &#8220;associ&#233;&#8221; (connect&#233;) ou &#8220;non associ&#233;&#8221; ;&lt;/li&gt;&lt;li&gt; un indice de qualit&#233; de liaison, nomm&#233; LQI (Link Quality Information), est &#233;galement affich&#233;, cod&#233; en hexad&#233;cimal.&lt;/li&gt;&lt;/ul&gt;&lt;div class='spip_document_13 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/linky_associe_non_associe-2.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/linky_associe_non_associe-2.png?1753956046' width='500' height='361' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;De mani&#232;re &lt;strong&gt;intuitive&lt;/strong&gt;, plus la valeur LQI est &#233;lev&#233;e, meilleure est la qualit&#233; du lien CPL entre le compteur et le concentrateur mais cela je vais m'en assur&#233; plus tard.&lt;/p&gt;
&lt;p&gt;Si je n'avais plus aucun doute sur l'origine de la perturbation affectant la communication de mon compteur Linky, un premier diagnostic sans aucune intervention a confirm&#233; la situation : le compteur &#233;tait &#8220;non associ&#233;&#8221;, donc hors communication avec le concentrateur (voir photo de gauche).&lt;/p&gt;
&lt;p&gt;La technicienne ENEDIS en charge du suivi de mon dossier m'a indiqu&#233; de couper le disjoncteur abonn&#233;, d'attendre au moins deux heures, puis de relancer la proc&#233;dure de v&#233;rification. Avant m&#234;me l'&#233;coulement de ce d&#233;lai, mon compteur s'est automatiquement r&#233;-associ&#233; au concentrateur avec un LQI de 0x78.&lt;/p&gt;
&lt;p&gt;Il s'agit &#224; pr&#233;sent de d&#233;terminer pr&#233;cis&#233;ment quel &#233;quipement est &#224; l'origine des perturbations CPL, les onduleurs solaires soient les premiers suspects.&lt;/p&gt;
&lt;p&gt;Je pr&#233;vois de r&#233;aliser un test plus complet en mettant l'int&#233;gralit&#233; de mon syst&#232;me photovolta&#239;que hors tension durant mes prochaines vacances. L'objectif est de mesurer le LQI maximal atteignable dans des conditions id&#233;ales.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Nota : Pour information, si l'&#233;cran affiche &#8220;Puiss d&#233;pass&#233;e&#8221; ; le message indique que la puissance souscrite maximale a &#233;t&#233; d&#233;pass&#233;e provoquant la coupure d'&#233;lectricit&#233;. Il faut d'abord d&#233;brancher les appareils &#233;lectriques &#224; l'origine de la surconsommation. Pour r&#233;armer votre compteur Linky, il suffit d'appuyer sur le bouton &#8220;+&#8221; pendant 10 secondes. &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Dans mon contexte, l'onduleur hybride, au c&#339;ur de l'installation, et le micro-onduleur utilis&#233; pour le couplage AC apparaissent comme les principaux suspects.&lt;br class='autobr' /&gt;
Ne pouvant mettre hors tension l'onduleur principal facilement, j'ai commenc&#233; par couper le micro-onduleur afin d'observer l'&#233;volution du comportement du compteur Linky.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R&#233;sultat : le Linky reste associ&#233;, mais avec un indice LQI l&#233;g&#232;rement d&#233;grad&#233;, oscillant entre 0x70 et 0x76.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En revanche, une tentative de remise en service du micro-onduleur entra&#238;ne rapidement la perte d'association du compteur avec le concentrateur.&lt;/p&gt;
&lt;p&gt;Il ne s'agit pas d'incriminer directement le micro-onduleur, car des &#233;l&#233;ments de son environnement peuvent &#233;galement &#234;tre &#224; l'origine des interf&#233;rences observ&#233;es :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; fonctionnement du smartload DEYE,&lt;/li&gt;&lt;li&gt; longueur et cheminement des canalisations &#233;lectriques,&lt;/li&gt;&lt;li&gt; param&#233;trage r&#233;seau de l'onduleur DEYE,&lt;/li&gt;&lt;li&gt; ...&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce dernier point &lt;i&gt;&#8212; le param&#233;trage r&#233;seau de l'onduleur DEYE &#8212;&lt;/i&gt; peut sembler anecdotique. Pourtant, mes recherches autour du dysfonctionnement de mon compteur Linky m'ont permis de d&#233;couvrir un mauvais r&#233;glage de l'onduleur, pass&#233; jusque-l&#224; inaper&#231;u.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Actions correctives&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;DEYE low noise mode&lt;/strong&gt;&lt;br class='autobr' /&gt;
Le mode &#171; low noise &#187; de l'onduleur DEYE n'est pas clairement document&#233;. Cependant, les retours des forums indiquent qu'il permet de modifier la fr&#233;quence de d&#233;coupage, la faisant passer de 15 kHz &#224; 20 kHz, soit en dehors de la plage audible par l'oreille humaine. Les harmoniques des signaux &#233;lectriques &#233;tant de rang impair, elles se situeraient alors &#224; des fr&#233;quences telles que 60 kHz, 100 kHz, 140 kHz, etc.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Avec une fr&#233;quence de d&#233;coupage &#224; 15kHz, l'harmonique de rang 3 &#224; 45kHz est tr&#232;s proche de la sous-porteur CPL n&#176;29 (45.3125 kHz). L'harmonique de rang 5 (75kHz) se situe dans la bande r&#233;serv&#233;e pour le CPL G1, sans influence dans mon cas.&lt;/li&gt;&lt;li&gt; Avec un fonctionnement &#224; 20kHz, l'harmonique de rang 3 &#224; 60kHz, bien que dans la bande r&#233;serv&#233;e pour le CPL G1, est tr&#232;s proche de la sous-porteur CPL n&#176;38 (59.375 kHz) de la bande inf&#233;rieure du G3. L'harmonique de rang 5 (100kHz) est hors bande CENELEC-A.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt; Le choix d'un fonctionnement &#224; 20 kHz para&#238;t plus judicieux, m&#234;me si la diff&#233;rence peut sembler faible. Les quelques essais effectu&#233;s avec cette fr&#233;quence de d&#233;coupage semblent indiquer une am&#233;lioration, sans perte d'association avec le compteur Linky. Toutefois, ces r&#233;sultats restent &#224; confirmer par des tests plus approfondis.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Filtre Harmonique&lt;/strong&gt;
&lt;div class='spip_document_14 spip_document spip_documents spip_document_image spip_documents_right spip_document_right'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/jpg/filtre_hpf-1065-40.jpg?1753965690' width='500' height='500' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;La soci&#233;t&#233; espagnole EMIKON propose toute une gamme de filtres sp&#233;cialis&#233;s dans le filtrage de la bande CENELEC-A. Le mod&#232;le que j'ai retenu, le (&lt;a href='https://blog.lfz.ovh/IMG/pdf/hpf1065-55.pdf' class=&#034;spip_in&#034; type='application/pdf'&gt;HPF 1065-55&lt;/a&gt;) , promet une att&#233;nuation de -55 dB pour les fr&#233;quences comprises entre 35 kHz et 150 kHz, avec une capacit&#233; de tenue en courant allant jusqu'&#224; 65 A.&lt;br class='autobr' /&gt;
&#201;tant donn&#233; qu'il s'agit d'un filtre coupe-bande, l'att&#233;nuation annonc&#233;e de -55 dB correspond tr&#232;s probablement au maximum atteint &#224; la fr&#233;quence de coupure.&lt;br class='autobr' /&gt;
&#192; noter la grande r&#233;activit&#233; de &lt;a href=&#034;https://dicel.fr/filtre-cpl-linky-hpf-series/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Dicel&lt;/a&gt; , le revendeur fran&#231;ais des produits EMIKON, qui m'a envoy&#233; un devis en moins de 24 heures, avec une livraison du produit &#8212; en stock au moment de la commande &#8212; effectu&#233;e en seulement quelques jours.&lt;/p&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Bilan&lt;/h2&gt;
&lt;p&gt;Le passage en mode &#171; low noise &#187;, contraignant le syst&#232;me &#224; une fr&#233;quence d'&#233;chantillonnage fix&#233;e &#224; 20 kHz, permet d'optimiser le rapport signal/bruit (meilleur LQI) ce qui am&#233;liore la liaison CPL du compteur Linky. N&#233;anmoins, des pertes de synchronisation persistent lors des phases de transmission nocturne, sugg&#233;rant une sensibilit&#233; r&#233;siduelle aux perturbations &#233;lectromagn&#233;tiques transitoires sur le r&#233;seau.&lt;/p&gt;
&lt;p&gt;En cherchant un moyen de d&#233;tecter ces pertes de connexion, j'ai d&#233;couvert que cette information &#233;tait en r&#233;alit&#233; d&#233;j&#224; disponible dans l'entit&#233; STGE (registre de statuts) fournie par l'int&#233;gration Linky/T&#233;l&#233;information. Elle n'appara&#238;t toutefois pas directement, mais reste encod&#233;e dans les bits 21 et 22 de ce registre.&lt;/p&gt;
&lt;div class='spip_document_49 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/linky_stge.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/linky_stge.png?1756655819' width='500' height='396' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Je r&#233;alise le d&#233;codage de cette information via l'add-on Node-RED de Home Assistant, &#224; l'aide de la fonction JavaScript decodeSTGE suivante :&lt;/p&gt;
&lt;div class='spip_document_50 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.lfz.ovh/IMG/png/nodered_stge.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.lfz.ovh/IMG/png/nodered_stge.png?1756656068' width='500' height='274' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;pre&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;let input = msg.payload; // Conversion de l'entr&#233;e (cha&#238;ne hexad&#233;cimale) en entier let payload = parseInt(input, 16); // Objet contenant les diff&#233;rents statuts d&#233;cod&#233;s let status = {}; // Bit 0 : contact sec (invers&#233; : 0 &#8594; 1, 1 &#8594; 0) status[&#034;contact_sec&#034;] = (payload &amp; 0b1) === 0 ? 1 : 0; // Bits 21-22 : statut CPL (2 bits) status[&#034;statutCPL&#034;] = (payload &gt;&gt; 21) &amp; 0b11; // Bit 23 : synchro CPL (1 bit) status[&#034;synchroCPL&#034;] = (payload &gt;&gt; 23) &amp; 0b1; // Bit 8 : production/consommation (1 bit) status[&#034;prodConso&#034;] = (payload &gt;&gt; 8) &amp; 0b1; // Bit 9 : sens de l'&#233;nergie (1 bit) status[&#034;sensEnergy&#034;] = (payload &gt;&gt; 9) &amp; 0b1; // Couleur du jour (bits 24-25 &#8594; 2 bits) status[&#034;couleurJour&#034;] = (payload &gt;&gt; 24) &amp; 0b11; // Couleur du lendemain (bits 26-27 &#8594; 2 bits) status[&#034;couleurDemain&#034;] = (payload &gt;&gt; 26) &amp; 0b11; // Pr&#233;avis pointes mobiles (bits 28-29 &#8594; 2 bits) status[&#034;preavisPM&#034;] = (payload &gt;&gt; 28) &amp; 0b11; // En cours de pointes mobiles (bits 30-31 &#8594; 2 bits) status[&#034;enCoursPM&#034;] = (payload &gt;&gt; 30) &amp; 0b11; // Mise &#224; jour des messages msg.payload = payload; msg.status = status; return msg;&lt;/code&gt; &lt;/pre&gt;
&lt;p&gt;Disposer de cette information de d&#233;crochage est int&#233;ressant, car elle permet de mettre en &#339;uvre une coupure de l'alimentation de l'onduleur DEYE, soit par une action manuelle (via le disjoncteur de protection), soit de mani&#232;re automatique, ce qui n&#233;cessite toutefois l'ajout d'un contacteur suppl&#233;mentaire.&lt;/p&gt;
&lt;p&gt;L'ajout du filtre a permis de &lt;strong&gt;r&#233;soudre compl&#232;tement les probl&#232;mes de d&#233;crochage&lt;/strong&gt; dans mon installation. J'ai toutefois adapt&#233; son c&#226;blage, car il doit prot&#233;ger les remont&#233;es parasitaires de l'onduleur sur les fr&#233;quences de la bande CENELEC A vers le r&#233;seau Enedis, et non l'inverse. Ainsi, mon onduleur DEYE est connect&#233; aux bornes d'entr&#233;e L et N du filtre, tandis que le r&#233;seau Enedis est raccord&#233; aux bornes de sortie L' et N'.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Une r&#233;flexion plus large...&lt;/h2&gt;
&lt;p&gt;Le Pulsadis est mort, vive le CPL&#8230; Plus s&#233;rieusement, certains sites critiques envers le compteur Linky se sont r&#233;v&#233;l&#233;s &#234;tre des sources d'informations pertinentes. J'y ai d&#233;couvert des points de vue bien argument&#233;s, port&#233;s par des personnes sens&#233;es et techniquement comp&#233;tentes (L'auteur des articles techniques &lt;a href=&#034;http://stop-linky46.fr/htm/infos.htm&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;stop-linky46.fr&lt;/a&gt; ). Je reste cependant r&#233;serv&#233; vis-&#224;-vis des filtres estampill&#233;s &#171; anti-Linky &#187;, souvent propos&#233;s &#224; des tarifs &#233;lev&#233;s alors que leurs sp&#233;cifications techniques restent tr&#232;s proches de celles de filtres plus standards, non market&#233;s autour de cette probl&#233;matique.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://blog.lfz.ovh/IMG/pdf/trina_tds_475-505_vertex-x__neg18r_28_25y_fr.pdf" length="259198" type="application/pdf" />
		
		<enclosure url="https://blog.lfz.ovh/IMG/pdf/dm500m10rt-b60hbt.pdf" length="791423" type="application/pdf" />
		
		<enclosure url="https://blog.lfz.ovh/IMG/pdf/hms-1600-2000_datasheet.pdf" length="1251659" type="application/pdf" />
		
		<enclosure url="https://blog.lfz.ovh/IMG/pdf/us5000-datasheet.pdf" length="2631208" type="application/pdf" />
		
		<enclosure url="https://blog.lfz.ovh/IMG/pdf/hpf1065-55.pdf" length="814745" type="application/pdf" />
		

	</item>



</channel>

</rss>
