Utiliser Valetudo RE et le contrôler via MQTT - Xiaomi V1 et Roborock S5 uniquement

Salut a tous, ici nous allons apprendre a installer Valetudo RE sur un aspirateur Xiaomi, et a l’intégrer ensuite a Jeedom via MQTT

Qu’est-ce que Valetudo RE :
Valetudo RE est un fork de Valetudo, qui propose bien plus de fonctionnalités que ce dernier. Ce programme permet d’utiliser un aspirateur robot Xiaomi sans utiliser le cloud, ni l’application d’origine, mais conserve toutes les fonctionnalités de base du robot (incluant la gestion des pièces pour le S5), et en ajoute même quelques unes, comme la sauvegarde de « zones » et de points « Go To », attention cependant, pour l’instant cela ne fonctionne que sur les robots de 1ère génération, ou les Roborock S5.

Quelques images :

Les sources qui m’ont aidé pour y arriver :

Partie 1 : Installation de Valetudo RE :

On aura besoin :

  • D’un aspirateur robot Xiaomi fonctionnel, peu importe le firmware installé, ne fonctionne pour l’instant qu’avec le V1 et le S5
  • D’un appareil sous une distro linux disposant du Wifi (Utilisez un Raspberry Pi sous Raspbian, ou une version Live Debian sur votre PC habituel pour plus de simplicité)
  • D’une image fw modifiée avec Valetudo RE
  • D’une poignée de neurones actifs, prenez un café avant de commencer :wink:

Nous allons commencer par télécharger la dernière version de Valetudo RE sur notre machine Linux, pour cela rendez-vous ici, cliquez sur la dernière version disponible (0.9.8.2 a l’heure de ce Tuto) et tout en bas dans Assets téléchargez les fichiers correspondant à votre robot (un fichier .pkg et un fichier .md5, actuellement il faut choisir la version 20xx pour le S50, et 40xx pour le V1.

Maintenant nous avons tout le nécessaire pour continuer, pour s’y retrouver dans les commandes qui suivent je vous conseille de placer les fichiers téléchargés dans un répertoire prévu à cet effet sur votre machine linux, dans cet exemple j’utiliserai /home/, en utilisant le même répertoire vous pourrez copier/coller la plupart des commandes suivantes.

Ensuite nous allons créer un environnement virtuel python :

Ouvrir un terminal, et utiliser les commandes suivantes (la première met a jour la liste des paquets et les paquets installés, ensuite on installe les packages python nécessaires, et enfin on crée l’environnement virtuel) :

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install python3 python3-pip python3-venv python3-dev
cd ..
sudo mkdir flasher
cd flasher
sudo python3 -m venv venv

Puis nous allons activer cet environnement virtuel et installer wheel et miio qui serviront à communiquer avec le robot :

source venv/bin/activate
sudo pip3 install wheel
sudo pip3 install python-miio
cd ..

Tout est maintenant prêt de ce coté, a ce point vous devez retrouver venv avant votre invite de commande, par exemple chez moi :

(venv) hom3r17@Jeedom:/home$

Maintenant nous allons réinitialiser le robot pour repartir de Zéro (a voir si cela fonctionne avec une simple réinitialisation du Wifi) :

Il va récupérer son fw d’origine, et se mettre en mode point d’accès wifi :

  • Pour le S5 on maintient les touches spot et retour à la base, et quand le robot dit qu’il va réinitialiser le wifi on appuie brièvement sur le bouton reset situé à côté de la led wifi, en maintenant toujours les boutons spot et retour à la base, après quelques secondes il devrait annoncer un retour aux paramètres d’usine, cela peut prendre 10 minutes.

  • Pour la V1 c’est presque la même chose, on appuie sur le bouton home, puis reset, et on maintient home jusqu’à l’annonce vocale

Une fois que le robot a redémarré, connectez-vous a son point d’accès wifi, et récupérez le token grâce à la commande suivante :

mirobo --debug discover --handshake true

Votre token va apparaitre sous la forme token: b'00000000000000000000000000000000', seuls les chiffres entre les ' nous intéressent.

Une fois ce token récupéré nous allons pouvoir flasher le nouveau firmware avec :

mirobo --ip 192.168.8.1 --token [votre token] update-firmware [emplacement]/[nom de votre fw]

Si vous avez suivi exactement mon tuto, la commande est donc la suivante (changez le token)

Pour le S50

mirobo --ip 192.168.8.1 --token 123456a7890 update-firmware /home/vacuum_2020_valetudo_re_0_9_8.pkg

Pour le V1 :

mirobo --ip 192.168.8.1 --token 123456a7890 update-firmware /home/vacuum_4018_valetudo_re_0_9_8.pkg

Vous devriez avoir une barre de chargement qui s’affiche, cela peut prendre quelques minutes, et si cela fonctionne une fois à 100 % le robot annoncera la mise à jour, encore une fois cela peut prendre une dizaine de minutes.

Une fois la mise à jour terminée on va vouloir connecter le robot au wifi de la maison, pour cela connectez vous au point d’accès créé par l’aspirateur (possible depuis n’importe quel appareil doté du WiFi et d’un navigateur), et utilisez l’adresse du robot sur votre navigateur http://192.168.8.1

Rendez-vous dans « settings » puis « Wifi » et renseignez le SSID et le mot de passe de votre Wifi.

Votre robot utilise maintenant Valetudo RE, et ne communique plus du tout avec l’extérieur, vous pouvez le gérer depuis n’importe quel appareil pouvant accéder à votre réseau local en utilisant son adresse IP (pour ne pas le perdre je vous conseille de créer une règle d’IP statique sur votre routeur afin qu’il conserve toujours la même adresse), il est d’ailleurs possible de protéger l’accès http par mot de passe dans settings – Access control depuis l’interface web.

Nous allons commencer par passer l’interface en Français :
Sur l’interface du robot aller dans Settings puis Web Interface et changer la langue.

Installer la voix Française :
Télécharger une voix ici : https://dustbuilder.xvm.mit.edu/pkg/voice/
Envoyer la voix au robot depuis l’interface web dans settings – Sound & Voice

Et enfin rendre la carte persistante : (S50 uniquement ?)
Depuis l’interface web, settings – persistant data – cocher « enabled » et sauvegarder

Pour faciliter l’intégration à jeedom, je vous conseille de ne pas lancer le robot avant d’avoir terminé la partie 2, car cela posera problème avec l’intégration a JMQTT. Si une carte a déja été créée je vous conseille de la supprimer dans l’interface de Valetudo sous Settings > Persistent Data > Reset Map

En cas d’urgence :
Au moindre problème, si votre robot ne répond plus, ou si Valetudo ne vous convient pas, vous pouvez revenir au firmware original en utilisant la procédure de réinitialisation décrite plus haut :wink:

Mettre a jour Valetudo RE
Sur Valetudo RE la mise a jour est très simple, tout d’abord vous pouvez vérifier la présence d’une mise a jour directement depuis l’interface web du robot dans Paramètres > Info, on choisira « vérifier » tout en bas a droite.

Si une nouvelle version est disponible, voici la procédure de mise a jour (merci a @TiTom_59)

Partie 2 : Intégration a Jeedom via JMQTT
Nous allons maintenant passer a la partie qui nous intéresse, l’intégration a Jeedom, si il est toujours possible d’utiliser le plugin Xiaomi Home pour les actions classiques en renseignant l’IP et le Token du robot (certaines fonctions, notamment les zones, semblent ne pas fonctionner de cette manière), l’utilisation du protocole MQTT va nous permettre de contrôler le robot de manière bien plus précise, et surtout d’avoir un retour sur l’état des consommables, les erreurs, etc …

Les prérequis :

  • Un aspirateur sous Valetudo ou Valetudo RE
  • Un appareil avec accès au même réseau local que le robot
  • Le plugin JMQTT

Activer la fonction MQTT de Valetudo :

Dans les nouvelles versions de Valetudo RE, l’activation et les réglages du client MQTT intégré sont disponibles sur l’interface de votre robot dans l’onglet Paramètres puis MQTT

Cocher Activé

Entrez l’adresse de votre broker MQTT (ou l’adresse de votre Jeedom si vous utilisez le broker intégré au plugin JMQTT) au format mqtt://adresse.ip.du.broker

Pour plus de simplicité je vous conseille les réglages suivants que j’utiliserai pour la suite du tuto :

QoS: 1
Identifiant: roborock
Topic Prefix: valetudo
Autoconfiguration Prefix: jeedom
Publier la catre: Cocher

Puis enregistrez la configuration.

Le robot envoie et reçoit maintenant des informations via le protocole MQTT

Configurer le plugin JMQTT

Pour qu’un appareil communique en MQTT, il lui faut un Broker, c’est une sorte de serveur qui va faire transiter des informations, les différents clients (ici le robot et jeedom par exemple) vont communiquer via un systeme de publication et de souscription que l’on comprendra mieux au fur et a mesure du tuto, pour faire simple, on a fait en sorte que l’aspirateur publie des informations, comme le ferait un journal, on va maintenant paramétrer JMQTT qui installera à la fois le Broker, qui va donc distribuer ce message, comme un kiosque a journeaux :sweat_smile:, et le client avec lequel on en profitera pour s’abonner a ce journal :innocent:

On installe donc le plugin JMQTT, et on va directement dans ses paramètres, on l’active, on installe les dépendances, puis si on a pas déjà un broker sur son réseau local, on coche la case installer Mosquitto localement, puis on sauvegarde, Mosquitto sera notre Broker.

On ouvre ensuite Plugin > Protocole Domotique > JMQTT

Choisir Ajouter un broker, on lui choisis un petit nom, comme « Broker » par hasard.

Cocher la case Ajout automatique des commandes

Régler le Qos sur 1 ce qui assurera une bonne communication entre les appareils du réseau (attente d’un accusé de réception, si pas d’accusé, envoi du message a nouveau)

Dans l’onglet Broker on laisse les paramètres d’origine puisque c’est ce que nous avons renseigné dans le fichier config.json du robot.

Sauvegarder. Le broker est maintenant paramétré.

Maintenant nous allons inclure le robot a JMQTT, on retourne sur l’accueil du plugin dans Plugin > Protocole Domotique > JMQTT

Pour faciliter l’intégration à jeedom, je vous conseille de ne pas lancer le robot avant d’avoir terminé cette étape, car la présence d’une carte enregistrée posera problème avec l’intégration a JMQTT. Si une carte a déjà été créée je vous conseille de la supprimer dans l’interface de Valetudo sous Settings > Persistent Data > Reset Map

Sélectionner « Ajouter un équipement », donner un nom au robot, configurer l’équipement en lui attribuant un objet parent, une catégorie, sans oublier de cocher la case « Activer »

Vérifier que le Broker associé soit celui que l’on a créé plus tot, et inscrire l’équipement au topic suivant : valetudo/#, enfin laisser le Qos a 1 et sauvegarder.

Les commandes sont créées au fur et a mesure, et la page est rechargée plusieurs fois on peut patienter 1 minute afin que toutes les commandes soient reçues.

A partir d’ici ça fait un peu peur, les commandes info remontent mais sont toutes regroupées, on va devoir les séparer, pour cela on passe l’affichage des commandes en JSON en haut a droite de la page, a cette étape si une carte est enregistrée sur le robot cela peut etre très long, voire impossible, il faudra dans ce cas supprimer la carte.

Une fois l’arborescence JSON déroulée on y voit un peu plus clair, toutes les informations envoyées par votre robot sont ici, il faudra cocher celles que vous voulez activer puis sauvegarder pour que ces commandes apparaissent de manière individuelle ensuite.

Voici un exemple des commandes info que j’ai extrait pour mon utilisation (on remarquera entre autres la durée de vie des composants) :

Maintenant que les commandes info sont présentes, on peut lancer le robot pour qu’il crée une carte, on profitera de ce temps pour créer des commandes Action afin de contrôler le robot, voici une liste de mes commandes, avec les données dans l’ordre pour :
Nom | Topic | Valeur

Démarrage | valetudo/rockrobo/command | start
Pause | valetudo/rockrobo/command | pause
Retour à la base | valetudo/rockrobo/command | return_to_base
Trouver | valetudo/rockrobo/command | locate
Arrêter | valetudo/rockrobo/command | stop
Nettoyage spot | valetudo/rockrobo/command | clean_spot

Toutes les commandes de base sont présentes (je teste la variation de puissance puisque j’ai du mal a trouver les bonnes valeurs, je l’ajouterais dés que cela fonctionne)

La suite du tuto sera bientôt modifiée, car l’ajout des pièces dans les dernières versions de Valetudo rendent la suite obsolète … cela fonctionne encore, mais ce n’est pas le plus efficace :slight_smile:

En plus de cela nous pouvons prédéfinir des pièces et des points « Go To » pour le robot, je l’utilise pour que mon salon soit nettoyé 2 fois par jour en mon absence (je travaille en coupure) et que la maison soit totalement nettoyée tous les dimanche soir afin d’être propre pour le weekend (puisque mon « Week End » tombe sur le Lundi et le Mardi), et qu’après chaque passage lorsque ma présence est détectée dans la maison le robot aille se positionner tout seul devant la poubelle en attendant d’être vidé, puis retourne vers sa base 5 minutes plus tard.

Pour cela il faudra enregistrer une carte sur le robot en le laissant nettoyer une fois la maison, puis depuis l’interface web de Valetudo, se rendre dans l’onglet « Zones » et créer des zones pour chaque pièce que vous pensez nettoyer individuellement.

De même pour les « Goto Locations » pour demander au robot de se rendre a un endroit précis, et les « Forbidden Markers » qui regroupent les murs virtuels et les zones interdites.

Une fois ces zones créées on peut les intégrer a JMQTT de la même manière que les autres commandes action, voici les paramètres a utiliser :

Nom de la zone | valetudo/rockrobo/custom_command | {"command":"zoned_cleanup","zone_ids":["Nom de la zone dans Valeduto (attention aux majuscules etc)"]}
Nom du groupe de zones | valetudo/rockrobo/custom_command | {"command":"zoned_cleanup","zone_ids":["Nom zone 1","Nom zone 2","5 zones maximum"]}
Nom du point Go To | valetudo/rockrobo/custom_command | {"command":"go_to","spot_id":"Nom du point dans Valetudo"}

Avancement du TUTO en cours

10 « J'aime »

189 messages ont été scindés en un nouveau sujet : Fil de discussion du [TUTO] Utiliser Valetudo RE et le contrôler via MQTT

Bonjour à tous,

Ce tuto suscitant l’enthousiasme et commençant à prendre beaucoup d’ampleur, nous vous invitons à en discuter sur un fil dédié:

Fil de discussion du [TUTO] Utiliser Valetudo RE et le contrôler via MQTT


Cela permettra à @HoM3r17 de faire évoluer le tutoriel sur le présent sujet et de garder de la lisibilité pour ceux qui voudrait le mettre en oeuvre ;)

Bons échanges et merci à tous pour vos interventions.

3 « J'aime »

@HoM3r17 j’ai essayer de suivre le tuto mais je bloque à l’intallation sous linux quand je fait
sudo pip3 install python-miio

il m’affiche
Collecting python-miio
Using cached python_miio-0.5.0.1-py3-none-any.whl (202 kB)
ERROR: Package ‹ python-miio › requires a different Python: 3.5.3 not in ‹ >=3.6 ›

comment puis je régler le problème, je suis débutant complet sur linux et pas envie de faire de connerie

Merci d’avance

Salut,

Quelle est la version de Python sur ton systeme ? Lance une cette commande pour l’avoir :

python3 -V

Tu as installé Python juste pour ce tuto ? Ta liste des paquets est récente ?
Lance une mise a jour de la liste des paquets et une mise a jour de tes paquets existants, redémarre, et réessaie :

sudo apt update && sudo apt upgrade
sudo reboot

Pour la version de python ca me donne ça Python 3.5.3

Pour la liste des paquets tu me parle en chinois désolé j’ai lancé les 2 ligne de commande, ensuite je refait le tuto du départ c’est ça ?

oui ton système devrait être à jour

toujours le même message
Collecting python-miio
Using cached python_miio-0.5.0.1-py3-none-any.whl (202 kB)
ERROR: Package ‹ python-miio › requires a different Python: 3.5.3 not in ‹ >=3.6 ›

