Aller au contenu
Lazer

Quick App - Xiaomi Roborock Vacuum

Recommended Posts

Ces où dans ton code que tu récupère le Jason pour mettre les labels a jour ?
Histoire de faire un print() et comparer nos tables de données...

Envoyé de mon RMX1993 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai le S6 MaxV

J'arriverai bien à trouver une façon de rendre le QA suffisament générique, après le risque c'est que pour les prochains modèles l'API change encore, ce qui est possible vu qu'elle n'est pas officiellement documentée.

 

En fait j'ai vraiment besoin du log complet (avec debug=true activé), car je ne sais même pas d'où sort le JSON que tu as partagé page précédente.

Il faut que je comprenne la séquence complète de communication (et aussi résoudre le problème du checksum que je t'ai fait commenter en attendant)

Partager ce message


Lien à poster
Partager sur d’autres sites

Désolé pour la mise en forme de mes précédents messages...

Histoire d'avancer, j'ai mis quelques traces dans le script main et j'ai constaté que son exécution se stoppait à ce niveau

image.png.1d78d990fc31b9d6585ef6028d52e6b2.png

d'où la non mise à jour des champs du QA

 

Une piste?

Partager ce message


Lien à poster
Partager sur d’autres sites

"... se stoppait ..." Que veux tu dire par là ?

Le QA se crashe ? Que vois-tu dans les logs ?

 

De toute façon si le JSON n'est pas comme attendu, comme dans le cas de @Dragoniacs c'est normal, le problème se situe en amont.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Par "stoppait", j'entends que le code s'interrompt sans que le QA se crashe.

Partager ce message


Lien à poster
Partager sur d’autres sites

OK... bon toujours aussi étrange....

J'attends les logs détaillés de @Dragoniacs avant de me lancer dans une analyse détaillée

Partager ce message


Lien à poster
Partager sur d’autres sites

A vrai dire je n'ai pas grand chose dans le debug...

Voici la dernière heure, avec le debug = true, et sur le E-Machin.

 

La table que je t'ai donnée, est le résultat d'une recherche du token, via une ancienne application Xiaomi. Il faut que je te retrouve la procédure complète... Cela créait un log à la racine de mon téléphone, et je l'avais soigneusement conservé ;)

 

Log QA Xiaomi.lua

 

Modifié par Dragoniacs

Partager ce message


Lien à poster
Partager sur d’autres sites

Je parlais de mes difficultés et de la résolution ici (lire les 2 ou 3 messages qui se suivent)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci mais les fichiers txt sont bloqués sur le forum.... si tu peux le remettre avec une extension LUA ça passera ;)

 

En tout cas avec tes dernières explications je commence un peu mieux à comprendre

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Top merci

 

Effectivement tu as raison le debug ne contient pas grand chose... mais il montre surtout un plantage (invisible) du code LUA

Je pense que ce que je t'ai fait commenter ce matin n'était pas la bonne solution.

Je te propose, toujours dans le fichier Xiaomi, de modifier la ligne 319 comme suit :

	if cipher_checksum == sha_hex2bin("ffffffffffffffffffffffffffffffff") or cipher_checksum == sha_hex2bin("00000000000000000000000000000000") then

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Modif faite -> erreur :

 

[20.04.2021] [16:47:36] [DEBUG] [QA_ROBOROCK_195]: Xiaomi:fetchMiPacket() : Data ASCII : {"id":8031,"error":{"code":-32600,"message":"Req object invalid."}}

[20.04.2021] [16:47:36] [DEBUG] [QA_ROBOROCK_195]: table[2]
  "error" = table[2]
    "message" = "Req object invalid."
    "code" = -32600
  "id" = 8031

[20.04.2021] [16:47:36] [ERROR] [QA_ROBOROCK_195]: Xiaomi:command() Invalid result : Error -32600 : Req object invalid.

[20.04.2021] [16:47:36] [ERROR] [QA_ROBOROCK_195]: Can't get vacuum status : Error -32600 : Req object invalid.

 

(j'ai retiré la mise en commentaire, mais cela ne change rien)

Modifié par Dragoniacs

Partager ce message


Lien à poster
Partager sur d’autres sites

Bien, on a avancé d'un pas je pense :)

 

Mais il manque le début du log, donc je ne fait que supposer.... mais on est probablement retombé maintenant dans le problème que tu as mentionné sur l'autre topic, à savoir que ce ne sont pas les mêmes commandes.

 

Est-ce que c'était le get_status ?

 

Je n'ai pas compris ce que tu as dû changer sur l'autre topic pour que ça fonctionne avec ton robot... mais je pense qu'il va falloir faire pareil.

Partager ce message


Lien à poster
Partager sur d’autres sites

OK merci, par contre je vois que tu as remplacé "get_status" par "miIO.info" dans la fonction Xiaomi:getStatus() d'après le log :

[21.04.2021] [14:33:45] [DEBUG] [QA_ROBOROCK_195]: Xiaomi:command("miIO.info", nil, function(), table[2])

Dans cette même fonction, en ligne 528, je te propose de remplacer comme suit, c'est à dire ajouter un tableau vide {} à la place de nil, ce qui permettra d'envoyer params=[] dans la trame vers le robot (en parcourant les forums, j'ai l'impression que c'est ce qu'il faut) :

	self:command("miIO.info", {}, function(result) return type(result[1]) == "table" end, type(callback) == "table" and {

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je n'ai pas très bien compris ta remarque, je n'ai rien changé dans le QA si ce ne sont les modifs que tu m'a demandées... J'espère que cela n'induit pas d'erreur dans tes activités de debuggage :)

 

Voici un nouveau log d'erreur

On progresse je pense, il est de plus en plus bavard !

 

 

Log_Xiaomi.lua

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui effectivement, j'ai raconté n'importe quoi hier, désolé.... je me suis un peu emmêlé les pinceaux.

Une meilleure lecture du log et je comprend mieux.

 

Voici ce que je te propose :

 

En ligne ligne 528 tu vas remettre comme à l'origine :

	self:command("get_status", nil, function(result) return type(result[1]) == "table" end, type(callback) == "table" and {

Et en ligne 805 tu vas modifier comme suit :

						params = params or {}

 

Et relancer le test.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est bizarre, on dirait qu'il y a des trames qui se mélangent.

 

On va allonger un peu les délais... dans le fichier main, à la ligne 276, tu peux modifier comme suit :

	fibaro.setTimeout(10000, function() loop(self, refreshInterval) end)

Ainsi le 1er refresh du statut se fera 10 secondes après la découverte de l'aspirateur (au lieu de seulement 1s)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici ce que cela donne.

J'ai joué avec les boutons : ON (qui a bien lancé le nettoyage) / OFF (qui n'a pas marché) / Pause (ça fonctionne) / Stop / Retour au dock (qui marche aussi)

Log_Xiaomi.lua

Partager ce message


Lien à poster
Partager sur d’autres sites

Comme @Dragoniacs j'ai 2 esclaves, mais bon c'est déjà assez la galère sans domotiser le bouzin :D 
Un S6 qui fonctionne sur l'appli Roborock et un plus petit nommé Vaccum Mop (une version pas vendu en France) qui lui ne fonctionne que sur l'application Home.
Mais quand je vois le truc de ouff que vous devez faire, c'est pire que d'allumer une ampoule chez moi :lol:

Partager ce message


Lien à poster
Partager sur d’autres sites

Ouais mais c'est compliqué parce que le développeur a fait n'importe quoi, s'il avait bien fait son boulot dès le 1er coup, ça fonctionnerait tout seul :15:

Ou alors vous n'avez qu'à acheter le même modèle que le miens :ph34r:

 

 

@Dragoniacs

Tu peux essayer de remplacer les 2 fichiers main et Xiaomi par les fichiers ci-joints STP ?

ça ne sera surement pas 100% fonctionnel, mais ça devrait aller mieux...enfin j'espère !

 

Xiaomi Roborock Vacuum v2.01.lua

Library - Xiaomi v1.01.lua

Partager ce message


Lien à poster
Partager sur d’autres sites

YOUHOU !

Victoire, cela fonctionne, j'ai toutes les infos qui remontent :60:

 

Je vais tester avec mon S5 maintenant ....

 

EDIT : c'est bon pour le S5 aussi !

 

Modifié par Dragoniacs
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool :)

 

Tu pourrais m'envoyer le log détaillé depuis l'initialisation STP ?

Dans cette versions spéciale, j'ai mis un getFeatures, je veux voir quelles sont les valeurs, l'idée à terme ça serait, si possible, de faire un QA qui s'adapte aux capacités de l'aspirateur (serpillère, etc)

Partager ce message


Lien à poster
Partager sur d’autres sites

×