<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jordan Augé</title><link href="https://jordan.auge.synaxe.net/fr/" rel="alternate"/><link href="https://jordan.auge.synaxe.net/fr/feed/all.atom.xml" rel="self"/><id>https://jordan.auge.synaxe.net/fr/</id><updated>2026-05-31T14:59:27.477178+02:00</updated><entry><title>New Aether Paper on Agentic AI Network Validation</title><link href="https://jordan.auge.synaxe.net/fr/news/2026-04-20-aether-arxiv-preprint/" rel="alternate"/><published>2026-04-20T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910107+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-04-20:/fr/news/2026-04-20-aether-arxiv-preprint/</id><summary type="html">&lt;p&gt;Notre article sur Aether, un framework combinant IA multi-agents et jumeaux numériques réseau pour la validation autonome, est disponible sur arXiv.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Notre article &lt;strong&gt;Aether: Network Validation Using Agentic AI and Digital Twin&lt;/strong&gt;
est désormais disponible sur arXiv :
&lt;a href="https://arxiv.org/abs/2604.18233"&gt;arXiv:2604.18233&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aether permet aux opérateurs réseau d’exprimer des intentions de validation en
langage naturel. Un système multi-agents décompose ces intentions en plans de
vérification exécutables et les lance sur un jumeau numérique du réseau —
vérification de configurations, simulation de changements de topologie et
contrôle de conformité aux politiques opérationnelles.&lt;/p&gt;
&lt;p&gt;Nous démontrons l’approche sur des scénarios réalistes issus de déploiements
d’opérateurs en production, montrant qu’elle peut identifier des erreurs de
configuration, prédire l’impact de changements planifiés et accélérer les
processus de dépannage.&lt;/p&gt;
&lt;p&gt;Travail conjoint avec Sam Betts, Giovanna Carofiglio, Giulio Grassi, Martin
Gysi et John Kenneth d’Souza chez Cisco Outshift.&lt;/p&gt;
&lt;p class="publication-inline-actions" style="margin-top:1rem;"&gt;
&lt;a class="btn btn-default btn-sm" href="https://arxiv.org/abs/2604.18233" rel="noopener" target="_blank"&gt;&lt;i class="fa-solid fa-arrow-up-right-from-square fa-xs"&gt;&lt;/i&gt; arXiv&lt;/a&gt;
&lt;a class="btn btn-default btn-sm" download="" href="/static/files/research/auge2026aether.pdf"&gt;&lt;i class="fa-solid fa-download fa-xs"&gt;&lt;/i&gt; PDF&lt;/a&gt;
&lt;/p&gt;</content><category term="news"/><category term="aether"/><category term="arxiv"/><category term="preprint"/><category term="publication"/><category term="agentic-ai"/><category term="network-validation"/><category term="digital-twin"/><category term="cisco"/><category term="outshift"/><category term="agentic-network-change-validation"/></entry><entry><title>New Aether Paper on Agentic AI Network Validation</title><link href="https://jordan.auge.synaxe.net/news/2026-04-20-aether-arxiv-preprint/" rel="alternate"/><published>2026-04-20T00:00:00+02:00</published><updated>2026-05-29T15:19:55.384813+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-04-20:/news/2026-04-20-aether-arxiv-preprint/</id><summary type="html">&lt;p&gt;Our paper on Aether, a framework combining multi-agent AI with network digital twins for autonomous network validation, is now available on arXiv.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Our paper &lt;strong&gt;Aether: Network Validation Using Agentic AI and Digital Twin&lt;/strong&gt; is
now available on arXiv as
&lt;a href="https://arxiv.org/abs/2604.18233"&gt;arXiv:2604.18233&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aether is a framework that lets network operators express high-level validation
intents in natural language. A multi-agent system autonomously decomposes those
intents into executable verification plans and runs them against a digital twin
of the network — checking configurations, simulating topology changes, and
verifying compliance with operational policies.&lt;/p&gt;
&lt;p&gt;We demonstrate the approach on realistic scenarios derived from production ISP
deployments, showing that it can identify configuration errors, predict the
impact of planned changes, and accelerate troubleshooting workflows.&lt;/p&gt;
&lt;p&gt;Joint work with Sam Betts, Giovanna Carofiglio, Giulio Grassi, Martin Gysi, and
John Kenneth d’Souza at Cisco Outshift.&lt;/p&gt;</content><category term="news"/><category term="aether"/><category term="arxiv"/><category term="preprint"/><category term="publication"/><category term="agentic-ai"/><category term="network-validation"/><category term="digital-twin"/><category term="cisco"/><category term="outshift"/><category term="agentic-network-change-validation"/></entry><entry><title>Passer une TwoTrees TTC450 sous FluidNC — modes CNC et laser sans reflashage</title><link href="https://jordan.auge.synaxe.net/fr/blog/2026/04/fluidnc-ttc450-cnc-laser-no-reflash/" rel="alternate"/><published>2026-04-10T00:00:00+02:00</published><updated>2026-05-31T14:59:27.477178+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-04-10:/fr/blog/2026/04/fluidnc-ttc450-cnc-laser-no-reflash/</id><summary type="html">&lt;p&gt;Comment j&amp;rsquo;ai remplacé le firmware stock GRBL-ESP32 d&amp;rsquo;une TwoTrees TTC450 par FluidNC, pour basculer instantanément entre CNC et laser via un simple fichier YAML.&lt;/p&gt;</summary><content type="html">&lt;h2 id="le-probleme-avec-le-firmware-dorigine"&gt;Le problème avec le firmware d’origine&lt;/h2&gt;
&lt;p&gt;La &lt;a href="https://twotrees3d.com/products/ttc-twotrees-cnc-engraving-machine"&gt;TwoTrees TTC450&lt;/a&gt; est une machine sérieuse : 460×460 mm de zone de travail, moteurs NEMA 17 sur vis à bille en Z, broche 500 W, châssis aluminium solide. La mienne est livrée avec le &lt;a href="https://twotrees3d.com/products/two-trees-20w-laser-module-for-ttc450-cnc-router"&gt;module laser 20 W&lt;/a&gt;, ce qui la rend utilisable aussi bien en fraisage qu’en gravure. Le contrôleur est le MKS DLC32 v2.1, une carte ESP32 capable de piloter aussi bien une fraiseuse CNC qu’un laser. L’écran MKS TS35 installé par-dessus lui donne un aspect soigné.&lt;/p&gt;
&lt;p&gt;La &lt;a href="https://diode-laser-wiki.com/documentation/twotrees-ttc450-cnc-machine/"&gt;page TTC450 de Melvin Isken sur diode-laser-wiki&lt;/a&gt; est une excellente référence pour cette machine — elle couvre le montage, le firmware, les réglages et FluidNC en détail. Ce post s’appuie sur ce travail, étend la config FluidNC au laser 20 W et au mode CNC, et documente les adaptations nécessaires pour faire tourner l’écran et les plugins supplémentaires.&lt;/p&gt;
&lt;p&gt;Le firmware stock, une version Makerbase de GRBL-ESP32, fonctionne bien à la livraison. Mais il a une limitation qui m’a rattrapé très vite : &lt;strong&gt;CNC et laser sont deux binaires distincts&lt;/strong&gt;. Passer de la fraise au laser signifie brancher un câble USB, lancer le MKS Flash Tool, attendre le reflashage, et tout reconnecter. Sur une machine que j’utilise régulièrement dans les deux modes, c’est de la friction inutile.&lt;/p&gt;
&lt;p&gt;J’ai aussi découvert que le binaire livré par TwoTrees et le firmware réellement installé sur la machine ne correspondaient pas — les partitions applicatives différaient octet par octet, ce qui m’a rendu prudent quant aux hypothèses sur l’état d’origine.&lt;/p&gt;
&lt;h2 id="pourquoi-fluidnc"&gt;Pourquoi FluidNC&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/bdring/FluidNC"&gt;FluidNC&lt;/a&gt; est un firmware ESP32 moderne centré sur un fichier de configuration YAML. CNC ou laser n’est pas une question de firmware — c’est une question de fichier de config. On garde deux YAML sur la flash de la carte, et basculer entre les deux revient à taper :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$Config/Filename=config_laser.yaml
$Bye
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;C’est tout. Pas de câble, pas de reflashage, pas d’outil Windows.&lt;/p&gt;
&lt;p&gt;FluidNC propose aussi une interface web servie via WiFi, une journalisation série détaillée, une configuration modifiable à chaud, et un système de plugins plus riche que GRBL. L’écosystème est actif et les releases sont prévisibles.&lt;/p&gt;
&lt;p&gt;Le tableau suivant résume les compromis :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Critère&lt;/th&gt;
&lt;th&gt;Stock (Makerbase)&lt;/th&gt;
&lt;th&gt;FluidNC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CNC sans reflashage&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laser sans reflashage&lt;/td&gt;
&lt;td&gt;❌ (binaire séparé)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basculement CNC↔Laser&lt;/td&gt;
&lt;td&gt;Reflashage ~5 min&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$Config/Filename=…&lt;/code&gt; + &lt;code&gt;$Bye&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuration&lt;/td&gt;
&lt;td&gt;Paramètres GRBL &lt;code&gt;$$&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;YAML + WebUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface web&lt;/td&gt;
&lt;td&gt;Basique&lt;/td&gt;
&lt;td&gt;Complète (gestionnaire de fichiers, terminal, macros)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debug / logs&lt;/td&gt;
&lt;td&gt;Limité&lt;/td&gt;
&lt;td&gt;Série détaillé + WebSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rollback config&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Toujours possible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Écran MKS TS35&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌ (upstream)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communauté TTC450&lt;/td&gt;
&lt;td&gt;★★★★☆&lt;/td&gt;
&lt;td&gt;★★★☆☆&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Les deux dernières lignes posaient problème : le firmware stock pilote le TS35 nativement, et FluidNC en amont n’a pas ce support (et a explicitement refusé de l’ajouter). J’y reviens.&lt;/p&gt;
&lt;h2 id="la-procedure-de-sauvegarde"&gt;La procédure de sauvegarde&lt;/h2&gt;
&lt;p&gt;Avant de toucher au firmware, je voulais une sauvegarde complète de l’état d’origine. La flash ESP32 est accessible via serial avec esptool, et un dump complet capture tout : bootloader, table de partitions, les deux slots OTA, et le SPIFFS.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esptool.py&lt;span class="w"&gt; &lt;/span&gt;--chip&lt;span class="w"&gt; &lt;/span&gt;esp32&lt;span class="w"&gt; &lt;/span&gt;--port&lt;span class="w"&gt; &lt;/span&gt;/dev/tty.usbserial-110&lt;span class="w"&gt; &lt;/span&gt;--baud&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;921600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;read_flash&lt;span class="w"&gt; &lt;/span&gt;0x00000&lt;span class="w"&gt; &lt;/span&gt;0x800000&lt;span class="w"&gt; &lt;/span&gt;flash_backup.bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;J’ai ensuite vérifié que le dump n’était pas vide et confirmé l’identité du firmware :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chaîne &lt;code&gt;$I&lt;/code&gt; : &lt;code&gt;PRODUCER:MKS_DLC32 / VER:1.1h.2023070302&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Affichage TS35 : &lt;code&gt;MKS DLC32 CNC V2.1 — V2.3 (8M.H35.20230803)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette sauvegarde me donnait un point de retour complet. En cas de problème, un &lt;code&gt;write_flash&lt;/code&gt; remet la machine dans son état d’origine.&lt;/p&gt;
&lt;h2 id="layout-flash-et-analyse-des-partitions"&gt;Layout flash et analyse des partitions&lt;/h2&gt;
&lt;p&gt;J’ai aussi extrait la table de partitions pour comprendre l’organisation de la flash. Le firmware stock utilise un layout OTA standard ESP32 avec deux slots applicatifs et un SPIFFS. FluidNC utilise &lt;code&gt;huge_app.csv&lt;/code&gt;, un layout sans OTA qui donne à l’application un slot de 3 Mo — pas de mise à jour en roulant, mais pas d’espace gaspillé non plus.&lt;/p&gt;
&lt;p&gt;Une préoccupation passagère : est-ce que reflasher endommage l’ESP32 ? La spec datasheet pour la flash NOR est 100 000 cycles d’effacement par secteur. À raison d’un reflashage par jour, ça fait 273 ans. La question ne mérite pas qu’on s’y attarde.&lt;/p&gt;
&lt;h2 id="installation-de-fluidnc"&gt;Installation de FluidNC&lt;/h2&gt;
&lt;p&gt;L’installation se fait en trois binaires : bootloader, table de partitions, et le firmware.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esptool.py&lt;span class="w"&gt; &lt;/span&gt;--chip&lt;span class="w"&gt; &lt;/span&gt;esp32&lt;span class="w"&gt; &lt;/span&gt;--port&lt;span class="w"&gt; &lt;/span&gt;/dev/tty.usbserial-110&lt;span class="w"&gt; &lt;/span&gt;--baud&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;921600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;write_flash&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;0x1000&lt;span class="w"&gt;  &lt;/span&gt;bootloader.bin&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;0x8000&lt;span class="w"&gt;  &lt;/span&gt;partitions.bin&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;0x10000&lt;span class="w"&gt; &lt;/span&gt;firmware.bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Au premier démarrage, FluidNC crée un point d’accès WiFi (&lt;code&gt;FluidNC&lt;/code&gt;, pas de mot de passe). On s’y connecte, on ouvre &lt;code&gt;http://192.168.4.1&lt;/code&gt;, on envoie un fichier YAML, et la machine tourne.&lt;/p&gt;
&lt;h2 id="ecrire-la-configuration-yaml"&gt;Écrire la configuration YAML&lt;/h2&gt;
&lt;p&gt;Le fichier YAML est là où se fait le vrai travail. FluidNC attend une description complète de la machine : axes, steps/mm, vitesses max, accélération, limites, sortie broche ou laser, entrée palpeur.&lt;/p&gt;
&lt;p&gt;Pour la config CNC de la TTC450, les valeurs viennent des specs des steppers :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;NEMA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="n"&gt;HS8401S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pas&lt;/span&gt;&lt;span class="sr"&gt;/tour (1,8°/&lt;/span&gt;&lt;span class="n"&gt;pas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Micro&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stepping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A4988&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="sr"&gt;/16 → 3200 pas/&lt;/span&gt;&lt;span class="n"&gt;tour&lt;/span&gt;
&lt;span class="n"&gt;Vis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;à&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bille&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;T8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tour&lt;/span&gt;
&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="sr"&gt;/mm = 3200 /&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;La config laser est la même description mécanique avec un bloc broche différent — une sortie laser PWM à la place du relais qui pilote la broche.&lt;/p&gt;
&lt;p&gt;Mettre au point la config a demandé quelques vérifications croisées. Une config FluidNC communautaire pour la TTC450 existait comme point de départ, mais elle couvrait uniquement un module laser de moindre puissance et n’avait pas été validée en mode CNC ni pour le module 20W. Je l’ai confrontée aux réglages d’usine TwoTrees et au code source du firmware Makerbase, ce qui a permis de résoudre quelques divergences — certaines valeurs de la référence semblent être des marges de sécurité conservatrices plutôt que des limites physiques réelles. Le résultat est une config complète et sourcée pour les deux modes sur la TwoTrees TTC450 avec le &lt;a href="https://twotrees3d.com/products/two-trees-20w-laser-module-for-ttc450-cnc-router"&gt;module laser 20W&lt;/a&gt;. La liste complète des sources et des décisions se trouve dans &lt;a href="https://github.com/jordanauge/fluidnc-ttc450/blob/main/docs/yaml-config-sources.fr.md"&gt;docs/yaml-config-sources.fr.md&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les configs TTC450, la procédure d’installation, et les variantes firmware pré-compilées — dont des builds avec les plugins couverts dans les posts qui suivent — sont dans &lt;a href="https://github.com/jordanauge/fluidnc-ttc450"&gt;github.com/jordanauge/fluidnc-ttc450&lt;/a&gt;. J’ai le laser 20W ; le dépôt recense aussi la config de &lt;a href="https://diode-laser-wiki.com/documentation/twotrees-ttc450-cnc-machine/"&gt;diode-laser-wiki&lt;/a&gt; pour la variante 5,5W. Les PRs pour d’autres combinaisons matérielles sont les bienvenues.&lt;/p&gt;
&lt;p&gt;Les deux configs coexistent sur la carte sous les noms &lt;code&gt;config_cnc.yaml&lt;/code&gt; et &lt;code&gt;config_laser.yaml&lt;/code&gt;. Le basculement est instantané et réversible.&lt;/p&gt;
&lt;h2 id="le-probleme-de-lecran"&gt;Le problème de l’écran&lt;/h2&gt;
&lt;p&gt;Le TS35 est piloté en SPI et est spécifique au firmware Makerbase. FluidNC en amont ne le supporte pas, et après discussion publique dans le ticket &lt;a href="https://github.com/bdring/FluidNC/issues/759"&gt;#759&lt;/a&gt;, l’équipe principale a fermé la demande hors périmètre.&lt;/p&gt;
&lt;p&gt;Cela signifiait faire tourner FluidNC sans affichage local — la machine fonctionnait parfaitement via WiFi, mais l’écran restait noir. Pour une machine dans un atelier, c’est un recul visible.&lt;/p&gt;
&lt;p&gt;J’ai fini par écrire un plugin FluidNC standalone pour remettre l’affichage en service. C’est une autre histoire, couverte dans un post dédié.&lt;/p&gt;
&lt;h2 id="resultat"&gt;Résultat&lt;/h2&gt;
&lt;p&gt;La machine démarre maintenant sous FluidNC v4.0.2, se connecte au WiFi local en mode STA, et est accessible depuis un navigateur à son adresse IP. Les premiers tests avec gSender confirment que la communication WiFi fonctionne, même si ce n’est pas la méthode recommandée pour un usage en production. Passer du mode CNC au mode laser prend une dizaine de secondes, sans aucun outil. La procédure de sauvegarde permet de restaurer le firmware Makerbase d’origine en moins de deux minutes si besoin.&lt;/p&gt;
&lt;p&gt;L’approche YAML s’avère une vraie amélioration par rapport aux paramètres &lt;code&gt;$$&lt;/code&gt;. La configuration de la machine est désormais un fichier texte versionnable, commenté, avec un historique et des diffs lisibles.&lt;/p&gt;
&lt;p&gt;Ce post est le premier d’une série sur le projet CNC TTC450. Le dépôt avec les configs TTC450, les builds firmware et la procédure d’installation est sur &lt;a href="https://github.com/jordanauge/fluidnc-ttc450"&gt;github.com/jordanauge/fluidnc-ttc450&lt;/a&gt;.&lt;/p&gt;</content><category term="CNC"/></entry><entry><title>Running CNC and Laser on TwoTrees TTC450 with FluidNC</title><link href="https://jordan.auge.synaxe.net/blog/2026/04/fluidnc-ttc450-cnc-laser-no-reflash/" rel="alternate"/><published>2026-04-10T00:00:00+02:00</published><updated>2026-05-31T14:59:14.696726+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-04-10:/blog/2026/04/fluidnc-ttc450-cnc-laser-no-reflash/</id><summary type="html">&lt;p&gt;How I replaced the stock GRBL-ESP32 firmware on a TwoTrees TTC450 with FluidNC, enabling instant CNC/laser switching via YAML config without touching esptool again.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I bought the TTC450 to cover both milling and laser engraving on a single machine without two separate setups — the first post in the &lt;a href="/projects/cnc-laser/"&gt;CNC &amp;amp; Laser Workshop&lt;/a&gt; build series. The decision to replace the firmware came within the first week, when I realized that switching modes meant reflashing.&lt;/p&gt;
&lt;h2 id="the-problem-with-the-stock-firmware"&gt;The problem with the stock firmware&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://twotrees3d.com/products/ttc-twotrees-cnc-engraving-machine"&gt;TwoTrees TTC450&lt;/a&gt; is a capable machine — 460×460 mm work area, NEMA 17 steppers on a ball screw Z axis, a 500 W spindle, and a reasonably solid frame. Mine came with the &lt;a href="https://twotrees3d.com/products/two-trees-20w-laser-module-for-ttc450-cnc-router"&gt;20 W diode laser module&lt;/a&gt;, which makes it usable for both milling and engraving. The controller is the MKS DLC32 v2.1, an ESP32-based board that can run both CNC and laser modes. The MKS TS35 touchscreen sits on top and gives the whole thing a finished look.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://diode-laser-wiki.com/documentation/twotrees-ttc450-cnc-machine/"&gt;Melvin Isken’s TTC450 page on diode-laser-wiki&lt;/a&gt; is an excellent reference for this machine — it covers setup, firmware, settings, and FluidNC in detail. This post builds on that work, extends the FluidNC config to the 20 W laser and CNC mode, and documents the changes needed when running the display and extra plugins.&lt;/p&gt;
&lt;p&gt;The stock firmware, a Makerbase build of GRBL-ESP32, works well as shipped. But it has one limitation that I ran into immediately: &lt;strong&gt;CNC and laser are two separate firmware binaries&lt;/strong&gt;. Switching from milling to engraving means connecting a USB cable, running the MKS Flash Tool, waiting for the reflash, and reconnecting everything. On a machine I use for both regularly, that becomes friction fast.&lt;/p&gt;
&lt;p&gt;I also discovered that the local TwoTrees binary and the machine’s actual running firmware were not identical — the application partition differed byte-for-byte from the vendor file, which made me cautious about assuming the stock firmware was exactly what TwoTrees documented.&lt;/p&gt;
&lt;h2 id="why-fluidnc"&gt;Why FluidNC&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/bdring/FluidNC"&gt;FluidNC&lt;/a&gt; is a modern ESP32 firmware with an architecture built around a YAML configuration file. CNC vs laser is not a firmware question — it is a config file question. You keep two YAML files on the board’s flash, and switching modes is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$Config/Filename=config_laser.yaml
$Bye
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;That is the whole switching procedure. No cable, no reflash, no Windows tool.&lt;/p&gt;
&lt;p&gt;FluidNC also has a proper web interface served over WiFi, detailed serial logging, runtime-editable configuration, and a richer plugin model than GRBL. The ecosystem is active and the release cadence is predictable.&lt;/p&gt;
&lt;p&gt;The table below summarizes the tradeoffs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Stock (Makerbase)&lt;/th&gt;
&lt;th&gt;FluidNC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CNC without reflash&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laser without reflash&lt;/td&gt;
&lt;td&gt;❌ (separate binary)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Switch CNC↔Laser&lt;/td&gt;
&lt;td&gt;Reflash ~5 min&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$Config/Filename=…&lt;/code&gt; + &lt;code&gt;$Bye&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuration&lt;/td&gt;
&lt;td&gt;GRBL &lt;code&gt;$$&lt;/code&gt; params&lt;/td&gt;
&lt;td&gt;YAML + WebUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web interface&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Rich (file manager, terminal, macros)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debug / logs&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Detailed serial + WebSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config rollback&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Always possible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MKS TS35 display&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌ (upstream)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Community TTC450&lt;/td&gt;
&lt;td&gt;★★★★☆&lt;/td&gt;
&lt;td&gt;★★★☆☆&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The last two rows were the catch: the stock firmware drives the TS35 display natively, and FluidNC upstream has no TS35 support (and has explicitly declined to add it). I will come back to that.&lt;/p&gt;
&lt;h2 id="the-backup-procedure"&gt;The backup procedure&lt;/h2&gt;
&lt;p&gt;Before touching the firmware I wanted a complete backup of the original state. The ESP32 flash is accessible over serial with esptool, and a full dump captures everything: bootloader, partition table, both OTA app slots, and SPIFFS.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esptool.py&lt;span class="w"&gt; &lt;/span&gt;--chip&lt;span class="w"&gt; &lt;/span&gt;esp32&lt;span class="w"&gt; &lt;/span&gt;--port&lt;span class="w"&gt; &lt;/span&gt;/dev/tty.usbserial-110&lt;span class="w"&gt; &lt;/span&gt;--baud&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;921600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;read_flash&lt;span class="w"&gt; &lt;/span&gt;0x00000&lt;span class="w"&gt; &lt;/span&gt;0x800000&lt;span class="w"&gt; &lt;/span&gt;flash_backup.bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Then I verified the dump was not just zeros and confirmed the firmware identity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Board string from &lt;code&gt;$I&lt;/code&gt;: &lt;code&gt;PRODUCER:MKS_DLC32 / VER:1.1h.2023070302&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TS35 display string: &lt;code&gt;MKS DLC32 CNC V2.1 — V2.3 (8M.H35.20230803)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That gave me a complete recovery baseline. If anything goes wrong, one &lt;code&gt;write_flash&lt;/code&gt; call puts the machine back exactly where it started.&lt;/p&gt;
&lt;h2 id="flash-layout-and-partition-analysis"&gt;Flash layout and partition analysis&lt;/h2&gt;
&lt;p&gt;I also extracted the partition table from the dump to understand how the flash was organized. The stock firmware uses a standard ESP32 OTA layout with two app slots and a SPIFFS partition. FluidNC uses &lt;code&gt;huge_app.csv&lt;/code&gt;, a non-OTA layout that gives the application a 3 MB slot — no OTA rolling update, but no wasted space either.&lt;/p&gt;
&lt;p&gt;A quick concern I had: does reflashing damage the ESP32? The datasheet spec for NOR flash is 100,000 erase cycles per sector. At one reflash per day that is 273 years before reaching the limit. The concern is not worth worrying about.&lt;/p&gt;
&lt;h2 id="installing-fluidnc"&gt;Installing FluidNC&lt;/h2&gt;
&lt;p&gt;The install is three binaries: bootloader, partition table, and the firmware itself.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esptool.py&lt;span class="w"&gt; &lt;/span&gt;--chip&lt;span class="w"&gt; &lt;/span&gt;esp32&lt;span class="w"&gt; &lt;/span&gt;--port&lt;span class="w"&gt; &lt;/span&gt;/dev/tty.usbserial-110&lt;span class="w"&gt; &lt;/span&gt;--baud&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;921600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;write_flash&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;0x1000&lt;span class="w"&gt;  &lt;/span&gt;bootloader.bin&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;0x8000&lt;span class="w"&gt;  &lt;/span&gt;partitions.bin&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;0x10000&lt;span class="w"&gt; &lt;/span&gt;firmware.bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;On first boot, FluidNC creates a WiFi AP (&lt;code&gt;FluidNC&lt;/code&gt; / no password). You connect to it, open &lt;code&gt;http://192.168.4.1&lt;/code&gt;, upload a YAML config, and you are running.&lt;/p&gt;
&lt;h2 id="writing-the-yaml-config"&gt;Writing the YAML config&lt;/h2&gt;
&lt;p&gt;The YAML config is where the real work is. FluidNC expects a complete machine description: axis definitions, steps/mm, max rates, acceleration, limits, spindle or laser output, probe input.&lt;/p&gt;
&lt;p&gt;For the TTC450 CNC config, the relevant values come from the stepper specs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;NEMA 17 (17HS8401S): 200 steps/rev (1.8°/step)
A4988 microstepping: 1/16 → 3200 steps/rev
Ball screw T8: 4 mm/rev
steps/mm = 3200 / 4 = 800
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;The laser config is the same mechanical definition with a different spindle block — a PWM laser output instead of the relay-controlled spindle.&lt;/p&gt;
&lt;p&gt;Getting the config right required some cross-referencing. One community FluidNC config for the TTC450 existed as a starting point, but it covered only a lower-power laser variant and was not validated against CNC mode or the 20W module. I checked it against TwoTrees’ factory settings and the Makerbase firmware source, which resolved a few discrepancies — some values in the reference appear to be conservative safety margins rather than hard physical limits. The result is a complete, sourced config for both modes on the TwoTrees TTC450 with the &lt;a href="https://twotrees3d.com/products/two-trees-20w-laser-module-for-ttc450-cnc-router"&gt;20W laser module&lt;/a&gt;. The full source list and decisions are in &lt;a href="https://github.com/jordanauge/fluidnc-ttc450/blob/main/docs/yaml-config-sources.md"&gt;docs/yaml-config-sources.md&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The TTC450 configs, install procedure, and pre-built firmware variants — including builds with the plugins covered in the posts that follow — are in &lt;a href="https://github.com/jordanauge/fluidnc-ttc450"&gt;github.com/jordanauge/fluidnc-ttc450&lt;/a&gt;. I have the 20W laser; the repo also collects the config from &lt;a href="https://diode-laser-wiki.com/documentation/twotrees-ttc450-cnc-machine/"&gt;diode-laser-wiki&lt;/a&gt; for the 5.5W variant. PRs for other hardware combinations are welcome.&lt;/p&gt;
&lt;p&gt;Both configs live on the board as &lt;code&gt;config_cnc.yaml&lt;/code&gt; and &lt;code&gt;config_laser.yaml&lt;/code&gt;. Switching is instant and reversible.&lt;/p&gt;
&lt;h2 id="the-display-problem"&gt;The display problem&lt;/h2&gt;
&lt;p&gt;The MKS TS35 display is controlled over SPI and is specific to the Makerbase firmware. FluidNC upstream does not support it, and after public discussion in issue &lt;a href="https://github.com/bdring/FluidNC/issues/759"&gt;#759&lt;/a&gt;, the core team closed the request as out of scope.&lt;/p&gt;
&lt;p&gt;This meant running FluidNC without a local display — the machine was fully operational via WiFi, but the screen went dark. For a machine in a shop that is a noticeable regression.&lt;/p&gt;
&lt;p&gt;I ended up writing a standalone FluidNC plugin to restore the display, as well as a few useful plugins. But that will be the subject of future dedicated posts.&lt;/p&gt;
&lt;h2 id="result"&gt;Result&lt;/h2&gt;
&lt;p&gt;The machine now boots FluidNC v4.0.2, connects to the local WiFi in STA mode, and is reachable via browser at its assigned IP. Initial tests with gSender seems to show it is able to communicate with the CNC over WiFi, although this is not a recommended way to use it for reliabiilty. Switching between CNC and laser takes about 10 seconds and requires no tools. The backup procedure means I can restore the original Makerbase firmware in under two minutes if needed.&lt;/p&gt;
&lt;p&gt;The YAML config approach turned out to be a genuine upgrade over the &lt;code&gt;$$&lt;/code&gt; parameter system. Machine configuration is now a text file in version control, with readable comments, history, and the ability to diff changes.&lt;/p&gt;
&lt;p&gt;This post is the first in a series on the TTC450 CNC project. The repository with the TTC450 configs, firmware builds, and install procedure is at &lt;a href="https://github.com/jordanauge/fluidnc-ttc450"&gt;github.com/jordanauge/fluidnc-ttc450&lt;/a&gt;.&lt;/p&gt;</content><category term="CNC"/><category term="fluidnc"/><category term="cnc"/><category term="laser"/><category term="twotrees"/><category term="ttc450"/><category term="grbl"/><category term="esp32"/></entry><entry><title>Cisco Live EMEA 2026 — Agentic Observability and Evaluation</title><link href="https://jordan.auge.synaxe.net/fr/news/2026-03-25-ciscolive-emea-agentic-observability-evaluation-video/" rel="alternate"/><published>2026-03-25T00:00:00+01:00</published><updated>2026-05-29T15:20:22.910276+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-03-25:/fr/news/2026-03-25-ciscolive-emea-agentic-observability-evaluation-video/</id><summary type="html">&lt;p&gt;&amp;ldquo;Video publique Cisco Live EMEA 2026 sur l&amp;rsquo;observabilite et l&amp;rsquo;evaluation agentiques, pertinente pour la validation reseau et l&amp;rsquo;IA agentique fiable.&amp;rdquo;&lt;/p&gt;</summary><content type="html">&lt;p&gt;En mars 2026, la vidéo de ma présentation &lt;strong&gt;Cisco Live EMEA 2026&lt;/strong&gt; sur
&lt;strong&gt;l’observabilité et l’évaluation agentiques&lt;/strong&gt; a été publiée.&lt;/p&gt;
&lt;p&gt;Cette présentation touche à une intersection qui me semble importante : elle
relie le travail concret sur la validation réseau que nous conduisons chez Cisco
Outshift avec la question plus large de ce qu’il faut pour rendre les systèmes
d’IA agentiques réellement observables et évaluables en pratique.
L’observabilité, c’est une de ces choses qui paraît évidente jusqu’au moment où
il faut vraiment la construire pour un système dont l’agent prend des décisions
qu’on n’avait pas entièrement anticipées.&lt;/p&gt;
&lt;h2 id="video"&gt;Vidéo&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=QN_s0ssUkcs"&gt;Agentic Observability and Evaluation | Cisco Live EMEA 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="ciscolive"/><category term="cisco"/><category term="video"/><category term="presentation"/><category term="observability"/><category term="evaluation"/><category term="agentic-ai"/><category term="agentic-network-change-validation"/><category term="realtime-experience-observability"/><category term="public-artifact"/></entry><entry><title>Cisco Live EMEA 2026 — Agentic Observability and Evaluation</title><link href="https://jordan.auge.synaxe.net/news/2026-03-25-ciscolive-emea-agentic-observability-evaluation-video/" rel="alternate"/><published>2026-03-25T00:00:00+01:00</published><updated>2026-05-29T15:19:55.385314+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-03-25:/news/2026-03-25-ciscolive-emea-agentic-observability-evaluation-video/</id><summary type="html">&lt;p&gt;Public Cisco Live EMEA 2026 talk video on agentic observability and evaluation, relevant to both network-validation and reliable-agentic-AI threads.&lt;/p&gt;</summary><content type="html">&lt;p&gt;In March 2026, the video from my &lt;strong&gt;Cisco Live EMEA 2026&lt;/strong&gt; talk on
&lt;strong&gt;agentic observability and evaluation&lt;/strong&gt; was published.&lt;/p&gt;
&lt;p&gt;This talk sits at an intersection I find important: it connects the concrete
network-validation work we have been building at Cisco Outshift with the broader
question of what it takes to make agentic AI systems genuinely observable and
evaluable in practice. Observability is one of those things that sounds obvious
until you actually try to build it for a system where the agent is making
decisions you did not fully anticipate.&lt;/p&gt;
&lt;h2 id="video"&gt;Video&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=QN_s0ssUkcs"&gt;Agentic Observability and Evaluation | Cisco Live EMEA 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="ciscolive"/><category term="cisco"/><category term="video"/><category term="presentation"/><category term="observability"/><category term="evaluation"/><category term="agentic-ai"/><category term="agentic-network-change-validation"/><category term="realtime-experience-observability"/><category term="public-artifact"/></entry><entry><title>Élu Chair du groupe Accuracy and Reliability de l'AAIF</title><link href="https://jordan.auge.synaxe.net/fr/news/2026-02-27-aaif-accuracy-reliability-chair/" rel="alternate"/><published>2026-02-27T00:00:00+01:00</published><updated>2026-05-29T15:20:22.910175+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-02-27:/fr/news/2026-02-27-aaif-accuracy-reliability-chair/</id><summary type="html">&lt;p&gt;Elu president du groupe de travail Accuracy and Reliability de l&amp;rsquo;AAIF Agentic AI Foundation, avec Casper Nielsen de Diagrid comme co-president.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Je suis tres heureux et honore d’annoncer que, le &lt;strong&gt;27 fevrier 2026&lt;/strong&gt;, j’ai ete elu &lt;strong&gt;president du groupe de travail Accuracy and Reliability&lt;/strong&gt; au sein de l’&lt;strong&gt;AAIF Agentic AI Foundation&lt;/strong&gt;, qui fait partie de la &lt;strong&gt;Linux Foundation&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;J’assurerai ce role aux cotes de &lt;strong&gt;Casper Nielsen&lt;/strong&gt; de &lt;strong&gt;Diagrid&lt;/strong&gt;, elu &lt;strong&gt;co-president&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;C’est un moment important pour l’ecosysteme de l’agentic AI. Parmi les partenaires impliques dans la fondation, l’interet est deja tres fort, et le besoin l’est encore davantage: si l’agentic AI doit etre utilisee dans des systemes serieux, il faut des bases communes beaucoup plus solides sur la &lt;strong&gt;precision&lt;/strong&gt;, la &lt;strong&gt;fiabilite&lt;/strong&gt;, l’evaluation et la confiance operationnelle.&lt;/p&gt;
&lt;p&gt;Je suis sincerement enthousiaste a l’idee de contribuer a structurer ce travail. Il y a ici une vraie opportunite de transformer une preoccupation largement partagee en lignes directrices concretes, en vocabulaire commun, et en orientations techniques utiles pour construire des systemes agentiques plus fiables.&lt;/p&gt;
&lt;p&gt;Je me rejouis de travailler avec Casper, avec les autres contributeurs du groupe, et avec l’ensemble de la communaute AAIF pour faire de cette initiative un effort utile, ambitieux et ancre dans des besoins reels.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important"&gt;Pourquoi c’est important&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La precision et la fiabilite sont centrales&lt;/strong&gt; pour rendre l’agentic AI exploitable en production.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La demande est deja tres visible&lt;/strong&gt; dans l’ecosysteme, avec un fort engagement des organisations participantes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La coordination ouverte est essentielle&lt;/strong&gt;: un cadre de fondation est le bon niveau pour aligner les termes, les attentes, les approches d’evaluation et les pratiques d’ingenierie.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="la-suite"&gt;La suite&lt;/h2&gt;
&lt;p&gt;Mon objectif est d’aider ce groupe de travail a devenir un espace ou l’experience pratique, les apports de la recherche et la rigueur d’ingenierie se rencontrent. Je suis tres motive a contribuer a cet effort et a construire quelque chose qui ait un impact reel pour la communaute.&lt;/p&gt;
&lt;h2 id="liens-associes"&gt;Liens associes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://aaif.org/"&gt;Site web de l’AAIF&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="aaif"/><category term="agentic-ai"/><category term="linux-foundation"/><category term="working-group"/><category term="reliability"/><category term="accuracy"/><category term="leadership"/></entry><entry><title>Elected Chair of the AAIF Accuracy and Reliability WG</title><link href="https://jordan.auge.synaxe.net/news/2026-02-27-aaif-accuracy-reliability-chair/" rel="alternate"/><published>2026-02-27T00:00:00+01:00</published><updated>2026-05-29T15:19:55.384744+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2026-02-27:/news/2026-02-27-aaif-accuracy-reliability-chair/</id><summary type="html">&lt;p&gt;Elected chair of the Accuracy and Reliability working group in the AAIF Agentic AI Foundation, alongside Casper Nielsen from Diagrid as co-chair.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I am honored and excited to share that, on &lt;strong&gt;27 February 2026&lt;/strong&gt;, I was elected &lt;strong&gt;chair of the Accuracy and Reliability working group&lt;/strong&gt; in the &lt;strong&gt;AAIF Agentic AI Foundation&lt;/strong&gt;, part of the &lt;strong&gt;Linux Foundation&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I will be serving alongside &lt;strong&gt;Casper Nielsen&lt;/strong&gt; from &lt;strong&gt;Diagrid&lt;/strong&gt;, who was elected &lt;strong&gt;co-chair&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is an important moment for the broader agentic AI community. Across the partners involved in the foundation, the level of interest is already very high, and the need is even clearer: if agentic AI is going to be used in serious systems, we need much stronger shared foundations for &lt;strong&gt;accuracy&lt;/strong&gt;, &lt;strong&gt;reliability&lt;/strong&gt;, evaluation, and operational trust.&lt;/p&gt;
&lt;p&gt;I am genuinely enthusiastic about helping shape this work. There is a real opportunity here to turn a fast-growing set of concerns into practical guidance, common language, and concrete technical directions that can help teams build more reliable agentic systems.&lt;/p&gt;
&lt;p&gt;I am looking forward to working with Casper, the other contributors in the working group, and the wider AAIF community to make this effort useful, ambitious, and grounded in real needs.&lt;/p&gt;</content><category term="news"/><category term="aaif"/><category term="agentic-ai"/><category term="linux-foundation"/><category term="working-group"/><category term="reliability"/><category term="accuracy"/><category term="leadership"/></entry><entry><title>Swisscom : résultats en production du livre blanc publiés</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-10-21-swisscom-whitepaper-production-results/" rel="alternate"/><published>2025-10-21T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910158+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-10-21:/fr/news/2025-10-21-swisscom-whitepaper-production-results/</id><summary type="html">&lt;p&gt;&amp;ldquo;Livre blanc technique documentant les resultats de deploiement en production de notre plateforme d&amp;rsquo;IA agentique chez Swisscom, avec des cas d&amp;rsquo;usage detailles.&amp;rdquo;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Apres plusieurs mois de collaboration entre Cisco Outshift, Swisscom et l’ETH Zurich, nous publions notre livre blanc technique complet documentant le &lt;strong&gt;deploiement en production&lt;/strong&gt; de notre plateforme d’IA agentique pour la validation des changements reseau.&lt;/p&gt;
&lt;p&gt;Le point de depart etait une question simple: &lt;em&gt;des agents IA peuvent-ils vraiment valider des changements reseau dans des environnements de production reels ?&lt;/em&gt; Aujourd’hui, avec &lt;strong&gt;2 deploiements actifs&lt;/strong&gt; chez Swisscom et &lt;strong&gt;5 cas d’usage valides&lt;/strong&gt;, nous avons une reponse claire.&lt;/p&gt;
&lt;h2 id="de-2-semaines-a-2-heures"&gt;De 2 semaines a 2 heures&lt;/h2&gt;
&lt;p&gt;Les chiffres parlent d’eux-memes. Ce qui demandait traditionnellement aux ingenieurs reseau &lt;strong&gt;2 semaines&lt;/strong&gt; de validation manuelle — verification des politiques de routage, des regles de pare-feu, et des changements de topologie dans des environnements multi-fournisseurs — prend maintenant seulement &lt;strong&gt;2 heures&lt;/strong&gt; avec notre plateforme d’IA agentique. Cela represente une &lt;strong&gt;reduction de 99,4 %&lt;/strong&gt; du temps de validation.&lt;/p&gt;
&lt;p&gt;Mais la vitesse n’est pas le seul indicateur. La plateforme a montre une gestion robuste de scenarios complexes: changements de routage BGP et OSPF, modifications de regles de pare-feu, reconfigurations de load balancers et mises a jour de topologie. Chaque cas a ete valide avec le meme niveau de rigueur que les processus manuels, mais avec une constance et une tracabilite que seule l’IA peut fournir.&lt;/p&gt;
&lt;h2 id="quand-larchitecture-rencontre-la-realite"&gt;Quand l’architecture rencontre la realite&lt;/h2&gt;
&lt;p&gt;Le livre blanc detaille l’architecture technique qui a rendu cela possible: un systeme multi-agents coordonnant des jumeaux numeriques de reseau, des graphes de connaissances pour la comprehension de la topologie, et une observabilite basee sur OpenTelemetry. La plateforme s’integre a des outils de production comme Batfish, Suzieq et les API Meraki, soit &lt;strong&gt;145 commits&lt;/strong&gt; et plus de &lt;strong&gt;12 000 lignes de code&lt;/strong&gt; repartis sur plusieurs depots.&lt;/p&gt;
&lt;p&gt;Il ne s’agit pas d’une demonstration de laboratoire. Ce sont de vrais reseaux Swisscom en production, transportant un vrai trafic, avec de vraies consequences en cas d’echec.&lt;/p&gt;
&lt;h2 id="ce-que-cela-signifie"&gt;Ce que cela signifie&lt;/h2&gt;
&lt;p&gt;Cette collaboration montre que l’IA agentique peut faire evoluer les operations reseau d’une validation manuelle reactive vers une assurance automatisee proactive. L’approche ne se contente pas de reduire la charge operationnelle: elle transforme en profondeur la facon dont les changements reseau sont concus, valides et deploies.&lt;/p&gt;
&lt;h3 id="ressources-associees"&gt;Ressources associees&lt;/h3&gt;
&lt;p&gt;Le livre blanc technique complet ainsi que l’annonce officielle sont disponibles ci-dessous.&lt;/p&gt;
&lt;h2 id="acceder-au-livre-blanc"&gt;Acceder au livre blanc&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Telechargement:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://outshift-headless-cms-s3.s3.us-east-2.amazonaws.com/Swisscom%20Whitepaper.pdf"&gt;Livre blanc Swisscom Agentic AI (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cs.co/6047AActN"&gt;Annonce officielle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Associe:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/news/2025-04-24-outshift-swisscom-agentic-ai-networks/"&gt;Annonce Swisscom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/projects/"&gt;Vue d’ensemble des projets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="swisscom"/><category term="whitepaper"/><category term="production"/><category term="agentic-ai"/><category term="networking"/><category term="aether"/><category term="cisco"/><category term="agentic-network-change-validation"/></entry><entry><title>Swisscom White Paper: Production Results Released</title><link href="https://jordan.auge.synaxe.net/news/2025-10-21-swisscom-whitepaper-production-results/" rel="alternate"/><published>2025-10-21T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099643+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-10-21:/news/2025-10-21-swisscom-whitepaper-production-results/</id><summary type="html">&lt;p&gt;Technical whitepaper documenting our agentic AI platform&amp;rsquo;s production deployment results at Swisscom with detailed use cases.&lt;/p&gt;</summary><content type="html">&lt;p&gt;After months of collaboration between Cisco Outshift, Swisscom, and ETH Zurich, we released our technical whitepaper documenting the &lt;strong&gt;production deployment&lt;/strong&gt; of our agentic AI platform for network change validation.&lt;/p&gt;
&lt;p&gt;The numbers: what traditionally took network engineers &lt;strong&gt;2 weeks&lt;/strong&gt; of manual validation now takes our platform just &lt;strong&gt;2 hours&lt;/strong&gt; — a 99.4% reduction. Across 2 live deployments at Swisscom and 5 validated use cases, the platform handles BGP and OSPF routing changes, firewall rule modifications, load balancer reconfigurations, and network topology updates. The system is built on a multi-agent architecture coordinating network digital twins, knowledge graphs, and OpenTelemetry-based observability, integrated with production tools like Batfish, Suzieq, and Meraki APIs.&lt;/p&gt;</content><category term="news"/><category term="swisscom"/><category term="whitepaper"/><category term="production"/><category term="agentic-ai"/><category term="networking"/><category term="aether"/><category term="cisco"/><category term="agentic-network-change-validation"/></entry><entry><title>AIEWF 2025 — IA multi-agents et graphes de connaissance</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/" rel="alternate"/><published>2025-08-22T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910140+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-08-22:/fr/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/</id><summary type="html">&lt;p&gt;Présentation sur les systèmes multi-agents pour la validation des changements réseau avec des graphes de connaissance et de l&amp;rsquo;orchestration IA.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ma collègue &lt;strong&gt;Ola Mabadeje&lt;/strong&gt; a présenté nos travaux sur les &lt;strong&gt;systèmes multi-agents&lt;/strong&gt;
et les &lt;strong&gt;graphes de connaissance&lt;/strong&gt; pour la validation des changements réseau à
l’&lt;strong&gt;AI &amp;amp; Enterprise Workflow Forum (AIEWF) 2025&lt;/strong&gt;.&lt;/p&gt;</content><category term="news"/><category term="aiewf"/><category term="presentation"/><category term="multi-agents"/><category term="graphes-de-connaissance"/><category term="ia"/><category term="reseaux"/><category term="aether"/><category term="agentic-network-change-validation"/><category term="ia-agentique"/></entry><entry><title>AIEWF 2025: Multi-Agent AI and Network Knowledge Graphs</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/" rel="alternate"/><published>2025-08-22T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099489+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-08-22:/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/</id><summary type="html">&lt;p&gt;Presentation on multi-agent systems for network change validation using knowledge graphs and AI orchestration.&lt;/p&gt;</summary><content type="html">&lt;p&gt;My colleague &lt;strong&gt;Ola Mabadeje&lt;/strong&gt; presented our work on &lt;strong&gt;multi-agent AI systems&lt;/strong&gt; and &lt;strong&gt;knowledge graphs&lt;/strong&gt; for network change validation at the &lt;strong&gt;AI &amp;amp; Enterprise Workflow Forum (AIEWF) 2025&lt;/strong&gt;.&lt;/p&gt;</content><category term="news"/><category term="aiewf"/><category term="presentation"/><category term="multi-agent"/><category term="knowledge-graphs"/><category term="ai"/><category term="networking"/><category term="aether"/><category term="agentic-network-change-validation"/><category term="realtime-experience-observability"/><category term="agentic-ai"/></entry><entry><title>AIEWF 2025: Multi-Agent AI and Network Knowledge Graphs</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/" rel="alternate"/><published>2025-08-22T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099489+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-08-22:/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/</id><summary type="html">&lt;p&gt;Presentation on multi-agent systems for network change validation using knowledge graphs and AI orchestration.&lt;/p&gt;</summary><content type="html">&lt;p&gt;My colleague &lt;strong&gt;Ola Mabadeje&lt;/strong&gt; presented our work on &lt;strong&gt;multi-agent AI systems&lt;/strong&gt; and &lt;strong&gt;knowledge graphs&lt;/strong&gt; for network change validation at the &lt;strong&gt;AI &amp;amp; Enterprise Workflow Forum (AIEWF) 2025&lt;/strong&gt;.&lt;/p&gt;</content><category term="news"/><category term="aiewf"/><category term="presentation"/><category term="multi-agent"/><category term="knowledge-graphs"/><category term="ai"/><category term="networking"/><category term="aether"/><category term="agentic-network-change-validation"/><category term="realtime-experience-observability"/><category term="agentic-ai"/></entry><entry><title>AIEWF 2025 — IA multi-agents et graphes de connaissance</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/" rel="alternate"/><published>2025-08-22T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910140+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-08-22:/fr/fr/news/2025-08-22-aiewf-multi-agent-network-knowledge-graphs/</id><summary type="html">&lt;p&gt;Présentation sur les systèmes multi-agents pour la validation des changements réseau avec des graphes de connaissance et de l&amp;rsquo;orchestration IA.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ma collègue &lt;strong&gt;Ola Mabadeje&lt;/strong&gt; a présenté nos travaux sur les &lt;strong&gt;systèmes multi-agents&lt;/strong&gt;
et les &lt;strong&gt;graphes de connaissance&lt;/strong&gt; pour la validation des changements réseau à
l’&lt;strong&gt;AI &amp;amp; Enterprise Workflow Forum (AIEWF) 2025&lt;/strong&gt;.&lt;/p&gt;</content><category term="news"/><category term="aiewf"/><category term="presentation"/><category term="multi-agents"/><category term="graphes-de-connaissance"/><category term="ia"/><category term="reseaux"/><category term="aether"/><category term="agentic-network-change-validation"/><category term="ia-agentique"/></entry><entry><title>"Video Galileo : architecturer une IA agentique fiable"</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-07-09-galileo-reliable-agentic-ai-video/" rel="alternate"/><published>2025-07-09T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099367+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-07-09:/fr/news/2025-07-09-galileo-reliable-agentic-ai-video/</id><summary type="html">&lt;p&gt;&amp;ldquo;Une présentation recommandée de Giovanna Carofiglio sur la construction d&amp;rsquo;une IA agentique fiable — pas mon propre travail, mais très pertinent pour quiconque s&amp;rsquo;intéresse aux systèmes agents de confiance.&amp;rdquo;&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Ceci ne concerne pas mon propre travail — c’est une présentation que je
recommande car elle est directement pertinente pour la question plus large de
la construction de systèmes agentiques fiables.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Giovanna Carofiglio&lt;/strong&gt; a donné une présentation pour &lt;strong&gt;Galileo&lt;/strong&gt; en
juillet 2025 sur la &lt;strong&gt;fiabilité de l’IA agentique&lt;/strong&gt; : ce qu’il faut pour
construire des systèmes agents qui restent inspectables et dignes de confiance
dans des conditions opérationnelles réelles.&lt;/p&gt;
&lt;p&gt;La présentation aborde des enjeux d’ingénierie — observabilité, modes de
défaillance, frontières de confiance — qui importent à quiconque déploie des
agents en production, quel que soit le domaine spécifique.&lt;/p&gt;
&lt;h2 id="video"&gt;Vidéo&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=E34onMQ8iiI&amp;amp;t=1935s"&gt;Architecting Reliable Agentic AI | Cisco’s Giovanna Carofiglio on the AGNTCY Collective&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="galileo"/><category term="video"/><category term="presentation"/><category term="agentic-ai"/><category term="reliability"/><category term="cisco"/><category term="recommended"/><category term="public-artifact"/></entry><entry><title>Galileo Video: Architecting Reliable Agentic AI</title><link href="https://jordan.auge.synaxe.net/news/2025-07-09-galileo-reliable-agentic-ai-video/" rel="alternate"/><published>2025-07-09T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099426+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-07-09:/news/2025-07-09-galileo-reliable-agentic-ai-video/</id><summary type="html">&lt;p&gt;A recommended talk by Giovanna Carofiglio on building reliable agentic AI — not my own work, but highly relevant to anyone thinking about trustworthy agent systems.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This is not about my own work — it is a talk I recommend because it is
directly relevant to the broader question of building reliable agentic systems.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Giovanna Carofiglio&lt;/strong&gt; gave a talk for &lt;strong&gt;Galileo&lt;/strong&gt; in July 2025 on
&lt;strong&gt;reliable agentic AI&lt;/strong&gt;: what it takes to build agent systems that remain
inspectable and trustworthy under real operational conditions.&lt;/p&gt;
&lt;p&gt;The talk covers engineering concerns — observability, failure modes, trust
boundaries — that matter to anyone deploying agents in production, regardless
of the specific domain.&lt;/p&gt;
&lt;h2 id="video"&gt;Video&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=E34onMQ8iiI&amp;amp;t=1935s"&gt;Architecting Reliable Agentic AI | Cisco’s Giovanna Carofiglio on the AGNTCY Collective&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="galileo"/><category term="video"/><category term="presentation"/><category term="agentic-ai"/><category term="reliability"/><category term="cisco"/><category term="recommended"/><category term="public-artifact"/></entry><entry><title>Cisco Live US 2025: Agentic AI and NetDevOps Session</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/" rel="alternate"/><published>2025-06-03T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099309+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-06-03:/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/</id><summary type="html">&lt;p&gt;Presentation on agentic network change validation at Cisco Live US, covering AI-driven verification and NetDevOps automation.&lt;/p&gt;</summary><content type="html">&lt;p&gt;My colleague &lt;strong&gt;Giovanna Carofiglio&lt;/strong&gt; presented our work on &lt;strong&gt;agentic AI for network change validation&lt;/strong&gt; at &lt;strong&gt;Cisco Live US 2025&lt;/strong&gt; in Las Vegas, session &lt;a href="https://www.ciscolive.com/global/on-demand-library.html?search=BRKNWT-2502"&gt;BRKNWT-2502&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The session covered how multi-agent AI systems can automate and validate network changes end-to-end using digital twin models of the network. The approach combines LLM-driven agents with network knowledge graphs to reason about the impact of changes before deployment, reducing the risk of outages while enabling faster NetDevOps iteration cycles.&lt;/p&gt;
&lt;p&gt;The full &lt;a href="https://www.ciscolive.com/c/dam/r/ciscolive/global-event/docs/2025/pdf/BRKNWT-2502.pdf"&gt;session slides&lt;/a&gt; and &lt;a href="https://www.youtube.com/watch?v=nkD8DiUsP7o"&gt;session recording&lt;/a&gt; are available below.&lt;/p&gt;</content><category term="news"/><category term="ciscolive"/><category term="presentation"/><category term="agentic-ai"/><category term="netdevops"/><category term="networking"/><category term="aether"/><category term="cisco"/><category term="agentic-network-change-validation"/></entry><entry><title>Cisco Live US 2025 — Agentic AI and NetDevOps</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/" rel="alternate"/><published>2025-06-03T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910123+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-06-03:/fr/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/</id><summary type="html">&lt;p&gt;Présentation sur la validation agentique des changements réseau à Cisco Live US, couvrant la vérification par IA et l&amp;rsquo;automatisation NetDevOps.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ma collègue &lt;strong&gt;Giovanna Carofiglio&lt;/strong&gt; a présenté nos travaux sur la &lt;strong&gt;validation agentique
des changements réseau par IA&lt;/strong&gt; à &lt;strong&gt;Cisco Live US 2025&lt;/strong&gt; à Las Vegas, session
&lt;a href="https://www.ciscolive.com/global/on-demand-library.html?search=BRKNWT-2502"&gt;BRKNWT-2502&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La session a présenté comment des systèmes multi-agents peuvent automatiser et valider
les changements réseau de bout en bout à l’aide de jumeaux numériques. L’approche
combine des agents pilotés par LLM avec des graphes de connaissance réseau pour
raisonner sur l’impact des changements avant déploiement.&lt;/p&gt;
&lt;p&gt;Les &lt;a href="https://www.ciscolive.com/c/dam/r/ciscolive/global-event/docs/2025/pdf/BRKNWT-2502.pdf"&gt;slides&lt;/a&gt;
et l’&lt;a href="https://www.youtube.com/watch?v=nkD8DiUsP7o"&gt;enregistrement&lt;/a&gt; sont disponibles.&lt;/p&gt;</content><category term="news"/><category term="ciscolive"/><category term="presentation"/><category term="ia-agentique"/><category term="netdevops"/><category term="reseaux"/><category term="aether"/><category term="cisco"/><category term="agentic-network-change-validation"/></entry><entry><title>Cisco Live US 2025 — Agentic AI and NetDevOps</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/" rel="alternate"/><published>2025-06-03T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910123+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-06-03:/fr/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/</id><summary type="html">&lt;p&gt;Présentation sur la validation agentique des changements réseau à Cisco Live US, couvrant la vérification par IA et l&amp;rsquo;automatisation NetDevOps.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ma collègue &lt;strong&gt;Giovanna Carofiglio&lt;/strong&gt; a présenté nos travaux sur la &lt;strong&gt;validation agentique
des changements réseau par IA&lt;/strong&gt; à &lt;strong&gt;Cisco Live US 2025&lt;/strong&gt; à Las Vegas, session
&lt;a href="https://www.ciscolive.com/global/on-demand-library.html?search=BRKNWT-2502"&gt;BRKNWT-2502&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La session a présenté comment des systèmes multi-agents peuvent automatiser et valider
les changements réseau de bout en bout à l’aide de jumeaux numériques. L’approche
combine des agents pilotés par LLM avec des graphes de connaissance réseau pour
raisonner sur l’impact des changements avant déploiement.&lt;/p&gt;
&lt;p&gt;Les &lt;a href="https://www.ciscolive.com/c/dam/r/ciscolive/global-event/docs/2025/pdf/BRKNWT-2502.pdf"&gt;slides&lt;/a&gt;
et l’&lt;a href="https://www.youtube.com/watch?v=nkD8DiUsP7o"&gt;enregistrement&lt;/a&gt; sont disponibles.&lt;/p&gt;</content><category term="news"/><category term="ciscolive"/><category term="presentation"/><category term="ia-agentique"/><category term="netdevops"/><category term="reseaux"/><category term="aether"/><category term="cisco"/><category term="agentic-network-change-validation"/></entry><entry><title>Cisco Live US 2025: Agentic AI and NetDevOps Session</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/" rel="alternate"/><published>2025-06-03T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099309+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-06-03:/fr/news/2025-06-03-ciscolive-agentic-ai-netdevops/</id><summary type="html">&lt;p&gt;Presentation on agentic network change validation at Cisco Live US, covering AI-driven verification and NetDevOps automation.&lt;/p&gt;</summary><content type="html">&lt;p&gt;My colleague &lt;strong&gt;Giovanna Carofiglio&lt;/strong&gt; presented our work on &lt;strong&gt;agentic AI for network change validation&lt;/strong&gt; at &lt;strong&gt;Cisco Live US 2025&lt;/strong&gt; in Las Vegas, session &lt;a href="https://www.ciscolive.com/global/on-demand-library.html?search=BRKNWT-2502"&gt;BRKNWT-2502&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The session covered how multi-agent AI systems can automate and validate network changes end-to-end using digital twin models of the network. The approach combines LLM-driven agents with network knowledge graphs to reason about the impact of changes before deployment, reducing the risk of outages while enabling faster NetDevOps iteration cycles.&lt;/p&gt;
&lt;p&gt;The full &lt;a href="https://www.ciscolive.com/c/dam/r/ciscolive/global-event/docs/2025/pdf/BRKNWT-2502.pdf"&gt;session slides&lt;/a&gt; and &lt;a href="https://www.youtube.com/watch?v=nkD8DiUsP7o"&gt;session recording&lt;/a&gt; are available below.&lt;/p&gt;</content><category term="news"/><category term="ciscolive"/><category term="presentation"/><category term="agentic-ai"/><category term="netdevops"/><category term="networking"/><category term="aether"/><category term="cisco"/><category term="agentic-network-change-validation"/></entry><entry><title>Outshift and Swisscom: Building Agentic AI Networks</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/" rel="alternate"/><published>2025-04-24T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099220+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-04-24:/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/</id><summary type="html">&lt;p&gt;Announcing our collaboration with Swisscom on AI-driven network reliability using network digital twins and AI agents.&lt;/p&gt;</summary><content type="html">&lt;p&gt;We announced a collaboration between &lt;a href="https://outshift.cisco.com/blog/outshift-swisscom-build-agentic-ai-networks"&gt;&lt;strong&gt;Cisco Outshift&lt;/strong&gt;&lt;/a&gt; and &lt;strong&gt;Swisscom&lt;/strong&gt; on building AI-driven network reliability through agentic AI and network digital twins.&lt;/p&gt;
&lt;p&gt;Through the &lt;strong&gt;Aether project&lt;/strong&gt;, we developed an agentic AI platform that creates network digital twins, orchestrates multi-agent validation workflows, and automates change validation — reducing validation time at Swisscom.&lt;/p&gt;</content><category term="news"/><category term="swisscom"/><category term="partnership"/><category term="ai"/><category term="networking"/><category term="outshift"/><category term="cisco"/><category term="aether"/><category term="agentic-network-change-validation"/></entry><entry><title>Outshift et Swisscom : déployer des réseaux d'IA agentique</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/" rel="alternate"/><published>2025-04-24T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910167+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-04-24:/fr/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/</id><summary type="html">&lt;p&gt;Annonce de notre collaboration avec Swisscom sur la fiabilité des réseaux pilotée par IA, à l&amp;rsquo;aide de jumeaux numériques et d&amp;rsquo;agents IA.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Nous avons annoncé une collaboration entre &lt;a href="https://outshift.cisco.com/blog/outshift-swisscom-build-agentic-ai-networks"&gt;&lt;strong&gt;Cisco Outshift&lt;/strong&gt;&lt;/a&gt;
et &lt;strong&gt;Swisscom&lt;/strong&gt; pour améliorer la fiabilité des réseaux grâce à l’IA agentique et aux jumeaux numériques de réseaux.&lt;/p&gt;
&lt;p&gt;Dans le cadre du &lt;strong&gt;projet Aether&lt;/strong&gt;, nous avons développé une plateforme d’IA agentique
qui crée des jumeaux numériques des réseaux, orchestre des workflows de validation
multi-agents et automatise la validation des changements — réduisant le temps de
validation chez Swisscom.&lt;/p&gt;</content><category term="news"/><category term="swisscom"/><category term="partenariat"/><category term="ia"/><category term="reseaux"/><category term="outshift"/><category term="cisco"/><category term="aether"/><category term="agentic-network-change-validation"/></entry><entry><title>Outshift et Swisscom : déployer des réseaux d'IA agentique</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/" rel="alternate"/><published>2025-04-24T00:00:00+02:00</published><updated>2026-05-29T15:20:22.910167+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-04-24:/fr/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/</id><summary type="html">&lt;p&gt;Annonce de notre collaboration avec Swisscom sur la fiabilité des réseaux pilotée par IA, à l&amp;rsquo;aide de jumeaux numériques et d&amp;rsquo;agents IA.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Nous avons annoncé une collaboration entre &lt;a href="https://outshift.cisco.com/blog/outshift-swisscom-build-agentic-ai-networks"&gt;&lt;strong&gt;Cisco Outshift&lt;/strong&gt;&lt;/a&gt;
et &lt;strong&gt;Swisscom&lt;/strong&gt; pour améliorer la fiabilité des réseaux grâce à l’IA agentique et aux jumeaux numériques de réseaux.&lt;/p&gt;
&lt;p&gt;Dans le cadre du &lt;strong&gt;projet Aether&lt;/strong&gt;, nous avons développé une plateforme d’IA agentique
qui crée des jumeaux numériques des réseaux, orchestre des workflows de validation
multi-agents et automatise la validation des changements — réduisant le temps de
validation chez Swisscom.&lt;/p&gt;</content><category term="news"/><category term="swisscom"/><category term="partenariat"/><category term="ia"/><category term="reseaux"/><category term="outshift"/><category term="cisco"/><category term="aether"/><category term="agentic-network-change-validation"/></entry><entry><title>Outshift and Swisscom: Building Agentic AI Networks</title><link href="https://jordan.auge.synaxe.net/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/" rel="alternate"/><published>2025-04-24T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099220+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-04-24:/fr/news/2025-04-24-outshift-swisscom-agentic-ai-networks/</id><summary type="html">&lt;p&gt;Announcing our collaboration with Swisscom on AI-driven network reliability using network digital twins and AI agents.&lt;/p&gt;</summary><content type="html">&lt;p&gt;We announced a collaboration between &lt;a href="https://outshift.cisco.com/blog/outshift-swisscom-build-agentic-ai-networks"&gt;&lt;strong&gt;Cisco Outshift&lt;/strong&gt;&lt;/a&gt; and &lt;strong&gt;Swisscom&lt;/strong&gt; on building AI-driven network reliability through agentic AI and network digital twins.&lt;/p&gt;
&lt;p&gt;Through the &lt;strong&gt;Aether project&lt;/strong&gt;, we developed an agentic AI platform that creates network digital twins, orchestrates multi-agent validation workflows, and automates change validation — reducing validation time at Swisscom.&lt;/p&gt;</content><category term="news"/><category term="swisscom"/><category term="partnership"/><category term="ai"/><category term="networking"/><category term="outshift"/><category term="cisco"/><category term="aether"/><category term="agentic-network-change-validation"/></entry><entry><title>Suivre la consommation d'un ballon d'eau chaude avec PowerCalc dans Home Assistant</title><link href="https://jordan.auge.synaxe.net/fr/blog/2025/01/tracking-hot-water-tank-power-consumption-powercalc-home-assistant/" rel="alternate"/><published>2025-01-27T00:00:00+01:00</published><updated>2026-05-19T00:00:00+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-01-27:/fr/blog/2025/01/tracking-hot-water-tank-power-consumption-powercalc-home-assistant/</id><summary type="html">&lt;p&gt;Estimer la consommation d&amp;rsquo;un ballon d&amp;rsquo;eau chaude dans Home Assistant avec PowerCalc en combinant un déclencheur binaire et un modèle de puissance dépendant de la tension.&lt;/p&gt;</summary><content type="html">&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Cet article explique comment utiliser l’intégration PowerCalc pour ajouter la consommation d’un ballon d’eau chaude au tableau de bord Énergie de Home Assistant sans installer de capteur de puissance dédié.&lt;/p&gt;
&lt;p&gt;L’idée clé est qu’un ballon d’eau chaude suit un profil de consommation assez simple : c’est une charge résistive de forte puissance, souvent active sur des créneaux fixes, par exemple pendant les heures creuses la nuit. Lorsqu’aucun autre appareil comparable ne fonctionne au même moment, on peut exploiter les sauts de puissance, ou tout autre signal corrélé, pour détecter quand le ballon chauffe et estimer correctement sa consommation. PowerCalc est particulièrement adapté à ce type de capteur virtuel.&lt;/p&gt;
&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;
&lt;p&gt;J’ai volontairement choisi un appareil “simple”, le Sauter Cangar 200 L, annoncé à 2200 W, parce qu’un ballon d’eau chaude devrait rester un équipement basique. Le marketing semble pourtant avoir pris le dessus sur la durabilité, l’efficacité et le bon sens technique. Beaucoup de modèles plus récents exposent des interfaces propriétaires pour un faux sentiment de contrôle, exigent du Wi-Fi et une connexion cloud, et consomment en permanence une puissance de veille non négligeable. J’ai aussi constaté que certains ne peuvent pas être pilotés via le fil pilote, ce qui oblige à synchroniser manuellement leur programmation avec celle du fournisseur d’électricité. Les ballons plus classiques sont plus simples : ils sont pensés pour être pilotés via le fil pilote et, comme ils ne sont pas conçus pour rester alimentés en permanence, ils intègrent souvent une batterie plus robuste pour des fonctions comme l’anticorrosion active pendant les périodes hors tension.&lt;/p&gt;
&lt;p&gt;Si vous utilisez Home Assistant sérieusement, vous avez sans doute déjà rencontré la “matière noire” de l’énergie domestique : des équipements lourds, comme les ballons d’eau chaude câblés en direct, sans mesure intégrée. On peut installer un relais dédié ou un sous-compteur dans le tableau électrique, mais dans certains cas un capteur virtuel piloté par logiciel est suffisamment précis et bien plus simple à maintenir.&lt;/p&gt;
&lt;h2 id="quest-ce-que-powercalc"&gt;Qu’est-ce que PowerCalc ?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/bramstroker/homeassistant-powercalc"&gt;PowerCalc&lt;/a&gt; est une intégration Home Assistant spécialisée dans l’estimation de la consommation des appareils qui ne la remontent pas eux-mêmes. Sa fonctionnalité la plus utile ici est le capteur de &lt;strong&gt;puissance virtuelle manuelle&lt;/strong&gt;. Elle permet de prendre un simple état On/Off et de le transformer en entités de puissance (W) et d’énergie (kWh).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Le tableau de bord Énergie&lt;/strong&gt; : n’a besoin que du capteur d’énergie (kWh) créé par PowerCalc.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les utility meters&lt;/strong&gt; : sont utiles si vous voulez des entités dédiées pour l’interface principale, ou des compteurs distincts selon les tarifs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="calculer-la-resistance-du-ballon"&gt;Calculer la résistance du ballon&lt;/h2&gt;
&lt;p&gt;On pourrait affecter une puissance fixe, par exemple 2200 W, ou prendre une moyenne récente, mais en pratique cette valeur varie dans le temps. Cela peut facilement introduire une erreur de 5 % ou plus.&lt;/p&gt;
&lt;p&gt;La raison est la baisse de tension du réseau pendant les périodes de forte demande. J’ai observé une tension qui pouvait passer de 225 V à 215 V exactement au moment où les heures creuses commencent et où le ballon démarre. Si l’on modélise le ballon avec une puissance fixe, on surestime alors l’énergie réellement consommée.&lt;/p&gt;
&lt;p&gt;&lt;img alt="alt text" src="/blog/2025-01-27-homeassistant-power-tracking-water-tank-powercalc/image.png"/&gt;&lt;/p&gt;
&lt;p&gt;On peut au contraire exploiter le fait qu’un ballon se comporte comme une charge presque purement résistive suivant la loi d’Ohm : $P = V^2 / R$. J’ai mesuré le delta de puissance avant et après le déclenchement.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;P&lt;/th&gt;
&lt;th&gt;V&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Avant déclenchement&lt;/td&gt;
&lt;td&gt;212 W&lt;/td&gt;
&lt;td&gt;220 V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Après déclenchement&lt;/td&gt;
&lt;td&gt;2212 W&lt;/td&gt;
&lt;td&gt;220 V&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La formule donne alors $R = V^2 / P = 220^2 / 2000 = 24.2 \Omega$. Dans cette mesure, le résultat est proche de la valeur annoncée, mais ce n’est pas toujours le cas. J’ai répété l’opération sur plusieurs jours et retenu une résistance moyenne de 24 $\Omega$.&lt;/p&gt;
&lt;p&gt;Une fois cette résistance estimée, on peut calculer la puissance instantanée directement à partir de la tension mesurée en utilisant la même formule.&lt;/p&gt;
&lt;h2 id="configurer-powercalc"&gt;Configurer PowerCalc&lt;/h2&gt;
&lt;h3 id="installation"&gt;Installation&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Installation via HACS&lt;/strong&gt; : allez dans HACS -&amp;gt; Integrations -&amp;gt; Explore &amp;amp; Download Repositories. Cherchez “Powercalc” puis installez-le.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redémarrage&lt;/strong&gt; : redémarrez Home Assistant pour initialiser l’intégration.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="creer-un-binary-sensor-pour-detecter-lactivite-du-ballon"&gt;Créer un binary sensor pour détecter l’activité du ballon&lt;/h2&gt;
&lt;p&gt;Pour suivre virtuellement un appareil, PowerCalc a besoin d’un capteur de référence indiquant quand l’équipement est actif. Ici j’utilise le compteur global de la maison, un &lt;strong&gt;Lixee ZLinky&lt;/strong&gt;, pour détecter le saut de puissance.&lt;/p&gt;
&lt;p&gt;Un binary sensor est créé dans &lt;code&gt;templates.yaml&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;binary_sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Water&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tank&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Heating"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;unique_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;water_tank_heating&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;device_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;running&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;delay_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"00:00:15"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;delay_off&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"00:00:15"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% set power = states('sensor.lixee_zlinky_tic_puissance') | float(0) %}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% set is_time_window = 22 &amp;lt;= now().hour or now().hour &amp;lt; 6 %}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{{ power &amp;gt; 1800 and is_time_window }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Pour éviter les faux positifs dus à d’autres gros appareils comme un four, j’ajoute comme contrainte le créneau heures creuses, de 22 h à 6 h dans mon cas. Le &lt;code&gt;delay_on&lt;/code&gt; de 15 secondes filtre les pics très courts, et le &lt;code&gt;delay_off&lt;/code&gt; évite les clignotements lorsque le compteur remonte brièvement 0 W ou manque une mise à jour.&lt;/p&gt;
&lt;h2 id="ajouter-un-capteur-depuis-linterface-powercalc"&gt;Ajouter un capteur depuis l’interface PowerCalc&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Configuration de l’intégration&lt;/strong&gt; : allez dans &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Devices &amp;amp; Services&lt;/strong&gt; &amp;gt; &lt;strong&gt;Add Integration&lt;/strong&gt;. Recherchez “Powercalc” puis sélectionnez-le.&lt;/p&gt;
&lt;p&gt;Suivez ensuite les étapes suivantes :&lt;/p&gt;
&lt;h3 id="ecran-1-choix-du-type-de-capteur"&gt;Écran 1 : choix du type de capteur&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Sélectionnez &lt;strong&gt;Virtual power (manual)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ecran-2-creation-dun-capteur-de-puissance-virtuelle"&gt;Écran 2 : création d’un capteur de puissance virtuelle&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Source entity&lt;/strong&gt; : &lt;code&gt;binary_sensor.water_tank_heating&lt;/code&gt;.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; : “Hot water tank Power”.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculation strategy&lt;/strong&gt; : choisissez &lt;strong&gt;fixed&lt;/strong&gt;.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standby power&lt;/strong&gt; : mettez 0.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create energy sensor&lt;/strong&gt; : laissez activé.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ecran-3-configuration-fixe"&gt;Écran 3 : configuration fixe&lt;/h3&gt;
&lt;p&gt;Utilisez le champ &lt;strong&gt;Power template&lt;/strong&gt; pour le calcul dynamique.&lt;/p&gt;
&lt;p&gt;Au lieu de saisir une puissance fixe, utilisez l’expression Jinja Home Assistant habituelle qui élève &lt;code&gt;sensor.lixee_zlinky_tic_tension&lt;/code&gt; au carré, divise par &lt;code&gt;23.07&lt;/code&gt;, puis arrondit le résultat à deux décimales.&lt;/p&gt;
&lt;h3 id="ecran-4-options-avancees"&gt;Écran 4 : options avancées&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Energy integration method&lt;/strong&gt; : choisissez &lt;strong&gt;left&lt;/strong&gt; (Left Riemann Sum). Pour un appareil qui passe presque instantanément de 0 W à 2000 W, cette méthode est en général plus précise que la méthode trapézoïdale par défaut.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy sensor unit prefix&lt;/strong&gt; : vérifiez que &lt;strong&gt;k (kilo)&lt;/strong&gt; est sélectionné.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="section-added"&gt;
&lt;p&gt;&lt;span id="pour-aller-plus-loin"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="pour-aller-plus-loin-2026-05-19"&gt;Pour aller plus loin &lt;a class="section-badge section-badge-added" data-bs-target="#article-changelog" data-bs-toggle="collapse" href="#article-changelog" role="button" title="Ajouté le 2026-05-19 : analyse des erreurs dues aux fluctuations de tension ; alternative YAML native sans PowerCalc."&gt;+ 2026-05-19&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="precision-quantifier-lerreur-liee-aux-fluctuations-de-tension"&gt;Précision : quantifier l’erreur liée aux fluctuations de tension&lt;/h3&gt;
&lt;p&gt;La formule $P = V^2/R$ implique qu’une variation de tension par rapport au nominal 230 V est amplifiée dans le calcul de puissance, car la relation est quadratique. Avec $R = 24\,\Omega$ :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tension&lt;/th&gt;
&lt;th&gt;Puissance réelle&lt;/th&gt;
&lt;th&gt;Erreur vs. 230 V fixe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;215 V&lt;/td&gt;
&lt;td&gt;1927 W&lt;/td&gt;
&lt;td&gt;−277 W (−14 %)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;220 V&lt;/td&gt;
&lt;td&gt;2017 W&lt;/td&gt;
&lt;td&gt;−187 W (−9 %)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;225 V&lt;/td&gt;
&lt;td&gt;2110 W&lt;/td&gt;
&lt;td&gt;−94 W (−4 %)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;230 V&lt;/td&gt;
&lt;td&gt;2204 W&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;235 V&lt;/td&gt;
&lt;td&gt;2301 W&lt;/td&gt;
&lt;td&gt;+97 W (+4 %)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En heures creuses, le réseau est davantage chargé et la tension se situe typiquement vers le bas de cette plage. Sur un cycle de chauffe de 3h30 à 215 V, un modèle fixé à 230 V comptabiliserait 7,7 kWh au lieu des 6,7 kWh réels — soit un écart d’un kilowattheure par nuit, ou environ 30 kWh par mois.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Remarque sur les valeurs négatives.&lt;/strong&gt; Si l’on cherchait à estimer la consommation du ballon en soustrayant une ligne de base à la puissance totale du foyer plutôt qu’en utilisant un déclencheur binaire, une chute de tension simultanée au démarrage du ballon pourrait produire un delta de puissance légèrement inférieur à l’attendu et, selon le timing, une lecture brièvement négative. L’approche par déclencheur binaire évite entièrement ce problème : la puissance vaut soit $V^2/R$, soit zéro, sans aucune soustraction.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="alternative-yaml-natif-sans-powercalc"&gt;Alternative : YAML natif sans PowerCalc&lt;/h3&gt;
&lt;p&gt;Si vous préférez éviter une dépendance HACS, le même résultat peut être obtenu avec trois composants standard de Home Assistant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Capteur template&lt;/strong&gt; — puissance instantanée, dans &lt;code&gt;templates.yaml&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Water&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tank&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Power"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;unit_of_measurement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"W"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;device_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;power&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;state_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;measurement&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% if is_state('binary_sensor.water_tank_heating', 'on') %}&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="no"&gt;{{ (states('sensor.lixee_zlinky_tic_tension') | float(0) ** 2 / 24) | round(2) }}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% else %}&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="no"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% endif %}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. Intégration de Riemann&lt;/strong&gt; — accumulation d’énergie, dans &lt;code&gt;configuration.yaml&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;integration&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;sensor.water_tank_power&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Water&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tank&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Energy"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;unit_prefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;k&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;left&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;round&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3. Compteur utilitaire&lt;/strong&gt; — remises à zéro cycliques et persistance entre les redémarrages, dans &lt;code&gt;configuration.yaml&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;utility_meter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;water_tank_energy_daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;sensor.water_tank_energy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;daily&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;water_tank_energy_monthly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;sensor.water_tank_energy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;monthly&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Le capteur &lt;code&gt;integration&lt;/code&gt; se remet à zéro à chaque redémarrage de Home Assistant. Le wrapper &lt;code&gt;utility_meter&lt;/code&gt; ajoute des remises à zéro cycliques et des statistiques long terme, offrant le même comportement que le capteur d’énergie intégré de PowerCalc. Ajoutez &lt;code&gt;sensor.water_tank_energy&lt;/code&gt; (ou une entité de compteur utilitaire) au tableau de bord Énergie de la manière habituelle.&lt;/p&gt;
&lt;p&gt;Le compromis : trois blocs YAML contre une interface guidée en quelques clics. PowerCalc reste la solution la plus simple si HACS fait déjà partie de votre configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Une fois les nouveaux capteurs créés, ils devraient apparaître dans le tableau de bord Énergie comme appareils individuels. Cela permet de sortir une part importante de la consommation de la catégorie générique “non suivie”, tout en gardant une estimation raisonnablement précise, même lorsque la tension secteur varie.&lt;/p&gt;</content><category term="Home Automation"/></entry><entry><title>Tracking hot water tank power consumption with PowerCalc in Home Assistant</title><link href="https://jordan.auge.synaxe.net/blog/2025/01/tracking-hot-water-tank-power-consumption-powercalc-home-assistant/" rel="alternate"/><published>2025-01-27T00:00:00+01:00</published><updated>2026-05-19T00:00:00+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2025-01-27:/blog/2025/01/tracking-hot-water-tank-power-consumption-powercalc-home-assistant/</id><summary type="html">&lt;p&gt;Estimate hot water tank energy consumption in Home Assistant with PowerCalc by combining a binary trigger and a voltage-aware power template.&lt;/p&gt;</summary><content type="html">&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;!--
Old version:
This article explains how to use the PowerCalc integration to add your hot water tank consumption to the Home Assistant Energy dashboard without installing a dedicated power monitor.

The key observation is that hot water tanks follow a simple consumption pattern: they are high-power resistive loads, often scheduled in fixed time windows such as off-peak night hours. When there is no other similar appliance running at the same time, you can exploit sharp power jumps, or another correlated signal, to detect when the heater is active and estimate its consumption accurately. PowerCalc is well suited to that kind of virtual sensing.
--&gt;
&lt;p&gt;This article explains how to use the PowerCalc integration to add your hot water tank consumption to the Home Assistant Energy dashboard without installing a dedicated power monitor.&lt;/p&gt;
&lt;p&gt;The idea is simple: a hot water tank is a high-power resistive load with a fairly predictable schedule. If no other similar appliance overlaps with it, a single whole-home power sensor is often enough to detect heater activity and estimate its energy usage with good precision. PowerCalc is a good fit for this kind of virtual sensing because it can turn a binary trigger into both instantaneous power and accumulated energy.&lt;/p&gt;
&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;
&lt;!--
Old version:
I deliberately chose a "dumb" appliance, the widely available 200L Sauter Cangar, advertised at 2200W, because a hot water tank should remain a simple device. Marketing seems to have won the battle against durability, efficiency, and technical sanity. Many newer products expose proprietary interfaces for a superficial sense of control, require Wi-Fi and cloud connectivity, and draw a constant non-negligible standby load. I also found that some of them cannot be controlled through pilot wire, forcing you to manually synchronize their schedule with your electricity provider. Traditional tanks are simpler: they are designed to be driven by pilot wire and, because they are not intended to remain permanently powered, they often include a stronger battery for features such as active anti-corrosion during off-grid periods.

If you use Home Assistant seriously, you have probably run into the "dark matter" of home energy: heavy appliances such as hardwired electric water heaters that have no built-in metering. You can install a dedicated relay or a sub-meter in the electrical panel, but in some situations a software-driven virtual sensor is accurate enough and much easier to maintain.
--&gt;
&lt;p&gt;I deliberately chose a “dumb” appliance, the widely available 200L Sauter Cangar, advertised at 2200W, because a hot water tank should remain a simple device. Marketing seems to have won the battle against durability, efficiency, and technical sanity. Many newer products expose proprietary interfaces for a superficial sense of control, require Wi-Fi and cloud connectivity, and draw a constant non-negligible standby load. I also found that some of them cannot be controlled through pilot wire, forcing you to manually synchronize their schedule with your electricity provider. Traditional tanks are simpler: they are designed to be driven by pilot wire and, because they are not intended to remain permanently powered, they often include a stronger battery for features such as active anti-corrosion during off-grid periods.&lt;/p&gt;
&lt;p&gt;If you use Home Assistant seriously, you have probably run into the “dark matter” of home energy: hardwired appliances with no built-in metering. A hot water tank is a perfect example. You can install a relay with power monitoring or add a sub-meter in the electrical panel, but if the appliance has a clean enough signature, a software-only virtual sensor can be both simpler and accurate enough for the Energy dashboard.&lt;/p&gt;
&lt;h2 id="what-is-powercalc"&gt;&lt;strong&gt;What is Powercalc?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/bramstroker/homeassistant-powercalc"&gt;Powercalc&lt;/a&gt; is a specialized Home Assistant integration designed to estimate power consumption for devices that don’t report it themselves. Its key feature is the &lt;strong&gt;Manual Virtual Power&lt;/strong&gt; sensor. It allows you to take a simple “On/Off” state and transform it into a high-fidelity Power (W) and Energy (kWh) entity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Energy Dashboard:&lt;/strong&gt; only requires the &lt;strong&gt;Energy Sensor&lt;/strong&gt; (kWh) created by PowerCalc. It manages its own long-term statistics internally.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Utility Meters:&lt;/strong&gt; useful when you want dedicated entities for the main UI, or when you need separate tariff-specific counters outside the dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="computing-the-heaters-resistance"&gt;Computing the heater’s resistance&lt;/h2&gt;
&lt;!--
Old version:
You could assign a fixed value such as 2200 W, or derive a simple average from recent history, but in practice this power varies over time. That can easily introduce errors of 5% or more.

The reason is that mains voltage drops during heavy usage periods. I noticed that voltage could fall from 225 V to 215 V exactly when off-peak hours start and the heater turns on. If you model the heater with a fixed power value, you will overestimate the energy actually used.
--&gt;
&lt;p&gt;You could assign a fixed value such as 2200 W, or derive a simple average from recent history, but in practice this power varies over time. That can easily introduce errors of 5% or more.&lt;/p&gt;
&lt;p&gt;The reason is that voltage is not constant. During heavy usage periods I observed mains voltage falling from roughly 225 V to 215 V, often exactly when off-peak hours begin and the heater turns on. A fixed-power model therefore counts energy that was never actually drawn.&lt;/p&gt;
&lt;p&gt;The graph makes the problem visible: heater activation coincides with a lower grid voltage, so using a fixed advertised wattage would systematically overestimate consumption.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Measured mains voltage and heater power variation around the heating trigger" src="/blog/2025-01-27-homeassistant-power-tracking-water-tank-powercalc/image.png"/&gt;&lt;/p&gt;
&lt;p&gt;Instead, we can exploit the fact that a hot water tank behaves as a nearly pure resistive load following Ohm’s law: $P = V^2 / R$. I measured the power delta before and after the heater trigger.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;P&lt;/th&gt;
&lt;th&gt;V&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Before trigger&lt;/td&gt;
&lt;td&gt;212 W&lt;/td&gt;
&lt;td&gt;220 V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After trigger&lt;/td&gt;
&lt;td&gt;2212 W&lt;/td&gt;
&lt;td&gt;220 V&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The formula gives $R = V^2 / P = 220^2 / 2000 = 24.2 \Omega$. In this measurement the result is close to the advertised value, but that is not always the case. I repeated the same check over several days and kept 24 $\Omega$ as the working resistance.&lt;/p&gt;
&lt;p&gt;Once you have that resistance estimate, you can compute instantaneous power directly from the measured voltage using the same formula.&lt;/p&gt;
&lt;h2 id="when-this-approach-works-well"&gt;When this approach works well&lt;/h2&gt;
&lt;p&gt;This approach works well when three conditions hold:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the appliance behaves like a mostly resistive load&lt;/li&gt;
&lt;li&gt;the appliance has a distinct power signature&lt;/li&gt;
&lt;li&gt;its schedule or operating window helps reduce ambiguity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It works less well when several similar high-power loads overlap, or when the trigger sensor is too noisy to isolate the heater reliably.&lt;/p&gt;
&lt;h2 id="setting-up-powercalc"&gt;Setting up powercalc&lt;/h2&gt;
&lt;h3 id="installation"&gt;Installation&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;HACS Installation:&lt;/strong&gt; Go to HACS -&amp;gt; Integrations -&amp;gt; Explore &amp;amp; Download Repositories. Search for “Powercalc” and download it.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restart:&lt;/strong&gt; Restart Home Assistant to initialize the new files.  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="setting-up-a-binary-sensor-to-track-active-appliance"&gt;Setting up a binary sensor to track active appliance&lt;/h2&gt;
&lt;p&gt;To track an appliance virtually, PowerCalc needs a reference sensor indicating when the device is active. Here I use the whole-home power meter, a &lt;strong&gt;Lixee ZLinky&lt;/strong&gt;, to detect the power delta.&lt;/p&gt;
&lt;p&gt;A binary sensor is created in &lt;code&gt;templates.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;binary_sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Water&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tank&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Heating"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;unique_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;water_tank_heating&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;device_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;running&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;delay_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"00:00:15"&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;delay_off&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"00:00:15"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% set power = states('sensor.lixee_zlinky_tic_puissance') | float(0) %}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% set is_time_window = 22 &amp;lt;= now().hour or now().hour &amp;lt; 6 %}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{{ power &amp;gt; 1800 and is_time_window }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;To avoid false positives caused by other heavy appliances such as an oven, I use the off-peak schedule, 10 PM to 6 AM in my case, as an additional constraint. The &lt;code&gt;delay_on&lt;/code&gt; of 15 seconds filters out short spikes, and &lt;code&gt;delay_off&lt;/code&gt; prevents flicker when the meter briefly reports 0 W or misses an update.&lt;/p&gt;
&lt;h2 id="adding-a-sensor-from-powercalc-ui"&gt;Adding a sensor from PowerCalc UI&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Integration Setup:&lt;/strong&gt; Go to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Devices &amp;amp; Services&lt;/strong&gt; &amp;gt; &lt;strong&gt;Add Integration&lt;/strong&gt;. Search for “Powercalc” and select it.&lt;/p&gt;
&lt;p&gt;Follow these steps in the PowerCalc configuration flow:&lt;/p&gt;
&lt;h3 id="screen-1-choose-sensor-type"&gt;&lt;strong&gt;Screen 1: Choose Sensor Type&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Virtual power (manual)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="screen-2-create-a-virtual-power-sensor"&gt;&lt;strong&gt;Screen 2: Create a virtual power sensor&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Source entity:&lt;/strong&gt; &lt;code&gt;binary_sensor.water_tank_heating&lt;/code&gt;.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; “Hot water tank Power”.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculation strategy:&lt;/strong&gt; Select &lt;strong&gt;fixed&lt;/strong&gt; from the dropdown.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standby power:&lt;/strong&gt; Set this to 0.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create energy sensor:&lt;/strong&gt; Ensure this is toggled &lt;strong&gt;ON&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="screen-3-fixed-config"&gt;&lt;strong&gt;Screen 3: Fixed config&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Use the &lt;strong&gt;Power template&lt;/strong&gt; field (the middle one) for your dynamic calculation.&lt;/p&gt;
&lt;p&gt;Instead of writing a fixed wattage, use the usual Home Assistant Jinja expression that squares &lt;code&gt;sensor.lixee_zlinky_tic_tension&lt;/code&gt;, divides by &lt;code&gt;23.07&lt;/code&gt;, and rounds the result to two decimals.&lt;/p&gt;
&lt;h3 id="screen-4-advanced-options"&gt;&lt;strong&gt;Screen 4: Advanced options&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Energy integration method:&lt;/strong&gt; change this to &lt;strong&gt;left&lt;/strong&gt; (Left Riemann Sum). For appliances that switch almost instantly from 0 W to 2000 W, this is usually more accurate than the default trapezoidal method.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy sensor unit prefix:&lt;/strong&gt; Ensure &lt;strong&gt;k (kilo)&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="section-added"&gt;
&lt;p&gt;&lt;span id="going-further"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="going-further-2026-05-19"&gt;Going further &lt;a class="section-badge section-badge-added" data-bs-target="#article-changelog" data-bs-toggle="collapse" href="#article-changelog" role="button" title="Added 2026-05-19: voltage fluctuation error analysis; native YAML alternative without PowerCalc."&gt;+ 2026-05-19&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="accuracy-quantifying-the-voltage-error"&gt;Accuracy: quantifying the voltage error&lt;/h3&gt;
&lt;p&gt;The formula $P = V^2/R$ means that a voltage variation from the 230 V nominal is
amplified when computing power, because the relationship is quadratic. With $R = 24\,\Omega$:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Voltage&lt;/th&gt;
&lt;th&gt;Actual power&lt;/th&gt;
&lt;th&gt;Error vs. fixed 230 V&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;215 V&lt;/td&gt;
&lt;td&gt;1927 W&lt;/td&gt;
&lt;td&gt;−277 W (−14%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;220 V&lt;/td&gt;
&lt;td&gt;2017 W&lt;/td&gt;
&lt;td&gt;−187 W (−9%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;225 V&lt;/td&gt;
&lt;td&gt;2110 W&lt;/td&gt;
&lt;td&gt;−94 W (−4%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;230 V&lt;/td&gt;
&lt;td&gt;2204 W&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;235 V&lt;/td&gt;
&lt;td&gt;2301 W&lt;/td&gt;
&lt;td&gt;+97 W (+4%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;During off-peak hours the grid is typically more loaded and voltage tends to sit
toward the lower end of that range. For a 3.5-hour heating cycle at 215 V, a
fixed 230 V model would account for 7.7 kWh instead of the actual 6.7 kWh — a
one kilowatt-hour overcount per night, or roughly 30 kWh per month.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on negative values.&lt;/strong&gt; If you were to estimate heater energy by
subtracting a baseline from the whole-home meter rather than using a binary
trigger, a simultaneous voltage drop at heater turn-on could produce a power
delta slightly lower than expected and, depending on timing, even a brief
negative reading. The binary trigger approach avoids this entirely: power is
either $V^2/R$ or zero, with no subtraction involved.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="alternative-native-yaml-without-powercalc"&gt;Alternative: native YAML without PowerCalc&lt;/h3&gt;
&lt;p&gt;If you prefer not to add a HACS dependency, the same result can be achieved
with three standard Home Assistant components.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Template sensor&lt;/strong&gt; — instantaneous power, in &lt;code&gt;templates.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Water&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tank&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Power"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;unit_of_measurement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"W"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;device_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;power&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;state_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;measurement&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p p-Indicator"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% if is_state('binary_sensor.water_tank_heating', 'on') %}&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="no"&gt;{{ (states('sensor.lixee_zlinky_tic_tension') | float(0) ** 2 / 24) | round(2) }}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% else %}&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="no"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="no"&gt;{% endif %}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. Riemann sum integration&lt;/strong&gt; — energy accumulation, in &lt;code&gt;configuration.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;integration&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;sensor.water_tank_power&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Water&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tank&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Energy"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;unit_prefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;k&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;left&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;round&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3. Utility meter&lt;/strong&gt; — cycle resets and persistence across restarts, in &lt;code&gt;configuration.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;utility_meter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;water_tank_energy_daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;sensor.water_tank_energy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;daily&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;water_tank_energy_monthly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;sensor.water_tank_energy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;monthly&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;integration&lt;/code&gt; sensor resets to zero on Home Assistant restart. The
&lt;code&gt;utility_meter&lt;/code&gt; wrapper adds cycle-based resets and long-term statistics,
giving the same behaviour as PowerCalc’s built-in energy sensor. Add
&lt;code&gt;sensor.water_tank_energy&lt;/code&gt; (or a utility meter entity) to the Energy dashboard
in the usual way.&lt;/p&gt;
&lt;p&gt;The tradeoff is three YAML blocks versus a single guided UI flow. PowerCalc
remains the simpler path if HACS is already part of your setup.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;!--
Old version:
Once the new sensors are created, they should appear in the Energy dashboard as individual devices. This moves a large share of consumption out of the generic "untracked" bucket while keeping the estimate reasonably accurate, even during periods of lower mains voltage.
--&gt;
&lt;p&gt;Once the new sensors are created, they should appear in the Energy dashboard as individual devices. This moves a large share of consumption out of the generic “untracked” bucket while keeping the estimate reasonably accurate, even during periods of lower mains voltage.&lt;/p&gt;
&lt;p&gt;The practical advantage of this method is not just accuracy. It is maintainability. If you already have a reliable whole-home meter, a virtual model in Home Assistant is often easier to operate than adding another relay, another radio device, or another component in the electrical panel.&lt;/p&gt;</content><category term="Home Automation"/><category term="home-assistant"/><category term="powercalc"/><category term="energy"/><category term="water-heater"/></entry><entry><title>Exécuter Windows 11 sur Linux en VM QEmu imbriquée</title><link href="https://jordan.auge.synaxe.net/fr/blog/2024/03/dev-qemu-windows/" rel="alternate"/><published>2024-03-14T00:00:00+01:00</published><updated>2026-05-29T15:20:22.910000+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2024-03-14:/fr/blog/2024/03/dev-qemu-windows/</id><summary type="html">&lt;p&gt;Comment configurer une machine virtuelle QEmu/KVM sous Linux avec prise en charge de la virtualisation imbriquée pour exécuter Windows 11 et WSL2, y compris les pilotes VirtIO, la configuration HyperV et la gestion des disques.&lt;/p&gt;</summary><content type="html">&lt;p&gt;J’utilise exclusivement Linux chez moi et j’avais besoin d’une VM Windows pour compiler la &lt;a href="https://github.com/vpinball/vpinball"&gt;suite de flipper virtuel&lt;/a&gt; et d’autres logiciels nécessitant l’utilisation du Windows Subsystem for Linux (WSL2).&lt;/p&gt;
&lt;h2 id="virtualbox-vs-qemu"&gt;Virtualbox vs QEmu&lt;/h2&gt;
&lt;p&gt;J’avais initialement choisi Virtualbox pour sa simplicité, mais je n’ai jamais réussi à y installer WSL2. Il semble que WSL2 soit implémenté sur la technologie HyperV de Windows, ce qui nécessite des fonctionnalités de virtualisation imbriquée pour être utilisé dans une VM.&lt;/p&gt;
&lt;p&gt;Contrairement à ce qui est annoncé dans la documentation officielle &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/faq#will-i-be-able-to-run-wsl-2-and-other-3rd-party-virtualization-tools-such-as-vmware--or-virtualbox-"&gt;wsl-virtualbox&lt;/a&gt;, il semble que la prise en charge de la virtualisation imbriquée pour HyperV n’ait pas été incluse dans la dernière version 7.0 de Virtualbox (7.0.14-Debian à la date de rédaction), rendant impossible l’installation de WSL2 &lt;a href="https://forums.virtualbox.org/viewtopic.php?t=110039"&gt;vbox-hyperv&lt;/a&gt;. Cela pourrait changer avec la sortie de la version 7.1.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;WslRegisterDistribution failed with error: 0x80370102
Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.
For information please visit https://aka.ms/enablevirtualization
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;C’était l’occasion d’essayer QEmu, qui le prend en charge et promet d’être plus efficace grâce à l’utilisation de KVM et virtio.&lt;/p&gt;
&lt;h2 id="configuration-de-qemu"&gt;Configuration de QEmu&lt;/h2&gt;
&lt;p&gt;J’ai suivi l’excellent tutoriel de &lt;a href="https://raphtlw.medium.com/how-to-set-up-a-kvm-qemu-windows-10-vm-ca1789411760"&gt;raphtlw&lt;/a&gt;, dont les étapes sont équivalentes pour Windows 11 (à quelques occurrences IDE près qui devraient être remplacées par SATA). Les étapes les plus importantes sont résumées ici, et vous pouvez vous référer à la page originale pour une explication détaillée avec captures d’écran.&lt;/p&gt;
&lt;h3 id="dependances"&gt;Dépendances&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;qemu-kvm&lt;span class="w"&gt; &lt;/span&gt;bridge-utils&lt;span class="w"&gt; &lt;/span&gt;virt-manager&lt;span class="w"&gt; &lt;/span&gt;qemu-system&lt;span class="w"&gt; &lt;/span&gt;virt-viewer&lt;span class="w"&gt; &lt;/span&gt;spice-vdagent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h3 id="configuration-classique"&gt;Configuration classique&lt;/h3&gt;
&lt;p&gt;Avant de commencer le processus d’installation, vous devrez télécharger deux fichiers ISO :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11, disponible sur le &lt;a href="https://www.microsoft.com/software-download/windows11"&gt;site de Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;L’&lt;a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D"&gt;ISO des pilotes VirtIO&lt;/a&gt;, nécessaire pour configurer les périphériques VirtIO pendant l’installation (le réseau est obligatoire) — montez-le comme un deuxième lecteur CDROM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Créez une nouvelle VM qui sera installée à partir d’un fichier ISO :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU, mémoire&lt;/strong&gt; : j’ai laissé les paramètres par défaut.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Taille du disque&lt;/strong&gt; : au moins 60 Go sont recommandés — Windows lui-même occupe environ 30 Go, et les outils de compilation nécessitent 10 à 20 Go supplémentaires. Vous pouvez toujours étendre la partition après l’installation.&lt;/li&gt;
&lt;li&gt;Créez un deuxième lecteur CDROM dans le menu Stockage (sélectionnez le type de support comme CDROM) et pointez vers l’ISO VirtIO.&lt;/li&gt;
&lt;li&gt;Activez le démarrage depuis le CDROM SATA dans les options de démarrage. Vous pouvez également le sélectionner via le menu BIOS si la machine ne démarre pas.&lt;/li&gt;
&lt;li&gt;Passez au pilote VirtIO pour le disque dur et la carte réseau pour de meilleures performances.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ajustement-de-la-prise-en-charge-hyperv"&gt;Ajustement de la prise en charge HyperV&lt;/h3&gt;
&lt;p&gt;La configuration a fonctionné jusqu’à ce que j’installe WSL2 et redémarre, moment où j’ai été accueilli par l’écran bleu avec le message &lt;code&gt;SYSTEM_THREAD_EXCEPTION_NOT_HANDLED&lt;/code&gt;. La VM n’a jamais réussi à se rétablir.&lt;/p&gt;
&lt;p&gt;J’ai trouvé des indications dans cet excellent &lt;a href="https://www.redpill-linpro.com/techblog/2021/04/07/nested-virtualization-hyper-v-in-qemu-kvm.html"&gt;article de Redpill Linpro&lt;/a&gt;, et après quelques essais avec l’éditeur XML dans la section “Processeur” de la configuration de la VM, j’ai réussi à redémarrer Windows avec ces paramètres :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;acpi/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;apic/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pae/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hyperv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;mode=&lt;/span&gt;&lt;span class="s"&gt;"custom"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vpindex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;synic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/hyperv&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;mode=&lt;/span&gt;&lt;span class="s"&gt;"custom"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;"exact"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;check=&lt;/span&gt;&lt;span class="s"&gt;"partial"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;fallback=&lt;/span&gt;&lt;span class="s"&gt;"allow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Broadwell-noTSX-IBRS&lt;span class="nt"&gt;&amp;lt;/model&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;policy=&lt;/span&gt;&lt;span class="s"&gt;"disable"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hypervisor"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;policy=&lt;/span&gt;&lt;span class="s"&gt;"require"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"vmx"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/cpu&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;clock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;offset=&lt;/span&gt;&lt;span class="s"&gt;"utc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"rtc"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"catchup"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"pit"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"delay"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hpet"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"no"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hypervclock"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"kvmclock"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/clock&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Je n’ai pas encore essayé d’optimiser ces paramètres au-delà de la confirmation que désactiver le passthrough CPU et sélectionner la bonne architecture CPU faisaient partie de la solution. La prochaine étape serait de consulter la documentation ou de continuer le processus d’essais-erreurs pour déterminer quelles propriétés sont réellement nécessaires ou offrent les meilleures performances. Comme le dit l’article, vos résultats peuvent varier.&lt;/p&gt;
&lt;p&gt;À titre de référence, voici la configuration initiale proposée par QEmu :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;acpi/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;apic/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hyperv&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;relaxed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vapic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;spinlocks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;retries=&lt;/span&gt;&lt;span class="s"&gt;"8191"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/hyperv&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vmport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"off"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;mode=&lt;/span&gt;&lt;span class="s"&gt;"host-passthrough"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;clock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;offset=&lt;/span&gt;&lt;span class="s"&gt;"localtime"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"rtc"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"catchup"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"pit"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"delay"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hpet"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"no"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hypervclock"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/clock&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="installation-de-windows-11"&gt;Installation de Windows 11&lt;/h2&gt;
&lt;p&gt;Laissez l’installateur vous guider jusqu’à l’étape où vous choisissez le disque sur lequel installer Windows. La liste devrait être vide.&lt;/p&gt;
&lt;p&gt;Sélectionnez l’option “Charger les pilotes”, et parcourez le deuxième CDROM (E:) pour trouver les pilotes corrects pour votre système d’exploitation et votre plateforme (notez que parfois il n’y a pas de version &lt;code&gt;win11&lt;/code&gt;, mais &lt;code&gt;win10&lt;/code&gt; fonctionne également) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;E:\viostor\w11\amd64&lt;/code&gt; (disque)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E:\NetKVM\w11\amd64&lt;/code&gt; (NIC)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E:\qxldod\w10\amd64&lt;/code&gt; (graphique)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cochez “Masquer les pilotes qui ne sont pas compatibles avec le matériel de cet ordinateur” pour vous assurer que les pilotes corrects sont trouvés. Si rien n’apparaît, vous avez peut-être oublié de passer un périphérique en VirtIO.&lt;/p&gt;
&lt;p&gt;Plus tard dans le processus d’installation, vous n’aurez pas l’opportunité de charger de nouveaux pilotes via l’interface graphique. Vous pourriez atteindre une étape où l’installateur essaie de trouver une connexion réseau et reste bloqué faute d’interface réseau. Dans ce cas, appuyez sur &lt;strong&gt;Shift+F10&lt;/strong&gt; pour ouvrir un shell, naviguez vers les dossiers respectifs et exécutez :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pnputil /add-driver *.inf
pnputil /scan-devices
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Il m’est arrivé que l’installateur trouve l’interface réseau mais refuse de se connecter faute de connectivité Internet. En exécutant un ping depuis le shell, j’ai confirmé le problème. Sur l’hôte, les paquets arrivaient au pont mais n’étaient pas transmis, probablement à cause de règles iptables manquantes. La solution la plus simple est de redémarrer libvirtd — cela n’affectera pas les VM en cours d’exécution :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;service&lt;span class="w"&gt; &lt;/span&gt;libvirtd&lt;span class="w"&gt; &lt;/span&gt;restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="agent-invite-et-pilotes-supplementaires"&gt;Agent invité et pilotes supplémentaires&lt;/h2&gt;
&lt;p&gt;Une fois Windows installé, vous devriez également installer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;E:\virtio-win-guest-tools.exe&lt;/code&gt; depuis l’ISO VirtIO&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.spice-space.org/download.html"&gt;Outils invités SPICE&lt;/a&gt; (dans la section Guest / Windows binaries) pour des fonctionnalités telles que le partage du presse-papiers et la résolution dynamique entre l’hôte et l’invité&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="visual-studio-et-outils-associes"&gt;Visual Studio et outils associés&lt;/h2&gt;
&lt;p&gt;Vous pouvez télécharger gratuitement &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;l’installateur en ligne&lt;/a&gt; avec l’édition Community.&lt;/p&gt;
&lt;p&gt;Voici les paramètres de charge de travail que j’ai utilisés pour mon cas d’utilisation actuel. Ils nécessitent environ 10 Go supplémentaires.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Web &amp;amp; Cloud
    [ ] ASP.NET and web development
    [ ] Azure development
    [X] Python development, could be useful
    [ ] Node.js developmen
Desktop &amp;amp; Mobile
    [ ] .NET Multi-platform App UI development
    [ ] .NET Desktop development
    [X] Desktop development with C++
    [ ] Universal Windows Platform development
    [ ] Mobile development with C++
Gaming
    [X] Game development with Unity
    [X] Game development with C++
Other toolsets
    [ ] Data storage and processing
    [ ] Data science and analytical applications
    [ ] Visual Studio extension development
    [ ] Office / SharePoint development
    [X] Linux and embedded development with C++
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Git sera nécessaire, et vous pouvez trouver les binaires Windows sur &lt;a href="https://git-scm.com/download/win"&gt;le site officiel&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="wsl2"&gt;WSL2&lt;/h2&gt;
&lt;p&gt;Vous pouvez installer WSL2 directement depuis le &lt;a href="https://aka.ms/wslstorepage"&gt;Microsoft Store&lt;/a&gt;, ou via la ligne de commande comme indiqué ci-dessous.&lt;/p&gt;
&lt;p&gt;Ouvrez &lt;strong&gt;cmd.exe&lt;/strong&gt; depuis le menu démarrer et exécutez en tant qu’administrateur :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wsl --install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Si vous avez Windows 11, ou une version suffisamment récente de Windows 10, vous devriez déjà avoir WSL2. Confirmez avec :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;
&lt;span class="normal"&gt;8&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ wsl -v
WSL version: 2.1.4.0
Kernel version: 5.15.146.1-2
WSLg version: 1.0.60
MSRDC version: 1.2.5105
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22631.2861
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Plus d’informations peuvent être trouvées dans &lt;a href="https://aka.ms/wslstoreinfo"&gt;wslinfo&lt;/a&gt;, &lt;a href="https://support.microsoft.com/fr-fr/windows/activer-la-virtualisation-sur-windows-11-pc-c5578302-6e43-4b4b-a449-8ced115f58e1"&gt;wsl1&lt;/a&gt; et &lt;a href="https://learn.microsoft.com/fr-fr/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package"&gt;wsl2&lt;/a&gt;. Le système vous demandera de redémarrer.&lt;/p&gt;
&lt;p&gt;Vous pouvez ensuite installer une distribution Linux (par exemple Debian) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ wsl --install --distribution Debian

Installing Windows optional component: VirtualMachinePlatform

Deployment Image Servicing and Management tool
Version: 10.0.22621.2792

Image Version: 10.0.22631.2861

Enabling feature(s)
[==========================100.0%==========================]
The operation completed successfully.
The requested operation is successful. Changes will not be effective until the system is rebooted.
Installing: Debian GNU/Linux
Debian GNU/Linux has been installed.
The requested operation is successful. Changes will not be effective until the system is rebooted.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Après avoir choisi un identifiant et un mot de passe, vous devriez avoir un shell Linux fonctionnel.&lt;/p&gt;
&lt;h2 id="maintenance"&gt;Maintenance&lt;/h2&gt;
&lt;p&gt;Si vous manquez d’espace disque, vous pouvez soit essayer de récupérer de l’espace, soit étendre le fichier image de Windows.&lt;/p&gt;
&lt;h3 id="recuperer-de-lespace-compact-os-memoire-virtuelle-et-fichiers-dhibernation"&gt;Récupérer de l’espace : Compact OS, mémoire virtuelle et fichiers d’hibernation&lt;/h3&gt;
&lt;p&gt;Vous pouvez d’abord essayer de désinstaller les applications inutilisées, bien que la configuration décrite ci-dessus n’ait pratiquement aucun logiciel supplémentaire installé.&lt;/p&gt;
&lt;p&gt;Vous pouvez récupérer quelques Go en compressant les fichiers système à l’aide de la fonctionnalité “Compact OS” de Windows, en suivant &lt;a href="https://www.windowscentral.com/how-reduce-windows-10-footprint-your-pc"&gt;ce tutoriel&lt;/a&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ouvrez le menu Démarrer.&lt;/li&gt;
&lt;li&gt;Recherchez &lt;strong&gt;Invite de commandes&lt;/strong&gt;, faites un clic droit sur le résultat et sélectionnez &lt;strong&gt;Exécuter en tant qu’administrateur&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Vérifiez si Compact OS est déjà activé :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Compact.exe /CompactOS:query
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Activez Compact OS :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Compact.exe /CompactOS:always
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Le processus de compression peut prendre jusqu’à 20 minutes. Vous pouvez annuler la modification à tout moment avec &lt;code&gt;Compact.exe /CompactOS:never&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vous pouvez également économiser de l’espace en réduisant les fichiers de mémoire virtuelle et d’hibernation. Ouvrez une invite de commandes en tant qu’administrateur et exécutez :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powercfg /h /type reduced
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Cela réduit le fichier d’hibernation d’environ 30 %. Pour le supprimer entièrement :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powercfg /h /off
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Pour restaurer le fichier d’hibernation complet plus tard :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powercfg /h /size 100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h3 id="extension-de-la-taille-de-limage-qemu"&gt;Extension de la taille de l’image QEmu&lt;/h3&gt;
&lt;p&gt;Pendant que la VM est arrêtée, redimensionnez l’image :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;qemu-img&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;/var/lib/libvirt/images/win11.qcow2&lt;span class="w"&gt; &lt;/span&gt;+10G
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Vous pouvez ensuite utiliser le &lt;strong&gt;Gestionnaire de disques&lt;/strong&gt; de Windows pour étendre le système de fichiers sur l’espace nouvellement disponible.&lt;/p&gt;
&lt;p&gt;Je n’ai pas pu déplacer la partition de récupération située entre le lecteur C: et l’espace non alloué depuis Windows. Pour contourner cela, vous pouvez utiliser les outils côté hôte :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;modprobe&lt;span class="w"&gt; &lt;/span&gt;nbd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;max_part&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;qemu-nbd&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;/dev/nbd0&lt;span class="w"&gt; &lt;/span&gt;/var/lib/libvirt/images/win11.qcow2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Le gestionnaire de partitions KDE n’a initialement pas vu les 10 Go supplémentaires. GParted les a vus, mais a affiché un avertissement :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Not all of the space available to /dev/nbd0 appears to be used, you can fix
the GPT to use all of the space (an extra 20971520 blocks) or continue with
the current setting?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Après avoir réparé la table GPT, les deux outils ont fonctionné correctement :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;gparted&lt;span class="w"&gt; &lt;/span&gt;/dev/nbd0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Une fois terminé, déconnectez l’image :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;qemu-nbd&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;/dev/nbd0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="references"&gt;Références&lt;/h2&gt;</content><category term="Flipper virtuel"/><category term="qemu"/><category term="windows"/><category term="wsl2"/><category term="virtual-pinball"/><category term="pincab"/></entry><entry><title>Run Windows 11 on Linux with QEmu Nested Virtualization</title><link href="https://jordan.auge.synaxe.net/blog/2024/03/dev-qemu-windows/" rel="alternate"/><published>2024-03-14T00:00:00+01:00</published><updated>2026-05-29T15:19:55.378743+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2024-03-14:/blog/2024/03/dev-qemu-windows/</id><summary type="html">&lt;p&gt;How to set up a QEmu/KVM virtual machine on Linux with nested virtualization support for running Windows 11 and WSL2, including VirtIO drivers, HyperV configuration, and disk management.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I exclusively run Linux at home, and needed a Windows VM for building the
&lt;a href="https://github.com/vpinball/vpinball"&gt;virtual pinball suite&lt;/a&gt;
and other software that required me to use the Windows Subsystem for Linux
(WSL2).&lt;/p&gt;
&lt;h2 id="virtualbox-vs-qemu"&gt;Virtualbox vs QEmu&lt;/h2&gt;
&lt;p&gt;I initially chose Virtualbox for simplicity but never managed to install WSL2 on
it. It appears that WSL2 is implemented on top of Windows HyperV technology, and
it thus requires nested virtualization features to be used inside a VM.&lt;/p&gt;
&lt;p&gt;Unlike what is announced in official documentation &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/faq#will-i-be-able-to-run-wsl-2-and-other-3rd-party-virtualization-tools-such-as-vmware--or-virtualbox-"&gt;wsl-virtualbox&lt;/a&gt;, it seems
nested virtualization support for HyperV did not make it to the latest 7.0 Virtualbox
release (7.0.14-Debian as of this writing), and thus it was not possible to
install WSL2 &lt;a href="https://forums.virtualbox.org/viewtopic.php?t=110039"&gt;vbox-hyperv&lt;/a&gt;. This might change with the release of 7.1.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;WslRegisterDistribution failed with error: 0x80370102
Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.
For information please visit https://aka.ms/enablevirtualization
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;This is the opportunity to give a try at QEmu which supports it and promises to
be more efficient with the use of KVM and virtio.&lt;/p&gt;
&lt;h2 id="qemu-setup"&gt;QEmu setup&lt;/h2&gt;
&lt;p&gt;I followed the excellent writeup by &lt;a href="https://raphtlw.medium.com/how-to-set-up-a-kvm-qemu-windows-10-vm-ca1789411760"&gt;raphtlw&lt;/a&gt;, for which the steps are equivalent
for Windows 11 (beyond a couple of remaining IDE occurrences that should be
SATA). The most important steps are summarized here and you can refer to
the original page for a detailed explanation with screenshots.&lt;/p&gt;
&lt;h3 id="dependencies"&gt;Dependencies&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;qemu-kvm&lt;span class="w"&gt; &lt;/span&gt;bridge-utils&lt;span class="w"&gt; &lt;/span&gt;virt-manager&lt;span class="w"&gt; &lt;/span&gt;qemu-system&lt;span class="w"&gt; &lt;/span&gt;virt-viewer&lt;span class="w"&gt; &lt;/span&gt;spice-vdagent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h3 id="regular-setup"&gt;Regular setup&lt;/h3&gt;
&lt;p&gt;Before starting the installation process, you will need to download two ISOs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11, available on the &lt;a href="https://www.microsoft.com/software-download/windows11"&gt;Microsoft website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D"&gt;VirtIO drivers ISO&lt;/a&gt;, needed to set up both VirtIO
devices during installation (network is mandatory) — mount it as a second CDROM drive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Create a new VM that will be installed from an ISO file:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU, memory&lt;/strong&gt;: I left the default settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disk size&lt;/strong&gt;: at least 60 GB is recommended — Windows itself takes
around 30 GB, and build tools require an additional 10–20 GB. You can always
extend the partition after installation.&lt;/li&gt;
&lt;li&gt;Create a second CDROM drive in the Storage menu (select the
  medium type as CDROM) and point to the VirtIO ISO.&lt;/li&gt;
&lt;li&gt;Enable boot from the SATA CDROM in Boot options. You can also
select it via the BIOS menu if the machine does not boot.&lt;/li&gt;
&lt;li&gt;Switch to VirtIO driver for both the HDD and the NIC for improved performance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fine-tuning-hyperv-support"&gt;Fine-tuning HyperV support&lt;/h3&gt;
&lt;p&gt;The setup worked fine until I installed WSL2 and rebooted, at which point I was
greeted by the infamous blue screen with the message
&lt;code&gt;SYSTEM_THREAD_EXCEPTION_NOT_HANDLED&lt;/code&gt;. The VM never managed to recover.&lt;/p&gt;
&lt;p&gt;I found directions in this excellent &lt;a href="https://www.redpill-linpro.com/techblog/2021/04/07/nested-virtualization-hyper-v-in-qemu-kvm.html"&gt;writeup from Redpill
Linpro&lt;/a&gt;, and after a couple of tries with the XML editor in the
“Processor” section of the VM configuration, I managed to boot Windows again
with these settings:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;acpi/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;apic/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pae/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hyperv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;mode=&lt;/span&gt;&lt;span class="s"&gt;"custom"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vpindex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;synic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/hyperv&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;mode=&lt;/span&gt;&lt;span class="s"&gt;"custom"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;"exact"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;check=&lt;/span&gt;&lt;span class="s"&gt;"partial"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;fallback=&lt;/span&gt;&lt;span class="s"&gt;"allow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Broadwell-noTSX-IBRS&lt;span class="nt"&gt;&amp;lt;/model&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;policy=&lt;/span&gt;&lt;span class="s"&gt;"disable"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hypervisor"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;policy=&lt;/span&gt;&lt;span class="s"&gt;"require"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"vmx"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/cpu&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;clock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;offset=&lt;/span&gt;&lt;span class="s"&gt;"utc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"rtc"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"catchup"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"pit"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"delay"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hpet"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"no"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hypervclock"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"kvmclock"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/clock&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;I have not yet tried to optimize these settings beyond confirming that disabling CPU
passthrough and selecting the correct CPU architecture were part of the solution.
The next step would be to dig into the documentation or continue the
trial-and-error process to find which properties are actually required, or lead to
the best performance. As the article says, your results may vary.&lt;/p&gt;
&lt;p&gt;As a reference, here is the original configuration proposed by QEmu:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;acpi/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;apic/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hyperv&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;relaxed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vapic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;spinlocks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"on"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;retries=&lt;/span&gt;&lt;span class="s"&gt;"8191"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/hyperv&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vmport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;state=&lt;/span&gt;&lt;span class="s"&gt;"off"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/features&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;cpu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;mode=&lt;/span&gt;&lt;span class="s"&gt;"host-passthrough"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;clock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;offset=&lt;/span&gt;&lt;span class="s"&gt;"localtime"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"rtc"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"catchup"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"pit"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;tickpolicy=&lt;/span&gt;&lt;span class="s"&gt;"delay"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hpet"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"no"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;timer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"hypervclock"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;present=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/clock&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="windows-11-installation"&gt;Windows 11 installation&lt;/h2&gt;
&lt;p&gt;Let the installer guide you until you reach the step where you
choose on which disk to install Windows. The list should be empty.&lt;/p&gt;
&lt;p&gt;Select the “Load drivers” option, and browse the second CDROM (E:)
to find the correct drivers for your OS and platform (note that sometimes there
is no &lt;code&gt;win11&lt;/code&gt; version but &lt;code&gt;win10&lt;/code&gt; also works):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;E:\viostor\w11\amd64&lt;/code&gt; (disk)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E:\NetKVM\w11\amd64&lt;/code&gt; (NIC)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E:\qxldod\w10\amd64&lt;/code&gt; (graphics)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check “Hide drivers that are not compatible with this computer’s hardware”
to ensure the correct drivers are found. If nothing shows up, you may have
forgotten to switch a device to VirtIO.&lt;/p&gt;
&lt;p&gt;Further down in the installation process, you will not have the opportunity to load
new drivers through the GUI. You might reach a step where the installer tries to
find a network connection and gets stuck because there is no network interface.
In that case, hit &lt;strong&gt;Shift+F10&lt;/strong&gt; to open a shell, navigate to the
respective folders, and run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pnputil /add-driver *.inf
pnputil /scan-devices
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;It happened to me that the installer found the network interface but refused to
connect because of no internet connectivity. Running a ping from the shell
confirmed the issue. On the host, packets arrived at the bridge but were not
forwarded, likely because of missing iptables rules. The simplest fix is
to restart libvirtd — this will not affect running VMs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;service&lt;span class="w"&gt; &lt;/span&gt;libvirtd&lt;span class="w"&gt; &lt;/span&gt;restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="guest-agent-and-additional-drivers"&gt;Guest agent and additional drivers&lt;/h2&gt;
&lt;p&gt;Once Windows is installed, you should also install:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;E:\virtio-win-guest-tools.exe&lt;/code&gt; from the VirtIO ISO&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.spice-space.org/download.html"&gt;SPICE guest tools&lt;/a&gt; (under the Guest / Windows binaries section) for
  features such as clipboard sharing and dynamic resolution between the host and guest&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="visual-studio-and-related-tools"&gt;Visual Studio and related tools&lt;/h2&gt;
&lt;p&gt;You can freely download the &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;installer online&lt;/a&gt; with the Community edition.&lt;/p&gt;
&lt;p&gt;These are the workload settings I used for my current use case.
They require approximately 10 additional GB.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Web &amp;amp; Cloud
    [ ] ASP.NET and web development
    [ ] Azure development
    [X] Python development, could be useful
    [ ] Node.js developmen
Desktop &amp;amp; Mobile
    [ ] .NET Multi-platform App UI development
    [ ] .NET Desktop development
    [X] Desktop development with C++
    [ ] Universal Windows Platform development
    [ ] Mobile development with C++
Gaming
    [X] Game development with Unity
    [X] Game development with C++
Other toolsets
    [ ] Data storage and processing
    [ ] Data science and analytical applications
    [ ] Visual Studio extension development
    [ ] Office / SharePoint development
    [X] Linux and embedded development with C++
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Git will be required, and you can find Windows binaries from &lt;a href="https://git-scm.com/download/win"&gt;the official
website&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="wsl2"&gt;WSL2&lt;/h2&gt;
&lt;p&gt;You can install WSL2 directly from the &lt;a href="https://aka.ms/wslstorepage"&gt;Microsoft store&lt;/a&gt;, or through the
command line as shown below.&lt;/p&gt;
&lt;p&gt;Open &lt;strong&gt;cmd.exe&lt;/strong&gt; from the start menu and run as administrator:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wsl --install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;If you have Windows 11, or a recent enough version of Windows 10, you should
already have WSL2. Confirm with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;
&lt;span class="normal"&gt;8&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ wsl -v
WSL version: 2.1.4.0
Kernel version: 5.15.146.1-2
WSLg version: 1.0.60
MSRDC version: 1.2.5105
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22631.2861
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;More information can be found in &lt;a href="https://aka.ms/wslstoreinfo"&gt;wslinfo&lt;/a&gt;, &lt;a href="https://support.microsoft.com/fr-fr/windows/activer-la-virtualisation-sur-windows-11-pc-c5578302-6e43-4b4b-a449-8ced115f58e1"&gt;wsl1&lt;/a&gt; and &lt;a href="https://learn.microsoft.com/fr-fr/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package"&gt;wsl2&lt;/a&gt;. The system will
ask you to reboot.&lt;/p&gt;
&lt;p&gt;You can then install a Linux distribution (e.g. Debian):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ wsl --install --distribution Debian

Installing Windows optional component: VirtualMachinePlatform

Deployment Image Servicing and Management tool
Version: 10.0.22621.2792

Image Version: 10.0.22631.2861

Enabling feature(s)
[==========================100.0%==========================]
The operation completed successfully.
The requested operation is successful. Changes will not be effective until the system is rebooted.
Installing: Debian GNU/Linux
Debian GNU/Linux has been installed.
The requested operation is successful. Changes will not be effective until the system is rebooted.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;After choosing a login and password, you should have a working Linux shell.&lt;/p&gt;
&lt;h2 id="maintenance"&gt;Maintenance&lt;/h2&gt;
&lt;p&gt;If you run out of disk space, you can either try to reclaim some space or
extend the Windows image file.&lt;/p&gt;
&lt;h3 id="reclaim-space-compact-os-virtual-memory-and-hibernation-files"&gt;Reclaim space: Compact OS, virtual memory and hibernation files&lt;/h3&gt;
&lt;p&gt;You can first try to uninstall unused applications, although the setup described
above has hardly any extra software installed.&lt;/p&gt;
&lt;p&gt;You can reclaim a few GB by compressing system files using the “Compact OS”
feature of Windows, following &lt;a href="https://www.windowscentral.com/how-reduce-windows-10-footprint-your-pc"&gt;this tutorial&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Start.&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;Command Prompt&lt;/strong&gt;, right-click the result, and select &lt;strong&gt;Run as administrator&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Check whether Compact OS is already enabled:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Compact.exe /CompactOS:query
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Enable Compact OS:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Compact.exe /CompactOS:always
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;The compression process may take up to 20 minutes. You can revert the change
at any time with &lt;code&gt;Compact.exe /CompactOS:never&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can also save space by reducing the virtual memory and hibernation files.
Open an administrator Command Prompt and run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powercfg /h /type reduced
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;This reduces the hibernation file by about 30%. To remove it entirely:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powercfg /h /off
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;To restore the full hibernation file later:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powercfg /h /size 100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h3 id="extending-the-qemu-image-size"&gt;Extending the QEmu image size&lt;/h3&gt;
&lt;p&gt;While the VM is shut down, resize the image:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;qemu-img&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;/var/lib/libvirt/images/win11.qcow2&lt;span class="w"&gt; &lt;/span&gt;+10G
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;You can then use Windows’ &lt;strong&gt;Disk Manager&lt;/strong&gt; to extend the filesystem over
the newly available space.&lt;/p&gt;
&lt;p&gt;I could not move the recovery partition sitting between the C: drive and
the unallocated space from within Windows. To work around this, you can use the
host-side tools:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;modprobe&lt;span class="w"&gt; &lt;/span&gt;nbd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;max_part&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;qemu-nbd&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;/dev/nbd0&lt;span class="w"&gt; &lt;/span&gt;/var/lib/libvirt/images/win11.qcow2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;KDE Partition Manager did not initially see the additional 10 GB.
GParted did, but raised a warning:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Not all of the space available to /dev/nbd0 appears to be used, you can fix
the GPT to use all of the space (an extra 20971520 blocks) or continue with
the current setting?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;After repairing the GPT, both tools worked correctly:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;gparted&lt;span class="w"&gt; &lt;/span&gt;/dev/nbd0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Once done, disconnect the image:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;qemu-nbd&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;/dev/nbd0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;</content><category term="Virtual Pinball"/><category term="qemu"/><category term="windows"/><category term="wsl2"/><category term="virtual-pinball"/><category term="pincab"/></entry><entry><title>Remplacer la bougie d'allumage d'un poêle Palazzetti Lara</title><link href="https://jordan.auge.synaxe.net/fr/blog/2024/02/palazzetti-spark-plug/" rel="alternate"/><published>2024-02-21T00:00:00+01:00</published><updated>2026-05-29T00:00:00+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2024-02-21:/fr/blog/2024/02/palazzetti-spark-plug/</id><summary type="html">&lt;p&gt;Après des années sans remplacement, la bougie d&amp;rsquo;allumage d&amp;rsquo;un poêle à granulés Palazzetti Ecofire Lara a cessé de fonctionner. Ce post couvre le diagnostic de la panne sans ouvrir le poêle, la pièce de rechange correcte et la procédure de remplacement.&lt;/p&gt;</summary><content type="html">&lt;p&gt;La bougie tournait depuis sept ans sans avoir jamais été remplacée. Quand elle a cessé de fonctionner en plein hiver, la solution la plus rapide était de la remplacer moi-même.&lt;/p&gt;
&lt;!-- PELICAN_BEGIN_SUMMARY --&gt;
&lt;p&gt;Après des échecs occasionnels au démarrage pendant quelques mois, le poêle à granulés a cessé de s’allumer complètement. Un test rapide avec du papier a confirmé que la bougie d’allumage était hors service sans avoir besoin d’ouvrir le poêle. Ce post couvre le diagnostic, le choix de la pièce de rechange correcte (le type de bride est la dimension critique) et la procédure de remplacement.&lt;/p&gt;
&lt;!-- PELICAN_END_SUMMARY --&gt;
&lt;p&gt;&lt;img alt="Palazzetti Ecofire LARA — vis sans fin et ventilateur OK, bougie hors service" src="https://jordan.auge.synaxe.net/fr/blog/2024/02/palazzetti-spark-plug/palazzetti-ecofire-lara_m.jpg"/&gt;&lt;/p&gt;
&lt;h2 id="symptomes-et-diagnostic"&gt;Symptômes et diagnostic&lt;/h2&gt;
&lt;p&gt;Pendant quelques mois, le poêle a présenté des échecs occasionnels au démarrage malgré son nettoyage annuel. Finalement, il a cessé de s’allumer complètement — la vis sans fin alimentait normalement les granulés, le ventilateur de combustion fonctionnait, mais aucune ignition ne se produisait.&lt;/p&gt;
&lt;p&gt;Tout indiquait que la bougie d’allumage (également appelée bougie ou résistance chauffante) était en cause : le ventilateur d’admission fonctionnait (confirmé en plaçant une feuille de papier contre le tuyau d’admission — elle était aspirée fortement), et la vis sans fin alimentait les granulés, donc la panne se situait dans le circuit d’allumage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confirmation que la bougie d’allumage est hors service sans ouvrir le poêle :&lt;/strong&gt; démarrez un cycle d’allumage normal, attendez les 5 minutes nécessaires à l’allumage, puis — tout en restant dans la phase d’allumage — ouvrez la porte, bloquez temporairement l’entrée des granulés, retirez le bac à granulés et glissez un petit morceau de papier dans le compartiment de la bougie d’allumage. L’absence de marques de chaleur sur le papier confirme que la bougie ne fonctionne pas.&lt;/p&gt;
&lt;p&gt;Les bougies d’allumage durent généralement environ 3 ans en utilisation normale. La mienne n’avait jamais été remplacée en 7 ans, ce qui était largement dépassé.&lt;/p&gt;
&lt;h2 id="ouverture-du-poele-et-confirmation-avec-un-multimetre"&gt;Ouverture du poêle et confirmation avec un multimètre&lt;/h2&gt;
&lt;p&gt;Le poêle peut être ouvert sur place :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Coupez l’alimentation électrique au mur.&lt;/li&gt;
&lt;li&gt;Retirez le panneau supérieur, les panneaux latéraux et la grille arrière.&lt;/li&gt;
&lt;li&gt;La bougie d’allumage est vissée dans le tube d’admission d’air et fixée par une seule vis accessible depuis le côté droit.&lt;/li&gt;
&lt;li&gt;Suivez le câble de la bougie jusqu’à la carte de contrôle située en bas à droite du poêle. Vous devrez couper quelques colliers de câbles et dévisser le couvercle de la boîte de contrôle pour libérer suffisamment de longueur de câble.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La bougie d’allumage est un élément résistif — la polarité n’a pas d’importance. Mesurer les bornes avec un multimètre en mode continuité devrait indiquer une faible résistance (typiquement 100–200 Ω pour un élément en bon état). La mienne n’indiquait aucune continuité, confirmant qu’elle était en circuit ouvert.&lt;/p&gt;
&lt;h2 id="choix-de-la-piece-de-rechange-correcte"&gt;Choix de la pièce de rechange correcte&lt;/h2&gt;
&lt;p&gt;Le Palazzetti Ecofire Lara utilise une bougie d’allumage standard pour poêle à granulés avec les spécifications suivantes :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Paramètre&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Valeur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Puissance&lt;/td&gt;
&lt;td style="text-align: left;"&gt;350 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Longueur totale&lt;/td&gt;
&lt;td style="text-align: left;"&gt;170 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Longueur sous bride&lt;/td&gt;
&lt;td style="text-align: left;"&gt;160 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Résistance (neuve)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~138–150 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Le &lt;strong&gt;type de bride&lt;/strong&gt; est la dimension qui pose problème à beaucoup de gens. Il existe deux brides courantes : une bride plate en acier (correcte pour Palazzetti) et un raccord hexagonal en laiton (conçu pour une installation filetée dans d’autres marques). Elles ne sont pas interchangeables.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Bride plate (gauche) vs raccord en laiton (droite) — assez similaires pour acheter le mauvais par erreur" src="https://jordan.auge.synaxe.net/fr/blog/2024/02/palazzetti-spark-plug/spark-plug-correct.png"/&gt;&lt;/p&gt;
&lt;p&gt;Amazon propose ces pièces à un prix environ moitié ou un tiers inférieur à celui des fournisseurs spécialisés en pièces de chauffage, et la pièce est un élément résistif standard sans électronique propriétaire. Le modèle que j’ai choisi&lt;sup id="fnref:igniter"&gt;&lt;a class="footnote-ref" href="#fn:igniter"&gt;1&lt;/a&gt;&lt;/sup&gt; était disponible pour une livraison le lendemain — un critère important en plein hiver.&lt;/p&gt;
&lt;p&gt;&lt;img alt="La bougie de remplacement — 150 Ω mesurés avant montage, conformes aux 151 Ω attendus" src="https://jordan.auge.synaxe.net/fr/blog/2024/02/palazzetti-spark-plug/spark-plug.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vérification avant installation :&lt;/strong&gt; le nouvel élément mesurait 150 Ω.&lt;/p&gt;
&lt;p&gt;$$R_\text{expected} = \frac{U^2}{P} = \frac{230^2}{350} \approx 151\ \Omega \quad \checkmark$$&lt;/p&gt;
&lt;p&gt;$$P_\text{actual} = \frac{U^2}{R} = \frac{230^2}{150} \approx 353\ \text{W} \quad \checkmark$$&lt;/p&gt;
&lt;p&gt;Suffisamment proche de la spécification. Le poêle n’a pas besoin d’un élément de précision ici — toute valeur dans une marge de ~10 % du nominal est acceptable.&lt;/p&gt;
&lt;h2 id="procedure-de-remplacement"&gt;Procédure de remplacement&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Coupez les anciens colliers de câbles maintenant le câble de la bougie le long de son chemin d’acheminement. Notez le chemin d’origine avant de couper — le câble fait une large boucle à droite puis à gauche pour atteindre la carte de contrôle.&lt;/li&gt;
&lt;li&gt;Dévissez la vis de fixation unique sur le côté droit du boîtier de la bougie.&lt;/li&gt;
&lt;li&gt;Retirez la bougie du tube d’admission.&lt;/li&gt;
&lt;li&gt;Faites glisser la gaine isolante en céramique de l’ancien câble sur le câble de la nouvelle bougie, en la coupant à la bonne longueur si nécessaire.&lt;/li&gt;
&lt;li&gt;Acheminer le nouveau câble sur un chemin plus direct vers la carte de contrôle (le câble de remplacement était légèrement plus court que l’original ; un chemin plus droit a résolu ce problème).&lt;/li&gt;
&lt;li&gt;Connectez à la borne de la carte de contrôle — l’orientation n’a pas d’importance.&lt;/li&gt;
&lt;li&gt;Fixez le câble avec de nouveaux colliers de câbles.&lt;/li&gt;
&lt;li&gt;Insérez la bougie dans le tube d’admission et serrez la vis de fixation.&lt;/li&gt;
&lt;li&gt;Remontez les panneaux.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Au prochain démarrage, le poêle s’est allumé en 3–4 minutes, retrouvant son temps d’allumage normal.&lt;/p&gt;
&lt;p&gt;La réparation a pris une demi-heure et coûté moins de 25 €. Le test au papier dans la section diagnostic est une petite astuce trouvée en ligne — elle permet de confirmer qu’une bougie est morte sans ouvrir quoi que ce soit, ce qui évite un démontage inutile quand on cherche encore la panne.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr/&gt;
&lt;ol&gt;
&lt;li id="fn:igniter"&gt;
&lt;p&gt;&lt;a href="https://www.amazon.fr/dp/B0CC32HPJ5"&gt;Bougie d’allumage pour poêle à granulés 350W 170mm&lt;/a&gt; — achetée en février 2024 pour 19,99 €. Une alternative moins chère était disponible (&lt;a href="https://www.amazon.fr/dp/B01MRJ01FN"&gt;B01MRJ01FN&lt;/a&gt; à ~16 €) mais n’a pas été testée. &lt;a class="footnote-backref" href="#fnref:igniter" title="Jump back to footnote 1 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="Réparation à domicile"/><category term="pellet-stove"/><category term="repair"/><category term="palazzetti"/><category term="heating"/></entry><entry><title>Replacing the spark plug of a Palazzetti Lara pellet stove</title><link href="https://jordan.auge.synaxe.net/blog/2024/02/palazzetti-spark-plug/" rel="alternate"/><published>2024-02-21T00:00:00+01:00</published><updated>2026-05-29T00:00:00+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2024-02-21:/blog/2024/02/palazzetti-spark-plug/</id><summary type="html">&lt;p&gt;After years without replacement, the igniter on a Palazzetti Ecofire Lara stopped firing. This post covers the fault diagnosis without opening the stove, the correct replacement part, and the replacement procedure.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The igniter had been running for seven years without a replacement. When it stopped firing mid-winter, the fastest fix was to do it myself.&lt;/p&gt;
&lt;!-- PELICAN_BEGIN_SUMMARY --&gt;
&lt;p&gt;After occasional startup failures over a few months, the pellet stove stopped
lighting entirely. A quick paper test confirmed the igniter was dead without
needing to open the stove. This post covers the diagnosis, choosing the right
replacement part (flange type is the critical dimension), and the replacement
procedure.&lt;/p&gt;
&lt;!-- PELICAN_END_SUMMARY --&gt;
&lt;p&gt;&lt;img alt="Palazzetti Ecofire LARA — auger and fan working, igniter not" src="https://jordan.auge.synaxe.net/fr/blog/2024/02/palazzetti-spark-plug/palazzetti-ecofire-lara_m.jpg"/&gt;&lt;/p&gt;
&lt;h2 id="symptoms-and-diagnosis"&gt;Symptoms and diagnosis&lt;/h2&gt;
&lt;p&gt;Over a few months the stove developed occasional startup failures despite its
annual cleaning. Eventually it stopped lighting at all — the auger fed pellets
normally, the combustion fan ran, but no ignition.&lt;/p&gt;
&lt;p&gt;Everything pointed to the igniter (also called the spark plug or glow plug):
the intake fan was working (confirmed by holding a sheet of paper against the
intake pipe — it was drawn in strongly), and the auger was delivering pellets,
so the fault was in the ignition path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confirming the igniter is dead without opening the stove:&lt;/strong&gt; start a normal
ignition cycle, wait the full 5 minutes it would normally take to light, then
— while still in the ignition phase — open the door, temporarily block the
pellet inlet, remove the pellet tray, and slip a small piece of paper into the
igniter compartment. No heat marks on the paper confirms the igniter is not
firing.&lt;/p&gt;
&lt;p&gt;Igniters typically last around 3 years under normal use. Mine had never been
replaced in 7 years, so this was overdue.&lt;/p&gt;
&lt;h2 id="opening-the-stove-and-confirming-with-a-multimeter"&gt;Opening the stove and confirming with a multimeter&lt;/h2&gt;
&lt;p&gt;The stove can be opened in place:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cut power at the wall.&lt;/li&gt;
&lt;li&gt;Remove the top panel, side panels, and rear grille.&lt;/li&gt;
&lt;li&gt;The igniter is threaded into the air intake tube and secured with one screw
   accessible from the right side.&lt;/li&gt;
&lt;li&gt;Trace the igniter cable to the control board in the lower right of the
   stove. You will need to cut a few cable ties and unscrew the control box
   cover to free enough cable length.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The igniter is a resistive element — polarity does not matter. Measuring across
the terminals with a multimeter in continuity mode should show a low resistance
(typically 100–200 Ω on a healthy element). Mine showed no continuity at all,
confirming it was open-circuit.&lt;/p&gt;
&lt;h2 id="choosing-the-correct-replacement"&gt;Choosing the correct replacement&lt;/h2&gt;
&lt;p&gt;The Palazzetti Ecofire Lara takes a standard pellet stove igniter with these
specifications:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Parameter&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Power&lt;/td&gt;
&lt;td style="text-align: left;"&gt;350 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Total length&lt;/td&gt;
&lt;td style="text-align: left;"&gt;170 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Length under flange&lt;/td&gt;
&lt;td style="text-align: left;"&gt;160 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Resistance (new)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~138–150 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The &lt;strong&gt;flange type&lt;/strong&gt; is the dimension that catches people out. There are two
common flanges: a flat steel flange (correct for Palazzetti) and a hexagonal
brass fitting (designed for threaded installation in other brands). They are not
interchangeable.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Flat flange (left) vs brass fitting (right) — similar enough to buy the wrong one" src="https://jordan.auge.synaxe.net/fr/blog/2024/02/palazzetti-spark-plug/spark-plug-correct.png"/&gt;&lt;/p&gt;
&lt;p&gt;Amazon offers these at roughly half to one-third the price of specialist heating
parts suppliers, and the part is a commodity resistive element with no
proprietary electronics. The model I chose&lt;sup id="fnref:igniter"&gt;&lt;a class="footnote-ref" href="#fn:igniter"&gt;1&lt;/a&gt;&lt;/sup&gt; was available for next-day
delivery — not a small consideration mid-winter.&lt;/p&gt;
&lt;p&gt;&lt;img alt="The replacement igniter — 150 Ω measured before fitting, matching the expected 151 Ω" src="https://jordan.auge.synaxe.net/fr/blog/2024/02/palazzetti-spark-plug/spark-plug.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verification before installation:&lt;/strong&gt; the new element measured 150 Ω.&lt;/p&gt;
&lt;p&gt;$$R_\text{expected} = \frac{U^2}{P} = \frac{230^2}{350} \approx 151\ \Omega \quad \checkmark$$&lt;/p&gt;
&lt;p&gt;$$P_\text{actual} = \frac{U^2}{R} = \frac{230^2}{150} \approx 353\ \text{W} \quad \checkmark$$&lt;/p&gt;
&lt;p&gt;Close enough to spec. The stove does not need a precision element here — any
value within ~10% of nominal is fine.&lt;/p&gt;
&lt;h2 id="replacement-procedure"&gt;Replacement procedure&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Cut the old cable ties holding the igniter cable along its routing path.
   Note the original path before cutting — the cable makes a wide loop right
   then left to reach the control board.&lt;/li&gt;
&lt;li&gt;Unscrew the single retaining screw on the right side of the igniter housing.&lt;/li&gt;
&lt;li&gt;Pull the igniter out of the intake tube.&lt;/li&gt;
&lt;li&gt;Slide the ceramic insulating sleeve from the old cable onto the new igniter
   cable, trimming it to length if needed.&lt;/li&gt;
&lt;li&gt;Route the new cable along a more direct path to the control board (the
   replacement cable was slightly shorter than the original; a straighter route
   solved this).&lt;/li&gt;
&lt;li&gt;Connect to the control board terminal — either orientation is correct.&lt;/li&gt;
&lt;li&gt;Secure the cable with new cable ties.&lt;/li&gt;
&lt;li&gt;Insert the igniter into the intake tube and tighten the retaining screw.&lt;/li&gt;
&lt;li&gt;Reassemble the panels.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On the next startup the stove lit within 3–4 minutes, back to its normal
ignition time.&lt;/p&gt;
&lt;p&gt;The repair took about half an hour and cost under €25. The paper test in the diagnosis section is a small trick I came across online — it lets you confirm a dead igniter before opening anything, which is worth knowing when you’re trying to identify the fault without disassembly.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr/&gt;
&lt;ol&gt;
&lt;li id="fn:igniter"&gt;
&lt;p&gt;&lt;a href="https://www.amazon.fr/dp/B0CC32HPJ5"&gt;Pellet stove igniter 350W 170mm&lt;/a&gt; —
purchased February 2024 for €19.99. A cheaper alternative was available
(&lt;a href="https://www.amazon.fr/dp/B01MRJ01FN"&gt;B01MRJ01FN&lt;/a&gt; at ~€16) but was not
tested. &lt;a class="footnote-backref" href="#fnref:igniter" title="Jump back to footnote 1 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="Home Repair"/><category term="pellet-stove"/><category term="repair"/><category term="palazzetti"/><category term="heating"/></entry><entry><title>Installation d'un CR-Touch sur un CR-10S d'origine</title><link href="https://jordan.auge.synaxe.net/fr/blog/2022/07/crtouch-cr10s/" rel="alternate"/><published>2022-07-20T00:00:00+02:00</published><updated>2026-05-29T00:00:00+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2022-07-20:/fr/blog/2022/07/crtouch-cr10s/</id><summary type="html">&lt;p&gt;Comment câbler un CR-Touch sur la carte mère d&amp;rsquo;origine du CR-10S avec un adaptateur maison, patcher le firmware Marlin 2, et calibrer l&amp;rsquo;offset sonde.&lt;/p&gt;</summary><content type="html">&lt;!-- PELICAN_BEGIN_SUMMARY --&gt;
&lt;p&gt;Le CR-Touch fonctionne très bien sur les cartes 8 bits — le signal PWM servo
et la sortie numérique de déclenchement sont parfaitement dans les capacités
d’un ATmega2560. Le problème avec le CR-10S stock n’est pas le processeur,
c’est le connecteur : les guides Creality supposent tous un connecteur BLTouch
5 broches dédié que la carte V2 d’origine n’a pas. Cet article documente le
câble adaptateur qui relie deux connecteurs existants, le patch Marlin en une
ligne, et la procédure de réglage de l’offset sonde.&lt;/p&gt;
&lt;!-- PELICAN_END_SUMMARY --&gt;
&lt;!-- TODO: ajouter une photo du CR-Touch avant publication — placer le fichier crtouch.jpg dans ce dossier --&gt;
&lt;!-- ![Sonde ABL CR-Touch]({attach}crtouch.jpg) --&gt;
&lt;h2 id="le-probleme-avec-la-carte-dorigine"&gt;Le problème avec la carte d’origine&lt;/h2&gt;
&lt;p&gt;Les guides d’installation CR-Touch supposent presque tous un connecteur BLTouch
5 broches dédié sur la carte mère. Creality a ajouté ce connecteur sur ses
nouvelles cartes 32 bits (CR-10S Pro, CR-6 SE, etc.), et la documentation
officielle ne couvre que celles-là. La carte stock du CR-10S V2 — un ATmega2560
— est antérieure à ce connecteur. Le CR-Touch lui-même se fiche de
l’architecture du processeur ; il a besoin de cinq signaux, et ces signaux sont
disponibles sur deux connecteurs existants que la carte V2 expose déjà : un
&lt;strong&gt;connecteur servo D11&lt;/strong&gt; libre (3 broches) et le &lt;strong&gt;connecteur fin de course Z&lt;/strong&gt;
(2 broches). Pas de carte adaptateur, pas de découpe de câble.&lt;/p&gt;
&lt;h2 id="fabrication-du-cable-adaptateur"&gt;Fabrication du câble adaptateur&lt;/h2&gt;
&lt;p&gt;L’adaptateur divise le connecteur 5 broches JST du CR-Touch en deux branches :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une &lt;strong&gt;fiche Dupont femelle 3 broches&lt;/strong&gt; pour le connecteur servo D11&lt;/li&gt;
&lt;li&gt;une &lt;strong&gt;fiche JST 2 broches&lt;/strong&gt; remplaçant le connecteur de fin de course Z&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le risque principal est d’inverser le connecteur : une erreur de câblage peut
endommager le CR-Touch. Utilisez un multimètre en mode continuité pour vérifier
avant la mise sous tension. Les deux broches de masse (G) du CR-Touch sont
court-circuitées en interne, ce qui permet de les confirmer facilement en les
sondant simultanément.&lt;/p&gt;
&lt;p&gt;Le câblage correct pour le CR-10S d’origine est indiqué ci-dessous. Notez que les
fils GND (blanc) et VIN (noir) &lt;strong&gt;se croisent&lt;/strong&gt; entre le connecteur CR-Touch et
le connecteur D11 — la broche 1 du D11 est VIN, mais VIN est le second fil du
CR-Touch.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Broche CR-Touch&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Couleur fil&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Destination&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;G&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Blanc&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D11 broche 2&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GND&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;V&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Noir&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D11 broche 1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;VIN (+5V)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;IN&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Jaune&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D11 broche 3&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;G&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Rouge&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Fin de course Z broche 2&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GND&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;OUT&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Bleu&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Fin de course Z broche 1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;OUT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="Schéma de câblage de l'adaptateur" src="https://jordan.auge.synaxe.net/fr/blog/2022/07/crtouch-cr10s/wiring-diagram.svg"/&gt;&lt;/p&gt;
&lt;p&gt;Le connecteur D11 se lit &lt;strong&gt;de gauche à droite : noir (VIN) — blanc (GND) — jaune (SIG)&lt;/strong&gt;
vu côté fiche. Le connecteur fin de course Z a le bleu (OUT) sur la broche 1
et le rouge (GND) sur la broche 2.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Conseil de vérification :&lt;/strong&gt; sondez les deux broches G (blanc et rouge) en
continuité — elles doivent biper. Vérifiez aussi le VIN par rapport à un point
+5 V connu sur la carte avant la mise sous tension pour confirmer la polarité.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="patch-marlin-2"&gt;Patch Marlin 2&lt;/h2&gt;
&lt;p&gt;Les définitions de broches RAMPS/Creality par défaut dans Marlin ne définissent
pas &lt;code&gt;SERVO0_PIN&lt;/code&gt;, ce qui laisse le signal servo du BLTouch flottant. Modifiez
&lt;code&gt;Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h&lt;/code&gt; en ajoutant à l’intérieur du bloc
&lt;code&gt;#ifdef NUM_SERVOS&lt;/code&gt; existant :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#ifdef NUM_SERVOS&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="cp"&gt;#define SERVO0_PIN 11&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Ce mapping assigne le servo 0 à la broche 11, correspondant au connecteur D11
utilisé ci-dessus.&lt;/p&gt;
&lt;h2 id="parametres-configurationh"&gt;Paramètres Configuration.h&lt;/h2&gt;
&lt;p&gt;Activez les defines suivants dans &lt;code&gt;Configuration.h&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#define BLTOUCH                          &lt;/span&gt;&lt;span class="c1"&gt;// traite le CR-Touch comme un BL-Touch&lt;/span&gt;
&lt;span class="cp"&gt;#define USE_PROBE_FOR_Z_HOMING           &lt;/span&gt;&lt;span class="c1"&gt;// homing Z via la sonde, pas le fin de course&lt;/span&gt;
&lt;span class="cp"&gt;#define Z_SAFE_HOMING                    &lt;/span&gt;&lt;span class="c1"&gt;// évite de crasher la sonde hors du plateau&lt;/span&gt;

&lt;span class="c1"&gt;// Grille de sondage&lt;/span&gt;
&lt;span class="cp"&gt;#define GRID_MAX_POINTS_X 7              &lt;/span&gt;&lt;span class="c1"&gt;// maillage de niveau 7×7&lt;/span&gt;

&lt;span class="c1"&gt;// Assistants de calibration (optionnels mais recommandés)&lt;/span&gt;
&lt;span class="cp"&gt;#define PROBE_OFFSET_WIZARD&lt;/span&gt;
&lt;span class="cp"&gt;#define PROBE_OFFSET_WIZARD_START_Z -4.0&lt;/span&gt;

&lt;span class="c1"&gt;// Babystepping (peut déjà être activé dans les versions récentes de Marlin)&lt;/span&gt;
&lt;span class="cp"&gt;#define BABYSTEPPING&lt;/span&gt;
&lt;span class="cp"&gt;#define BABYSTEP_DISPLAY_TOTAL&lt;/span&gt;
&lt;span class="cp"&gt;#define BABYSTEP_ZPROBE_OFFSET&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="comprendre-letat-des-leds"&gt;Comprendre l’état des LEDs&lt;/h2&gt;
&lt;p&gt;Après le flash et la mise sous tension, le CR-Touch effectue un auto-test. Les
LEDs rendent compte du résultat :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;État LED&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Signification&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;🔴 Rouge seule, fixe&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Alimentation OK ; signal PWM pas encore reçu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;🔴🔵 Rouge + Bleu (violet)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Auto-test réussi — sonde prête&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;🔴 Rouge clignotante&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Auto-test échoué — broche bloquée ou obstruée&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Si l’auto-test passe mais que seule la LED rouge s’allume (pas de bleu), le
câble de signal PWM est probablement mal connecté ou lâche. Fixez le connecteur
Dupont maison avec du scotch ; vérifiez le fil signal sur la broche 3 du D11.&lt;/p&gt;
&lt;p&gt;Une fois la LED bleue allumée, testez le déploiement et l’escamotage depuis le
menu Marlin &lt;strong&gt;Mouvement → BLTouch&lt;/strong&gt; avant de lancer une impression.&lt;/p&gt;
&lt;h2 id="reglage-de-loffset-sonde"&gt;Réglage de l’offset sonde&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;NOZZLE_TO_PROBE_OFFSET { X, Y, Z }&lt;/code&gt; définit la position de la pointe de sonde
par rapport à la buse. X et Y dépendent du montage du support ; Z est la hauteur
de déclenchement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;N’essayez pas de régler Z à la compilation.&lt;/strong&gt; Laissez-le à &lt;code&gt;0&lt;/code&gt; dans le build
et utilisez l’&lt;strong&gt;Assistant d’offset sonde&lt;/strong&gt; (Mouvement → Offset sonde dans le
menu Marlin) pour le régler en live. L’assistant utilise un test papier pour
trouver la hauteur exacte de déclenchement et écrit le résultat en EEPROM.&lt;/p&gt;
&lt;p&gt;Pour X/Y, des valeurs typiques avec le support métal Creality standard :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Axe&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Valeur typique&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;X&lt;/td&gt;
&lt;td style="text-align: left;"&gt;−44 à −46&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Mesurez sur votre support ; −44 est un bon point de départ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: left;"&gt;−9&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Généralement stable quelle que soit la position du support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Z&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0 (compilation)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Régler en live via l’Assistant d’offset, sauvegardé en EEPROM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#define NOZZLE_TO_PROBE_OFFSET { -44, -9, 0 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Si les résultats de première couche dérivent latéralement, mesurez la distance
réelle buse-sonde avec un pied à coulisse et ajustez X/Y en conséquence.&lt;/p&gt;
&lt;h2 id="babystepping-et-ajustement-z-en-direct"&gt;Babystepping et ajustement Z en direct&lt;/h2&gt;
&lt;p&gt;Le babystepping permet de régler l’offset Z en cours d’impression sans arrêter
l’impression. Avec &lt;code&gt;BABYSTEP_ZPROBE_OFFSET&lt;/code&gt; activé, l’ajustement est persistant :
il met à jour l’offset sonde stocké en EEPROM, pas seulement un décalage
temporaire. Workflow recommandé :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lancer une impression.&lt;/li&gt;
&lt;li&gt;Observer la première couche ; utiliser le menu babystepping pour corriger si nécessaire.&lt;/li&gt;
&lt;li&gt;La valeur corrigée est sauvegardée automatiquement.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pour un guide visuel combinant l’Assistant d’offset sonde et le babystepping,
voir ce &lt;a href="https://3dprintscape.com/z-offset-wizard-complete-guide/"&gt;guide de calibration Z&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="visualisation-du-nivellement-de-plateau"&gt;Visualisation du nivellement de plateau&lt;/h2&gt;
&lt;p&gt;Si vous utilisez OctoPrint, le
&lt;a href="https://plugins.octoprint.org/plugins/bedlevelvisualizer/"&gt;plugin Bed Level Visualizer&lt;/a&gt;
affiche le maillage sous forme de carte de chaleur 3D. Il est utile pour
repérer les problèmes physiques de plateau qu’aucune correction Z ne peut
résoudre, comme un châssis voilé ou non de niveau.&lt;/p&gt;
&lt;h2 id="quatre-ans-apres-2026"&gt;Quatre ans après (2026)&lt;/h2&gt;
&lt;p&gt;Une fois calibré, le CR-Touch devient invisible — la première couche fonctionne, point. Le câble adaptateur est la seule étape non standard ; une fois ce problème de connecteur réglé, c’est de la configuration Marlin classique. Quatre ans plus tard, je n’ai pas eu à recalibrer une seule fois.&lt;/p&gt;</content><category term="Impression 3D"/><category term="cr10s"/><category term="crtouch"/><category term="marlin"/><category term="impression3d"/><category term="firmware"/></entry><entry><title>Installing a CR-Touch on a stock CR-10S</title><link href="https://jordan.auge.synaxe.net/blog/2022/07/crtouch-cr10s/" rel="alternate"/><published>2022-07-20T00:00:00+02:00</published><updated>2026-05-29T00:00:00+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2022-07-20:/blog/2022/07/crtouch-cr10s/</id><summary type="html">&lt;p&gt;How to wire a CR-Touch to the stock CR-10S mainboard using a DIY adapter cable, patch Marlin 2 firmware, and calibrate the probe offset.&lt;/p&gt;</summary><content type="html">&lt;!-- PELICAN_BEGIN_SUMMARY --&gt;
&lt;p&gt;The CR-Touch works on 8-bit boards just fine — the PWM servo signal and
digital trigger output are well within ATmega2560 capabilities. The catch with
the stock CR-10S is not the processor, it is the connector: Creality’s guides
all assume a dedicated 5-pin BLTouch header that the stock V2 board does not
have. This article documents the adapter cable that bridges two existing
headers, the one-line Marlin patch, and the probe offset workflow.&lt;/p&gt;
&lt;!-- PELICAN_END_SUMMARY --&gt;
&lt;p&gt;This guide assumes you are already running custom Marlin 2 on your printer. If
you are still on stock firmware, see
&lt;a href="https://jordan.auge.synaxe.net/fr/drafts/marlin-cr10s-v2-en.html"&gt;Building and flashing Marlin 2 on a CR-10S V2&lt;/a&gt;
first.&lt;/p&gt;
&lt;!-- TODO: add a photo of your CR-Touch probe before publishing — place it as crtouch.jpg in this folder --&gt;
&lt;!-- ![CR-Touch ABL probe]({attach}crtouch.jpg) --&gt;
&lt;h2 id="the-stock-board-problem"&gt;The stock board problem&lt;/h2&gt;
&lt;p&gt;CR-Touch installation guides almost universally assume a dedicated 5-pin
BLTouch header on the mainboard. Creality added that header on newer 32-bit
boards (CR-10S Pro, CR-6 SE, etc.), and the official documentation only covers
those. The stock CR-10S V2 board — an ATmega2560 — predates that header. The
CR-Touch itself does not care about the processor architecture; it needs five
signals, and those signals are available on two existing headers the V2 board
already exposes: a free &lt;strong&gt;D11 servo header&lt;/strong&gt; (3 pins) and the &lt;strong&gt;Z endstop
header&lt;/strong&gt; (2 pins). No adapter board, no cut wires.&lt;/p&gt;
&lt;h2 id="building-the-adapter-cable"&gt;Building the adapter cable&lt;/h2&gt;
&lt;p&gt;The adapter splits the CR-Touch’s 5-pin JST connector into two branches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;3-pin female Dupont&lt;/strong&gt; plug for the D11 servo header&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;2-pin JST&lt;/strong&gt; plug replacing the Z endstop connector&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The main risk is reversing the connector: getting the pinout wrong can damage
the CR-Touch. Use a multimeter in continuity mode to verify before powering on.
The two ground pins (G) on the CR-Touch are shorted internally, which makes
them easy to confirm by probing both simultaneously.&lt;/p&gt;
&lt;p&gt;The correct wiring for the stock CR-10S is shown below. Note that the GND (white)
and VIN (black) wires &lt;strong&gt;cross&lt;/strong&gt; between the CR-Touch connector and the D11 header —
pin 1 of the D11 header is VIN, but VIN is the second wire out of the CR-Touch.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;CR-Touch pin&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Wire colour&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Destination&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;G&lt;/td&gt;
&lt;td style="text-align: left;"&gt;White&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D11 pin 2&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GND&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;V&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Black&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D11 pin 1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;VIN (+5V)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;IN&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Yellow&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D11 pin 3&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;G&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Red&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Z endstop pin 2&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GND&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;OUT&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Blue&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Z endstop pin 1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;OUT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="Adapter cable wiring diagram" src="https://jordan.auge.synaxe.net/fr/blog/2022/07/crtouch-cr10s/wiring-diagram.svg"/&gt;&lt;/p&gt;
&lt;p&gt;The D11 header reads &lt;strong&gt;left to right: black (VIN) — white (GND) — yellow (SIG)&lt;/strong&gt;
when viewed from the plug side. The Z endstop header has blue (OUT) on pin 1
and red (GND) on pin 2.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Verification tip:&lt;/strong&gt; probe both G pins (white and red) with continuity —
they should beep. Also verify VIN against a known +5 V point on the board
before powering on, to confirm polarity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="patching-marlin-2"&gt;Patching Marlin 2&lt;/h2&gt;
&lt;p&gt;Marlin’s default RAMPS/Creality pin assignments do not define &lt;code&gt;SERVO0_PIN&lt;/code&gt;,
so the BLTouch servo signal floats. Edit
&lt;code&gt;Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h&lt;/code&gt; and add inside the existing
&lt;code&gt;#ifdef NUM_SERVOS&lt;/code&gt; block:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#ifdef NUM_SERVOS&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="cp"&gt;#define SERVO0_PIN 11&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;This maps servo 0 to pin 11, which corresponds to the D11 header used above.&lt;/p&gt;
&lt;h2 id="configurationh-settings"&gt;Configuration.h settings&lt;/h2&gt;
&lt;p&gt;Enable the following defines in &lt;code&gt;Configuration.h&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#define BLTOUCH                          &lt;/span&gt;&lt;span class="c1"&gt;// treats CR-Touch like BL-Touch&lt;/span&gt;
&lt;span class="cp"&gt;#define USE_PROBE_FOR_Z_HOMING           &lt;/span&gt;&lt;span class="c1"&gt;// home Z using the probe, not the endstop&lt;/span&gt;
&lt;span class="cp"&gt;#define Z_SAFE_HOMING                    &lt;/span&gt;&lt;span class="c1"&gt;// prevents crashing the probe off the bed edge&lt;/span&gt;

&lt;span class="c1"&gt;// Probe grid&lt;/span&gt;
&lt;span class="cp"&gt;#define GRID_MAX_POINTS_X 7              &lt;/span&gt;&lt;span class="c1"&gt;// 7×7 bed level mesh&lt;/span&gt;

&lt;span class="c1"&gt;// Calibration helpers (optional but recommended)&lt;/span&gt;
&lt;span class="cp"&gt;#define PROBE_OFFSET_WIZARD&lt;/span&gt;
&lt;span class="cp"&gt;#define PROBE_OFFSET_WIZARD_START_Z -4.0&lt;/span&gt;

&lt;span class="c1"&gt;// Babystepping (may already be enabled in recent Marlin versions)&lt;/span&gt;
&lt;span class="cp"&gt;#define BABYSTEPPING&lt;/span&gt;
&lt;span class="cp"&gt;#define BABYSTEP_DISPLAY_TOTAL&lt;/span&gt;
&lt;span class="cp"&gt;#define BABYSTEP_ZPROBE_OFFSET&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id="understanding-the-led-status"&gt;Understanding the LED status&lt;/h2&gt;
&lt;p&gt;After flashing and powering up, the CR-Touch runs a self-test sequence. The LEDs
report the result:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;LED state&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;🔴 Red only, solid&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Power OK; PWM signal not yet received from the board&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;🔴🔵 Red + Blue (purple)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Self-test passed — probe is ready&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;🔴 Red blinking&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Self-test failed — pin stuck or obstructed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If the self-test passes but only the red LED lights (no blue), the PWM signal
cable is likely loose or miswired. Secure the Dupont connector with a piece of
tape; double-check the signal wire on D11 pin 3.&lt;/p&gt;
&lt;p&gt;Once the blue LED is on, test deploy and stow from the Marlin &lt;strong&gt;Motion ›
BLTouch&lt;/strong&gt; menu before starting any print.&lt;/p&gt;
&lt;h2 id="setting-the-probe-offset"&gt;Setting the probe offset&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;NOZZLE_TO_PROBE_OFFSET { X, Y, Z }&lt;/code&gt; defines the probe tip position relative
to the nozzle. X and Y depend on your bracket mounting; Z is the trigger height.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not try to get Z right at compile time.&lt;/strong&gt; Leave it at &lt;code&gt;0&lt;/code&gt; in the build
and use the &lt;strong&gt;Probe Offset Wizard&lt;/strong&gt; (Motion › Probe Offset in the Marlin menu)
to dial it in live using the paper test. The wizard writes the result to EEPROM.&lt;/p&gt;
&lt;p&gt;For X/Y, typical values with the standard Creality metal bracket are:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Axis&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Typical value&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;X&lt;/td&gt;
&lt;td style="text-align: left;"&gt;−44 to −46&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Measure from your own bracket; −44 is a common starting point&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: left;"&gt;−9&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Generally consistent across mounting positions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Z&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0 (compile)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Set live via Probe Offset Wizard, saved to EEPROM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#define NOZZLE_TO_PROBE_OFFSET { -44, -9, 0 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;If first-layer results drift laterally, measure the actual nozzle-to-probe
distance with calipers and adjust X/Y accordingly.&lt;/p&gt;
&lt;h2 id="babystepping-and-live-z-adjustment"&gt;Babystepping and live Z adjustment&lt;/h2&gt;
&lt;p&gt;Babystepping lets you nudge the Z offset mid-print without stopping. With
&lt;code&gt;BABYSTEP_ZPROBE_OFFSET&lt;/code&gt; enabled, the adjustment is persistent: it updates the
stored probe offset in EEPROM, not just a temporary shift. Recommended
workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start a print.&lt;/li&gt;
&lt;li&gt;Watch the first layer; use the babystepping menu to correct if needed.&lt;/li&gt;
&lt;li&gt;The corrected value is saved automatically.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For a visual walkthrough combining the Probe Offset Wizard and babystepping,
see this &lt;a href="https://3dprintscape.com/z-offset-wizard-complete-guide/"&gt;Z-offset calibration guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="bed-levelling-visualisation"&gt;Bed levelling visualisation&lt;/h2&gt;
&lt;p&gt;If you use OctoPrint, the
&lt;a href="https://plugins.octoprint.org/plugins/bedlevelvisualizer/"&gt;Bed Level Visualizer plugin&lt;/a&gt;
renders the mesh as a 3D heatmap. It is useful for spotting physical bed
problems that no Z offset correction can fix, such as a warped or unlevel
frame.&lt;/p&gt;
&lt;h2 id="four-years-later-2026"&gt;Four years later (2026)&lt;/h2&gt;
&lt;p&gt;Once calibrated, the CR-Touch is one of those upgrades that becomes invisible — the first layer just works. The adapter cable is the only non-standard step; once you’re past the connector problem, it’s standard Marlin configuration. Four years in, I have not had to recalibrate it once.&lt;/p&gt;</content><category term="3D Printing"/><category term="cr10s"/><category term="crtouch"/><category term="marlin"/><category term="3dprinting"/><category term="firmware"/></entry><entry><title>Accueil de LANMAN 2019 — Démo sur la gestion par politiques</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2019-07-01-lanman2019-hosting-demo-policies/" rel="alternate"/><published>2019-07-01T00:00:00+02:00</published><updated>2026-05-29T09:02:24.230978+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2019-07-01:/fr/fr/news/2019-07-01-lanman2019-hosting-demo-policies/</id><summary type="html">&lt;p&gt;Organisation de l&amp;rsquo;atelier IEEE LANMAN 2019 à Paris (1–3 juillet 2019) et démonstration de nos derniers travaux sur la gestion par politiques.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Nous accueillons &lt;a href="https://lanman2019.ieee-lanman.org/"&gt;IEEE LANMAN 2019&lt;/a&gt; à Paris
du 1er au 3 juillet 2019.&lt;/p&gt;
&lt;p&gt;Je présenterai une démonstration de nos derniers travaux sur la &lt;strong&gt;gestion des
réseaux par politiques&lt;/strong&gt; lors de l’atelier.&lt;/p&gt;</content><category term="news"/><category term="lanman"/><category term="ieee"/><category term="conference"/><category term="demo"/><category term="politiques"/><category term="reseaux"/><category term="hebergement"/></entry><entry><title>Hosting LANMAN 2019 — Demo on Policy-Based Networking</title><link href="https://jordan.auge.synaxe.net/news/2019-07-01-lanman2019-hosting-demo-policies/" rel="alternate"/><published>2019-07-01T00:00:00+02:00</published><updated>2026-05-14T14:32:59.260731+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2019-07-01:/news/2019-07-01-lanman2019-hosting-demo-policies/</id><summary type="html">&lt;p&gt;Hosting the IEEE LANMAN 2019 workshop in Paris (1–3 July 2019) and presenting a demo on our latest work on policy-based networking.&lt;/p&gt;</summary><content type="html">&lt;p&gt;We are hosting &lt;a href="https://lanman2019.ieee-lanman.org/"&gt;IEEE LANMAN 2019&lt;/a&gt; in Paris
from 1–3 July 2019.&lt;/p&gt;
&lt;p&gt;I will be presenting a demo on our latest work on &lt;strong&gt;policy-based networking&lt;/strong&gt;
at the workshop.&lt;/p&gt;</content><category term="news"/><category term="lanman"/><category term="ieee"/><category term="conference"/><category term="demo"/><category term="policies"/><category term="networking"/><category term="hosting"/></entry><entry><title>IETF-102 Montréal — Session DMM sur la mobilité hICN</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2018-07-14-ietf102-montreal-dmm-hicn-mobility/" rel="alternate"/><published>2018-07-14T00:00:00+02:00</published><updated>2026-05-29T09:02:24.230796+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2018-07-14:/fr/fr/news/2018-07-14-ietf102-montreal-dmm-hicn-mobility/</id><summary type="html">&lt;p&gt;Participation à l&amp;rsquo;IETF-102 à Montréal (14–20 juillet 2018) et présentation des drafts hICN sur la mobilité sans ancre dans le groupe de travail DMM.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Je participerai à &lt;a href="https://www.ietf.org/how/meetings/102/"&gt;IETF-102&lt;/a&gt; à Montréal
du dimanche 14 juillet au vendredi 20 juillet.&lt;/p&gt;
&lt;p&gt;Nous présenterons deux drafts IETF dans la session du groupe de travail Distributed
Mobility Management (DMM) décrivant la gestion de la mobilité dans les réseaux 5G
par des mécanismes hICN :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-auge-dmm-hicn-mobility/"&gt;Anchorless mobility through hICN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-auge-dmm-hicn-mobility-deployment-options/"&gt;Anchorless mobility management through hICN (hICN-AMM): Deployment options&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="ietf"/><category term="ietf-102"/><category term="montreal"/><category term="dmm"/><category term="hicn"/><category term="icn"/><category term="mobilite"/><category term="standardisation"/><category term="draft"/></entry><entry><title>IETF-102 Montréal — DMM Session on hICN Mobility</title><link href="https://jordan.auge.synaxe.net/news/2018-07-14-ietf102-montreal-dmm-hicn-mobility/" rel="alternate"/><published>2018-07-14T00:00:00+02:00</published><updated>2026-05-14T14:32:45.271169+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2018-07-14:/news/2018-07-14-ietf102-montreal-dmm-hicn-mobility/</id><summary type="html">&lt;p&gt;Attending IETF-102 in Montréal (14–20 July 2018) and presenting hICN-based anchorless mobility management drafts in the DMM working group session.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I will be attending &lt;a href="https://www.ietf.org/how/meetings/102/"&gt;IETF-102&lt;/a&gt; in
Montréal from Sun 14 July to Fri 20 July.&lt;/p&gt;
&lt;p&gt;We will be presenting two IETF drafts in the Distributed Mobility Management
(DMM) Working Group session describing mobility management in 5G networks using
hICN mechanisms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-auge-dmm-hicn-mobility/"&gt;Anchorless mobility through hICN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-auge-dmm-hicn-mobility-deployment-options/"&gt;Anchorless mobility management through hICN (hICN-AMM): Deployment options&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="ietf"/><category term="ietf-102"/><category term="montreal"/><category term="dmm"/><category term="hicn"/><category term="icn"/><category term="mobility"/><category term="standardization"/><category term="draft"/></entry><entry><title>Publication du draft IRTF MAP-ME</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2018-07-02-mapme-irtf-draft-published/" rel="alternate"/><published>2018-07-02T00:00:00+02:00</published><updated>2026-05-29T09:02:24.230642+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2018-07-02:/fr/fr/news/2018-07-02-mapme-irtf-draft-published/</id><summary type="html">&lt;p&gt;Première version de notre draft IRTF sur MAP-ME — gestion de la mobilité des producteurs sans ancre dans les réseaux ICN.&lt;/p&gt;</summary><content type="html">&lt;p&gt;La première version de notre draft
&lt;a href="https://datatracker.ietf.org/doc/draft-irtf-icnrg-mapme/"&gt;MAP-Me: Managing Anchorless Mobility in Content Centric Networking&lt;/a&gt;
est en ligne.&lt;/p&gt;
&lt;p&gt;Tout retour est le bienvenu.&lt;/p&gt;</content><category term="news"/><category term="ietf"/><category term="irtf"/><category term="icnrg"/><category term="map-me"/><category term="icn"/><category term="mobilite"/><category term="draft"/><category term="standardisation"/></entry><entry><title>MAP-ME IRTF Draft Published</title><link href="https://jordan.auge.synaxe.net/news/2018-07-02-mapme-irtf-draft-published/" rel="alternate"/><published>2018-07-02T00:00:00+02:00</published><updated>2026-05-14T14:32:30.525418+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2018-07-02:/news/2018-07-02-mapme-irtf-draft-published/</id><summary type="html">&lt;p&gt;First version of our IRTF draft on MAP-ME — anchorless producer mobility management in ICN — is now online.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The first version of our draft
&lt;a href="https://datatracker.ietf.org/doc/draft-irtf-icnrg-mapme/"&gt;MAP-Me: Managing Anchorless Mobility in Content Centric Networking&lt;/a&gt;
is online.&lt;/p&gt;
&lt;p&gt;Any feedback is welcome.&lt;/p&gt;</content><category term="news"/><category term="ietf"/><category term="irtf"/><category term="icnrg"/><category term="map-me"/><category term="icn"/><category term="mobility"/><category term="draft"/><category term="standardization"/></entry><entry><title>IETF-101 Londres — Présentation à l'ICNRG sur MAP-ME</title><link href="https://jordan.auge.synaxe.net/fr/fr/news/2018-03-17-ietf101-london-icnrg-mapme-talk/" rel="alternate"/><published>2018-03-17T00:00:00+01:00</published><updated>2026-05-29T09:02:24.230384+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2018-03-17:/fr/fr/news/2018-03-17-ietf101-london-icnrg-mapme-talk/</id><summary type="html">&lt;p&gt;Participation à l&amp;rsquo;IETF-101 à Londres (17–22 mars 2018) et présentation de MAP-ME à la réunion intérimaire de l&amp;rsquo;ICNRG.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Je serai à &lt;a href="https://www.ietf.org/how/meetings/101/"&gt;IETF-101&lt;/a&gt; à Londres du
samedi 17 mars au jeudi 22 mars.&lt;/p&gt;
&lt;p&gt;Le dimanche, je donne une présentation à la
&lt;a href="https://trac.ietf.org/trac/irtf/wiki/icnrg"&gt;réunion intérimaire de l’ICNRG&lt;/a&gt;
sur notre article
&lt;a href="/research/publications/#auge2018map"&gt;MAP-ME: Managing Anchor-less Producer Mobility in Content-Centric Networks&lt;/a&gt;.&lt;/p&gt;</content><category term="news"/><category term="ietf"/><category term="ietf-101"/><category term="londre"/><category term="icnrg"/><category term="map-me"/><category term="icn"/><category term="mobilite"/><category term="standardisation"/></entry><entry><title>IETF-101 London — ICNRG Interim Talk on MAP-ME</title><link href="https://jordan.auge.synaxe.net/news/2018-03-17-ietf101-london-icnrg-mapme-talk/" rel="alternate"/><published>2018-03-17T00:00:00+01:00</published><updated>2026-05-14T14:32:17.903966+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2018-03-17:/news/2018-03-17-ietf101-london-icnrg-mapme-talk/</id><summary type="html">&lt;p&gt;Attending IETF-101 in London (17–22 March 2018) and presenting MAP-ME at the ICNRG interim meeting on Sunday.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I will be at &lt;a href="https://www.ietf.org/how/meetings/101/"&gt;IETF-101&lt;/a&gt; in London from
Sat 17 March to Thu 22 March.&lt;/p&gt;
&lt;p&gt;On Sunday I am giving a talk at the
&lt;a href="https://trac.ietf.org/trac/irtf/wiki/icnrg"&gt;ICNRG interim meeting&lt;/a&gt; related to
our paper
&lt;a href="/research/publications/#auge2018map"&gt;MAP-ME: Managing Anchor-less Producer Mobility in Content-Centric Networks&lt;/a&gt;.&lt;/p&gt;</content><category term="news"/><category term="ietf"/><category term="ietf-101"/><category term="london"/><category term="icnrg"/><category term="map-me"/><category term="icn"/><category term="mobility"/><category term="standardization"/></entry><entry><title>ITU 5G Demo Video — ICN for Delivery, Mobility and Security</title><link href="https://jordan.auge.synaxe.net/fr/news/2016-12-15-itu-5g-icn-demo-video/" rel="alternate"/><published>2016-12-15T00:00:00+01:00</published><updated>2026-05-29T15:20:22.910047+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2016-12-15:/fr/news/2016-12-15-itu-5g-icn-demo-video/</id><summary type="html">&lt;p&gt;&amp;ldquo;Video publique de demo ITU 5G montrant l&amp;rsquo;usage de l&amp;rsquo;ICN pour la diffusion, la gestion de mobilite et le transport securise.&amp;rdquo;&lt;/p&gt;</summary><content type="html">&lt;p&gt;L’ITU a publie le &lt;strong&gt;15 decembre 2016&lt;/strong&gt; une &lt;strong&gt;video publique de demo 5G&lt;/strong&gt;
montrant comment &lt;strong&gt;l’ICN&lt;/strong&gt; pouvait etre utilise pour la &lt;strong&gt;diffusion de donnees,
la gestion de mobilite et le transport securise&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cet artefact est l’une des traces publiques datees les plus nettes de la
famille hICN / Hybrid ICN dans un format de demonstration, et pas seulement au
travers d’articles ou de code.&lt;/p&gt;
&lt;h2 id="artefact-public"&gt;Artefact public&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=3BcG8F4Lcec"&gt;Artefact video public : Using ICN to simplify data delivery, mobility management and secure transmission&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="itu"/><category term="5g"/><category term="video"/><category term="demo"/><category term="icn"/><category term="hybrid-icn"/><category term="hicn"/><category term="mobility"/><category term="networking"/><category term="public-artifact"/></entry><entry><title>ITU 5G Demo Video — ICN for Delivery, Mobility and Security</title><link href="https://jordan.auge.synaxe.net/news/2016-12-15-itu-5g-icn-demo-video/" rel="alternate"/><published>2016-12-15T00:00:00+01:00</published><updated>2026-05-29T15:19:55.380494+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2016-12-15:/news/2016-12-15-itu-5g-icn-demo-video/</id><summary type="html">&lt;p&gt;Public ITU 5G demo video showing ICN applied to delivery, mobility management, and secure transmission.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The ITU published a public &lt;strong&gt;5G demo video&lt;/strong&gt; on &lt;strong&gt;15 December 2016&lt;/strong&gt; showing
how &lt;strong&gt;ICN&lt;/strong&gt; could be used for &lt;strong&gt;data delivery, mobility management, and secure
transmission&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This artifact is one of the clearest dated public traces of the hICN / Hybrid
ICN family in a demonstration format rather than only through papers or code.&lt;/p&gt;
&lt;h2 id="public-artifact"&gt;Public artifact&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=3BcG8F4Lcec"&gt;Public video artifact: Using ICN to simplify data delivery, mobility management and secure transmission&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="itu"/><category term="5g"/><category term="video"/><category term="demo"/><category term="icn"/><category term="hybrid-icn"/><category term="hicn"/><category term="mobility"/><category term="networking"/><category term="public-artifact"/></entry><entry><title>"Video CiscoFrance : publication d'une demo de mobilite ICN"</title><link href="https://jordan.auge.synaxe.net/fr/news/2016-04-15-ciscofrance-icn-mobility-demo-video/" rel="alternate"/><published>2016-04-15T00:00:00+02:00</published><updated>2026-05-13T10:41:00.098965+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2016-04-15:/fr/news/2016-04-15-ciscofrance-icn-mobility-demo-video/</id><summary type="html">&lt;p&gt;&amp;ldquo;Video de demonstration publique CiscoFrance illustrant des scenarios de mobilite autour de l&amp;rsquo;ICN.&amp;rdquo;&lt;/p&gt;</summary><content type="html">&lt;p&gt;CiscoFrance a publie le &lt;strong&gt;15 avril 2016&lt;/strong&gt; une video de demonstration publique
autour de la &lt;strong&gt;mobilite avec l’Information-Centric Networking&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cet artefact public est utile parce qu’il conserve une demonstration datee de
la narration mobilite autour de l’ICN, au-dela des articles scientifiques et
des descriptions de projet.&lt;/p&gt;
&lt;h2 id="artefact-public"&gt;Artefact public&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=p26GODPxGGE&amp;amp;t=575s"&gt;Artefact video public : ICN Demo - Rethinking mobility with information centric networking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="ciscofrance"/><category term="cisco"/><category term="video"/><category term="demo"/><category term="icn"/><category term="mobility"/><category term="networking"/><category term="public-artifact"/></entry><entry><title>CiscoFrance Video: ICN Mobility Demo Published</title><link href="https://jordan.auge.synaxe.net/news/2016-04-15-ciscofrance-icn-mobility-demo-video/" rel="alternate"/><published>2016-04-15T00:00:00+02:00</published><updated>2026-05-13T10:41:00.099024+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2016-04-15:/news/2016-04-15-ciscofrance-icn-mobility-demo-video/</id><summary type="html">&lt;p&gt;Public CiscoFrance demo video showing ICN-oriented mobility scenarios.&lt;/p&gt;</summary><content type="html">&lt;p&gt;CiscoFrance published a public demo video on &lt;strong&gt;15 April 2016&lt;/strong&gt; around
&lt;strong&gt;mobility with Information-Centric Networking&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This matters as a public artifact because it preserves a dated demonstration of
the mobility narrative around ICN, beyond papers and project descriptions.&lt;/p&gt;
&lt;h2 id="public-artifact"&gt;Public artifact&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=p26GODPxGGE&amp;amp;t=575s"&gt;Public video artifact: ICN Demo - Rethinking mobility with information centric networking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="ciscofrance"/><category term="cisco"/><category term="video"/><category term="demo"/><category term="icn"/><category term="mobility"/><category term="networking"/><category term="public-artifact"/></entry><entry><title>"Video TelecomTV : l'ICN dans la recherche 5G de Cisco"</title><link href="https://jordan.auge.synaxe.net/fr/news/2016-03-16-telecomtv-icn-cisco-5g-research-video/" rel="alternate"/><published>2016-03-16T00:00:00+01:00</published><updated>2026-05-13T10:41:00.098845+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2016-03-16:/fr/news/2016-03-16-telecomtv-icn-cisco-5g-research-video/</id><summary type="html">&lt;p&gt;&amp;ldquo;Artefact video public TelecomTV presentant l&amp;rsquo;Information-Centric Networking dans la trajectoire de recherche 5G de Cisco.&amp;rdquo;&lt;/p&gt;</summary><content type="html">&lt;p&gt;TelecomTV a publie le &lt;strong&gt;16 mars 2016&lt;/strong&gt; une video publique consacree a
&lt;strong&gt;l’Information-Centric Networking (ICN)&lt;/strong&gt; dans la trajectoire plus large de
&lt;strong&gt;recherche 5G&lt;/strong&gt; de Cisco.&lt;/p&gt;
&lt;p&gt;Cet artefact public est utile parce qu’il fournit une trace externe datee de la
maniere dont ce travail ICN etait presente publiquement a l’epoque, dans un
format plus simple a citer que des slides internes ou des demos non archivees.&lt;/p&gt;
&lt;h2 id="artefact-public"&gt;Artefact public&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=m_KacZUrRnk"&gt;Artefact video public : Information Centric Networking driving Cisco’s 5G research&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="telecomtv"/><category term="video"/><category term="icn"/><category term="5g"/><category term="networking"/><category term="research"/><category term="public-artifact"/></entry><entry><title>TelecomTV Video: ICN Driving Cisco's 5G Research</title><link href="https://jordan.auge.synaxe.net/news/2016-03-16-telecomtv-icn-cisco-5g-research-video/" rel="alternate"/><published>2016-03-16T00:00:00+01:00</published><updated>2026-05-13T10:41:00.098907+02:00</updated><author><name>Jordan Augé</name></author><id>tag:jordan.auge.synaxe.net,2016-03-16:/news/2016-03-16-telecomtv-icn-cisco-5g-research-video/</id><summary type="html">&lt;p&gt;Public TelecomTV video artifact discussing Information-Centric Networking as part of Cisco&amp;rsquo;s 5G research direction.&lt;/p&gt;</summary><content type="html">&lt;p&gt;TelecomTV published a public video segment on &lt;strong&gt;16 March 2016&lt;/strong&gt; covering
&lt;strong&gt;Information-Centric Networking (ICN)&lt;/strong&gt; as part of Cisco’s broader &lt;strong&gt;5G
research&lt;/strong&gt; direction.&lt;/p&gt;
&lt;p&gt;This public artifact matters because it gives a dated external trace of how the
ICN work was presented publicly at the time, in a format that is easier to cite
than internal slides or undocumented demos.&lt;/p&gt;
&lt;h2 id="public-artifact"&gt;Public artifact&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=m_KacZUrRnk"&gt;Public video artifact: Information Centric Networking driving Cisco’s 5G research&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="news"/><category term="telecomtv"/><category term="video"/><category term="icn"/><category term="5g"/><category term="networking"/><category term="research"/><category term="public-artifact"/></entry></feed>