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 : GearbestAliExpressCdiscount (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.