Faire communiquer votre aspirateur robot Xiaomi Roborock en MQTT
Comme beaucoup d'utilisateurs, je ne suis pas fan des solutions cloud (même si ça peut parfois être pratique), mais je n'avais pas encore pris le temps de regarder comment libérer mon aspirateur Xiaomi Roborock S5. Voilà chose faite, et c'est l'occasion de partager ça avec vous :)
Alors, pourquoi m'être penché dessus alors que je l'ai depuis maintenant plusieurs années ? Pour plusieurs raisons :
- Ne plus être dépendant d'un plugin spécifique, dans le cas de l'aspirateur c'est le plugin Xiaomi Home et les soucis récurent de ce dernier.
- Maitriser les mises à jour du firmware du robot.
- Et le plus important, passer par le protocole MQTT, comme pour les autres appareils et capteurs de la maison.
Dans cet article nous verrons :
- La mise en place d'un firmware alternatif
- La configuration du robot
- La communication en MQTT
- L'intégration dans Jeedom
- Et l'intégration dans Home Assistant
avec un simple reset usine, décrit dans l'article.
Mise en place du firmware alternatif
Il y a deux firmwares pour ce robot (les versions indiquées sont celles disponibles au moment de l'écriture de cet article) :
- Valetudo en version 2021.04.0
- Valetudo RE en version 0.10.5 (fork de Valetudo)
J'ai essayé les deux versions, et je me suis arrêté sur la version Valetudo RE, qui a l'avantage de permettre l'ajout des voix françaises et apporte quelques optimisations.
Pour générer le firmware, le plus simple est de passer par le site suivant :
Après avoir choisi la version de votre aspirateur, il vous reste à spécifier une adresse email pour recevoir le lien du firmware qui sera compilé, le type de clef SSH (la votre ou une qui sera générée par le site), mais aussi la version de Valetudo qui sera installée.
Si vous voulez utiliser la version RE, il ne faut pas oublier de cocher la case adéquate. Comme vous pouvez le voir, la version sera en 0.10.13 et nous verrons comment la mettre à jour ultérieurement.
A la réception du mail, récupérez l'image et les clés qui vous seront utiles pour vous connecter en SSH sur le robot, si besoin.
Le plus problématique pour installer ce firmware alternatif est de se mettre dans de bonnes conditions. Pour la procédure de flashage, différentes possibilités existent :
- Une machine linux qui possède une connexion wifi, comme un ordinateur portable sous Linux, ou bien une machine virtuelle sous VirtualBox si celui-ci est sous Windows. (Attention avec une VM sous ESXi, j'ai essuyé plusieurs échecs)
- Un appareil Apple sous IOS 8 minimum
- Un smarpthone sous Android 4.4 minimum
Nous allons vous détailler l'utilisation de 2 méthodes, celle d'une VM Linux sur un PC sous Windows, ainsi qu'un smartphone sous Android, solution qui nous paraît la plus simple.
Reset du robot aspirateur Roborock V1
Pour réinitialiser l'aspirateur V1, voici la procédure à suivre :
- Appuyer sur les boutons reset et Home pendant 10 secondes.
- Relâcher le bouton reset tout en gardant le bouton Home appuyé.
- Rester appuyer sur le bouton Home jusqu'au moment où la voix féminine aura fini de parler (c'est un peu long).
- Suite à cela, l'aspirateur va redémarrer dans sa configuration d'usine.
(j'ai perdu de longues heures à cause de cela).
Reset du robot aspirateur Roborock S5
1ère méthode : une VM sous Linux
Nous allons préparer l'environnement sur le portable Linux ou la VM que vous avez mis en place.
Ma VM est sous Debian Buster, les commandes sont à adapter en fonction de votre OS :
apt-get update && sudo apt-get upgrade
apt-get install python3 python3-pip python3-venv python3-dev
cd ~
mkdir vacuum
cd vacuum
python3 -m venv venv
pip3 install wheel
pip3 install python-miio
Pour corriger certaines erreurs, j'ai dû relancer une maj de pip :
pip3 install --upgrade pip
Récupérons l'image :
wget https://builder.dontvacuum.me/jobs/xxxxxxxxxx/xxxxxx/v11_002034.pkg
wget https://builder.dontvacuum.me/jobs/xxxxxxxx/xxxxxxx/jxxxxx-keys.zip
Votre environnement est prêt, il faut maintenant suivre le processus suivant :
- Connectez votre portable ou VM au hotspot wifi créé par le robot.
- Redémarrez ou renouvelez la connexion réseau de votre PC ou VM afin de récupérer une adresse IP du hotspot roborock.
- Lancez un scan :
mirobo discover --handshake true
INFO:miio.miioprotocol:Sending discovery to with timeout of 5s..
INFO:miio.miioprotocol: IP 192.168.8.1 (ID: 070822a4) - token: b'xxxxxxxxxx'
INFO:miio.miioprotocol:Discovery done
Vous pourrez récupérer ici le token nécessaire pour la mise à jour.
- Lancez la mise à jour :
mirobo --token 'xxxxxxxxx' --ip 192.168.8.1 -d update-firmware v11_002034.pkg
Pour lancer la commande en mode normal, il vous faut supprimer le "-d".
Dans mon cas, j'ai dû lancer 2 fois la mise à jour. La première fois, j'ai eu un timeout sur la connexion, et la seconde fois la mise à jour s'est effectuée, et une barre de progression vous permet de suivre le processus.
Le robot met une dizaine de minutes à se mettre à jour.
2ème méthode : un smartphone Android
Commencez par télécharger le fichier apk du programme Android XVacuum Firmware et installez-le. Profitez-en également pour récupérer le fichier avec l'extension .pkg
dont vous avez reçu le lien par mail.
Vous avez 2 possibilités d'utilisation du logiciel : sans réinitialiser l'aspirateur (mais seulement si vous connaissez déjà son token) ou avec un reset usine. Nous allons utiliser la deuxième option.
On va passer au flash de l'aspirateur à proprement dit :
- Connectez votre téléphone au réseau wifi hotspot de l'aspirateur.
- Ouvrir l'application XVacuum Firmware.
- Si l'aspirateur est bien détecté, le token devrait s'afficher en haut.
- Cliquez sur "FLASH FIRMWARE".
- Sélectionner le fichier v11_004018.pkg (ou version ultérieur)
Le Flash devrait commencer cela est long et dure de longue minutes
- Attendre le reboot de l'aspirateur, une petite mélodie vous préviendra.
La configuration de l'aspirateur
Après le reboot du robot, il faut se reconnecter au hotspot wifi de celui-ci.
Ouvrez un navigateur sur l'adresse du robot,http://192.168.8.1
par défaut.
Rendez-vous dans la page "Settings" puis l'onglet "Wifi". En bas de la page, rentrez les identifiants de votre réseau wifi auquel vous souhaitez connecter l'aspirateur.
L'aspirateur va se connecter à votre réseau local et vous pourrez vous reconnecter à l'interface web avec l'adresse IP distribuée par votre routeur.
Vous pouvez passer l'interface du robot en français depuis la page "Settings" puis "Web Interface". Choisissez "French" dans la liste, et sauvegardez.
Dans les paramètres système, activez la persistance des données.
Changer la voix du robot
Si vous souhaitez changer la langue dans laquelle votre aspirateur vous parle :
- Téléchargez le pack de voix de votre choix et correspondant à votre robot sur ce site.
- Rendez-vous sur l'adresse IP de l'aspirateur depuis un navigateur.
- Dans l'onglet "Paramètres", choisissez "Son et Voix".
- Parcourir vos fichiers, sélectionnez le fichier de voix que vous avez téléchargé et cliquez sur "Télécharger le pack vocal".
- Il ne vous reste plus qu'à tester en cliquant sur le bouton "Tester le volume sonore".
Mise à jour de Valetudo RE
Récupérez l'URL du dernier paquet et le MD5 associé :
Dans "Paramètres" puis "Info", cliquez sur [envoyer la demande]
et spécifiez l'URL du paquet (par exemple https://github.com/rand256/valetudo/releases/download/0.10.5/vacuum_2034_valetudo_re_0_10_5.pkg pour la version 0.10.5 correspondant au firmware 2034) puis le contenu du fichier MD5.
Après installation de la nouvelle version, vous devriez être à jour :
Communication en MQTT
Pour découvrir le protocole MQTT, je vous renvoie vers cette série d'articles :
Pour l'intégration MQTT, rien de plus simple, rendez-vous dans "Paramètres" puis "MQTT", et renseignez les informations de votre broker MQTT.
Vous pouvez vérifier dans MQTT Explorer le bon fonctionnement et la remontée des informations de votre aspirateur :
Vous trouverez sur la page suivante la liste complète des informations et commandes disponibles en MQTT :
Afficher la carte des passages du robot
Un peu gadget pour certains, elle permet pour d'autres de s'assurer que le robot aspirateur est bien passé dans tous les recoins de votre domicile.
Il est possible d'utiliser une URL http directe pour afficher la carte du robot, ou bien utiliser un service tiers pour générer le rendu de la carte en PNG.
Pour la carte directement mise à disposition par le firmware alternatif du robot, elle est disponible en vous rendant depuis un navigateur sur l'adresse http://IP.DE.L'ASPIRATEUR/api/simple_map
. Attention toutefois, il n'est pas recommandé de faire trop de requêtes, ce rendu consommant pas mal de ressources.
Il existe le script suivant qui est installable en tant que service NodeJS ou via un conteneur Docker. Cela permet de faire plus de requêtes sans surcharger l'aspirateur.
De mon côté, j'ai une petite préférence pour Docker, je vous partage pour information mon fichier docker-compose :
version: '3.8'
networks:
lan:
external: true
services:
mapdata:
image: rand256/valetudo-mapper
container_name: mapdata
networks:
- lan
ports:
- 3002:3000
environment:
user: 1000:998
restart: unless-stopped
volumes:
- ./conf/config.json:/app/config.json
restart: always
Et le fichier config.json
associé :
{
"mqtt": {
"identifier": "rockrobo",
"topicPrefix": "valetudo",
"autoconfPrefix": "homeassistant",
"broker_url": "mqtt://192.168.0.xxx:1883",
"caPath": "",
"mapDataTopic": "valetudo/rockrobo/map_data",
"minMillisecondsBetweenMapUpdates": 10000,
"publishMapImage": true,
"publishMapData": true
},
"mapSettings": {
"colors": {
"background": "#33a1f5",
"background2": "#046cd4",
"floor": "#56affc",
"obstacle_strong": "#a1dbff",
"path": "white",
"forbidden_marker": "red",
"forbidden_zone": "rgba(255, 0, 0, 0.38)",
"cleaned_marker": "rgba(53, 125, 46, 1.0)",
"cleaned_zone": "rgba(107, 244, 66, 0.3)",
"cleaned_block": "rgba(107, 244, 36, 0.34)"
},
"drawPath": true,
"drawCharger": true,
"drawRobot": true,
"drawCurrentlyCleanedZones": false,
"drawCurrentlyCleanedBlocks": false,
"drawForbiddenZones": true,
"drawVirtualWalls": true,
"scale": 4,
"gradientBackground": true,
"autoCrop": 20,
"crop_x1": 30,
"crop_y1": 70,
"crop_x2": 440,
"crop_y2": 440,
"rotate": 90
},
"webserver": {
"enabled": true,
"port": 3000
}
Si vous avez mis en place l'authentification sur votre broker, l'adresse devra être de la forme :
mqtt://user:password@IP:port
L'intégration dans Jeedom
Le plus simple est de suivre le tutoriel suivant pour la mise en place de jMQTT :
Ne pas oublier d'ajouter les commandes Stop / Start / Locate / Return_to_base / Pause...
dans l'équipement jMQTT :
De mon côté, je préfère organiser mes équipements avec des virtuels, voici les informations utiles que j'ai gardé :
Le rendu du widget sur le dashboard :
Intégration dans Home Assistant
Sur votre interface Home Assistant, dans Configuration, Intégrations, recherchez MQTT si ce n'est pas déjà installé.
Renseignez les informations de votre broker mosquitto.
Lancez une action sur l'aspirateur et attendez un peu pour qu'il soit détecté automatiquement.
Pour ajouter l'aspirateur sur l'interface lovelace, nous allons utiliser une carte personnalisée grâce à HACS.
Dans HACS, faîtes une recherche dans "Front end" avec les mots "vacuum Card" et installez le composant.
Sur votre interface lovelace, cliquez sur "Ajouter une carte" et sélectionnez "vacuum Carte".
La bonne entité devrait être sélectionnée automatiquement.
Il est également possible d'afficher la carte à l'aide du conteneur Hypfer/Icantbelieveitsnotvaletudo présenté plus haut. Pour cela, ajoutez une carte de type "Entité image", et dans le chemin de l'image, renseignez l'adresse http://192.168.0.xx:3000/api/map/image
.
Bonus : Contrôle avec un bot Telegram
Il est possible de connecter l'aspirateur directement à un bot Telegram pour le contrôler par écrit. Je vous conseille de créer un bot dédié à cette utilisation.
Commencez par discuter avec "BotFather" et envoyez le message /newbot
. Donnez un nom à votre bot et vous obtiendrez en retour un token HTTP API, qu'il suffit de coller dans l'onglet "telegram bot" de la page Paramètres du robot. Vous pouvez définir un mot de passe pour que personne ne puisse contrôler votre aspirateur simplement en parlant à votre bot.
Suite à cela, rendez-vous sur Telegram pour initialiser une discussion avec votre bot, et envoyez le mot de passe avec la commande /setme password
, et enfin /start
pour afficher les interactions possibles.
Vous pouvez maintenant contrôler votre aspirateur par Telegram, ainsi que recevoir des informations de celui-ci.
Conclusion
Après l'article vous présentant comment vous passer du plugin Xiaomi Home dans Jeedom pour les périphériques fonctionnant en Zigbee, celui-ci vous permet également de basculer le contrôle de votre robot-aspirateur en MQTT.
Si vous avez des questions ou simplement souhaitez échanger avec nous, n'hésitez pas à laisser des commentaires ou à venir sur notre groupe Telegram.
disposent aussi d'un firmware alternatif :
lien pour le Gen2 / lien pour le Gen3