Page 2 sur 28

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 09:15
par neo64
bizzare : j'étais passsé sur le serveur europe car à un moment xiaomi voulait plus que j'utilise roborock sur le serveur china...

Je vais faire des tests

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 10:23
par jfr
ATTENTION RISQUE !! Je ne suis pas responsable en cas de mauvaise manipulation, ceci peut abîmer votre Jeedom en cas d'erreur !

Je vous conseille très très fortement de faire un backup de votre JEEDOM avant de commencer !


Pour ceux qui ont le firmware qui prend en charge le "zone clean" et qui voudraient ajouter la gestion de cette fonctionnalité au superbe plugin de lunarok et sarakha63 (en attendant qu'ils l'intègrent à leur plugin) :
img1.png
img1.png (14.52 Kio) Consulté 7502 fois



Il faut commencer par récupérer l'id de l'objet aspirateur dans Jeedom. Cet id sert dans le code ci-après :
img2.png
img2.png (15.77 Kio) Consulté 7502 fois

J'ai réussi en faisait un scénario avec un code php pour ajouter une nouvelle commande au plugin avec l'ordre "app_zoned_clean" et les coordonnées de la zone que j'ai au préalable identifiées chez moi pour la pièce en question. On peut créer une commande pour chacune des pièces de la maison. Ceci est à exécuter une seule fois pour créer la commande.

Code : Tout sélectionner

# Ajoute la commande "Cuisine" à l'aspirateur avec une clean zone défini sur les coordonnées de la cuisine
# aspirateur => id = 267
$xiaomihomeCmd = new xiaomihomeCmd();
$xiaomihomeCmd->setName('Cuisine');
$xiaomihomeCmd->setEqLogic_id(267);  # remplacer l'id par votre id trouvé précédemment dans VOTRE Jeedom !
$xiaomihomeCmd->setEqType('xiaomihome');
$xiaomihomeCmd->setLogicalId('cuisine');
$xiaomihomeCmd->setType('action');
$xiaomihomeCmd->setSubType('other');
$xiaomihomeCmd->setConfiguration('request', 'app_zoned_clean');
$xiaomihomeCmd->setConfiguration('params', '[[21500,25800,24500,29800,2]]');  # Coordonnées de votre pièce [[bas_gauche_x, bas_gauche_y, haut_droit_x, haut_droit_y, nombre_de_passage (1,2 ou 3)]]
$xiaomihomeCmd->setIsVisible('1');
$xiaomihomeCmd->save();
$scenario->setLog(print_r($xiaomihomeCmd, true));

Ensuite on peut définir une icône pour la commande comme n'importe quelle commande si besoin.

Et un petit clic sur le bouton, et l'aspirateur part nettoyer uniquement la zone que vous avez définie ;-)
img3.png
img3.png (19.01 Kio) Consulté 7502 fois

Le plus compliqué finalement c'est de trouver les coordonnées de chaque pièce de la maison, mais ça c'est pour un autre post...

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 10:26
par jfr
Voilà le résultat dans Mi Home après avoir cliqué sur la commande nouvellement créée, on voit la zone donnée à l'aspirateur sur le plan ! On peut donc checker facilement que les coordonnées définies sont correctes :

Image-1.jpg
Image-1.jpg (109.83 Kio) Consulté 7502 fois

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 10:46
par Theking31
Intéressant...

Et c'est adaptable aux version 1 du robot si on a zone clean dans l'app ?

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 12:50
par jfr
ATTENTION RISQUE !! Je ne suis pas responsable en cas de mauvaise manipulation, ceci peut abîmer votre Jeedom en cas d'erreur !

Je vous conseille très très fortement de faire un backup de votre JEEDOM avant de commencer !


Pour trouver les coordonnées, il faut y aller en tâtonnant.

Les coordonnées sont définies comme ceci :
[[zone1][zone2][zone_x]...] => on peut définir plusieurs zones, dans ce cas l'aspirateur les fera l'une après l'autre et dans l'ordre

Chaque zone est définie comme suit :
[bas_gauche_x, bas_gauche_y, haut_droit_x, haut_droit_y, nombre_de_passage]
Nombre de passage = 1, 2 ou 3 => nombre de passage que l'aspirateur doit faire dans la zone

Exemple :
[[21500,25800,24500,29800,2][11500,22800,24000,11800,1][26000,25800,28500,39800,3]] => définit 3 zones dont la première fera 2 passages, la seconde 1 passage et la dernière 3 passages

Les coordonnées peuvent faire jusqu'à [52000, 52000] ! Après avoir imprimé mon plan Mi Home, je remarque que sur une feuille A4, 1cm fait environ 650 points de coordonnées.
=> 1unité xiaomi = 1 mm donc 1000 => 1m !

