Meross et HTTP Catcher

Bonjour à tous et meilleurs voeux pour 2021
Je suis en quête de mes identifiants pour mes prises Meross, mais je suis bloqué parce que :
1°) J’avais téléchargé et installé Charles Proxy, mais j’ai reporté et maintenant j’ai laissé filer la date et ne peux plus l’utiliser.
2°) Je recherche désespérément HTTP Catcher pour Android, mais le Github renvoie seulement sur l’appli IOS, et les recherches Google avec Http Catcher android apk ne donnent rien. Impossible de le trouver pour Android et je n’ai pas d’appareil IOS.

Est-ce que l’un d’entre vous aurait trouvé un lien fonctionnel pour télécharger la version Android de http catcher ?
En désespoir de cause, j’ai essayé avec d’autres logiciels du même genre dont http canary, ais comme le dit la doc, ça ne fonctionne pas…
Merci d’avance à ceux qui seront plus malins que moi.

Bonjour @phyllox,

as-tu encore besoin de récupérer les Credentials Meross ?
Si tu as besoin, je peux te donner une méthode via un script dans Jeedom.

Hello @olivr2s
Merci pour ce retour. En attendant une réponse, j’utilisais le plugin Meross, mais il passe par le cloud…

Alors non, je n’ai toujours pas mes credentials Meross et oui, je suis preneur de toutes solutions qui me permette de les récupérer. Quelle est cette méthode via un script ?

Merci d’avance

@phyllox

Il faut avec le plugin Script, créer un nouveau script et ajouter une commande script

  • Donner un nom à la commande: Info
  • Passer le type en autre
  • Cliquer sur l’icône image pour créer un nouveau fichier script
  • Nommer le fichier script: Meross.py

ça devrait donner ça:

Cliquer ensuite sur image pour éditer le fichier script et faire un copier / coller de ceci:

import base64
import hashlib
import string
import random
import requests
import time

def rand_gen(size, chars=string.ascii_lowercase + string.digits):
    return str(''.join(random.choice(chars) for _ in range(size)))

def msg_id(unix_time):
    concat_string = '{}{}'.format(rand_gen(16), unix_time)
    final_md5 = hashlib.md5(concat_string.encode('utf-8')).hexdigest()
    return str(final_md5)

def get_unix_time():
    current_time = int(time.time())
    return current_time

def get_key(username, password, uts):

    nonce = rand_gen
    unix_time = uts

    param = '{{"email":"{}","password":"{}"}}'.format(username, password)
    encoded_param = base64.standard_b64encode(param.encode('utf8'))

    concat_sign = '{}{}{}{}'.format('23x17ahWarFH6w29', unix_time, nonce, encoded_param.decode("utf-8"))
    sign = hashlib.md5(concat_sign.encode('utf-8')).hexdigest()

    headers = {
    'content-type': 'application/x-www-form-urlencoded',
    }
    data = {
    'params': encoded_param,
    'sign': sign,
    'timestamp': unix_time,
    'nonce': nonce
    }
    response = requests.post('https://iot.meross.com/v1/Auth/login', headers=headers, data=data)
    key = response.json()['data']['key']
    userid = response.json()['data']['userid']
    token = response.json()['data']['token']
    return str(key), str(userid), str(token)

def signing_key(message_id, key, uts):
    concat_string = '{}{}{}'.format(message_id, key, uts)
    final_md5 = hashlib.md5(concat_string.encode('utf-8')).hexdigest()
    return str(final_md5)


def login(username, password):
    current = get_unix_time()
    message_id = msg_id(current)

    key, userid, token = get_key(username, password, current)
    sign = signing_key(message_id,key, current)

    #print("{} {}".format("userId:", userid))
    #print("{} {}".format("key:", key))
    #print("{} {}".format("token:", token))
    print("{} {}".format("Jeton:", sign))
    print("{} {}".format("Identifiant:", message_id))
    print("{} {}".format("timestamp:", current))


#ONLY MODIFY THIS

login("Mail", "Mot_de_passe")