tu as quoi comme configuration de ton jeedom ?

Comme configuration ? (comme je comprend pas ce que tu veux je te mets tous ce que j’ai)

Version database 10.1.26-MariaDB-0+deb9u1
Version PHP 7.0.33-0+deb9u7
Version OS Linux jeedom 3.14.79-94 #1 SMP PREEMPT Mon Nov 21 17:13:27 BRST 2016 aarch64 GNU/Linux [9.12]
Version Jeedom 4.0.54

Attention il faut aller sur le sujet discussion et pas ici

Ok on va sur l’autre fils de discutions du coup

Justement on peut en parler ici, c’est pour ca qu’on a séparé les discussions diverses, pour laisser la place ici pour la résolution de problèmes :wink: Donc d’un coté ou de l’autre c’est pas gênant :wink:

Avant d’aller plus loin essaie de mettre a jour les dépendances Python :

sudo pip3 install -U pip setuptools

Ensuite essaie a nouveau l’installation de python-miio

ha ok désolé

Toujours le même message par contre quand j’ai fait la ligne de commande

sudo pip3 install -U pip setuptools

Si je tape python -V il me retourne Python 2.7.13
Et si je tape Python3 -V il me retourne Python 3.5.3

A mon avis les paquets python plus récents n’existent simplement pas pour ta version de Debian, tu es sur une Jeedom Smart ?

Tu peux me donner ta version de Debian avec

lsb_release -d

Si elle est encore sous Jessie c’est au dela de mes compétences, tu pourrais faire la mise a jour vers Stretch ou Buster mais au risque de casser des choses qui fonctionnent pour toi :confused:

Si c’est le cas le mieux est soit d’utiliser une autre machine avec un linux plus récent, ou si c’est vraiment impossible de contacter le support Jeedom pour savoir si une mise a jour vers Stretch ou Buster de ton Jeedom est envisageable sans rien casser … dans tous les cas fait des sauvegardes régulières de ton jeedom en externe pour pouvoir le restaurer en cas de soucis :wink:

Je suis sous
Description: Debian GNU/Linux 9.12 (stretch)

Et je suis sur une jeedom pro, mais même fonctionnement en gros que jeedom smart

OK, bizarre donc … a moins d’essayer depuis une autre machine je ne sais pas trop quoi te conseiller malheureusement …

Je pense que c’est la solution la moins risquée… Si tu un PC tu peux démarrer celui-ci sur une clé USB avec debian live…

oui mais du coup il doit tourner en permanence non ?