Fonctionnalités du Xiaomi STYJ02YM (aspirateur robot)

Hello @lunarok,

J’utilise actuellement l’aspirateur robot sur Jeedom et sur HA.
Mon but est de pouvoir avoir le même niveau de fonctionnalités sur Jeedom afin de pouvoir laisser HA de côté. Ce que j’avais jusqu’à présent en plus sur HA, c’est quelques informations et surtout la gestion par pièce (ou plutôt par zone).

Je peux maintenant faire de même sur Jeedom.
Cela intéresse d’autres personnes. Mais pour y arriver, je dois légèrement modifier le code du plugin (temporairement du moins).
Je voulais voir avec toi avant de mettre quoi que ce soit comme info, si cela te dérange ou pas.
Je me suis basé sur la méthode expliqué sur l’ancien forum.

Pour la gestion des pièces, je vois deux solutions :

  1. Utiliser des zones, avec les coordonnées x et y du début et de fin => je n’ai pas réussi à trouver la bonne méthode. Si tu as une info, je suis preneur.
  2. Utiliser l’ID des pièces

C’est donc la deuxième méthode que j’ai utilisé.
L’ID de la pièce est lié à la MAP en cours.
Donc si on utilise l’aspirateur sur plusieurs étage, il faut changer de MAP comme si le on le faisait avec l’application officielle.
Chose faisable avec Jeedom.

Par contre, il faut connaitre l’ID de la MAP.
Pour cela, dans le fichier global.py, j’ai ajouté « cur_mapid » comme paramètre de la méthode get_prop et j’ai ensuite créé la commande info avec le bloc code suivant dans un scénario :

$xiaomihomeCmd = new xiaomihomeCmd();
$xiaomihomeCmd->setName('Map Id');
$xiaomihomeCmd->setEqLogic_id(303); # ID de l’aspirateur
$xiaomihomeCmd->setEqType('xiaomihome');
$xiaomihomeCmd->setLogicalId('status::cur_mapid');
$xiaomihomeCmd->setType('info');
$xiaomihomeCmd->setSubType('string');
$xiaomihomeCmd->setConfiguration('logicalId', 'status::cur_mapid');
$xiaomihomeCmd->setIsVisible('1');
$xiaomihomeCmd->save();
$scenario->setLog(print_r($xiaomihomeCmd, true));

Une fois l’ID des cartes récupéré, on peut passer, à la création des commandes pour sélectionner la map :

$xiaomihomeCmd = new xiaomihomeCmd();
$xiaomihomeCmd->setName('map_rdc');
$xiaomihomeCmd->setEqLogic_id(303); # ID de l’aspirateur
$xiaomihomeCmd->setEqType('xiaomihome');
$xiaomihomeCmd->setLogicalId('aspi_map_rdc');
$xiaomihomeCmd->setType('action');
$xiaomihomeCmd->setSubType('other');
$xiaomihomeCmd->setConfiguration('request', 'set_map');
$xiaomihomeCmd->setConfiguration('params', ‘[ID_de_la_MAP]’);
$xiaomihomeCmd->setIsVisible('1');
$xiaomihomeCmd->save();
$scenario->setLog(print_r($xiaomihomeCmd, true));

Ensuite, il faut tâter le terrain pour savoir à quoi correspond chaque pièce (à noter que l’ID de la première pièce, que ce soit au RDC ou à l’étage est 10).

Voici la commande pour une pièce :

$xiaomihomeCmd = new xiaomihomeCmd();
$xiaomihomeCmd->setName('Chambre Parents');
$xiaomihomeCmd->setEqLogic_id(303); # ID de l’aspirateur
$xiaomihomeCmd->setEqType('xiaomihome');
$xiaomihomeCmd->setLogicalId('aspi_chambre_parents');
$xiaomihomeCmd->setType('action');
$xiaomihomeCmd->setSubType('other');
$xiaomihomeCmd->setConfiguration('request', 'set_mode_withroom');
$xiaomihomeCmd->setConfiguration('params', '[0,1,1,17]');
$xiaomihomeCmd->setConfiguration('logicalId', 'start');
$xiaomihomeCmd->setIsVisible('1');
$xiaomihomeCmd->save();
$scenario->setLog(print_r($xiaomihomeCmd, true));

Concernant les paramètres (‹ params ›, ‹ [0,1,1,17] ›), si j’ai bien compris :

  • Premier chiffre : nettoyage complet (0) ou uniquement le bord (1)
  • Deuxième : Démarrer (1) ou Pause (2)
  • Troisième, correspond au nombre de pièces à nettoyer
  • Quatrième et suivant : numéro(s) de(s) pièce(s)

Exemple : nettoyage des pièces 11 à 14 : [0,1,4,11,12,13,14]

