Dreame Z10 Pro + Valetudo

Nouveau billet technologique en français, parce que la documentation sur ce sujet en anglais est déjà bonne.

J’ai acheté un robot aspirateur Roomba 530 en 2007 et ce dernier est malheureusement mort depuis quelque temps.

En 14 ans, la technologie a eu le temps d’évoluer un peu. Mon Roomba avait un seul bouton pour le démarrer et après il naviguait au petit bonheur la chance, passant à certains endroits dix fois et au mieux une seule fois à d’autres. Maintenant les robots aspirateurs sont équipés de lidars et sont capables de cartographier l’appartement et ainsi nettoyer plus vite.

Inconvénient majeur, aujourd’hui ce sont tous des IoT (et le « S » dans « IoT » veut dire « sécurisé »), connectés au « cloud ». Quelques-uns des différents problèmes que ça engendre :

Que faire ? Heureusement il y a beaucoup de personnes qui pensent aussi que c’est un problème, dont certaines qui trouvent des solutions. Beaucoup de ces robots aspirateurs utilisent l’écosystème « smart home » de Xiaomi et le projet Valetudo permet de s’en passer.

Valetudo

Valetudo (du nom de la déesse de l’hygiène) est un projet qui permet d’interdire au robot aspirateur d’accéder aux serveurs de Xiaomi, de fournir une interface web directement depuis le robot pour pouvoir le piloter et quelques autres trucs sympas.

Mais pour faire ça, il y a pas mal d’obstacles. Certains robots aspirateurs sont à peine assez puissant pour faire fonctionner leur propre logiciel (typiquement niveau espace de stockage et mémoire vive), donc faire fonctionner Valetudo dessus en plus est un peu problématique. Et évidemment les constructeurs n’autorisent pas à installer des logiciels tiers sur les robots aspirateurs et il n’est possible de le faire que si une faille de sécurité est présente sur le robot permettant de débrider celui-ci.

Donc pour le choix de mon aspirateur robot, je m’orientais vers un Roborock S7+ mais après la découverte de Valetudo, je me suis fixé sur un Dreame Z10 Pro, car mieux supporté par Valetudo.

Dreame Z10 Pro

Voilà mon retour d’expérience après presque 2 mois d’utilisation.

Pour rappel, les robots aspirateurs sont fait pour un usage quotidien. Leur puissance d’aspiration est au moins 10 fois moindre que ce que l’on peut trouver sur un aspirateur classique. Mais pour un nettoyage quotidien ce n’est en général pas nécessaire d’avoir autant de puissance. En revanche ça ne vous dispense pas de faire un nettoyage plus minutieux de temps à autre.

C’est donc un aspirateur robot :

Niveau design, je suis un peu étonné de voir tous ces robots être plus ou moins des copies du design des Roomba d’il y a 15 ans, à savoir :

Ceci étant dit, la finition est bonne et donne une impression de qualité.

Aspiration

Parce que oui, c’est avant tout un aspirateur.

Le robot est annoncé avec 4 kPa de dépression (j’aurais bien aimé connaître l’airwattage aussi), ce qui est supérieur à la plupart des aspirateurs robots.

Le robot a plusieurs niveaux de puissances possibles et une option pour augmenter la puissance automatiquement lorsqu’il détecte qu’il se trouve sur un tapis. Je l’utilise avec la puissance par défaut (donc pas maximum), sur sol dur, et c’est au moins aussi efficace que mon vieux Roomba 530.

Avec un réservoir à poussière de 400 ml, c’est peu, mais encore une fois, pour un nettoyage quotidien, c’est suffisant vu que l’aspirateur va automatiquement se vider dans sa base après avoir fini d’aspirer. Une partie du volume du réservoir à poussière est perdu à cause du système de vidange automatique. Comme on le verra ci-dessous, un design différent aurait permis d’avoir un volume plus important.

Base de vidage automatique

La base a une taille assez conséquente, étant elle-même un aspirateur, envoyant de l’air d’un côté vers le robot et aspirant de l’autre pour récupérer la poussière collectée par le robot. Poussière qui finit dans un sac d’aspirateur classique. Alors oui, ça fait un consommable, un système d’aspiration sans sac aurait été bienvenu.

Le sac a une contenance de 4 l et Dreame indique qu’il y a besoin de le changer tous les 2 mois environ.

Points positifs :

Je dois dire qu’après première inspection, je suis un peu dubitatif sur la partie vidage automatique du réservoir à poussières du robot aspirateur. En gros la base souffle de l’air d’un côté du réservoir et aspire de l’autre. Jusque-là tout va bien. La valve en sortie du réceptacle est normalement maintenue en position fermée avec un aimant, et elle s’ouvre sous la force d’aspiration de la base. Pas de problème non plus de côté là bien que l’on aurait pu imaginer que la base possède aussi un aimant ouvrant automatiquement la valve (système similaire à certains bloque-tiroirs). Mais le problème principal est sur la valve en entrée du réceptacle ou un simple bout de caoutchouc sert de valve. Étant donné le sens de circulation de l’air, cette valve s’ouvre certainement lorsque le robot est en mode aspiration qui ainsi perd de la puissance de succion. Ce qui explique aussi pourquoi Dreame a fait cette valve aussi petite.

Chez la concurrence on trouve des systèmes de vidange différents :

Je pense qu’il y a clairement un gain à faire ici (et ainsi prolonger la durée de vie des parties mécaniques et de la batterie tout en consommant moins d’énergie à puissance d’aspiration identique).

C’est un autre monde comparé à mon vieux Roomba 530. Au premier passage, le robot aspirateur cartographie l’appartement au fur et à mesure qu’il le découvre. Il suit d’abord les bords et ensuite zigzag pour aspirer la surface ainsi délimitée. Si on lui demande de faire 2 passes, il fera les zigzags de la deuxième passe perpendiculairement à la première.

Le scanner 3D à l’avant du robot pour éviter les obstacles est assez efficace pour qu’il ne se tape pas dans tout et n’importe quoi. En soit le scanner 3D ce sont deux lasers de chaque côté d’une caméra d’une résolution de 640×480 pixels. J’imagine que les lasers envoient des points et en fonction de l’image captée par la caméra, il est possible de déterminer la présence, voire la forme, d’objets à proximité.

Dans tous les cas, moins il y a de choses qui traînent par terre, mieux c’est. Mais clairement je peux le lancer dans des situations dans lesquelles je n’aurais jamais lancé le Roomba. Et surtout il nettoie les pièces en beaucoup moins de temps que ce que prenait le Roomba.

Quelques points négatifs :

Autonomie

Qui dit appartement parisien, dit petite surface, donc clairement pas de problème d’autonomie.

L’aspirateur est équipé d’une batterie 14,4 V d’une capacité de 5 200 mAh et 46 W de puissance nominale. Dreame annonce 150 minutes d’autonomie. Petit calcul rapide à partir de ces éléments : en fonctionnement (dans les mêmes conditions) l’aspirateur doit consommer environ 30 W (avec la serpillère à débit max et l’aspiration à puissance max, j’imagine que l’autonomie est réduite).

De mon utilisation, après 40 minutes d’aspiration, la batterie indique être encore pleine à 80 %.

Serpillère

Là, c’est plus un gadget qu’autre chose. En gros, c’est un chiffon humide trainé à l’arrière du robot. Pour vraiment être efficace avec une serpillère, il faut frotter en appuyant. Le Roborock S7+ a une serpillère vibrante, c’est probablement mieux, mais je ne suis pas certain que ce soit suffisant.

Le Dreame Z10 Pro a une option pour faire des zigzags plus serrés lorsque la serpillière est attachée. D’autres robots se déplacent en « Y » : le robot avance un peu et va vers la gauche, puis revient en arrière et avance un peu et va vers la droite, ce qui permet de simuler un peu mieux un frottement de la serpillère dans différentes directions. Une technique qui pourrait être une amélioration amenée par une mise à jour logicielle.

La serpillère du Z10 Pro est montée sur un réservoir de 150 ml d’eau, réservoir qui contient une petite pompe et trois orifices par lesquels l’eau s’écoule dans la serpillère. Il y a 3 débits possibles, j’ai tendance à utiliser le débit maximum.

Consommation électrique

Mesures prises avec la base branchée sur un wattmètre :

Prix

Le prix normal du Dreame Z10 Pro est de 500 €, mais j’ai vu passer plusieurs offres à des prix inférieurs, dont une à 370 €. Dans tous les cas, c’est un prix très attractif comparé à un Roomba s9+ à 1 200 € ou un Dyson 360 Heurist à 1 000 € (et dont la version précédente ne fonctionnait pas dans le noir tout en coutant 1 200 €…).

Divers

J’ai perdu pas mal de temps à chercher ces informations par moi-même sur mon robot alors que tout était déjà compilé par la personne qui trouve comment débrider les robots aspirateurs :

Le processus principal s’appelle ava et semble utiliser environ 30 % de CPU en permanence, même quand le robot est sur sa base à ne rien faire. À mon avis, il y a une partie du code qui doit être bien dégueulasse, clairement de la performance et de la consommation d’énergie à gagner là.

