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