Tuto : réaliser un Hub Milight en remplacement des iBox1 et iBox2

Milight/Futlight produit des spots/lampes/interrupteurs de bonne qualité et pour le pilotage avec smartphone a utilisé différents hubs jusqu’aux iBox1 et iBox2. Ils sont maintenant remplacés par la Miboxer, qui est totalement cloud et donc dépendante d’une connexion internet et des services alexia/google.

Sidoh propose de construire un hub Milight compatible avec de nombreuses télécommandes Milight et donc avec les interrupteurs et lampes qui composent l’ensemble. Il est pilotable par Jeedom en local avec le plugin wifilightV2, sans passer par internet.

Ce tuto, réalisé avec @olivvvv, est structuré en 3 parties :

  • 1 Réalisation matérielle du Milight-Hub
  • 2 Configuration logicielle du Milight-Hub
  • 3 Configuration du plugin wifilightV2

1 - Réalisation matérielle

Il faut :

  • un module NodeMCUv2 ou un NodeMCUv3 qui contient un ESP8266
  • une antenne NRF24L01 2,4Ghz Radio

Remarques :

  • NodeMCUv2 ou un NodeMCUv3 diffèrent en taille mais ont le même emplacement des broches sauf les 2 broches entre GPIO10 et A0 qui sont utilisées pour de l’USB en V3 mais il n’y a pas d’incidence pour le montage proposé
  • on trouve 2 versions de NodeMCUv3 qui diffèrent par leur interface série : CH340G ou CP2102. Dans ce tuto, l’interface CH340G est utilisée mais la CP2102 devrait fonctionner, les drivers sont alors différents.
  • Pour le NRF24L01 il y a aussi de nombreuses versions. Les plus simples ont l’antenne sur le circuit imprimé et les plus élaborées ont un ampli et une antenne externe. Les modèles simples peuvent être utilisés pour faire des tests (ils n’aiment ni le 5V ni l’inversion de polarité donc il y a souvent de la casse).


NRF24L01PALNA-1_small

Il faut maintenant connecter l’antenne au MCU (sources : mysensors.org) :

NodeMCU Antenne Color
GND GND Black
3V3 VCC Red
D2 (GPIO4) CE Orange
D8 (GPIO15) CSN/CS Yellow
D5 (GPIO14) SCK Green
D7 (GPIO13) MOSI Blue
D6 (GPIO12) MISO Violet


Il y a différentes versions du module NRF24L01, bien vérifier le nom des connexions avant de les relier ensemble.
image

Les deux modules connectés (du fil rose a été utilisé à la place du fil orange) :


Eviter le câblage avec des fils « dupont » car les connexions sont de mauvaise qualité, surtout pour l’antenne. Il peut aussi être intéressant de souder un condensateur de 50 microfarads en 12V aux bornes VCC et GND de la carte de l’antenne afin de mieux stabiliser l’alimentation. Attention, ces condensateurs sont polarisés.

Le site Mysensors est à consulter pour obtenir de l’aide sur le câblage.

2 - Configuration logicielle sous Windows

Connexion au PC :

Il faut maintenant connecter le module NodeMCU au PC, normalement reconnu par Windows 10.
S’il n’est pas reconnu, il faut installer les drivers ici .

Notes :

  • certains câbles USB n’ont pas les fils de données de câblés
  • pour voir le driver installé : rechercher sur vottre machine : panneau de configuration puis système → gestionnaire de périphériques → ports (COM et LPT)

Installation du Firmware sur le module

Il faut maintenant télécharger le dernier firmware du Milight-Hub :

La version esp8266_milight_hub_nodemcuv2-1.10.7.bin, fonctionne bien également avec un MCU V3.

Télécharger l’outil pour Flasher le firmware ici :

https://github.com/nodemcu/nodemcu-flasher/archive/master.zip

Démarrer ESP8266flasher.exe

Il faut choisir le port COM correspondant au module, pour l’exemple ici COM8 :
NodemcuHW
Nodemcuv3flash_start

Clic sur Config :
Nodemcuv3flash_config

Maintenant, cliquer sur la roue et aller chercher le firmware précédemment téléchargé :
Nodemcuv3flash_configfirmware
Nodemcuv3flash_configfirmwareselected