Tout à la fin du code du script, remplacer Mail et Mot_de_passe par l’adresse mail et le mot de passe du compte Meross.

Attention à bien conserver les " " et sauvegarder le fichier.
Passer le script en Actif et faire Sauvegarder.

Si le copier/coller du code et le remplacement de l’adresse mail et le mot de passe correct, il ne devrait pas il y avoir d’erreur à la sauvegarde du script.

Maintenant cliquer sur image pour obtenir les informations.

Recopier les informations dans le plugin WifilightV2 et ça devrait être bon :wink:

1 « J'aime »

Merci @olivr2s
Je pense avois suivi tes instructions rigoureusement, mais malheureusement, malgré deux essais, j’ai une erreur quand je sauvegarde l’équipement avec sa commande.

Erreur sur /var/www/html/plugins/script/data/Meross 2>&1 valeur retournée : 2. Détails : /var/www/html/plugins/script/data/Meross: 1: /var/www/html/plugins/script/data/Meross: import: not found /var/www/html/plugins/script/data/Meross: 2: /var/www/html/plugins/script/data/Meross: import: not found /var/www/html/plugins/script/data/Meross: 3: /var/www/html/plugins/script/data/Meross: import: not found /var/www/html/plugins/script/data/Meross: 4: /var/www/html/plugins/script/data/Meross: import: not found /var/www/html/plugins/script/data/Meross: 5: /var/www/html/plugins/script/data/Meross: import: not found /var/www/html/plugins/script/data/Meross: 6: /var/www/html/plugins/script/data/Meross: import: not found /var/www/html/plugins/script/data/Meross: 8: /var/www/html/plugins/script/data/Meross: Syntax error: « ( » unexpected

J’ai fait le copier/coller 3 fois et à chaque fois j’ai la même erreur.
Bien entendu, j’ai remplacé dans le code l’identifiant et le mot de passe par ceux que j’ai sur Meross. Et j’ai conservé les apostrophes.

Je ne vois pas où j’ai pu me tromper. Il ne faut pas d’extension au nom du fichier script ? L’adresse mail et le mot de passe sont seulement à remplacer sur la ligne :

#ONLY MODIFY THIS
login(« Mail », « Mot_de_passe »)

Je vois qu’il y a des « mail » « password » ailleurs dans le script…

Je suis sous debian10, installé sur un NUC processeur Intel désié à Jeedom (donc pas un Pi au cas où ça aurait de l’importance)
Jeedom 4.1.18

Une question pour quand ça fonctionnera :
Il faut que les prises soient branchées pour avoir un résultat ?

Merci d’avance, et désolé pour mes maladresses éventuelles mais hélas habituelles.

Pardon, je crois que ça vient que l’enregistrement du fichier s’est fait sans extension.
Au moment de créer le nouveau fichier, il faut le nommer Meross.py

@olivr2s
Je me réponds tout seul, ça fonctionne si je rajoute .py au nom du script. Ca figurait bien sur ton image écran mais pas dans le texte, j’aurais du agrandir cette image avant de poster.
OK, ça fonctionne je récupère des identifiants.
Je vais les tester dans le plugin
En tous cas, c’est génial. Merci encore, je te tiens au courant si ça fonctionne - et pourquoi est-ce que ça ne fonctionnerait pas ?

C’est pas que tu avais oublié, je viens de modifier mon post précédant avec l’image car j’avais oublié le .py dans l’exemple :sweat_smile: :wink:.
Les prises doivent être branchées que pour le plugin WifilightV2, mais pas besoin pour le script.

@olivr2s en tous cas, ça fonctionne très bien dans Meross, j’ai ajouté mes prises sans soucis avec ces identifiants. Elles fonctionnent au moins en on off, je n’ai plus qu’à chercher comment faire fonctionner la consommation, mais c’est un autre sujet.
Une nouvelle fois merci, ça valait le coup d’attendre !
Je ne sais pas comment ça pourrait être intégré à la doc du plugin, mais ça en vaudrait la peine

@phyllox super que ça marche ! :wink:
Penses à mettre ton post en résolu avec la méthode comme solution.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.