17

Root de l’aspirateur Xiaomi Roborock S50

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.

17 thoughts on “Root de l’aspirateur Xiaomi Roborock S50”

  1. 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 !)

    • 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 😀

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *