Ressusciter un Neato transformé en brique : OpenNeato et une intégration Home Assistant

J’ai été fan de Neato très tôt. À l’époque où la plupart des aspirateurs robots se contentaient de rebondir au hasard, Neato proposait des modèles avec une tourelle LIDAR sur le dessus, ce qui leur donnait une navigation vraiment plus intelligente que les Roomba de l’époque : ils cartographiaient la pièce et la nettoyaient en lignes régulières au lieu de ricocher partout. J’en ai possédé plusieurs au fil des ans et je les ai recommandés à des amis avec plaisir. Celui que j’utilise encore est un Neato Botvac D6, mon aspirateur quotidien depuis des années.
Ça n’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’est une bonne machine, et je l’ai maintenue en vie : des brosses neuves plusieurs fois, une batterie de rechange. Mécaniquement, il fonctionne toujours.
Le jour où il est devenu une brique
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’appli a été coupé définitivement. Du jour au lendemain, l’appli est devenue inutile. Pire : le robot s’appuyait sur le cloud pour plus que la programmation, même une partie de sa gestion d’erreurs passait par le serveur. Un aspirateur parfaitement fonctionnel, fraîchement rebatterisé, s’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.
C’est la partie du marché du matériel connecté à laquelle personne ne souscrit vraiment : la mécanique survit à l’entreprise, et l’entreprise emporte le cerveau avec elle en partant.
La solution communautaire : parler directement au robot
Il se trouve que ces robots ont un port série de debug 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’une simplicité réjouissante : brancher un petit ESP32 sur ce port et piloter le robot soi-même, sans aucun cloud dans la boucle.
Plusieurs projets sont nés de cette idée. Celui qui a le mieux marché pour moi est OpenNeato, un remplacement open source du cloud et de l’appli morts de Neato. L’ESP32 parle au Botvac (D3 à D7) en UART et sert une interface web locale en WiFi. Pas de cloud, pas d’appli, pas de compte. Il gère la programmation, le pilotage manuel, une carte LIDAR en direct, l’historique de nettoyage, et les notifications push via ntfy. Le tout tourne sur une carte qui coûte quelques dollars et vit à l’intérieur du robot.
La partie matérielle est simple sur le principe : on ouvre le robot, on trouve le connecteur série, on récupère l’alimentation et le TX/RX série avec quelques fils vers l’ESP32, et on les fait ressortir. En pratique, ouvrir un Botvac est la partie délicate. Je n’avais pas de tournevis assez fin pour les vis, alors j’ai légèrement percé un peu de plastique pour les atteindre. Pas élégant, mais ça a marché, et le robot s’est bien refermé au final. C’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.
La seule chose qui manquait
L’interface web d’OpenNeato est excellente, et les notifications ntfy sont un joli plus. Mais je fais tourner toute ma maison avec Home Assistant, et c’est là que je veux que l’aspirateur vive : sur mes tableaux de bord, dans mes automatisations, à côté de tous mes autres appareils. OpenNeato n’avait pas d’intégration Home Assistant.
La bonne nouvelle, c’est que le firmware exposait déjà tout via une API HTTP locale propre (/api/*). Toutes les données et toutes les commandes étaient là. Ce qui manquait, c’était la colle : une intégration Home Assistant qui parle cette API et présente le robot comme un appareil HA à part entière.
Alors je l’ai écrite.
Ce que j’ai construit : l’intégration Home Assistant
J’ai fait un fork d’OpenNeato dont la seule raison d’être est le côté Home Assistant. Il fournit une intégration personnalisée installable via HACS qui découvre le pont sur le réseau par IP ou par nom d’hôte et expose le robot comme un appareil HA unique et à part entière. Pas de YAML, pas d’add-on supplémentaire, pas d’aller-retour vers le cloud. L’intégration interroge l’API locale toutes les 5 secondes sur le réseau local.
Le robot apparaît avec l’ensemble d’entités qu’on voudrait :
- Une entité vacuum avec démarrage, arrêt, pause, retour à la base, localisation et nettoyage ponctuel, plus le niveau de batterie, l’état, les préréglages de puissance (Eco, Auto, Intense) et le report d’erreurs. Elle marche d’emblée avec les cartes aspirateur standard de Home Assistant.
- Une entité camera qui rend la carte de nettoyage LIDAR, pour voir où le robot est passé directement sur le tableau de bord.
- Des capteurs pour ce que l’ancienne appli n’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’aspiration, signal WiFi, statistiques de nettoyage, et plus.
- Des interrupteurs et boutons pour les moteurs, l’effacement manuel des erreurs, et les autres commandes exposées par le firmware.
Les modifications du firmware dans le fork sont volontairement mineures (quelques points d’API en plus pour alimenter l’intégration, comme /api/sensors et un durcissement de /api/history). Le firmware du pont ESP32, l’interface web et l’outil de flash sont le travail du projet amont ; ma contribution, c’est la couche Home Assistant par-dessus.

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’une seule mise à jour à distance livre à la fois le firmware et l’interface. Et la carte LIDAR de l’interface web est exactement la donnée que rend l’entité camera de Home Assistant.

L’installer
Pour quiconque a un Neato à l’abandon et un Home Assistant, l’installation de l’intégration est la partie facile :
- Dans HACS, ajoutez le fork comme dépôt personnalisé :
https://github.com/Leicas/OpenNeato(catégorie : Integration). - Cherchez OpenNeato dans HACS et installez-le, puis redémarrez Home Assistant.
- Allez dans Paramètres, Appareils et services, Ajouter une intégration, OpenNeato et saisissez le nom d’hôte ou l’IP du pont (par exemple
neato.local).
Il faut le firmware 1.0+ sur l’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.
Le résultat : mieux que le cloud qu’il remplace
Depuis que je fais tourner ça, mon aspirateur fonctionne au moins aussi bien qu’avant, et honnêtement mieux. Je reçois des notifications push quand un nettoyage se termine ou qu’une erreur survient. Je vois l’état de la batterie, les vitesses de rotation des brosses, l’historique de nettoyage et la carte, le tout dans Home Assistant. C’est plus d’informations que ce que l’appli Neato d’origine m’a jamais donné, sur un robot que le fabricant avait de fait déclaré mort.
Il y a quelque chose de très satisfaisant là-dedans. Le matériel a toujours été correct. Ce qui a lâché, c’est une décision d’entreprise et une facture de serveur. Quelques dollars d’ESP32, un projet open source et un peu de colle d’intégration ont suffi à reprendre le robot.
Liens et crédits
- Projet amont : renjfk/OpenNeato, le firmware du pont ESP32, l’interface web et l’outil de flash. Si vous ne voulez que l’interface web autonome, utilisez celui-ci directement.
- Mon fork Home Assistant : Leicas/OpenNeato, avec l’intégration Home Assistant installable via HACS. À utiliser si vous avez Home Assistant et voulez le robot comme appareil à part entière.
- Notifications : ntfy.
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’appli a cessé de fonctionner, il n’a pas à y rester.