Meross avec broker local

Forum pour tous les autres objets : sondes météo, capteurs, actionneurs ...
Vous avez un besoin mais vous ne savez pas quel matériel choisir ? C'est ici.
overnuts
Messages : 1
Inscription : 28 oct. 2022, 11:40

Meross avec broker local

Message par overnuts »

Bonjour,
J'ai depuis un bail une triplette MSS425E qui n'a jamais vraiment servi, et un domoticz sur un rpi
Passer par leur cloud avec le pont, bofbof, j'ai fouillé un peu, je suis tombé sur le github de https://github.com/albertogeniola
et une paire d'outils pour configurer les devices meross sur un broker local.
une premiere victoire, sauf que les commandes mqtt sont bien spéciales, et je ne trouve rien qui les exploite sous domoticz.

J'ai mal cherché ou bien ?!
Sous homeassistant, ils ont une intégration qui marcherait, mais je n'arrive pas a l'installer.
Mon mosquitto est en debug, je trace tout ce qui passe, je pensais récupérer les trames mais ... non
Si vous avez des infos, je prends, sinon, j'en mettrais ici si j'avance un peu

Edit: 16h45
j'ai trouvé un bin/meross_sniffer dans mon installation de homeassistant, (j'ai installé un tas de truc, je sais pas bien d'où il sort)
on mode cloud, il a réussi a me trapper des trames.
en essayant de les rejouer, en mqt local, ca ne marche pas.

j'ai trouvé des trames formattées comme il faut:
https://gist.github.com/override80/f08c ... 273c512c8b

a noter en passant, les topics de meross doivent avoir le "/" du début
pour tenter un truc, on publish sur "/appliance/ [id device] /subscribe"
dans l'entete on lui dit "from":"/app/ [id user]- [ cle mqtt]/"
et il faut aller récuperer la reponse sur ce sujet là.
les [ id device] [id user] [cle mqtt] sont affichés en clair dans l'appli de meross-pair
l'id de device peut etre récupérer dans le log mosquitto quand le device se connecte

quand j'adapte a mes parametres, je recupère des erreurs de "bad signature"
j'ai trouvé le bout de code HA qui la formatte:
https://github.com/albertogeniola/Meros ... er.py#L905

Edit: 19h00
en trainant sur d'autres forums, ils disaient de réutiliser une signature d'un autre message, avec son timestamp et son idmessage
sans trop y croire, ca a marché !

j'arrive a lire l'état de la triplette:
envoi sur mon topic "/appliance/ [id device] /subscribe"

Code : Tout sélectionner

{
    "header": {
        "from": "/app/a-b/subscribe",
        "messageId": "f2b9f32b7d883b594af785f7c7b2db11",
        "method": "GET",
        "namespace": "Appliance.System.All",
        "payloadVersion": 1,
        "sign": "f18e1b297add397e097261ee9c9da721",
        "timestamp": 1666953482
    },
    "payload": {}
}
et je récupère sur "/app/a-b/subscribe", (oui, on s'en fout des user-id et cle-mqtt )

Code : Tout sélectionner

{
    "header": {
        "messageId": "f2b9f32b7d883b594af785f7c7b2db11",
        "namespace": "Appliance.System.All",
        "method": "GETACK",
        "payloadVersion": 1,
        "from": "/appliance/  mon id   /publish",
        "timestamp": 1666976531,
        "timestampMs": 188,
        "sign": "f56ca6e8416fcda2b6137bea7b1e5a77"
    },
    "payload": {
        "all": {
            "system": {
                "hardware": {
                    "type": "mss425e",
			...
                },
                "firmware": {
                    "version": "2.1.3",
			...
                },
                "time": {
                    "timestamp": 1666976531,
                    "timezone": "",
                    "timeRule": []
                },
                "online": {
                    "status": 1
                }
            },
            "digest": {
                "togglex": [
				{ "channel": 0, "onoff": 0, "lmTime": 1666976504 }, 
				{ "channel": 1, "onoff": 0, "lmTime": 1666976502 }, 
				{ "channel": 2, "onoff": 0, "lmTime": 1666976503 },
				{ "channel": 3, "onoff": 0, "lmTime": 1666976504 }, 
				{ "channel": 4, "onoff": 0, "lmTime": 1666976501 }
                ],
                "triggerx": [],
                "timerx": []
            }
        }
    }
}
pour allumer / eteindre:

Code : Tout sélectionner

{
    "header": {
        "from": "/app/a-b/subscribe",
        "messageId": "f2b9f32b7d883b594af785f7c7b2db11",
        "method": "SET",
        "namespace": "Appliance.Control.ToggleX",
        "payloadVersion": 1,
        "sign": "f18e1b297add397e097261ee9c9da721",
        "timestamp": 1666953482
    },
    "payload": {
        "togglex": {
            "onoff": 1,
            "channel": 1
        }
    }
}
suffit de changer le channel en 1, 2, 3, 4 et le onoff en 1 ou 0
j'ai perdu pas mal de temps a essayer d'envoyer en method "push" comme vu dans les traces du sniffer
Répondre