Milight Multi-Bridge Emulator (chapitre 1)

milight_app

Cela fait un moment que je n’ai pas écrit d’article ! Et aujourd’hui je vais vous parler d’un « hack » que j’ai fait pour les ampoules Milight… C’est un travail de longue haleine, un projet sur lequel j’œuvre depuis plusieurs mois pendant mon temps libre, et que je vais vous décrire en plusieurs chapitres.

A la recherche de la lampe connectée « à pas cher »

Vous connaissez sûrement les lampes Philips Hue ? Ce sont des lampes connectées, utilisant un protocole dérivé de Zigbee, et changeant de couleur au gré de nos envies, ce qui permet de créer des ambiances lumineuses sympa.

Le gros problème : le prix ! Le pack de démarrage 3 ampoules et un « pont Ethernet » coute 199€ ! Et une ampoule supplémentaire coute 60€. Autant dire que pour s’équiper en Philips Hue, il faut y laisser 2 reins et 1 bras !

D’autres ampoules existent sur le marché, chez Awox notamment qui fait des ampoules Bluetooth. Ou encore des ampoules qui sont pilotables par Infrarouge. Mais aucune solution connectée comme Philips…

Sauf… Il existe une gamme d’ampoules RF appelées « Milight » (ou Mi-Light, Limitlessled, Easybulb, … pour ne citer que les marques blanches les plus connues). Le tarif y est plus abordable que Philips puisqu’on est autour de 15 à 20€ l’ampoule… Autant dire 3 à 4 fois moins cher !

Elles existent en différents formats (dont le 5W en douille E14)

milight_bulbs

Comment ca marche ?

Ces ampoules sont conçues de base pour s’associer à une télécommande, qui peut manager 4 groupes (zones) d’ampoules : on peut piloter toutes les ampoules d’un coup, ou par zone. Plusieurs ampoules peuvent appartenir à un même groupe, elles feront donc la même couleur, en même temps. Le protocole radio utilisé n’est pas standard, c’est 100% propriétaire.

milight-rgbw-remote1

Le bridge (« pont wifi ») est un boitier qui permet de transformer des commandes reçues en Ethernet (via WiFi) en commandes RF compréhensibles par les ampoules…

Les commandes sont envoyées en UDP, sous forme de paquets de 2 ou 3 octets. Le site de LimitlessLED décrit très bien chaque paquet possible et propose diverses API. Domoticz (entres autres) permet également de piloter le Bridge.

Et là, arrive la limitation par rapport aux Hue…

Le pont ne fait qu’émuler la télécommande d’origine, donc il ne dispose lui aussi que de 4 groupes. Si on veut piloter plus de 4 groupes d’ampoules, il faut multiplier le nombre de ponts… Si on a 20 ampoules à piloter individuellement il faut donc… 5 ponts. Cette limitation a de quoi nous faire sauter au plafond quand on sait que le Remote ID est gravé en dur au sein du Microcontrôleur de la télécommande ou du bridge ! Pourquoi ne pas avoir permis de forger son propre Remote ID au sein des paquets UDP ??

Autre limitation, l’utilisation de WiFi… Pour ma part je suis partisan du bon vieux câble dans la mesure du possible. J’aurai aimé avoir un bridge Ethernet filaire, et non pas un bridge WiFi… Toutefois, cela peut avoir ses avantages, comme rapprocher le bridge des ampoules, mais dans mon cas je n’aime pas…

La magie du hack RF

Internet est peuplé de fous furieux, et plusieurs personnes ont analysé le bridge Milight d’origine !

milight_bridge_inside

Le fonctionnement est assez simple : un module WiFi (en rouge) se charge de convertir les paquets UDP en trames UART/RS232 à destination d’un Microcontrôleur (en jaune) Ce dernier transmet les ordres à un chipset radio PL1167 (en bleu). La lampe Milight a également un PL1167 et un microcontrôleur en charge de la gestion des LED RGBW. C’est bien mais ça ne permet toujours pas de changer son RemoteID

Internet est également peuplé de grands fous furieux, et un certain Henryk Plötz a réalisé un travail magnifique en reverse engineerant le protocole radio propriétaire Milight ! Je vous laisse lire tous les logs de son projet, qui détaille très bien tout ça ! Henryk a créé un code « Proof Of Concept » en C++ pour Arduino, permettant de forger ou lire les trames RF Milight. Comme il n’avait pas de PL1167 sous la main, il a utilisé un module nRF24L01, beaucoup plus courant ! Une adaptation pour Raspberry Pi a été créée par Torsten Tränkner. Ainsi, « OpenMilight » est né !

Création d’un émulateur de bridge Milight

C’est là que j’interviens… Le code est à l’état de « proof of concept« , on peut forger ses propres paquets radio à la main, mais rien de plus. Il manque toute la gestion des codes tournant, etc… Je n’ai pas trouvé sur Internet de code permettant d’émuler le bridge Milight a partir du travail d’Henryk. Et a fortiori, pas de code permettant d’émuler autant de bridges Milight que l’on souhaite ! Qu’à cela ne tienne, j’ai décidé de le créer !

La suite ici ! 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *