<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ESP32 | Antoine Weill--Duflos</title>
    <link>https://antoine.weill-duflos.fr/fr/tag/esp32/</link>
      <atom:link href="https://antoine.weill-duflos.fr/fr/tag/esp32/index.xml" rel="self" type="application/rss+xml" />
    <description>ESP32</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>fr-fr</language><lastBuildDate>Sun, 31 May 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://antoine.weill-duflos.fr/media/icon_hu_d686267daab28486.png</url>
      <title>ESP32</title>
      <link>https://antoine.weill-duflos.fr/fr/tag/esp32/</link>
    </image>
    
    <item>
      <title>Intégration Home Assistant pour OpenNeato</title>
      <link>https://antoine.weill-duflos.fr/fr/project/openneato/</link>
      <pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/project/openneato/</guid>
      <description>&lt;p&gt;Quand la maison mère de Neato, Vorwerk, a coupé le cloud, de très bons aspirateurs robots Botvac ont perdu leur appli, leur programmation, et même une partie de leur gestion d&amp;rsquo;erreurs. &lt;a href=&#34;https://github.com/renjfk/OpenNeato&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenNeato&lt;/a&gt; (le projet amont) les ramène à la vie avec un petit &lt;strong&gt;ESP32 branché sur le port série de debug du robot&lt;/strong&gt;, qui sert une interface web locale en WiFi, sans cloud, sans appli, sans compte.&lt;/p&gt;
&lt;p&gt;Ma contribution, c&amp;rsquo;est le côté &lt;strong&gt;Home Assistant&lt;/strong&gt;. Je maintiens un &lt;a href=&#34;https://github.com/Leicas/OpenNeato&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fork&lt;/a&gt; dont la raison d&amp;rsquo;être est une &lt;strong&gt;intégration personnalisée installable via HACS&lt;/strong&gt; : elle découvre le pont sur le réseau local et expose le robot comme un appareil Home Assistant à part entière, sans YAML.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;intégration interroge l&amp;rsquo;API HTTP locale du pont toutes les 5 secondes et fournit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une entité &lt;strong&gt;vacuum&lt;/strong&gt; (démarrage/arrêt/pause/base/localisation/ponctuel, batterie, état, préréglages de puissance, erreurs).&lt;/li&gt;
&lt;li&gt;Une entité &lt;strong&gt;camera&lt;/strong&gt; qui rend la &lt;strong&gt;carte de nettoyage LIDAR&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Des &lt;strong&gt;capteurs&lt;/strong&gt; pour les diagnostics de batterie (nombre de cycles, tension, température), les vitesses des moteurs de brosse et d&amp;rsquo;aspiration, le WiFi et les statistiques de nettoyage.&lt;/li&gt;
&lt;li&gt;Des &lt;strong&gt;interrupteurs et boutons&lt;/strong&gt; pour les moteurs et les commandes manuelles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le firmware du pont ESP32, l&amp;rsquo;interface web et l&amp;rsquo;outil de flash sont le travail du projet amont ; les modifications de firmware dans mon fork sont des points d&amp;rsquo;API mineurs pour alimenter l&amp;rsquo;intégration. Résultat : mon propre Neato D6 fonctionne désormais au moins aussi bien qu&amp;rsquo;avec le cloud, avec plus de télémétrie que l&amp;rsquo;appli d&amp;rsquo;origine n&amp;rsquo;en a jamais exposé.&lt;/p&gt;
&lt;p&gt;Article complet : &lt;a href=&#34;../../post/openneato/&#34;&gt;Ressusciter un Neato transformé en brique&lt;/a&gt;. Les deux projets sont open source sous licence MIT.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ressusciter un Neato transformé en brique : OpenNeato et une intégration Home Assistant</title>
      <link>https://antoine.weill-duflos.fr/fr/post/openneato/</link>
      <pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
      <guid>https://antoine.weill-duflos.fr/fr/post/openneato/</guid>
      <description>&lt;p&gt;















&lt;figure  id=&#34;figure-mon-neato-d6-bien-réel-coque-supérieure-retirée--la-tourelle-lidar-ronde-en-haut-la-carte-mère-et-ses-nappes-à-gauche-le-bac-à-brosse-avec-son-étiquette--neato-genuine--au-milieu-cest-là-que-va-lesp32-le-cloud-nest-plus-là-le-robot-si&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;Un aspirateur robot Neato Botvac ouvert sur les genoux, coque supérieure retirée, laissant voir la tourelle LIDAR ronde et noire en haut, la carte mère verte avec ses nappes et ses fils colorés à gauche, un moteur métallique à droite, et une étiquette « neato genuine » dans le bac à brosse central&#34; srcset=&#34;
               /fr/post/openneato/featured_hu_e4cd35aae0249ad2.webp 400w,
               /fr/post/openneato/featured_hu_697befa0fee38392.webp 760w,
               /fr/post/openneato/featured_hu_3db8ccf948f0dd67.webp 1200w&#34;
               src=&#34;https://antoine.weill-duflos.fr/fr/post/openneato/featured_hu_e4cd35aae0249ad2.webp&#34;
               width=&#34;760&#34;
               height=&#34;573&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Mon Neato D6 bien réel, coque supérieure retirée : la tourelle LIDAR ronde en haut, la carte mère et ses nappes à gauche, le bac à brosse avec son étiquette « neato genuine » au milieu. C&amp;rsquo;est là que va l&amp;rsquo;ESP32. Le cloud n&amp;rsquo;est plus là. Le robot, si.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai été fan de Neato très tôt. À l&amp;rsquo;époque où la plupart des aspirateurs robots se contentaient de rebondir au hasard, Neato proposait des modèles avec une tourelle &lt;strong&gt;LIDAR&lt;/strong&gt; sur le dessus, ce qui leur donnait une navigation vraiment plus intelligente que les Roomba de l&amp;rsquo;époque : ils cartographiaient la pièce et la nettoyaient en lignes régulières au lieu de ricocher partout. J&amp;rsquo;en ai possédé plusieurs au fil des ans et je les ai recommandés à des amis avec plaisir. Celui que j&amp;rsquo;utilise encore est un &lt;strong&gt;Neato Botvac D6&lt;/strong&gt;, mon aspirateur quotidien depuis des années.&lt;/p&gt;