La base de l'aspirateur est environ au milieu du plan [25300, 25400] pour moi, je pense que ça doit être le cas à chaque fois, ce qui laisse la possibilité au plan de pouvoir s'agrandir dans toutes les directions au fur et à mesure que l'aspi découvre l'espace autour de lui...
Donc au début chercher autour du milieu pas trop loin de la base, si on définit un point qui sort du plan on a une erreur de l'aspi disant qu'il ne peut pas atteindre la cible.

Maintenant, comment trouver ses coordonnées ? Personnellement j'ai utilisé la commande spot que j'ai modifiée temporairement pour faire un goto target avec des coordonnées au hasard. Et petit à petit on arrive à trouver les coordonnées de toute la maison.

Commencer par identifier l'id de la commande spot de votre aspirateur. Pour moi, il s'agit de l'id 2601 dans exemple, mais pour vous ce sera différent (!!) :
spot.png
spot.png (12.85 Kio) Consulté 7489 fois

Ensuite utiliser l'éditeur de base de données intégré à Jeedom dans Configuration => OS/DB => Base de données (attention danger, toute mauvaise manipulation ici peut être fatale à votre JEEDOM, je ne suis pas responsable !!) :
sql.png
sql.png (143 Kio) Consulté 7489 fois

Taper la commande SQL suivante dans le requêteur SQL (avec l'id de VOTRE commande spot) :

Code : Tout sélectionner

select configuration from cmd where id = 2601
Noter la configuration actuelle, pour pouvoir remettre la commande spot à la fin !!

Exemple :
select.png
select.png (103.02 Kio) Consulté 7489 fois

Ensuite il ne reste plus qu'à modifier la configuration de la commande spot pour lui faire faire un goto target avec les coordonnées qu'on veut plutôt qu'un nettoyage spot. Pour cela on utilise la commande suivante pour modifier la configuration de la commande spot et faire aller le robot aux coordonnées [21500,25800] :

Code : Tout sélectionner

UPDATE cmd SET configuration='{"request":"app_goto_target","params":"[21500,25800]","timeline::enable":"0","interact::auto::disable":"0","actionConfirm":"0","actionCodeAccess":"","actionCheckCmd":[],"jeedomPreExecCmd":[],"jeedomPostExecCmd":[],"minValue":"","maxValue":""}' where id = 2601
En fait il faut remplacer dans la configuration de VOTRE commande spot :

Code : Tout sélectionner

"request":"app_spot"
par :

Code : Tout sélectionner

"request":"app_goto_target","params":"[21500,25800]"
avec les coordonnées souhaitées. Puis cliquer sur le bouton spot pour faire aller le robot aux coordonnées demandées ! Bonus : l'application Mi Home vous montrera sur le plan la cible visée.

Et recommencer autant de fois que nécessaire pour identifier toutes les coordonnées de la maison ;-)


Et quand on a terminé, remettre la commande spot comme elle était avec un :

Code : Tout sélectionner

UPDATE cmd SET configuration='{"request":"app_spot","timeline::enable":"0","interact::auto::disable":"0","actionConfirm":"0","actionCodeAccess":"","actionCheckCmd":[],"jeedomPreExecCmd":[],"jeedomPostExecCmd":[],"minValue":"","maxValue":""}' where id = 2601
=> reprendre la configuration que vous avez noté au départ entre les {} !

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 12:57
par jfr
Theking31 a écrit :
04 oct. 2018, 10:46
Intéressant...

Et c'est adaptable aux version 1 du robot si on a zone clean dans l'app ?

C'est le même protocole pour V1 et V2 visiblement :-)
https://github.com/marcelrv/XiaomiRobotVacuumProtocol

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 13:09
par doudouhightech
Bonjour,

J'ai l'impression que pour l'instant seule la V2 peut utiliser les zones et avoir le Français, y a t-il parmi vous des possesseur du V1 qui ont le français et/ou les zones ?

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 16:13
par Theking31
J'ai les zones mais pas le français => V1

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 16:47
par cyril5689
J'ai le Français, mais pas la maj des zones ==> V2 (serveur europe)

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 20:15
par mortyre
@jfr Marche nickel pour ajouter la commande et lancer la zone de clean :-)

Ton mode serpillière c'est toi qui l'a ajouté ?

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 21:02
par doudouhightech
Je confirme que la méthode proposée par Jfr fonctionne parfaitement sur un v1.

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 04 oct. 2018, 21:23
par jfr
mortyre a écrit :
04 oct. 2018, 20:15
@jfr Marche nickel pour ajouter la commande et lancer la zone de clean :-)

Ton mode serpillière c'est toi qui l'a ajouté ?
Heureux que ça fonctionne en V1 et V2 ;-)
Le mode serpillière est arrivé tout seul à l'ajout de mon aspirateur (V2) dans le plugin, je n'ai rien fait de spécial.

Voici la configuration de ma commande si ça peut servir :
serpillière.png
serpillière.png (307.15 Kio) Consulté 7436 fois

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 05 oct. 2018, 12:40
par Theking31
Merci pour ce tuto et pour ta trouvaille :roll: 8-)

