J’ai continué mes recherches sur les prises MaxSmart. J’ai découvert quelques trucs grâce aux MAC Address (adresse matérielle des composants réseau).
Avertissement
Les commandes, mal utilisées, peuvent rendre votre prise inopérante ou, tout au moins, impossible à reconnecter au cloud de votre fournisseur par exemple. Je ne suis en rien responsable des manipulations que vous pourriez faire et de ce qui en découle.
Evitez de prendre des risques, si vous n’êtes pas aussi à l’aise que moi dans la recherche et le troubleshooting, contentez-vous des commandes de contrôle d’électricité pour votre domotisation, et évitez de jouer avec les autres commandes.
Pour des raisons de sécurité, je modifie tous les identifiants uniques dans cet article en remplaçant 5 caractères par 12345 ou ABCDE. Il ne s’agit donc pas de mes codes réels.
Le fabriquant
Grâce à l’adresse MAC des prises, adresse matérielle qui contient entre autre un code constructeur, j’ai pu déterminer que le constructeur était Revogi. Celui-ci fabrique une série de produits domotiques pour lui-même, ainsi que pour d’autres marques. En faisant des recherches, j’ai pu déterminer quatre marques qui fournissent des prises multiples fabriquées par ces sociétés.
Voici une liste des marques et modèles que j’ai identifié:
- Revogi Smart Power Strip
- Max Hauri MaxSmart Power Station
- Extel Soky
- MCL DOM-PPS06I
Seul Max Hauri avec MaxSmart semble utiliser le PowerLAN. Les autres s’appuient sur le WIFI. Toutes utilisent une application et un service cloud propre à la marque. Nous verrons plus bas que la prise contient un certain nombre d’identifiant. C’est probablement par ceux-ci que le service cloud fait la différence. Il n’est donc probablement pas possible d’utiliser une prise d’une marque sur le cloud d’une autre marque.
En échangeant avec un autre internaute qui a une prise Revogi, j’ai relevé plusieurs différences de taille entre Revogi et MaxSmart:
- Contrairement à Revogi, le cloud (le site internet pour contrôler les prises) de MaxSmart est encrpyté en HTTPS. Les communications sont donc sécurisées
- Contrairement à Revogi, le serveur telnet sur les prises MaxSmart est désactivé. C’est plus compliqué pour hacker le système, mais du coup, c’est plus sécure
Ca montre que Max Hauri a pris la chose au sérieux, et a imposé au fabriquant des normes de sécurité plus élevées que les siennes.
Le fabriquant étant le même, toutes les prises citées ci-dessus répondent très certainement aux mêmes commandes une fois la paramétrage de base effectué. En tous cas en ce qui concerne les commandes directes. Par contre, pour ce qui est des commandes depuis le site (cloud), c’est probablement une autre histoire. Je les différencierai.
Les commandes locales utiles pour l’automatisation
Commande 200: Commande d’alimentation On/Off
La commande 200 est celle dont vous aurez besoin pour automatiser vos prises, et les intégrer dans vos outils d’automatisation comme Home Assistant, Fibaro, ou tout autre serveur ou outil de domotique. Elle permet de commander l’état de la prise multiple ou de chaque prise individuellement. Les paramètres suivants sont utilisés:
- Port: Il s’agit de la prise. Le port 0 concerne la prise entière et permet d’allumer ou d’éteindre les six prises en une seule commande. Les prises correspondent quant à elles aux ports 1 à 6.
- State: Il s’agit de l’état. Celui-ci peut être 0 (éteint) ou 1 (allumé)
Voici donc la commande pour allumer toute la prise:
http://maxsmart-sandbox/?cmd=200&json={"port":0,"state":1}
Et celle pour éteindre la prise 6
http://maxsmart-sandbox/?cmd=200&json={"port":6,"state":0}
Dans les deux cas, la réponse du serveur est:
{"response":200,"code":200}
Commande 201: Nommer la multiprise et les prises:
Si vous souhaitez vous appuyer sur le cloud ou l’APP mobile, donner un nom à vos prises peut être utile. C’est la commande 201 qui s’en charge. Attention: La commande 201 sans paramètre va rendre votre prise inopérable depuis l’appli ou le site cloud. Vous devrez la relancer pour redonner un nom à votre prise pour que ça marche.
Les paramètres sont:
- port: Le numéro de la prise à nommer. Comme ci-dessus, le port 0 correspond à la multiprise.
- name: Le nom choisit. Je vous conseille d’évier les caractères spéciaux et les espaces. Même si ça doit fonctionne en théorie, on évite des surprises.
Pour donner un nom à la multiprise:
http://maxsmart-sandbox/?cmd=201&json={"port":0,"state":"Multimedia"}
Pour donner un nom à la prise 3:
http://maxsmart-sandbox/?cmd=201&json={"port":3,"name":"Television"}
Dans les deux cas, la réponse du serveur est:
{"response":201,"code":200}
Les commandes locales pratiques mais pas forcément utiles
Pour trouver des commandes, j’ai créé un script Linux en boucle, pour tester les commandes 100 à 999. C’était un peu cahotique. D’une part, je suis allé à l’aveugle, ne sachant aucunement quels sont les paramètres nécessaires à chaque commande. Ainsi, plusieurs commandes ont pour effet de redémarrer la multiprise, et dans certains cas, de la remettre à zéro, voire de la rendre pratiquement inutilisable. Mais j’ai pu me sortir de chaque faux pas.
Je me suis également servi, afin d’affiner ma recherche, de Packet Capture sur mon téléphone Android pour capturer les commandes envoyées par l’application.
Premier constat: Il n’existe aucune commande qui renvoie le nom de la multiprise ou des ports. J’en conclu que cette information est contenue dans un fichier stocker dans chaque prise, qui est automatiquement envoyé à l’application ou au cloud de la marque lors de la connexion au réseau, car nous le verrons, le site du fournisseur est inscrit dans les prises.
Voici les commandes que j’ai pu définir:
Commande 124: Identifiants matériel
Elle retourne les informations suivantes:
- l’adresse PCLMAC (adresse MAC du module PowerLAN)
- la clé PCLDAK (DAK = Device Access Key)
- Le CPUid (il s’agit de l’identifiant unique de processeur)
- Le serveur cloud
L’intérêt de cette commande est relativement limité, à part peut-être pour trouver l’adresse du site cloud. Les données PCLDAK et PCLMAC sont, pour le cas de Max Hauri, inscrits sur une étiquette collée sous la multiprise. On le verra, la commande suivante m’a posé des problèmes, et j’étais très content de trouver ces informations.
Appel de la commande 124:
http://maxsmart-sandbox/?cmd=124
Réponse du serveur:
{"response":124,"code":200,"data":{"cpuid":"30FFD3054253393123450843","plcmac":"BC2BD701234","plcdak":"MLRM-ABCD-EFGH-GHVX","server":"www.maxsmart.ch"}}
Commande 122: Paramétrage des données MAC, SAK, PCLMAC, PCLDAK
Je le disais dans mon précédent article, certaines commandes sont dangereuses, et peuvent compromettre le fonctionnement de la prise. J’en ai fait les frais avec la commande 122. La commande 122 permet de paramétrer les éléments d’identification hardware. Lors de ma recherche, j’ai exécuté toutes les commandes sans paramètres. Ceci a eu pour effet d’effacer la MAC, la PCLMAC, la DAK, et la SAK. L’effet a été le suivant:
- L’adresse MAC et l’adresse PCLMAC ont été remplacées par des MAC internes (non officielles). Il était donc toujours possible d’utiliser les prises en local, mais impossible de savoir si ces MAC n’auraient pas à un moment ou un autre posé un problème de conflit
- Les clés PCL SAK et DAC ont été supprimées. Lors de la requête 124, une séries de caractères spéciaux étaient présentés à la place. L’effet a été l’impossibilité de communiquer avec le service cloud de Max Hauri
Par déduction, j’ai tenté de refaire la commande pour remettre les données en place. J’ai réussi. Les données en questions, je le disais, se trouvent collées sur une étiquette à l’arrière de la prise. On en trouve également une partie dans la configuration récupérée du Cloud (on verra plus bas les commandes pour ça).
Voici donc la commande 122 complète que j’ai exécuté pour remettre la prise en état, dans laquelle j’ai ajouté le numéro de série (sn). sans lui, la commande n’a pas fonctionné.
http://maxsmart-sandbox/?cmd=122&json={"plcmac":"BC212345A67","plcdak":"MLRM-ABCD-DKEF-GGHX","sn":"SWP6023002123453","mac":"BC:2B:D7:00:FF:FF","sak":"367976612345"}
Le résultat est un code 200, indiquant le succès de la commande:
{"response":122,"code":200}
Une fois cette commande exécutée, tout est rentré dans l’ordre.
Commande 120: Factory Reset
La commande 120 avec le paramètre op=2 (opération 2) opère un retour à l’état d’usine. Il supprime donc l’ensemble des statistiques et de la configuration. A noter qu’il n’a aucun impact sur les identifiants matériels. Il n’est donc d’aucune utilité si on a perdu les identifiants dont je parle plus haut. Le paramètre “op” a plusieurs valeurs possibles, mais j’ai été incapable de déterminer leur utilité.
http://maxsmart-sandbox/?cmd=120&json={"op":2}
Réponse du serveur:
{"response":120,"code":200}
Commande 511: Etat des prises
La commande 511 permet de récupérer l’état de l’ensemble des prises: Alimentation, consommation et ampérage. Pour les plus avancés d’entre vous, ceci permettra, par exemple, de récupérer ces informations pour les mettre dans une base de données, et ainsi vous affranchir de l’utilisation du Cloud pour suivre votre consommation. Elle permet également de savoir quel est l’état de chaque interrupteur. C’est de ceci qu’on se servira dans le cadre de l’intégration à Home Assistant ou d’autres outils similaires, pour présenter l’état des prises sur le panneau d’accueil.
La commnande 511 s’exécute sans paramètres:
http://maxsmart-sandbox.fritz.box/?cmd=511
Et le serveur répondra de la manière suivante:
{"response":511,"code":200,"data":{"watt":["39.37","41.11","39.02","2.78","1.74","47.38"],"amp":["28.7","30.1","29.6","6.6","4.5","24.8"],"switch":[1,1,1,1,1,1]}}
L’interprétation des données est assez simple: Les champs contiennent à chaque fois six valeurs. Chaque valeur correspond à une prise, dans l’ordre. Le première valeur correpsond à la prise 1, la seconde à la prise 2, etc… Ensuite, Watt, Amp et switch parlent d’eux-même. Contrairement à Revogi, nous avons ici dans le champs watt, les watts consommés à l’instant T. Revogi utilise les milliwatt et les milliamp, ce qui oblige à une division par mille dans le cas des utilisateurs Revogi qui souhaitent récupérer ces informations.
Commandes utiles vers le cloud MaxSmart
Comme je l’ai dit plus haut, on ne peut pas récupérer les noms des prises et multiprises à travers l’API. Du moins, je n’ai pas trouvé la commande pour ça. Si l’on souhaite exploiter ces données, une solution est d’utiliser le cloud du fabriquant, qui lui aussi, utilise des API. Ainsi, grâce à Packet Capture, j’ai pu déterminer les commandes permettant de récupérer les informations utiles. La première est indispensable puisqu’elle ouvre une session sur le cloud.
Commande 101: Cloud login
La commande 101 vers le site du fournisseur permet donc d’ouvrir une session vers votre compte Cloud. Les paramètres sont:
- username: Votre nom d’utilisateur cloud smartcloud
- password: Votre mot de passe cloud smartcloud
Voici ce que ça donne:
https://www.maxsmart.ch/services/ajax.html?cmd=101&json={"username": "email@domain.ltd", "password": "mot de passe"}
La réponse du serveur sera:
{"code":200,"data":{"user_id":"1234","domain":"www.maxsmart.ch","name":"","regid":"MHM200012345","avatar":"","message":"login succeeds","url":"http:\/\/www.maxsmart.ch:80\/services\/ajax.html","token":"tkv1lk2j3k4gymezugz0cnnz8uvoduizaep1234587v7wn15z"},"response":101}
Il est indispensable d’ouvrir la connexion avant d’exécuter la commande suivante.
Commande 500: Informations globales
La commande 500 permet de récupérer les noms des prises. Pas forcément utile si on commence à automatiser from scratch, puisque qu’on a plus haut la commande pour paramétrer le nom, et qu’on peut très bien faire sans, pour autant que ce soit bien documenté. Par contre, si comme moi, vous avez déjà tout configurer, c’est pratique. Un appel sur cette page et l’on peut reprendre tous les noms dans avoir à se prendre la tête (pour autant que l’on sache réutiliser les données json).
https://www.maxsmart.ch/services/ajax.html?cmd=500&json={"dev": "all"}
Dans l’exemple ci-dessous, j’ai sur mon compte une prise multiple à 6 sockets (Power Station, ou Power Strip), et une prise simple (Smart Plug). Je présente ici dessous la réponse json formattée pour une meilleure lisibilité des données que l’on peut y trouver:
{
"code":200,
"data":[
{
"ver":"1.30",
"pname":[
"Ampli TV",
"Tuner TV",
"Sunrise TV",
"Nvidia Shield",
"Transporter",
"Harmony"
],
"nver":"1.30",
"line":1,
"socket_type":"UDP(Mina)",
"ip":"0.0.0.0",
"mac":"BC:2B:D7:00:4A:70",
"uid":"",
"password":"",
"dateAdd":"2017-11-26 00:30:45",
"name":"TV1",
"gateway_ip":"12.234.47.34",
"sn":"SWP602312345668",
"protect":0,
"sak":"68651234564A",
"register":1
},
{
"ver":"1.30",
"nver":"1.30",
"line":1,
"socket_type":"UDP(Mina)",
"ip":"0.0.0.0",
"mac":"BC:2B:D7:00:FF:12",
"uid":"",
"password":"",
"dateAdd":"2017-11-28 17:39:41",
"name":"voiture",
"gateway_ip":"12.234.47.34",
"sn":"SWP1023002123455",
"protect":0,
"sak":"524712345630",
"register":1
},
],
"response":500
}
Il y a d’autres commandes à découvrir. Mais pour l’instant, vous avez là l’essentiel à votre disposition pour commencer à jouer et à automatiser vos prises MaxSmart. Si vous avez un des autres modèles, je serai curieux de savoir si les API sont les mêmes, et s’il y a des similitudes. Alors laissez un commentaire 🙂
Bonjour,
Merci pour ton travail, j’ai tenté de faire la même chose par contre je n’arrive pas à attaquer la multiprise en direct avec son adresse IP. J’ai acheté la multiprise très récemment est ce qu’une mise à jour de firmware peut causer ce problème ?
Salut. Est-ce que tu as bien trouvé l’adresse IP de la prise ? Je sais que MaxSmart propose une mise à jour via son application pour mes prises. Je ne l’ai pas faite, car je me méfie. Je m’attends justement à ce qu’il ne soit plus possible de l’attaquer sur le port 80.
Je serais curieux en effet de constater que c’est le cas. Tu peux me dire comment est connecté ta prise multiple à ton réseau ? et comment tu en as déterminé l’adresse IP ?
J’ai utilisé l’application de revogi qui me donne l’adresse ip de la prise connecté en wifi. Ensuite j’ai confirmé sur mon routeur que c’était cohérent. La version du firmware est la 5.04.
La prise répond au ping ?
Que donne l’URL http://ip-de-la-prise/?cmd=124
Bonjour,
Le ping fonctionne bien mais par contre aucun retour sur http://ip-de-la-prise/?cmd=124 (j’utilise postman en mode get).
et aucune autre commande ne fonctionne ? As-tu essayer avec un outil de capture depuis ton mobile comme proposé sur mon article ? Arrives-tu à obtenir le lien envoyé par l’appli ?
C’est dommage. Ca rend ces prises bien moins intéressantes pour l’intégration. Quel système de domotique utilises-tu ?
Oui, j’ai essayé avec le logiciel capture voici les retours des body et header :
L’envoi se fait en SSL sur mon adresse IP internet publique, il n’y a plus de trame interne.
GET /services/ajax.html?cmd=511&json=%7B%22protocol%22%3A3%2C%22sn%22%3A%5B%22XXXXXXXXXXXX%22%5D%7D HTTP/1.1
Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXX
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.0; Lenovo P2a42 Build/NRD90N)
Host: eu.revogi.net
Connection: Keep-Alive
Accept-Encoding: gzip
HTTP/1.1 200 OK
Server: nginx/1.12.1 (Ubuntu)
Date: Mon, 02 Apr 2018 06:29:56 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache
Expires: 0
Pragma: No-cache
Content-Encoding: gzip
{“code”:200,”data”:[{“softver”:”5.04″,”amp”:[225,13,91,453,82,20],”online”:1,”sn”:”XXXXXXXXXXXXXX”,”watt”:[35745,0,11762,97403,8293,1943],”switch”:[1,1,1,1,1,1]}],”response”:511,”sn”:””}
GET /services/ajax.html?cmd=511&json=%7B%22protocol%22%3A3%2C%22sn%22%3A%5B%22XXXXXXXXXXXXXXXXX%22%5D%7D HTTP/1.1
Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXX
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.0; Lenovo P2a42 Build/NRD90N)
Host: eu.revogi.net
Connection: Keep-Alive
Accept-Encoding: gzip
Tu as plusieurs approches. La première, c’est de vérifier si l’application fonctionne si tu n’es pas connecté à internet. Pour ce faire, débranche simplement ton câble DSL de ta prise téléphone, et coupe la 4G de ton téléphone. Ne garde que le WIFI, et regarde si tu arrives à commander tes prises. Si oui, récupère alors les commandes. Ce seront les commandes d’accès direct à tes prises.
La deuxième est de passer par le serveur revogi. Ca correspond à mon exemple en bas de l’article. Tu remplaces simplement http://www.maxsmart.ch par eu.revogi.net. Idem, dans ce cas, récupères simplement les commandes par capture.
L’inconvénient si tu ne trouves pas comment faire un accès direct, c’est que tu es obligé d’avoir internet qui fonctionne pour commander tes prises.
Si tu as la patience et l’énergie, l’autre alternative est de mettre un sniffer entre ta prise et internet. Si tu maîtrises le réseau, et que tu as un ordinateur avec deux connections, c’est facile à faire. Il suffit de faire un bridge entre ta carte réseau et ta carte Wifi par exemple, et de connecter ta Revogi au RJ45 de ton PC. Tu vérifies qu’elle est bien connectée au réseau et tu balances. Avec Wireshark, tu captures ce qui passe. Et bien sûr, ne pas avoir d’autre périphérique PowerLAN branché à internet à ce moment là, pas que le traffic internet vers la prise puisse venir d’ailleurs que de ton PC.
Tiens moi au courant. Je suis curieux de savoir quelle solution tu choisis et à quoi tu arrives.
Tu ne m’as pas répondu concernant le serveur domotique que tu souhaites utiliser.
J’ai coupé l’accès internet à la prise par l’intermédiaire de mon routeur et malheureusement, elle ne fonctionne plus sans cet accès.
La partie en passant par les serveurs revogi ne m’intéresse pas trop mais c’est une solution pour interagir avec ma solution domotique JEEDOM.
En tout cas merci du coup de main.
A tout hasard, tu peux aussi jeter un oeil à ce fil: https://community.home-assistant.io/t/revogi-smart-power-strip/11273/27
Si ça peut te donner des indices supplémentaires. Nous avions constaté des différences entre les Revogi et les MaxSmart. La première étant que la MaxSmart est PowerLan alors que la Revogi est Wifi (un lapsus de ma part dans un comm précédent)
Bonjour
Merci pour ce travail
ça m’a bien aidé, car impossible de faire fonctionner le schedule sur le site maxsmart…
bonne journée !
a++
christophe
bonjour
j’ai une multiprise mcl et j’ai essayé ceratines des commandes et notamment les commandes en utilisant le nom du site mcl france
https://microcable.fr/services/ajax.html?cmd=101
mais le site ne semble pas equipé de l’equivalent pour acceder au commande cloud
aurais tu un equivalent cloud pour cette prise
Remarque l’appli android fonctionne il est donc probable que le lien ne soir pas le bon
Salut. Ton message m’a échappé. J’en suis désolé. Malheureusement, non, je ne connais pas l’URL du cloud de MCL. As-tu essayé les commandes locales ? est-ce que tu arrives à quelque chose ?Est-ce que l’appli fonctionne si tu n’as pas accès à internet ? C’est un bon indicateur. Le plus simple pour tester, débranche ta box du mur et assures-toi que ton téléphone est sur WIFI et pas 4G.
Si ça marche, c’est que c’est en local, dès lors ça veut dire qu tu as encore le firmware qui permet l’utilisation hors cloud, ce qui, pour moi, est une bien meilleure solution.
Par exemple, avec MaxSmart, tout d’un coup, pour une raison inconnue de moi, comme de eux, mon compte a disparu du cloud. Et comme le produit n’est plus vendu, ils refusent de faire quoi que ce soit pour le restaurer. Déjà qu’ils maintiennent un serveur cloud pour MaxSmart 1 parce qu’ils en ont vendu, ça doit bien leur faire chier… Ca coute, de maintenir un truc obsolète. Un jour, ils vont mettre ce serveur à la retraite. et toutes les personnes qui ont acheté ces produits, et ne peuvent que y accéder par le cloud pourront les jeter.