Un des avantages de faire tourner ça avec Valetudo, c’est qu’il y a une intégration MQTT faite par défaut, donc la possibilité de raccorder le robot à un peu n’importe quel système de domotique. Une intégration dans Home Assistant existe déjà ainsi qu’une intégration dans OpenHAB. De là on peut imaginer des scénarios pour que l’aspirateur se lance automatiquement quand il n’y a personne dans la maison, etc.

Je n’ai pas encore de système de domotique chez moi, mais j’y réfléchi… Mon stage de fin d’études (il y a, certes, très longtemps maintenant) était tout de même sur un système de domotique.

Mon avis

Avoir l’aspirateur qui passe automatiquement tous les jours, surtout si on a des animaux qui laissent des poils partout, c’est quand même très cool.

Le problème sur le fait que ce soit un IoT connecté à des serveurs tiers est donc résolu avec Valetudo.

Il y a le problème de la longévité. D’après l’ADEME, 78 % de l’empreinte carbone d’un terminal numérique est lors de sa fabrication, donc pour réduire son empreinte il faut le faire durer le plus longtemps possible. Mais :

Au passage, toujours sur le respect de la loi, le site de Dreame ne respecte évidemment pas le RGPD. Il y a plusieurs traqueurs dessus, mais aucune demande de consentement.

Dreame, comme la plupart des autres constructeurs, font tout ce qu’ils peuvent pour empêcher leurs clients d’utiliser leur matériel comme ils l’entendent. Il est dommage de voir des entreprises chinoises adopter les mauvaises pratiques du capitalisme et mettre les profits à courts termes devant les besoins de leurs utilisateurs, l’écologie et la sauvegarde de l’humanité.

En l’occurrence, je pense que beaucoup de personnes ont acheté un Z10 Pro de chez Dreame, justement parce que c’est un des mieux supportés par Valetudo. À la place de se mettre à dos une partie de ses clients, c’est une opportunité pour Dreame de changer de cap et de se démarquer de ses concurrents en rendant leurs produits plus ouverts.

Le robot aspirateur que j’aimerais avoir

Si je devais construire mon robot aspirateur « ultime », avec les technologies d’aujourd’hui, voici les spécifications que j’utiliserais :

Si jamais il y avait un moyen de rendre la serpillère efficace, ce qu’il faudrait, c'est une plus grande automatisation. Devoir nettoyer la serpillère, l’installer, la désinstaller et recharger le réservoir à chaque utilisation, la rend quasi inutile. Autant sortir une vraie serpillère et faire ça à la main. De même pour l’aspirateur, je me servais beaucoup moins souvent de mon Roomba que du Z10 Pro, justement parce que je devais le lancer à la main et le vider après chaque utilisation. Donc pour la serpillère :

À part ce dernier point, pour la serpillère, le Roborock S7 MaxV Ultra avec sa base géante semble faire l’affaire. Mais encore une fois, je me pose des questions sur la fiabilité d’un tel système.

Devenir root sur le Z10 Pro

Comme beaucoup « d’objets intelligents », le Z10 Pro utilise Linux comme système d’exploitation. Afin de pouvoir installer Valetudo dessus, la première chose à faire est de devenir administrateur du système. Et pour cela il suffit de suivre la documentation d’installation de Valetudo (la documentation est très bien faite et à jour (contrairement à ce billet de blog qui ne sera pas mis à jour)). À noter que la technique décrite ci-dessous n’est plus possible avec les derniers firmwares du robot. Heureusement, le robot que j’ai acheté a une date de production de septembre 2021 et n’embarque donc pas le dernier firmware.

Pour réaliser cette manipulation il est nécessaire d’avoir :

Ouvrir le robot aspirateur

Certainement la partie la plus difficile.

Commencer par s’assurer que le robot est éteint (bouton ⏻ pendant au moins trois secondes).

Ensuite, il s’agit d’ouvrir le capot avant qui est retenu par plusieurs clips. La meilleure façon que j’ai trouvé, c’est d’utiliser un objet long et fin (d’où les tournevis avec du tissu), de l’amener jusqu’a un des clips et faire levier doucement jusqu’à ce que le clip s’ouvre. Il ne faut par lever trop haut, au risque d’abimer/tordre/casser le capot. Et faire tous les clips comme ça un par un.

Connecter le convertisseur USB/UART

Ensuite, il faut connecter le convertisseur USB/UART 3,3 V sur les bonnes prises du robot (cf. la documentation de Valetudo pour les bonnes broches) via les câbles jumper. Bien brancher la masse ainsi que le TX sur le RX et le RX sur le TX… Mais comme beaucoup de monde se trompe, la documentation de mon câble a inversé les noms des broches RX et TX… Du coup, je l’ai branché à l’envers lors de mon premier essai.