&lt;p&gt;Ça n&amp;rsquo;a jamais été totalement sans accroc. De temps en temps il se coince ou avale un câble, et il a bien moins de tours dans son sac que les nouveaux robots à caméra qui analysent toute une pièce. Mais c&amp;rsquo;est une bonne machine, et je l&amp;rsquo;ai maintenue en vie : des brosses neuves plusieurs fois, une batterie de rechange. Mécaniquement, il fonctionne toujours.&lt;/p&gt;
&lt;h2 id=&#34;le-jour-où-il-est-devenu-une-brique&#34;&gt;Le jour où il est devenu une brique&lt;/h2&gt;
&lt;p&gt;Il y a quelques mois, les serveurs ont été coupés. Neato avait été mis en sommeil par sa maison mère Vorwerk dès 2023, et le cloud dont dépendait l&amp;rsquo;appli a été &lt;a href=&#34;https://www.heise.de/en/news/Vorwerk-subsidiary-Neato-shuts-down-cloud-server-hoovers-lose-functions-10748987.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;coupé définitivement&lt;/a&gt;. Du jour au lendemain, l&amp;rsquo;appli est devenue inutile. Pire : le robot s&amp;rsquo;appuyait sur le cloud pour plus que la programmation, même une partie de sa gestion d&amp;rsquo;erreurs passait par le serveur. Un aspirateur parfaitement fonctionnel, fraîchement rebatterisé, s&amp;rsquo;est donc transformé en brique coûteuse. Il faisait encore un nettoyage manuel si on appuyait sur le bouton, mais tout ce qui le rendait intelligent avait disparu.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est la partie du marché du matériel connecté à laquelle personne ne souscrit vraiment : la mécanique survit à l&amp;rsquo;entreprise, et l&amp;rsquo;entreprise emporte le cerveau avec elle en partant.&lt;/p&gt;
&lt;h2 id=&#34;la-solution-communautaire--parler-directement-au-robot&#34;&gt;La solution communautaire : parler directement au robot&lt;/h2&gt;
&lt;p&gt;Il se trouve que ces robots ont un &lt;strong&gt;port série de debug&lt;/strong&gt; sur la carte mère, et que le comportement de nettoyage est piloté par de simples commandes série. La solution communautaire est donc d&amp;rsquo;une simplicité réjouissante : brancher un petit &lt;strong&gt;ESP32&lt;/strong&gt; sur ce port et piloter le robot soi-même, sans aucun cloud dans la boucle.&lt;/p&gt;
&lt;p&gt;Plusieurs projets sont nés de cette idée. Celui qui a le mieux marché pour moi est &lt;strong&gt;&lt;a href=&#34;https://github.com/renjfk/OpenNeato&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenNeato&lt;/a&gt;&lt;/strong&gt;, un remplacement open source du cloud et de l&amp;rsquo;appli morts de Neato. L&amp;rsquo;ESP32 parle au Botvac (D3 à D7) en UART et sert une &lt;strong&gt;interface web locale&lt;/strong&gt; en WiFi. Pas de cloud, pas d&amp;rsquo;appli, pas de compte. Il gère la programmation, le pilotage manuel, une carte LIDAR en direct, l&amp;rsquo;historique de nettoyage, et les notifications push via &lt;a href=&#34;https://ntfy.sh&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ntfy&lt;/a&gt;. Le tout tourne sur une carte qui coûte quelques dollars et vit à l&amp;rsquo;intérieur du robot.&lt;/p&gt;
&lt;p&gt;La partie matérielle est simple sur le principe : on ouvre le robot, on trouve le connecteur série, on récupère l&amp;rsquo;alimentation et le TX/RX série avec quelques fils vers l&amp;rsquo;ESP32, et on les fait ressortir. En pratique, ouvrir un Botvac est la partie délicate. Je n&amp;rsquo;avais pas de tournevis assez fin pour les vis, alors j&amp;rsquo;ai légèrement percé un peu de plastique pour les atteindre. Pas élégant, mais ça a marché, et le robot s&amp;rsquo;est bien refermé au final. C&amp;rsquo;est mon vrai D6 ouvert sur la photo en haut de cet article, tourelle LIDAR comprise. Une fois refermé, le seul signe extérieur est un petit faisceau de fils près de la jointure.&lt;/p&gt;
&lt;h2 id=&#34;la-seule-chose-qui-manquait&#34;&gt;La seule chose qui manquait&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;interface web d&amp;rsquo;OpenNeato est excellente, et les notifications ntfy sont un joli plus. Mais je fais tourner toute ma maison avec &lt;strong&gt;Home Assistant&lt;/strong&gt;, et c&amp;rsquo;est là que je veux que l&amp;rsquo;aspirateur vive : sur mes tableaux de bord, dans mes automatisations, à côté de tous mes autres appareils. OpenNeato n&amp;rsquo;avait pas d&amp;rsquo;intégration Home Assistant.&lt;/p&gt;
&lt;p&gt;La bonne nouvelle, c&amp;rsquo;est que le firmware exposait déjà tout via une API HTTP locale propre (&lt;code&gt;/api/*&lt;/code&gt;). Toutes les données et toutes les commandes étaient là. Ce qui manquait, c&amp;rsquo;était la &lt;strong&gt;colle&lt;/strong&gt; : une intégration Home Assistant qui parle cette API et présente le robot comme un appareil HA à part entière.&lt;/p&gt;
&lt;p&gt;Alors je l&amp;rsquo;ai écrite.&lt;/p&gt;
&lt;h2 id=&#34;ce-que-jai-construit--lintégration-home-assistant&#34;&gt;Ce que j&amp;rsquo;ai construit : l&amp;rsquo;intégration Home Assistant&lt;/h2&gt;
&lt;p&gt;J&amp;rsquo;ai fait un &lt;a href=&#34;https://github.com/Leicas/OpenNeato&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fork d&amp;rsquo;OpenNeato&lt;/a&gt; dont la seule raison d&amp;rsquo;être est le côté Home Assistant. Il fournit une &lt;strong&gt;intégration personnalisée installable via HACS&lt;/strong&gt; qui découvre le pont sur le réseau par IP ou par nom d&amp;rsquo;hôte et expose le robot comme un appareil HA unique et à part entière. Pas de YAML, pas d&amp;rsquo;add-on supplémentaire, pas d&amp;rsquo;aller-retour vers le cloud. L&amp;rsquo;intégration interroge l&amp;rsquo;API locale toutes les 5 secondes sur le réseau local.&lt;/p&gt;
&lt;p&gt;Le robot apparaît avec l&amp;rsquo;ensemble d&amp;rsquo;entités qu&amp;rsquo;on voudrait :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une entité &lt;strong&gt;vacuum&lt;/strong&gt; avec démarrage, arrêt, pause, retour à la base, localisation et nettoyage ponctuel, plus le niveau de batterie, l&amp;rsquo;état, les préréglages de puissance (Eco, Auto, Intense) et le report d&amp;rsquo;erreurs. Elle marche d&amp;rsquo;emblée avec les cartes aspirateur standard de Home Assistant.&lt;/li&gt;
&lt;li&gt;Une entité &lt;strong&gt;camera&lt;/strong&gt; qui rend la &lt;strong&gt;carte de nettoyage LIDAR&lt;/strong&gt;, pour voir où le robot est passé directement sur le tableau de bord.&lt;/li&gt;
&lt;li&gt;Des &lt;strong&gt;capteurs&lt;/strong&gt; pour ce que l&amp;rsquo;ancienne appli n&amp;rsquo;a jamais affiché : niveau et diagnostics détaillés de la batterie (nombre de cycles, tension, température), vitesses des moteurs de brosse et d&amp;rsquo;aspiration, signal WiFi, statistiques de nettoyage, et plus.&lt;/li&gt;
&lt;li&gt;Des &lt;strong&gt;interrupteurs et boutons&lt;/strong&gt; pour les moteurs, l&amp;rsquo;effacement manuel des erreurs, et les autres commandes exposées par le firmware.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les modifications du firmware dans le fork sont volontairement mineures (quelques points d&amp;rsquo;API en plus pour alimenter l&amp;rsquo;intégration, comme &lt;code&gt;/api/sensors&lt;/code&gt; et un durcissement de &lt;code&gt;/api/history&lt;/code&gt;). Le firmware du pont ESP32, l&amp;rsquo;interface web et l&amp;rsquo;outil de flash sont le travail du projet amont ; ma contribution, c&amp;rsquo;est la couche Home Assistant par-dessus.&lt;/p&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-linterface-web-dopenneato-qui-tourne-entièrement-sur-lesp32-lintégration-home-assistant-parle-la-même-api-locale-que-ce-tableau-de-bord&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;Le tableau de bord web d&amp;rsquo;OpenNeato sur un thème sombre, montrant l&amp;rsquo;état du robot, le niveau de batterie, l&amp;rsquo;état de nettoyage, le signal WiFi et l&amp;rsquo;utilisation du stockage&#34; srcset=&#34;
               /fr/post/openneato/dashboard_hu_a1d8c48d76e60a30.webp 400w,
               /fr/post/openneato/dashboard_hu_2ae2c6e0b86d0ed4.webp 760w,
               /fr/post/openneato/dashboard_hu_bfaac61cdff3d58d.webp 1200w&#34;
               src=&#34;https://antoine.weill-duflos.fr/fr/post/openneato/dashboard_hu_a1d8c48d76e60a30.webp&#34;
               width=&#34;350&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      L&amp;rsquo;interface web d&amp;rsquo;OpenNeato, qui tourne entièrement sur l&amp;rsquo;ESP32. L&amp;rsquo;intégration Home Assistant parle la même API locale que ce tableau de bord.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Un joli détail du projet sous-jacent : le frontend web est compressé en gzip et embarqué directement dans le binaire du firmware, de sorte qu&amp;rsquo;une seule mise à jour à distance livre à la fois le firmware et l&amp;rsquo;interface. Et la carte LIDAR de l&amp;rsquo;interface web est exactement la donnée que rend l&amp;rsquo;entité camera de Home Assistant.&lt;/p&gt;
&lt;p&gt;















&lt;figure  id=&#34;figure-la-carte-lidar-dune-session-de-nettoyage-dans-home-assistant-elle-devient-une-entité-camera-quon-pose-directement-sur-une-carte-aspirateur&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;Une carte de nettoyage LIDAR rendue sous forme de contour de couverture montrant la forme des pièces nettoyées&#34; srcset=&#34;
               /fr/post/openneato/clean-map_hu_d75a3a376b22fab0.webp 400w,
               /fr/post/openneato/clean-map_hu_10711dbf5960964a.webp 760w,
               /fr/post/openneato/clean-map_hu_eef043c0e94f9d8d.webp 1200w&#34;
               src=&#34;https://antoine.weill-duflos.fr/fr/post/openneato/clean-map_hu_d75a3a376b22fab0.webp&#34;
               width=&#34;350&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      La carte LIDAR d&amp;rsquo;une session de nettoyage. Dans Home Assistant, elle devient une entité camera qu&amp;rsquo;on pose directement sur une carte aspirateur.
    &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;linstaller&#34;&gt;L&amp;rsquo;installer&lt;/h2&gt;
&lt;p&gt;Pour quiconque a un Neato à l&amp;rsquo;abandon et un Home Assistant, l&amp;rsquo;installation de l&amp;rsquo;intégration est la partie facile :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dans HACS, ajoutez le fork comme &lt;strong&gt;dépôt personnalisé&lt;/strong&gt; : &lt;code&gt;https://github.com/Leicas/OpenNeato&lt;/code&gt; (catégorie : Integration).&lt;/li&gt;
&lt;li&gt;Cherchez &lt;strong&gt;OpenNeato&lt;/strong&gt; dans HACS et installez-le, puis redémarrez Home Assistant.&lt;/li&gt;
&lt;li&gt;Allez dans &lt;strong&gt;Paramètres, Appareils et services, Ajouter une intégration, OpenNeato&lt;/strong&gt; et saisissez le nom d&amp;rsquo;hôte ou l&amp;rsquo;IP du pont (par exemple &lt;code&gt;neato.local&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Il faut le firmware &lt;code&gt;1.0+&lt;/code&gt; sur l&amp;rsquo;ESP32 ; les diagnostics de batterie demandent une version un peu plus récente. Tout est en interrogation locale, donc rien ne quitte le réseau.&lt;/p&gt;
&lt;h2 id=&#34;le-résultat--mieux-que-le-cloud-quil-remplace&#34;&gt;Le résultat : mieux que le cloud qu&amp;rsquo;il remplace&lt;/h2&gt;
&lt;p&gt;Depuis que je fais tourner ça, mon aspirateur fonctionne au moins aussi bien qu&amp;rsquo;avant, et honnêtement mieux. Je reçois des notifications push quand un nettoyage se termine ou qu&amp;rsquo;une erreur survient. Je vois l&amp;rsquo;état de la batterie, les vitesses de rotation des brosses, l&amp;rsquo;historique de nettoyage et la carte, le tout dans Home Assistant. C&amp;rsquo;est plus d&amp;rsquo;informations que ce que l&amp;rsquo;appli Neato d&amp;rsquo;origine m&amp;rsquo;a jamais donné, sur un robot que le fabricant avait de fait déclaré mort.&lt;/p&gt;
&lt;p&gt;Il y a quelque chose de très satisfaisant là-dedans. Le matériel a toujours été correct. Ce qui a lâché, c&amp;rsquo;est une décision d&amp;rsquo;entreprise et une facture de serveur. Quelques dollars d&amp;rsquo;ESP32, un projet open source et un peu de colle d&amp;rsquo;intégration ont suffi à reprendre le robot.&lt;/p&gt;
&lt;h2 id=&#34;liens-et-crédits&#34;&gt;Liens et crédits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Projet amont :&lt;/strong&gt; &lt;a href=&#34;https://github.com/renjfk/OpenNeato&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;renjfk/OpenNeato&lt;/a&gt;, le firmware du pont ESP32, l&amp;rsquo;interface web et l&amp;rsquo;outil de flash. Si vous ne voulez que l&amp;rsquo;interface web autonome, utilisez celui-ci directement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mon fork Home Assistant :&lt;/strong&gt; &lt;a href=&#34;https://github.com/Leicas/OpenNeato&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Leicas/OpenNeato&lt;/a&gt;, avec l&amp;rsquo;intégration Home Assistant installable via HACS. À utiliser si vous avez Home Assistant et voulez le robot comme appareil à part entière.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notifications :&lt;/strong&gt; &lt;a href=&#34;https://ntfy.sh&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ntfy&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le projet amont comme mon fork sont open source sous licence MIT, et tous deux sont encore en bêta précoce, donc attendez-vous à quelques aspérités. Si votre Neato dort dans un placard parce que l&amp;rsquo;appli a cessé de fonctionner, il n&amp;rsquo;a pas à y rester.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
