Edit : l’article commence à dater, je n’ai pas suivi les évolutions côté Xiaomi et communautaire et ma série d’articles est probablement partiellement obsolete. En allant chercher les forums de Dustcloud/Valetudo/… vous trouverez certainement des infos plus à jour !
Pourquoi rooter un aspirateur ? Je dirais plutôt « pourquoi ne pas le faire quand c’est possible ? ». Le contrôle total sur un objet connecté permet de s’assurer qu’il est à notre service et l’est exclusivement. Plus besoin d’une application Android qui interagit avec un aspirateur situé à 10 mètres via l’intermédiaire d’un serveur situé à 10,000 km tout en doublant la quantité de données pompées par le constructeur. Et miracle, notre objet « intelligent » restera utilisable même lors d’une coupure d’accès internet !
Et de plus c’est très simple grâce au travail de hackers/bidouilleurs qui ont déjà tout défriché pour nous !
Liens externes vers le produit : Gearbest – AliExpress – Cdiscount (prix « normal » autour de 330-350 euros)
Informations
Qu’il y a-t-il dans ce robot ? Et bien, à ma grande surprise aussi, le robot contient 3 processeurs ARM, 512 Mo de RAM, 4 Go de mémoire flash et le tout tourne sous Ubuntu 14.04 LTS. Rien que sur le papier ça semblerait intéressant à exploiter, pour avoir l’équivalent d’un Raspberry Pi supplémentaire (pour peu qu’on en ai un usage qui ne nécessite pas de l’avoir physiquement connecté à autre chose)
Bon personnellement je n’ai pas encore trouvé de bonne utilisation (peut-être que les outils de contrôle dont je parle à la fin de l’article pourraient être hébergés en local sur l’appareil ? A tester)
Preparation
Tout d’abord il va nous falloir un appareil Linux avec une carte Wi-Fi (si vous n’avez pas le moindre ordinateur portable qui traîne, un dongle Wi-Fi pour le PC de bureau devrait être un investissement rentable pour pouvoir se connecter à tous ces appareils connectés à reconfigurer)
On commence par installer les pré-requis pour toute la suite.
# Installation de python3 et des librairies nécessaires
sudo apt-get install python3 python3-pip python3-venv python3-dev libffi-dev libssl-dev ccrypt git wget
Puis on va créer la nouvelle image système qui nous permettra d’obtenir l’accès root (à partir des scripts proposés par Dennis Giese et Daniel Wegemer)
mkdir dustcloud && cd dustcloud
git clone https://github.com/dgiese/dustcloud.git
wget https://dustcloud.seemoo.de/public/xiaomi.vacuum.gen2/original/v11_001228.pkg
wget https://github.com/dgiese/dustcloud/raw/master/devices/xiaomi.vacuum/original-soundpackages/encrypted/english.pkg
Si vous n’avez pas de clé SSH, faites une petite pause pour suivre ce tuto pour en créer une.
cp ~/.ssh/id_rsa.pub .
sudo ./dustcloud/devices/xiaomi.vacuum/firmwarebuilder/imagebuilder.sh -f v11_001228 -k id_rsa.pub
Mise à jour du robot
Si votre robot a déjà été paramétré, un appui de quelques secondes sur les boutons charges et nettoyage local pour faire un reset de la configuration Wi-Fi sera nécessaire, afin que le robot nous propose son hotspot Wi-Fi de nouveau (puis remettez le sur sa base de chargement)
On installe python-miio pour pouvoir communiquer avec le robot :
python3 -m venv .venv
. .venv/bin/activate
pip install wheel
pip install python-miio
Maintenant connectez vous au hotspot du robot (nommé roborock-xxxxxxx) puis lancez la commande suivante pour flasher le robot avec le nouveau firmware :
python dustcloud/devices/xiaomi.vacuum/firmwarebuilder/flasher.py -f output/v11_001228.pkg
L’opération va prendre quelques minutes, avec le robot qui parlera de l’installation qui commence puis deviendra accessible par SSH.
Et maintenant ?
Bon c’est cool, on a un robot rooté mais on en fait quoi ? Déjà deux petites étapes afin que ce soit plus simple pour la suite, tant que vous êtes connecté à lui. Commençons par vraiment se connecter dessus :
ssh -l root 192.168.8.1
Le robot ne demandera pas de mot de passe root depuis cette machine comme nous lui avons fourni une clé RSA à considérer comme autorisée. Il est temps de changer le mot de passe root :
passwd
Récupérez le token de votre robot avec la commande ci-dessous (un identifiant unique qui vous sera nécessaire pour pouvoir lui envoyer des commandes à distance) et notez le quelque part (y compris dans un fichier sur le robot lui-même si vous voulez).
printf $(cat /mnt/data/miio/device.token) | xxd -p
Si vous avez l’intention de faire plus qu’aspirer avec ce robot (pour exploiter ses processeurs/RAM/stockage), vous pouvez lancer les commandes suivantes pour déplacer des dossiers dans une partition plutôt vide pour laisser de la place sur la partition principale pour installer plus de logiciels dessus :
mkdir /mnt/data/relocated
mkdir /mnt/data/relocated/var
mkdir /mnt/data/relocated/var/cache
mkdir /mnt/data/relocated/var/lib
mv /var/cache/apt /mnt/data/relocated/var/cache
ln -s /mnt/data/relocated/var/cache/apt /var/cache/apt
mv /var/lib/apt /mnt/data/relocated/var/lib
ln -s /mnt/data/relocated/var/lib/apt /var/lib/apt
Et enfin donnez lui accès à un vrai réseau Wi-Fi (de préférence celui que vous avez créé spécialement pour ces objets connectés pour les isoler et contrôler) avec la commande suivante :
mirobo --ip 192.168.8.1 --token <token> configure_wifi <SSID> <MotDePasse>
Et maintenant depuis votre réseau local les commandes suivantes fonctionneront (même après avoir désactivé l’accès Internet au robot depuis votre routeur)
mirobo --ip <ip_du_robot> --token <token> start # On nettoie
mirobo --ip <ip_du_robot> --token <token> home # Retour à la base
Et pour une liste complète
mirobo --help
A partir de là vous avez le choix, soit utiliser un plugin d’une solution domotique (Home Assistant, …) soit utiliser des outils de contrôle indépendants comme Valetudo et RRCC
Sources
https://github.com/dgiese/dustcloud/ Informations, scripts et firmware par Dennis Giese et Daniel Wegemer, qui ont désossé assez de robots xiaomi (sans en abîmer un seul) pour découvrir des failles qui nous permet de rooter l’appareil.
Vacuum Cleaning Hacking Présentation au congrès du Chaos Computer Club sur les aspirateurs robots Xiaomi par les deux mêmes
https://github.com/rytilahti/python-miio Une interface en ligne de commande pour contrôler le robot (et de nombreux autres appareils Xiaomi basés sur le même protocole miIO de la marque.
Un grand merci pour ce tuto Dustcloud en français, c’est top !! Ça rend les robots aspirateurs Xiaomi « vie privée friendly », ça m’a juste décidé à en acheter un !
Connais-tu un projet afin d’utiliser les commandes python-miio plus facilement, sans s’embarrasser de Home-Assistant ? Mon robot aspirateur sera le seul « équipement connecté » chez moi, installer un Home-asistant me parait donc un peu exagéré pour uniquement avoir une jolie interface de conf pour le Xiaomi… (une petite appli open-source sur android ça serait le top par exemple :D)
J’avais dans l’idée de bricoler une petite web app pour le piloter depuis un telephone ou PC sur le réseau local mais j’ai jamais eu le temps d’y finir donc je le pilote encore avec les commandes depuis un terminal d’un PC portable qui traine dans le salon pour le moment… Ptet un jour !
https://xiaomi.flole.de/ Ce site a un client Android fonctionnel (j’avais testé brièvement et ça fonctionne bien avec un robot coupé du monde extérieur via le firewall du routeur), après malheureusement pas open source donc j’avais pas continué de l’utiliser.
Salut,
Merci pour FloveVac, je n’en avais pas entendu parler ! Dommage qu’il soit closed-source effectivement :/
En cherchant des alternatives je viens de tomber sur ce projet, ça peut sûrement t’intéresser : https://github.com/Hypfer/Valetudo
C’est tout récent mais ça me semble prometteur. (+ on peut l’héberger directement sur le robot comme tu le suggérais dans ton article, plutôt cool !)
(et je rajoute dans le même type un autre projet récent : https://github.com/LazyT/rrcc )
Merci pour le lien, c’est génial, ça va m’économiser une tonne de boulot de pas avoir à le faire ! Edit : et après avoir installé et commencé à regarder il y a même le nettoyage par zone qui a l’air d’être intégré (et une fonction bonus pour sauvegarder des points vers où faire naviguer le robot)
Bonjour,
Merci pour ton tuto !!
Te serait-il possible par hasard de faire un tuto pour modifier la version chinoise en version européenne pour que l’aspirateur parle en français ?
Apparemment c’est possible mais la méthode est compliquée pour un noob
https://github.com/dgiese/dustcloud/tree/master/devices/xiaomi.vacuum.gen2/CN_to_EU_script
Merci
Je pense qu’il s’agit d’un vieux script qui n’a pas trop d’intérêt vu qu’il ne contient que les voix anglaises (qui sont déjà ajoutées avec le firmware pour le root)
Je crois qu’il faudrait utiliser ce script pour générer des voix françaises pour remplacer le english.pkg utilisé en début du guide (et donc reflasher le firmware avec les bonnes langues)
Est ce que le script cn to EU ne permettrait pas de rendre disponible les langues européennes sur l’application ?
Sinon j’ai réussi à mettre un pack de langue avec mirobo, mais impossible de trouver le pack de langue en français, voix originale ou synthétisé de qualité
Si tu ouvres l’archive fournie avec le script tu verras qu’elle ne contient que les voix anglaises.
Sinon pour un pack de voix qualité c’est compliqué vu que personne ne va faire ça pour lui-même (ça serait trop bizarre d’avoir un robot avec sa voix ou celle d’un proche). Le lien que j’ai mis en commentaire au dessus parle de quelques services de text-to-speech, y’en a peut-être qui font l’affaire ? (je me suis pas du tout penché sur la question, étant anglophone les voix du robot font l’affaire)
Il existe depuis maintenant plusieurs semaines un « voicepack french » officiel, j’aimerai également le récupérer ! (moins long et plus pro qu’un voicepack custom je pense)
Il doit sûrement y avoir moyen de télécharger le .pkg depuis les serveurs de Xiaomi. Sur cette issue @MeisterTR explique comment télécharger le voicepack deutsch : https://github.com/dgiese/dustcloud/issues/39 , à exécuter depuis un roborock encore connecté au cloud Xiaomi je suppose. (plus d’info sur la requête en question ici : https://github.com/marcelrv/XiaomiRobotVacuumProtocol/blob/master/install_sound.md)
En tout cas, si quelqu’un arrive à choper le voicepack french, ça serait super sympa de faire partager 😀
J’ai pu mettre la main sur le voicepack french 😀
http://s000.tinyupload.com/?file_id=22266731779690510906
Ca fonctionne très bien et la voix est pas mal en plus 🙂 Merci pour ma femme qui en avait marre de l’anglais !
[…] Le robot a été rooté et il accepte maintenant d’être lancé via une ligne de commande, c’est génial mais pas très pratique… […]
[…] Le robot est rooté, Valetudo est installé dessus et vous pouvez désormais faire nettoyer votre appartement en toute intimité et sécurité mais il reste un problème : que faire quand vous vous rendez compte que vous avez oublié de lancer le robot avant de partir de la maison ? […]
Bonjour,
Sauriez-vous dire si l’application MiHome reste fonctionnelle, une fois l’aspiro rooté ?
Merci d’avance.
Il me semble que oui quand j’avais configuré mon robot en 2018 mais mon test date pas mal donc info à prendre avec des pincettes
Merci pour l’info et ton bloc note 🙂