{"id":1879,"date":"2017-12-03T20:49:48","date_gmt":"2017-12-03T19:49:48","guid":{"rendered":"https:\/\/akim.sissaoui.com\/?p=1879"},"modified":"2017-12-17T20:27:50","modified_gmt":"2017-12-17T19:27:50","slug":"maxsmart-resapi","status":"publish","type":"post","link":"https:\/\/akim.sissaoui.com\/en\/informatique\/maxsmart-resapi\/","title":{"rendered":"MaxSmart\/Revogi &#8211; Prise multiple automatisable et RestAPI"},"content":{"rendered":"<p><a href=\"https:\/\/akim.sissaoui.com\/wp-content\/uploads\/2017\/12\/maxsmart.jpg\" rel=\"MaxSmart Power Station\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-1882\" title=\"MaxSmart Power Station\" src=\"https:\/\/akim.sissaoui.com\/wp-content\/uploads\/2017\/12\/maxsmart-768x614.jpg\" alt=\"\" width=\"429\" height=\"343\" srcset=\"https:\/\/akim.sissaoui.com\/wp-content\/uploads\/2017\/12\/maxsmart-768x614.jpg 768w, https:\/\/akim.sissaoui.com\/wp-content\/uploads\/2017\/12\/maxsmart-300x240.jpg 300w, https:\/\/akim.sissaoui.com\/wp-content\/uploads\/2017\/12\/maxsmart-120x96.jpg 120w, https:\/\/akim.sissaoui.com\/wp-content\/uploads\/2017\/12\/maxsmart.jpg 800w\" sizes=\"(max-width: 429px) 100vw, 429px\" \/><\/a>J&#8217;ai r\u00e9cemment achet\u00e9 plusieurs prises multiples MaxSmart de Max Hauri. Digitec a fait une offre exceptionnelle \u00e0 CHF 75.00 pour la Power Station (multiprise six sockets).<\/p>\n<p>C&#8217;est un produit int\u00e9ressant \u00e0 plus d&#8217;un titre. La multiprise elle-m\u00eame comporte un port RJ45. Une fois branch\u00e9e sur le routeur r\u00e9seau, elle cr\u00e9e un r\u00e9seau PowerLAN 500Mb\/s. Il est d\u00e8s lors possible de contr\u00f4ler jusqu&#8217;\u00e0 15 p\u00e9riph\u00e9riques MaxSmart dans la maison, \u00e0 condition que l&#8217;on soit, bien entendu, derri\u00e8re le m\u00eame compteur \u00e9lectrique. Il s&#8217;agit ici d&#8217;une limitation PowerLAN, et non MaxSmart. Il est ensuite possible de contr\u00f4ler et d&#8217;automatiser chaque prise depuis son t\u00e9l\u00e9phone mobile ou depuis internet.<\/p>\n<p><!--more--><\/p>\n<h2>MaxSmart, c&#8217;est quoi ?<\/h2>\n<p>La gamme MaxSmart offre plusieurs produits:<\/p>\n<ul>\n<li>Power Station: La prise multiple<\/li>\n<li>Power Plug: La prise unique<\/li>\n<li>PowerLAN station: Un &#8220;modem&#8221; PowerLAN<\/li>\n<li>AirSense: Un d\u00e9tecteur de temp\u00e9rature et d&#8217;humidit\u00e9<\/li>\n<li>Motion Sense: Un d\u00e9tecteur de mouvements<\/li>\n<li>HD IP Camera: Une cam\u00e9ra IP<\/li>\n<\/ul>\n<p>Je ne m&#8217;attarderai pas sur les derniers produits, et ne parlerai dans cet article que des deux premiers, \u00e0 savoir la Power Station et la Power Plug.<\/p>\n<p>Ce produits proposent les fonctionnalit\u00e9s suivantes:<\/p>\n<ul>\n<li>Suivi de la consommation pour chaque prise, et pour l&#8217;ensemble de la prise (y.c. multiple)<\/li>\n<li>Contr\u00f4le d&#8217;alimentation prise par prise, ou pour la multiprise compl\u00e8te<\/li>\n<li>Programmation d&#8217;allumage et d&#8217;extinction des prises\n<ul>\n<li>Un g\u00e9n\u00e9rateur de programme al\u00e9atoire est disponible, afin de simuler la pr\u00e9sence en cas d&#8217;absence<\/li>\n<\/ul>\n<\/li>\n<li>Extinction diff\u00e9r\u00e9e de la prise<\/li>\n<\/ul>\n<p>Le contr\u00f4le est possible de deux fa\u00e7ons:<\/p>\n<ul>\n<li>Depuis une application Android ou iOS<\/li>\n<li>Depuis le site de maxsmart.ch<\/li>\n<\/ul>\n<p>Je rel\u00e8verai, et c&#8217;est une excellente chose, que la connexion au cloud maxsmart n&#8217;est pas obligatoire. Le syst\u00e8me peut fonctionner sans connexion internet, et sans connexion au Cloud. C&#8217;est un tr\u00e8s tr\u00e8s gros plus par rapport \u00e0 des solutions comme NetAtmo qui ne fonctionnent pas sans acc\u00e8s internet. Il est possible de nommer chaque prise multiple, et chaque prise ind\u00e9pendante. Ainsi, on pourra tr\u00e8s facilement noter quel appareil est sur quelle prise. C&#8217;est un excellent point pur l&#8217;organisation.<\/p>\n<p>Pour les points positifs de la Power Station (multiprise), je retiens:<\/p>\n<ul>\n<li>La qualit\u00e9 de fabrication: C&#8217;est tr\u00e8s solide et tr\u00e8s bien fini. Ca donne un sentiment de s\u00e9curit\u00e9 et de durabilit\u00e9<\/li>\n<li>Le codage des prises par couleur, la num\u00e9rotation apparente, facilitent la mise en oeuvre et l&#8217;inventaire<\/li>\n<li>L&#8217;application et le cloud sont relativement bien fait et tr\u00e8s r\u00e9actifs, malgr\u00e9 les points n\u00e9gatifs que je soul\u00e8verai plus bas<\/li>\n<li>Le prix: M\u00eame hors offre sp\u00e9ciale, \u00e0 CHF 125.00 pour la prise multiple 6 sockets, en T13 (prises suisse), je n&#8217;ai rien trouv\u00e9 d&#8217;\u00e9quivalent. C&#8217;est exceptionnel. A 125CHF, c&#8217;est moins cher que deux prises simples de la m\u00eame gamme. Je suis franchement \u00e9pat\u00e9.<\/li>\n<li>La possibilit\u00e9 de cr\u00e9er un r\u00e9seau PowerLAN sans appareil supplimentaire<\/li>\n<\/ul>\n<p>Il est d&#8217;ailleurs \u00e0 noter, concernant ce dernier point, que le r\u00e9seau PowerLAN cr\u00e9\u00e9 par la prise est standard. Il fonctionnera avec tous les appareils standards du march\u00e9 exploitant le protocole PowerLAN. A ce sujet, malgr\u00e9 ce que le mode d&#8217;emploi indique, il n&#8217;est pas du tout n\u00e9cessaire d&#8217;acqu\u00e9rir une PowerLAN station pour cr\u00e9er le r\u00e9seau PowerLAN. Du moment que la premi\u00e8re multiprise est proche du routeur, on peut la brancher directement par le port RJ45 au routeur, et elle cr\u00e9era alors le r\u00e9seau PowerLAN pour l&#8217;ensemble des prises (15 au maximum).<\/p>\n<h2>Et alors o\u00f9 est le probl\u00e8me ?<\/h2>\n<p>Je d\u00e9taille les points n\u00e9gatifs au fur et \u00e0 mesure de mon article, puisque qu&#8217;ils sont la raison de celui-ci. On d\u00e9couvre par exemple que l&#8217;application et le cloud sont centr\u00e9s sur l&#8217;appareil lui-m\u00eame, c&#8217;est \u00e0 dire que lorsque l&#8217;on souhaite \u00e9teindre un appareil, ou voir les statistiques, ou encore programmer des actions, on ne peut le faire qu&#8217;au sein d&#8217;une m\u00eame prise (multiple ou simple) alors que ce ne serait pas n\u00e9cessaire. Or, j&#8217;ai aujourd&#8217;hui chez moi 6 prises multiples et une simple. J&#8217;aimerais pouvoir travailler avec l&#8217;ensemble de mes prises sans tenir compte de quelle multiprise commande quel appareil. Il s&#8217;agit ici d&#8217;un changement mineur dans le d\u00e9veloppement de l&#8217;application. Et \u00e7a ferait une tr\u00e8s grande diff\u00e9rence. J&#8217;ai tent\u00e9 de communiquer avec Max Hauri \u00e0 travers leur email, seul contact possible, mais ils ne semblent absolument pas \u00e0 l&#8217;\u00e9coute. J&#8217;esp\u00e8re qu&#8217;ils ne consid\u00e8rent pas ce produit d\u00e9j\u00e0 mort. Ca serait vraiment dommage.<\/p>\n<p>Comme tous les appareils connect\u00e9s aujourd&#8217;hui, les produits MaxSmart sont command\u00e9s par restAPI. Qu&#8217;est-ce que c&#8217;est restAPI ? Il s&#8217;agit de commandes que l&#8217;on envoie par un lien URL (comme si on voulait ouvrir une page internet). Ce lien contient la destination et la commande de l&#8217;appareil que l&#8217;on souhaite commander. Je sch\u00e9matise ici afin de mieux vous faire comprendre: Imaginons que vous avez une cam\u00e9ra IP avec l&#8217;adresse IP 192.168.1.12. Vous souhaitez d\u00e9sactiver la d\u00e9tection de mouvement. Il suffirait, par exemple, d&#8217;ouvrir le lien suivant sur votre navigateur internet pour le faire, du genre:<\/p>\n<pre lang=\"txt\">http:\/\/192.168.1.12\/?command=motiondetection&state=0\r\n<\/pre>\n<p>Dans cet exemple, on fait appel \u00e0 la commande &#8220;motiondetection&#8221;, et on lui ordonne le statut &#8220;0&#8221;. La r\u00e9ponse de la cam\u00e9ra sera http 200 si l&#8217;op\u00e9ration est correct. Si le chemin de l&#8217;API est faux, vous aurez une r\u00e9ponse http 404 (page non trouv\u00e9e&#8230; vous connaissez n&#8217;est-ce pas ?). L&#8217;application MaxSmart utilise donc forc\u00e9ment des APIs pour envoyer les commandes aux prises.<\/p>\n<p>Aujourd&#8217;hui, donc, la grande majorit\u00e9 des appareils connect\u00e9s, sinon tous, fonctionnent sur ce principe. J&#8217;ai chez moi une cam\u00e9ra IP D-Link qui fonctionne sur ce principe. J&#8217;ai eu beaucoup de peine \u00e0 trouver les API propre \u00e0 la cam\u00e9ra, car bien s\u00fbr, elles d\u00e9pendent de chaque constructeur, voire de chaque produit, et elles ne sont pas toujours publique. Pourtant, si elles \u00e9taient publiques, elles permettraient d&#8217;automatiser tr\u00e8s facilement toutes les actions. Il serait ainsi facile de commander une prise MaxSmart lorsqu&#8217;il y a d\u00e9tection de mouvement avec la cam\u00e9ra D-Link gr\u00e2ce \u00e0 une application d&#8217;automatisation comme MacroDroid qui permet d&#8217;envoyer des URL (donc utiliser des API) pour obtenir des informations ou pour enclencher des actions, ou, pourquoi pas, permettre \u00e0 Logitech d&#8217;int\u00e9grer les produits MaxSmart dans son support de produit. Il serait alors possible, sur une pression d&#8217;une t\u00e9l\u00e9commande Harmony, d&#8217;allumer les prises \u00e9lectriques, avant d&#8217;allumer la TV, le tuner, l&#8217;ampli, etc&#8230;. et d&#8217;\u00e9teindre le courant \u00e0 la fin de l&#8217;usage pour \u00e9viter l&#8217;utilisation en veille.<\/p>\n<p>L\u00e0 encore, on reconna\u00eet l&#8217;ignorance de MaxSmart, puisque ses APIs ne sont pas diffus\u00e9es. Lorsque l&#8217;on cherche dans leur FAQ, on y trouve une explication capillotract\u00e9e pr\u00e9tendant qu&#8217;il s&#8217;agit d&#8217;une d\u00e9cision li\u00e9e au support. Si vous lisez mon article, Max Hauri (je doute), prenez donc conscience de l&#8217;importante d&#8217;\u00eatre \u00e0 l&#8217;\u00e9coute de vos clients et du marcher. L&#8217;avenir est \u00e0 l&#8217;automatisation. Ce n&#8217;est pas en fermant vos produits et en les limitants \u00e0 votre \u00e9cosyst\u00e8me que vous aurez du succ\u00e8s.<\/p>\n<p>Bref ! C&#8217;\u00e9tait l&#8217;introduction. Vous \u00eates toujours l\u00e0 ? Alors on peut passer \u00e0 la suite, car il y a une parade.<\/p>\n<p>On arrive donc \u00e0 l&#8217;objet de l&#8217;article: je n&#8217;aime donc pas l fa\u00e7on dont MaxSmart envisage le fonctionnement de son application, et j&#8217;aimerais m&#8217;en affranchir. Pour \u00e7a, il faut que je parte \u00e0 la d\u00e9couverte des APIs par mes propres moyens, puisque Max Hauri ne veut pas les partager.<\/p>\n<h2>Et comment s&#8217;y prend-t-on ?<\/h2>\n<p>Il existe des applications permettant de capturer ce qui passe sur le r\u00e9seau. Sur Windows ou sur Mac, il s&#8217;agit de WireShark entre autre. C&#8217;est le meilleur et le plus connu. En lan\u00e7ant cette application, on peut voir absolument tout ce qui se passe entre l&#8217;interface r\u00e9seau de l&#8217;ordinateur, et le reste du r\u00e9seau (et donc de l&#8217;internet). Attention, \u00e7a balance !<\/p>\n<p>Il existe un pendant \u00e0 Android que j&#8217;ai trouv\u00e9 efficace et facile d&#8217;utilisation, il s&#8217;agit de <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=app.greyshirts.sslcapture\" target=\"_blank\" rel=\"noopener\">Packet Capture<\/a>. Cette application va vous demander d&#8217;identifier une application. Elle va ensuite ouvrir un VPN, et tout le trafic qui sera g\u00e9n\u00e9r\u00e9 par l&#8217;application en question sera alors intercept\u00e9. Il est alors possible de voir les liens, leur contenu, leur destination, bref&#8230; il est possible de d\u00e9couvrir les API. C&#8217;est ce que j&#8217;ai fait pour trouver comment commander les prises MaxSmart sans passer par leur application ou leur Cloud.<\/p>\n<p>Pour l&#8217;instant, je n&#8217;ai cherch\u00e9 que comment allumer et \u00e9teindre. En m\u00eame temps, c&#8217;est le plus important. Je n&#8217;ai pas cherch\u00e9 comment r\u00e9cup\u00e9rer les statistiques. Je ferai \u00e7a peut-\u00eatre dans un deuxi\u00e8me temps, car j&#8217;aimerais bien les r\u00e9cup\u00e9rer dans ma propre base de donn\u00e9es et les consolider, pour ne pas avoir \u00e0 d\u00e9pendre de leur application, et surtout, pour pouvoir voir l&#8217;ensemble de la conso, et non la conso par multiprise.<\/p>\n<p>J&#8217;ai donc lanc\u00e9 l&#8217;application Packet Capture, puis j&#8217;ai allumer la prise num\u00e9ro 2 d&#8217;une de mes multiprise. Voici ce que \u00e7a donne:<\/p>\n<p>L&#8217;application MaxSmart envoie l&#8217;URL suivant:<\/p>\n<pre lang=\"txt\">GET \/?cmd=200&json=%7B%22sn%22:%22SWP6023002012345%22,%22port%22:2,%22state%22:1%7D HTTP\/1.1\r\nHost: 192.168.1.169\r\nConnection: Keep-Alive\r\nUser-Agent: Apache-HttpClient\/UNAVAILABLE (java 1.4)\r\n<\/pre>\n<p>Et re\u00e7oit la r\u00e9ponse suivante:<\/p>\n<pre lang=\"txt\">HTTP\/1.1 200 OK\r\nContent-Length: 27\r\nContent-Type:text\/plain<\/pre>\n<p>La prise r\u00e9pond avec HTTP 200 qui indique que la commande a bien \u00e9t\u00e9 re\u00e7u et ex\u00e9cut\u00e9e.<\/p>\n<p>Je d\u00e9couvre donc ici plusieurs choses:<\/p>\n<ul>\n<li>L&#8217;adresse IP de ma prise est 192.168.1.169\n<ul>\n<li>Voil\u00e0 qui est utile. Je vais pouvoir aller dans mon routeur et fixer l&#8217;adresse IP pour \u00e9viter qu&#8217;elle change. Ca va me faciliter ensuite la vie pour l&#8217;automatisation. Cette op\u00e9ration n&#8217;est pas forc\u00e9ment n\u00e9cessaire: les prises \u00e9tant en permanence branch\u00e9es sur le r\u00e9seau, elles devraient toujours recevoir la m\u00eame adresse IP. Reste que je pr\u00e9f\u00e8re \u00e9viter les surprises<\/li>\n<\/ul>\n<\/li>\n<li>Nous sommes au format json. C&#8217;est un format tr\u00e8s utilis\u00e9 pour les RestAPI<\/li>\n<li>C&#8217;est du JAVA. On est pas dans la merde. Bon en m\u00eame temps, \u00e7a marche, on va pas se plaindre \ud83d\ude42 C&#8217;est un petit clin d&#8217;oeil. Java est sur le d\u00e9clin car c&#8217;est lourd, et fastidieux. Mais au final, tant que \u00e7a marche, \u00e7a n&#8217;a pas d&#8217;impact.<\/li>\n<\/ul>\n<p>A noter que le retour ci-dessus est encod\u00e9 en ASCII. JSON est un format qui utilise des accolades pour encapsuler les commandes. Pour pouvoir lire correctement l&#8217;URL, envoy\u00e9e, on peut utiliser un site en ligne pour d\u00e9coder. Pour cet article, j&#8217;ai utilis\u00e9 https:\/\/www.url-encode-decode.com\/.<\/p>\n<p>Et voici ce que \u00e7a donne:<\/p>\n<pre lang=\"txt\">\/?cmd=200&json={\"sn\":\"SWP6023002012345\",\"port\":2,\"state\":1}<\/pre>\n<p>C&#8217;est tout de suite plus lisible, c&#8217;est-ce pas ?<\/p>\n<p>On voit maintenant que l&#8217;URL contient quatre informations:<\/p>\n<ul>\n<li>La commande (200)\n<ul>\n<li>Il s&#8217;agit ici en toute logique de la commande d&#8217;\u00e9tat \u00e9lectrique<\/li>\n<\/ul>\n<\/li>\n<li>Le num\u00e9ro de s\u00e9rie de la prise (sn)<\/li>\n<li>Le port (le num\u00e9ro de la prise sur la prise multiple en fait) (2)<\/li>\n<li>L&#8217;\u00e9tat (1 pour allumer)<\/li>\n<\/ul>\n<p>La prise a renvoy\u00e9 une r\u00e9ponse \u00e9galement sous forme json<\/p>\n<pre lang=\"txt\">{\"response\":200,\"code\":200}\r\n<\/pre>\n<p>&nbsp;Une application pour l&#8217;automatisation va donc recevoir response 200 et comprendre que l&#8217;action a \u00e9t\u00e9 effectu\u00e9e avec succ\u00e8s.<\/p>\n<p>Pour v\u00e9rifier que les commandes d\u00e9couvertes sont les bonnes, j&#8217;ai envoy\u00e9 sur mon firefox les URLs suivantes, pour allumer:<\/p>\n<pre lang=\"txt\">http:\/\/192.168.1.169\/?cmd=200&json={\"sn\":\"SWP6023002012345\",\"port\":2,\"state\":1}<\/pre>\n<p>puis pour \u00e9teindre la prise<\/p>\n<pre lang=\"txt\">http:\/\/192.168.1.169\/?cmd=200&json={\"sn\":\"SWP6023002012345\",\"port\":2,\"state\":0}<\/pre>\n<p>Objectif atteint avec succ\u00e8s. Mais je dois admettre que mettre le num\u00e9ro de s\u00e9rie me d\u00e9range. C&#8217;est un long code, et probablement inutile puisque chaque appareil (prise simple ou prise multiple) a sa propre adresse IP. Le num\u00e9ro de s\u00e9rie est utile pour identifier la prise la premi\u00e8re fois, et pourquoi pas, pour fixer l&#8217;adresse IP dans le serveur DHCP. Mais une fois que c&#8217;est fait, on n&#8217;en a plus rien \u00e0 faire ! J&#8217;ai donc tent\u00e9 la commande sans la donn\u00e9e &#8220;sn&#8221;, et &#8230; \u00e7a marche. Voici donc une excellente nouvelle. Toutes les commandes ci-dessous fonctionnent d\u00e8s lors sans le num\u00e9ro de s\u00e9rie.<\/p>\n<p>J&#8217;ai ensuite cherch\u00e9 comment v\u00e9rifier l&#8217;\u00e9tat, pour d\u00e9finir si une prise \u00e9tait d\u00e9j\u00e0 allum\u00e9e ou \u00e9teinte. Je ne reviendrai pas sur les \u00e9l\u00e9ments d\u00e9j\u00e0 expliqu\u00e9s plus haut. J&#8217;ai d\u00e9termin\u00e9 que la commande 511 permettait d&#8217;obtenir les informations de la prise multiple. En effet, en envoyer l&#8217;URL suivante:<\/p>\n<pre lang=\"txt\">http:\/\/192.168.1.169\/?cmd=511&json={\"sn\":\"SWP60230020012345\"}\r\n<\/pre>\n<p>Et la r\u00e9ponse suivante:<\/p>\n<pre lang=\"txt\">{\"response\":511,\"code\":200,\"data\":{\"watt\":[\"0.00\",\"0.34\",\"62.02\",\"17.07\",\"2.09\",\"0.00\"],\"amp\":[\"0.3\",\"0.4\",\"34.5\",\"14.2\",\"2.8\",\"0.2\"],\"switch\":[1,1,1,1,1,0]}}\r\n<\/pre>\n<p>En comparant avec l&#8217;\u00e9tat de la multiprise, j&#8217;ai pu constater la chose suivante:<\/p>\n<ul>\n<li>La donn\u00e9e &#8220;watt&#8221; donne l&#8217;\u00e9tat actuel de la consommation pour chaque prise dans l&#8217;ordre (de 1 \u00e0 6)<\/li>\n<li>La donn\u00e9e &#8220;amp&#8221; donne, selon toute vraissemblance, la puisasnce actuelle requise pour chaque prise dans l&#8217;ordre \u00e9galement. C&#8217;est une donn\u00e9e que l&#8217;on ne retrouve pas dans l&#8217;app.<\/li>\n<li>La donn\u00e9e &#8220;switch&#8221; indique l&#8217;\u00e9tat de chaque prise, toujours dans l&#8217;ordre de 1 \u00e0 6<\/li>\n<\/ul>\n<p>Il est donc tout \u00e0 fait possible d&#8217;exploiter ces donn\u00e9es, toutefois on entre ici dans le d\u00e9veloppement et le scripting, et je ne vais pas continuer sur cette lanc\u00e9e dans cet article. Avec ce que j&#8217;ai d\u00e9couvert, il est d\u00e9j\u00e0 possible d&#8217;\u00e9teindre et d&#8217;allumer des appareils de toutes sortes de fa\u00e7on diff\u00e9rentes. Pour ma part, je vais utiliser une application Android qui me permet de cr\u00e9er des boutons sous forme de Widget. Chaque bouton sera configur\u00e9 pour envoyer une URL, et donc pour allumer ou \u00e9teindre un appareil. Sur Android, une application tr\u00e8s pratique permet de faire des ic\u00f4nes qui envoient des URL. Elle s&#8217;appelle <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=ch.rmy.android.http_shortcuts\" target=\"_blank\" rel=\"noopener\">HTTP Shortcuts<\/a>. On peut alors cr\u00e9er des boutons, et leur attribuer une commande d&#8217;allumage ou d&#8217;extinction.<\/p>\n<p>Bien s\u00fbr, une fois que l&#8217;on a identifi\u00e9 les commandes principales, il est tr\u00e8s facile d&#8217;automatiser de toutes les fa\u00e7ons possibles. Sous linux avec Bash, Python, Perl, SOAP, etc&#8230; Sous Windows avec PowerShell, sous Android avec MacroDroid, ou d&#8217;autres outils de ce genre. Je reviendrai peut-\u00eatre sur ce sujet dans un autre article.<\/p>\n<h2>Est-ce que je peux tout casser ?<\/h2>\n<p>Attention si vous partez vous-m\u00eame \u00e0 la recherche d&#8217;une API: Avec la mauvaise commande, on peut tout faire foirer. Pour la petite anecdote, pendant la r\u00e9daction de cet article, j&#8217;ai test\u00e9 la commande 201 sous la forme suivante:<\/p>\n<pre lang=\"txt\">http:\/\/192.168.1.169\/?cmd=201&json={\"sn\":\"SWP6023002012345\",\"port\":2}<\/pre>\n<p>et je me suis retrouv\u00e9 coinc\u00e9 avec l&#8217;application. Impossible de commander la prise deux. Et le nom que j&#8217;avais attribu\u00e9 avait \u00e9t\u00e9 remplac\u00e9 par un tas de caract\u00e8res sp\u00e9ciaux. Fort \u00e0 parier que ma commande 201 sert \u00e0 changer le nom, et qu&#8217;en ne mettant pas de nom, le syst\u00e8me est paum\u00e9. C&#8217;est signe d&#8217;un tr\u00e8s mauvais d\u00e9veloppement &#8230; D&#8217;ailleurs, souvent, si les API ne sont pas publi\u00e9s c&#8217;est parce que le d\u00e9veloppement est pourri, et qu&#8217;il serait trop facile de planter tout le syst\u00e8me accidentellement \u00e0 cause d&#8217;une routine de v\u00e9rification mal impl\u00e9ment\u00e9e, voire pas impl\u00e9ment\u00e9e du tout. Ce genre de probl\u00e8me ne devrait pas \u00eatre possible. Qu&#8217;importe, je suis reparti sur mon mobile, et utilisant Packet Capture, je suis all\u00e9 voir quelle \u00e9tait la commande envoy\u00e9e pour changer le nom d&#8217;une prise, et je renomm\u00e9 ma prise:<\/p>\n<pre lang=\"txt\">http:\/\/192.168.1.169\/?cmd=201&json={\"sn\":\"SWP6023002012345\",\"port\":2,\"name\":\"Clavier\"}\r\n<\/pre>\n<p>&#8220;Clavier&#8221; car il s&#8217;agit du chargeur de mon clavier Bluetooth pour les curieux. Ca a d\u00e9bloqu\u00e9 ma situation. Il est donc fortement recommand\u00e9 de NE PAS tent\u00e9 de d\u00e9couvrir les API en envoyant des commandes au hasard&#8230; Ca serait dommage de tout planter. Ca risque d&#8217;\u00eatre plus compliquer \u00e0 d\u00e9bloquer ensuite. Et il y a fort \u00e0 parier que Max Hauri vous enverra p\u00e9ter si ils apprennent que vous avez jouer avec les APIs, vu leur politique de fermeture.<\/p>\n<h2>Et maintenant ?<\/h2>\n<p>J&#8217;arr\u00eate mon Mac (oui oui j&#8217;ai un Mac), et je regarde un moment la t\u00e9l\u00e9. Parce que si je me mets \u00e0 aller plus loin, je vais y passer la nuit, et demain, je bosse ! ABE<\/p>\n<p>Voil\u00e0. Des questions, des commentaires, n&#8217;h\u00e9sitez pas&#8230; Je vais partir \u00e0 la recherche de plus de commandes, donc si vous vous lancez dans l&#8217;acquisition de ce produit, j&#8217;\u00e9changerai avec vous avec plaisir.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&#8217;ai r\u00e9cemment achet\u00e9 plusieurs prises multiples MaxSmart de Max Hauri. Digitec a fait une offre exceptionnelle \u00e0 CHF 75.00 pour la Power Station (multiprise six sockets). C&#8217;est un produit int\u00e9ressant \u00e0 plus d&#8217;un titre. La multiprise elle-m\u00eame comporte un port RJ45. Une fois branch\u00e9e sur le routeur r\u00e9seau, elle cr\u00e9e un r\u00e9seau PowerLAN 500Mb\/s. Il [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[220],"tags":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/1879"}],"collection":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/comments?post=1879"}],"version-history":[{"count":9,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/1879\/revisions"}],"predecessor-version":[{"id":1909,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/1879\/revisions\/1909"}],"wp:attachment":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/media?parent=1879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/categories?post=1879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/tags?post=1879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}