L’avantage de cette méthode, c’est que l’on a pas à chercher les coordonnées des zones.
On peut également assez facilement faire le nettoyage de plusieurs pièces.
Par contre, si jamais on recrée un jour la MAP ou si l’on fait un découpage ou autre… Il faudra à nouveau trouver les correspondances.

Le nettoyage par zone, prend un peu plus de temps mais à l’avantage de rester statique, quelque soit les découpages que l’on fait ou les maps que l’on recréer si bien entendu, on place la base au même endroit.

Quelques changement que je gère également pour avoir les correspondances par rapport aux chiffres sur le widget si cela t’intéresse :

  • Niveau d’eau (water_grade) => 11 = Bas / 12 = Moyen / 13 : Elevé
  • Aspiration (fan_speed) => 0 = Silencieux / 1 = Standard / 2 = Moyen / 3 = Turbo
  • Mode (is_mop) => 0 = aspi / 2 = aspi et lavage / 3 = lavage

J’ai ajouter les commandes logiquement et ajouter de la doc :
https://lunarok.github.io/jeedom_docs/plugins/xiaomihome/wifi.html

Hello,

Les images parlent mieux que les mots. Mon écran Nextion + ESPeasy + ce plugin :

image

image

image

image

image

Tout fonctionne bien. Je vais pouvoir virer mes liens vers HA.

Une chose à faire attention : lorsque l’on change d’étage, si l’on lance la commande de changement d’étage et tout de suite l’ordre de nettoyage, le robot ne bouge pas.
Problème résolu en mettant dans mon scénario un sleep de 2 secondes entre la commande de changement d’étage et la commande pour le nettoyage de la ou des pièces.

Merci pour les modifs !

Hello,

Une commande que j’ai dû créer pour mon utilisation :

$xiaomihomeCmd = new xiaomihomeCmd();
$xiaomihomeCmd->setName('is_mop');
$xiaomihomeCmd->setEqLogic_id([IP_Aspirateur]);
$xiaomihomeCmd->setEqType('xiaomihome');
$xiaomihomeCmd->setLogicalId('status::is_mop');
$xiaomihomeCmd->setType('info');
$xiaomihomeCmd->setSubType('string');
$xiaomihomeCmd->setConfiguration('logicalId', 'status::is_mop');
$xiaomihomeCmd->setIsVisible('1');
$xiaomihomeCmd->save();
$scenario->setLog(print_r($xiaomihomeCmd, true));

Cette commande me permet de connaitre le mode d’aspiration… Enfin, s’il est en mode aspiration, mixte ou lavage.
Elle est à mon sens plus utile que la commande set_mop car au final le mode va se positionner automatiquement en fonction du bac que l’on met dans l’aspirateur.

Je viens de l’ajouter, mais je vois pas trop la différence avec mop_type qui est elle aussi une info sur mode actif

MMmhhh… Je ne sais. Je vais comparer la prochaine fois que je l’utilise.

En tout cas, lorsque je clique sur les commandes Mode Aspirateur, Mode Mix ou Mode Serpillère, la valeur is_mop change (là, j’ai lancé les commandes sur Jeedom et checké les valeurs sur HA). Celle de mop_type, non.
Peut-être qu’il faut démarrer l’aspirateur. Je ferais attention la prochaine fois que je fais un lavage.

La valeur box_type peut également être intéressante.
Cette valeur change lorsque l’on change de bac (1 : bac aspirateur / 2 : bac lavage / le bac mixte, je ne sais pas, il est rangé dans un carton). Cela peut permettre de voir si l’on a le bon bac avant de lancer le robot (si l’on oublie de retirer le bac à eau lorsque l’on veut passer l’aspirateur par exemple… Même s’il est vrai que l’application nous demande d’enlever le bac).

Hello @lunarok,

Depuis le firmware v47, on peut passer le robot en Anglais :

# English
# aspirateur => id = xxx
$xiaomihomeCmd = new xiaomihomeCmd();
$xiaomihomeCmd->setName('Anglais');
$xiaomihomeCmd->setEqLogic_id(xxx);
$xiaomihomeCmd->setEqType('xiaomihome');
$xiaomihomeCmd->setLogicalId('aspi_fr');
$xiaomihomeCmd->setType('action');
$xiaomihomeCmd->setSubType('other');
$xiaomihomeCmd->setConfiguration('request', 'set_language');
$xiaomihomeCmd->setConfiguration('params', '[2]');
$xiaomihomeCmd->setConfiguration('logicalId', 'start');
$xiaomihomeCmd->setIsVisible('1');
$xiaomihomeCmd->save();
$scenario->setLog(print_r($xiaomihomeCmd, true));