Clic sur Advanced :
Nodemcuv3flash_advanced

Choisir une vitesse (Baudrate) égale à 9600 comme sur beaucoup de nodeMCU (sinon se renseigner sur la configuration de la vitesse) :
Nodemcuv3flash_advanced_9600

Clic sur Operation :
Nodemcuv3flash_operation

Clic sur Flash :
Nodemcuv3flash_operation_flash

Attendre l’installation du Firmware :
Nodemcuv3flash_operation_flash_start

L’installation est terminée (coche verte) :
Nodemcuv3flash_operation_flash_ready

Configuration du Milight-Hub :

Débrancher le Milight-Hub de l’USB et le reconnecter, attendre 30 secondes. Un reset sur la carte semble être utile. Ouvrir le réseau wifi sur le PC et se connecter au réseau ESPXXXXXX . Le mot de passe wifi est : milightHub

Nodemcuv3flash_wifi_connect

Le navigateur s’ouvre et faire “Configure wifi” :
Nodemcuv3flash_wifi_connect_configurate

Choisir le réseau wifi et entrer le mot de passe wifi et sauvegarder.
Débrancher et rebrancher le module, un reset sur la carte semble être utile, attendre 30 secondes pour que le Milight-Hub se connecte à votre wifi.
Il est obligatoire de rendre fixe l’adresse IP du Milight-Hub sur le routeur qui gère votre réseau. En tout état de cause il faut connaitre son adresse IP pour pouvoir s’y connecter.

Accès au Milight-Hub :

Se connecter sur l’adresse IP (ici : 192.168.2.101) du Milight-Hub :

Lorsque la page de configuration du Milight-Hub s’ouvre c’est qu’il fonctionne, il reste à le configurer.

Configuration de l’antenne

Si vous avez une antenne amplifiée, il peut être nécessaire de réduire l’amplification pour que la communication avec les lampes fonctionnent, il est d’ailleurs recommandé de débuter les essais avec une faible amplification et de l’augmenter ensuite.
Pour cela aller dans Settings->Radio->nRF24 Power Level

Comment récupérer les codes des télécommandes Milight

Vous avez déjà une télécommande appairée avec vos lampes et vous ne voulez pas tout reprendre, nous allons voir ici comment sniffer les trames afin que le pont Milight-Hub puisse envoyer les mêmes commandes que votre télécommande sans avoir besoin de tout appairer.

Sniffer les trames

Cliquer sur “Start Sniffing” :
unnamed

L’icône passe en rouge :
unnamegd

Appuyer sur une touche de votre télécommande :

Les trames apparaissent en dessous comme par exemple :

Arrêter le sniffing et noter l’ID (ici 5889). Dans device ID, renseigner l’ID noté avec 0x devant (donc 0x5889). Cet ID est le même pour tous les canaux d’une même télécommande physique

Redémarrer le sniffing et faite la même manipulation pour toutes vos télécommandes.

Création des alias

Ok, les ID c’est bien mais on peut vite ne plus savoir à quoi cela correspond avec les canaux associés.

Ce pourquoi Alias existe.Il suffit de sélectionner l’ID, le canal, et dans “Device Name” ajouter un nom “Salon” :
salon