Marche nikel sur V1 (zone cleanup)...

Bon pas évident de trouver les coordonnées mais une fois que c'est fait, c'est que du bonheur et encore plus avec ifttt et GH.


Chapeau bas :!:

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 05 oct. 2018, 13:09
par doudouhightech
De mon coté, j'ai un petit soucis. J'avais définis différentes zones, et j'ai relancé un nettoyage "classique" ce qui a régénéré la carte et évidement elle n'avait pas la même orientation que lorsque j'ai définis mes zones. Donc évidement les zones ne correspondent plus.
Je ne sais pas si on peut résoudre ce problème et si je suis le seul à rencontrer ce problème.
Pour info j'ai la V1 donc je ne peux pas sauvegarder la carte.

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 05 oct. 2018, 13:38
par jfr
doudouhightech a écrit :
05 oct. 2018, 13:09
De mon coté, j'ai un petit soucis. J'avais définis différentes zones, et j'ai relancé un nettoyage "classique" ce qui a régénéré la carte et évidement elle n'avait pas la même orientation que lorsque j'ai définis mes zones. Donc évidement les zones ne correspondent plus.
Je ne sais pas si on peut résoudre ce problème et si je suis le seul à rencontrer ce problème.
Pour info j'ai la V1 donc je ne peux pas sauvegarder la carte.
Visiblement c’est un problème rencontré par pas mal de monde quand on parcoure les forums :-( je n’ai pas encore rencontré le soucis. La solution proposée par certains c’est de ne faire que du zone clean qui utilise la map existante sans la recréer.

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 05 oct. 2018, 14:13
par Theking31
Arrf... c'est ballot ça, j'viens d'y passer 2h :cry:

Qu'est ce qui fait que l’orientation de la carte change ?

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 09 oct. 2018, 23:21
par GreenJu
Bonsoir à tous,

J'ai pour ma part un v1, qui fonctionnait très bien jusqu'à y'a pas si longtemps.
En fait, j'ai un amis qui a le même appareil que moi (on l'a commandé à qq jours d'intervalle) et qui lui avait la fonctionnalité des zones (moi pas).

En comparant ce qui était différents entre nos deux configs, il était sur Main China et moi sur Other. J'ai changé de serveur pour passer sur Europe.
Et là Oura j'ai bien les zone cleanup sur l'appli.
j'ai récupéré le token via la méthode Iphone/iOS, mais là pas moyen de faire fonctionner dans Jeedom.

Je suis du coup passé sur China, même soucis, puis retour sur Other, tjours la même (mais j'ai conservé les zones).

Est-ce qu'il y a un moyen de récupérer un token fonctionnel pour de nouveau lancer l'aspi depuis Jeedom?

Merci à vous pour les suggestions.

Edit: j'ai tenté de recréer toutes les commandes à chaque fois que j'ai changé de serveur mais ça ne change rien du tout

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 10 oct. 2018, 21:13
par jfr
Greenju => quelle version de Mi Home ? tu as bien un token version crypté qu'il faut décrypter ?

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 10 oct. 2018, 21:41
par GreenJu
jfr a écrit :
10 oct. 2018, 21:13
Greenju => quelle version de Mi Home ? tu as bien un token version crypté qu'il faut décrypter ?
version 4.8.7 pour MiHome

Comment je sais si mon Token est chiffré?
Je l'ai mis tel quel dans l'interface. En utilisant la méthode iOS, le principe c'est de récupérer la sauvegarde du téléphone pour aller recupérer l'id dedans.

Au passage, du coup j'ai restauré un backup d'avant mes bidouilles, j'ai récupéré le token qui fonctionnait auparavant, mais cela ne fonctionne toujours pas.

Re: Aspirateur Roborock S50 => définir les zones de la maison?

Publié : 10 oct. 2018, 22:01
par jfr
Dans les versions récentes de Mi Home le token est chiffré, il faut le déchiffrer avant de pouvoir l'utiliser.
S'il fait 96 caractères => il est chiffré !
La version en clair (déchiffrée) du token fait 32 caractères.

https://vdays.net/fr/2017/09/28/tuto-je ... ken_crypte

Sinon voici un petit script en python 2.7 pour déchiffrer son token (renseigner le token à l'endroit indiqué dans le script entre les '') :

Code : Tout sélectionner

from Crypto.Cipher import AES
import binascii
keystring = '00000000000000000000000000000000'
iostoken = 'METTRE SON TOKEN DE 96 CARACTERES ICI'
key = bytes(bytearray.fromhex(keystring))
cipher = AES.new(key, AES.MODE_ECB)
token = cipher.decrypt(bytes(bytearray.fromhex(iostoken[:64])))
print(token)
Puis exécuter le script qui affichera le token déchiffré :

Code : Tout sélectionner

# python nom_du_script.py