Se connecter à l’aspirateur

Soit avec la commande screen, soit avec miniterm de python.

$ sudo apt install screen
$ sudo screen /dev/ttyUSB0 115200,ixoff
$ sudo apt install python3-serial
$ sudo python -m serial.tools.miniterm /dev/ttyUSB0 115200

Puis démarrer le robot aspirateur en appuyant sur le bouton ⏻ pendant au moins trois secondes. La séquence de boot devrait défiler à l’écran.

[340]HELLO! SBOOT is starting!
(…)
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
p2028
{"ret":"ok"}

Il faut ensuite appuyer sur le bouton reset sous le capot arrière de l’aspirateur, une invite de connexion s’affiche alors :

p2028_release login: root
Password: 

Pour le mot de passe root, il faut prendre le numéro affiché dans le robot sous le collecteur à poussière (long de 18 caractères sur le mien) et faire une conversion en Base64 de son empreinte MD5 :

$ echo -n "P00000000EU00000XX" | md5sum | base64

Et voilà :

--------------------------------------------------------------
    _   _   _                        _     _                  
   / \ | |_| |__   ___ _ __   __ _  | |   (_)_ __  _   ___  __
  / _ \| __| '_ \ / _ \ '_ \ / _` | | |   | | '_ \| | | \ \/ /
 / ___ \ |_| | | |  __/ | | | (_| | | |___| | | | | |_| |>  < 
/_/   \_\__|_| |_|\___|_| |_|\__,_| |_____|_|_| |_|\__,_/_/\_\
                                                              
--------------------------------------------------------------
 Athena Linux (p2028_release)
--------------------------------------------------------------

平台组帮助文档(联网,固件升级,开发环境搭建等功能),查看帮助文档,请终端输入:cat /data/readme.md

[root@p2028_release:~]#

Et nous voilà root sur l’aspirateur.

Installer Valetudo

Il faut générer une archive via Dustbuilder qui va contenir le firmware du robot ainsi que Valetudo, quelques utilitaires et modifier la configuration DNS pour rediriger les appels « cloud » vers Valetudo.

Une fois le nouveau firmware téléchargé sur l’ordinateur, le connecter au réseau Wi-Fi ad hoc créé par le robot.

Il va falloir d’abord sauvegarder quelques fichiers du robot « au cas où » et ensuite transférer le nouveau firmware sur le robot. Pour ces deux opérations de transferts, le plus simple est de démarrer un serveur web sur l’ordinateur.

Sur l’ordinateur comme sur le robot, utiliser la commande ip a pour connaître l’adresse IP de la machine sera utile. Il peut être aussi nécessaire de couper temporairement le pare-feu de l’ordinateur, ou au moins ouvrir temporairement le port 8000.

Sauvegarde

Sur l’ordinateur, démarrer un serveur pour réceptionner les fichiers :

$ python3 -m pip install --user uploadserver
$ python3 -m uploadserver

Sur le robot, faire une archive des fichiers à sauvegarder puis les envoyer :

# cd /
# tar cvf /tmp/backup.tar /mnt/private/ /mnt/misc/
# curl -X POST http://adresse-ip-ordinateur:8000/upload -F 'files=@/tmp/backup.tar'
# rm /tmp/backup.tar

Envoi du firmware

Sur l’ordinateur, se mettre dans le répertoire où le firmware se trouve, puis démarrer un server web :

$ python3 -m http.server

Sur le robot, télécharger le firmware :

# cd /tmp
# wget http://adresse-ip-ordinateur:8000/dreame.vacuum.p2028_fw.tar.gz

Installation du firmware

Sur le robot, toujours depuis le dossier /tmp :

# tar -xzvf dreame.vacuum.p2028_fw.tar.gz
# ./install.sh

Le robot va ensuite redémarrer automatiquement.

Une fois le robot redémarré, vérifier que l’ordinateur est de nouveau connecté au Wi-Fi du robot et se connecter au robot avec un navigateur web : http://adresse-ip-robot/

Sur l’interface web, il ne reste plus qu’à configurer le robot pour qu’il se connecte au réseau Wi-Fi (note : avoir un réseau dédié pour les IoT avec des accès limité peut être une bonne idée), et configurer des identifiants pour empêcher que n’importe qui sur le réseau puisse trop facilement accéder à Valetudo.

Et voilà ! Le robot aspirateur est maintenant autonome, plus lié à des serveurs tiers.

Merci Valetudo !

Mises à jour sur l’article :

Comments Add one by sending me an email.