Sélectionner ensuite les autres canaux un par un jusqu’au canal 4 (si vous les utilisez bien sûr :wink: et dans la même logique, ajouter un nom :
sniff2

Préparation à l’utilisation dans le plug-in wifilightV2 de Jeedom :

Aller dans “Settings” :

Dans l’onglet “UDP” ajouter une configuration :

Dans device ID, renseigner le même Device ID que ci-dessus.

Dans UDP port : 5987 (c’est le port historique de la communication Mi.Light)

Protocol Version : 6

Sauvegarder puis redémarrer le Milight-Hub dans “Admin”, “Actions”, “Restart” :
udp2

Attendre 30 secondes max.

ATTENTION :
il semble q’un reset du nodeMCU est à faire après chaque changement de configuration. Il peut être fait avec l’interface Milight-hub

3 - Configuration de wifilightV2

Configuration en mode historique

Ce mode est à privilégier si vous désirez ne pas modifier une configuration existante et simplement remplacer une iBox1 ou 2 par un Milight-Hub. Il suffit de reporter le port de la configuration UDP précédente dans le champ Port :


(copie d’écran à refaire : le champ Identifiant n’est plus présent)

Votre Jeedom fonctionnera de manière identique avec le nouveau hub.

Il est possible de mettre plusieurs iBox1/2 dans le même Milight-Hub . Il faut configurer le Milight-Hub en associant un Device ID et un port comme dans cet exemple :

Côté plugin, il faut créer un premier périphérique avec l’adresse IP du Milight-Hub et renseigner le Port avec 5987 qui correspondra au device Id 0x5889 :


Vous pouvez créer de cette façon 4 périphériques correspondant aux 4 canaux (ou groupes).

Ensuite, il faut créer un deuxième périphérique avec l’adresse IP du Milight-Hub et renseigner le Port avec 5988 qui correspondra au device Id 0x6867 :

Configuration en mode ESP

Ce mode doit être privilégié pour toute nouvelle configuration utilisant des ampoules Mi.Light.
Il faut utiliser le type Mi.Light ESP et créer un périphérique Mi.Light ESP pour chaque canal utilisé :


Pour chaque canal :

  • Choisir la même télécommande que celle choisie dans la configuration du Milight-Hub
  • Renseigner dans le champ identifiant, le « Device Id » de la télécommande

Après sauvegarde, les commandes pour piloter les lampes seront créées et vous pourrez tester les actions sur les lampes.

6 « J'aime »

Bonjour et merci beaucoup pour ce tutoriel très clair.

J’ai plusieurs petites questions :

  • j’ai beau chercher, je ne trouve nulle part dans le plugin d’endroit où renseigner le port du hub milight ni l’identifiant des équipements dans le plugin (avec la même config que sur les snapshots) ;

  • je ne trouve pas non plus l’équipement « Milight.ESP » mentionné dans le tutoriel ;

  • est-ce que le canal « 0 » du module wifi dans le plugin wifilight V2 correspond au channel « ALL » de la télécommande dans le pont milight hub ? j’ai l’impression que les commandes envoyées par ce canal n’affectent pas toutes les zones ;

  • les commandes envoyées par wifilight v2 après avoir effectué toute la procédure (et donc sans renseignement du port et de l’identifiant) sont incorrectes (« disco » pour « off » etc) ; est-ce qu’il y a un moyen de corriger ça ?

Je précise que lorsque j’envoie les commandes depuis le hub milight via sa page http les commandes sont correctes, le pb ne semble donc pas venir de là.

J’ai jeedom v 4.062 et la version stable du plugin wifilight v2 sur un raspberry pi 3 si ça peut être utile.

Merci d’avance.

1 « J'aime »

en beta → tu peux la charger et tester, elle est prête à passer en stable

c’est bien le cas sinon remonter le bogue.

remarque très imprécise. Pas vu ce souci et pas possible de corriger, sauf moi.

à tester avec la version beta et me faire des retours précis des dysfonctionnements. Ben préciser les conditions de test (quel type du plugin) et le test lui même et les logs avec.
En mode historique (celui d’origine de milight) le plugin ne change rien au fonctionnement avec une ibox1/2.

Merci de ton retour qui permettra d’accélérer le passage en stable.

Suppression du champ Identifiant en mode historique qui ne sert à rien.
L’association hub (et donc port) / devideID se fait uniquement dans la configuration de l’interface Milight-Hub.
Le port est toujours à renseigner s’il y a plusieurs ibox1/2 dans le milight-hub
La doc et le tuto ont été modifiés.
il semble qu’un reset du milight-hub soit à faire après chaque changement de sa config.
Personnellement j’ai une antenne avec PA (ampli) il faut que je mette le level en low pour que ça fonctionne (mais je n’ai pas mis le condensateur).

Merci pour la réponse, voici un premier retour.

La configuration :

jeedom 4.0.62
wifilight v2 beta version 2021-01-10 09:35:36
nodemcu v3 + NRF24L01+PA+LNA + régulateur tension
nRF24 Power Level min
j’ai renseigné dans le hub l’adresse statique et le gateway, je ne sais pas si ça change qqch.

2 télécommandes:
FUTB4 (RGB CCT 4 zones) : image
FUT089 (RGB CCT 8 zones) : image
Et un mélange de strip led CCT, d’ampoules RGB CCT et CCT dual qui sont tous commandés par la FUT 089 mais dont certains ne fonctionnent pas avec la FUT B4

J’ai appairé les deux télécommandes dans le milight HUB avec deux ports différents 5987 (FUT089) et 5988 (FUTB4).

Toutes les commandes semblent passer correctement depuis le hub (qui est à environ 5 mètres des ampoules les plus éloignées et près du routeur).

En revanche depuis le plugin wifilight, en version ESP, aucune commande ne fonctionne si je choisis le sous type FUT 089.

Voilà le log pour les commandes ON et OFF :

[2021-01-10 17:46:54][DEBUG] :     Cmd : {"state":"on"} - url : http://192.168.1.42/gateways/0x48B1/fut09/3 - type : PUT - Exception:Client error: `PUT http://192.168.1.42/gateways/0x48B1/fut09/3` resulted in a `400 Bad Request` response: {"error":"Unknown device type: fut09"}  - No Mi.Light ESP device @http://192.168.1.42/gateways/0x48B1/fut09/3

[2021-01-10 17:46:56][DEBUG] :     Cmd : {"state":"off"} - url : http://192.168.1.42/gateways/0x48B1/fut09/3 - type : PUT - Exception:Client error: `PUT http://192.168.1.42/gateways/0x48B1/fut09/3` resulted in a `400 Bad Request` response: {"error":"Unknown device type: fut09"}  - No Mi.Light ESP device @http://192.168.1.42/gateways/0x48B1/fut09/3

Je n’y connais rien mais je trouve bizarre le device type : « fut09 »

En revanche, la même manipulation avec un autre équipement créé sur le même identifiant et le même canal mais avec cette fois un sous type FUT 092 fonctionne et donne :

[2021-01-10 17:49:17][DEBUG] :     Cmd : {"state":"off"} - url : http://192.168.1.42/gateways/0x48B1/rgb_cct/3 - type : PUT - Status:200 - response:{"success":true}
[2021-01-10 17:49:17][DEBUG] :     Cmd :  - url : http://192.168.1.42/gateways/0x48B1/rgb_cct/3 - type : GET - Status:200 - response:{"state":"ON","brightness":15,"bulb_mode":"color","color":{"r":255,"g":168,"b":208}}
[2021-01-10 17:49:17][DEBUG] :     Decode state
[2021-01-10 17:49:17][DEBUG] :     On:1
[2021-01-10 17:49:17][DEBUG] :     Int:6
[2021-01-10 17:49:17][DEBUG] :     Col[0]:255
[2021-01-10 17:49:17][DEBUG] :     Col[1]:168
[2021-01-10 17:49:17][DEBUG] :     Col[2]:208
[2021-01-10 17:49:17][DEBUG] :     Col:#ffa8d0
[2021-01-10 17:49:19][DEBUG] :     Cmd : {"state":"on"} - url : http://192.168.1.42/gateways/0x48B1/rgb_cct/3 - type : PUT - Status:200 - response:{"success":true}
[2021-01-10 17:49:19][DEBUG] :     Cmd :  - url : http://192.168.1.42/gateways/0x48B1/rgb_cct/3 - type : GET - Status:200 - response:{"state":"OFF","brightness":15,"bulb_mode":"color","color":{"r":255,"g":168,"b":208}}
[2021-01-10 17:49:19][DEBUG] :     Decode state
[2021-01-10 17:49:19][DEBUG] :     On:0
[2021-01-10 17:49:19][DEBUG] :     Int:6
[2021-01-10 17:49:19][DEBUG] :     Col[0]:255
[2021-01-10 17:49:19][DEBUG] :     Col[1]:168
[2021-01-10 17:49:19][DEBUG] :     Col[2]:208
[2021-01-10 17:49:19][DEBUG] :     Col:#ffa8d0

Je n’ai pas testé les autres télécommandes mais ça limite le nombre de zones à 4(5), ou alors il faut appairer chaque zone au hub en lui donnant une ID différente (si j’ai bien compris) ?

Je vais poursuivre mes tests, bonne soirée.

edit : même pb avec la télécommande fut089 en version historique apparemment

FUT089 corrigé prochaine beta

1 « J'aime »

Sur la FUT092 je n’arrive pas à faire fonctionner le canal 0 non plus, mais il est tard, j’ai peu-être raté qqch :slight_smile:

dans le log le numéro du canal a l’air erroné :

[2021-01-10 18:51:13][DEBUG] :     Cmd : {"state":"off"} - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/**1** - type : PUT - Status:200 - response:{"success":true}
[2021-01-10 18:51:14][DEBUG] :     Cmd :  - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/**1** - type : GET - Status:200 - response:{"state":"OFF","bulb_mode":"night","color":{"r":255,"g":255,"b":255}}
[2021-01-10 18:51:14][DEBUG] :     Decode state
[2021-01-10 18:51:14][DEBUG] :     On:0
[2021-01-10 18:51:15][DEBUG] :     Cmd : {"state":"on"} - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/**1** - type : PUT - Status:200 - response:{"success":true}
[2021-01-10 18:51:16][DEBUG] :     Cmd :  - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/**1** - type : GET - Status:200 - response:{"state":"OFF","mode":1,"bulb_mode":"scene","color":{"r":255,"g":255,"b":255}}
[2021-01-10 18:51:16][DEBUG] :     Decode state
[2021-01-10 18:51:16][DEBUG] :     On:0
[2021-01-10 18:51:16][DEBUG] :     mode:1

Sur le canal 3 ça donne

[2021-01-10 18:54:03][DEBUG] :     Cmd : {"state":"off"} - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/3 - type : PUT - Status:200 - response:{"success":true}
[2021-01-10 18:54:03][DEBUG] :     Cmd :  - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/**3** - type : GET - Status:200 - response:{"state":"ON","color":{"r":255,"g":255,"b":255}}
[2021-01-10 18:54:03][DEBUG] :     Decode state
[2021-01-10 18:54:03][DEBUG] :     On:1
[2021-01-10 18:54:05][DEBUG] :     Cmd : {"state":"on"} - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/**3** - type : PUT - Status:200 - response:{"success":true}
[2021-01-10 18:54:05][DEBUG] :     Cmd :  - url : http://192.168.1.42/gateways/0x13F4/rgb_cct/3 - type : GET - Status:200 - response:{"state":"OFF","color":{"r":255,"g":255,"b":255}}
[2021-01-10 18:54:05][DEBUG] :     Decode state
[2021-01-10 18:54:05][DEBUG] :     On:0

edit: je confirme c’est le canal 1 qui fonctionne sur le canal « 0 »

corrigé nouvelle beta

Pour les canaux, c’est limité à 1/4/8/99 selon la télécommande en mode historique
En mode ESP, la limitation du nombre de canaux pour une télécommande physique est la même. Donc, selon moi, à vérifier (j’ai reçu hier mon ESP et j’ai testé avec 1 lampe CCT), une télécommande ayant n canaux pour un même device ID, on peut associer au même milighthub :
1 telco 4 canaux en id 0x0001
1 telco 8 canaux en id 0x0002
1 telco 1 canal en id 0x0003
etc… jusque 0xFFFF

Les deux pbs ont bien disparu avec la nouvelle MAJ, merci.

A part ça, pour contourner le pb FUT089 j’avais commencé de créer directement une ID différente pour chaque zone dans le hub (sans passer par le sniffing de l’ID de la télécommande et les groupes ensuite, donc).

J’ai l’impression qu’avec cette technique on n’est plus limité par le nombre de zones des télécommandes (j’ai pu créer six ID différentes sur une « télécommande » CCT groupe 1 qui ne comporte que 4 canaux normalement, et sans changer de groupe pour chaque ID.

De même j’ai pu commander toutes ces ID via le plugin avec un sous type FUT005/006/007 qui n’a qu e4 canaux.

Du coup je me disais que pouvoir renseigner plusieurs ID dans le plugin pour les commander à la fois permettrait de se dispenser des limitations télécommandes et serait peut-être plus « débridable » (mais encore une fois je n’y connais rien).

Super plugin en tout cas, si je vois autre chose, je signalerai.

plusieurs deviceId pour un même périphérique wifilightV2 ce n’est pas possible.
Il y a la notion de groupe qui permet de regrouper plusieurs périphériques wifilightV2 et donc d’envoyer la même commande sur un ensemble de périphériques. De plus, le plugin n’interdit pas de créer plusieurs périphériques avec le même canal.

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