Gestion de la lumière d’ambiance avec le protocole DMX sous Debian GNU/Linux
La technologie des lumières à LEDs offre la possibilité de placer une source de lumière n’importe où (aquarium, meubles, faux plafonds, derrière un écran, etc…).
Par contre, les LEDs disposent de plus de fonctionnalités que les ampoules classiques.
En effet, en plus d’un bouton d’allumage, vous avez la possibilité de changer la couleur de la lumière, la faire varier dans le temps, modifier son intensité, jouer une séquence, etc…
Avec un nombre de possiblités plus grand, les interfaces de contrôle classique (X10, PLCBUS, etc…) ne suffisent pas.
Il est donc nécessaire de placer un peu plus d’intelligence dans le réseau d’illumination à l’aide du protocole DMX.
Ce protocole est utilisé dans le monde des concerts, des plateaux de télévision et des spectacles.
Néanmoins, il est tout à fait possible de le détourner pour un usage domotique.
Dans ce billet, je vais décrire l’utilisation d’un contrôleur LED RGB DMX et de l’interface OpenDMX de chez ENTTEC, à l’aide du projet OLA sous Debian GNU/Linux.
Principe de fonctionnement
Voici le schèma du montage:

- le PC communique à l’aide du port USB avec un contrôleur DMX ;
- les contrôleurs LEDs mis en série convertissent les ordres en instructions RGB ;
Et voici ce que cela donne :
Matériel
Voici le matériel nécessaire pour un bandeau à LED, le tout fonctionne biensûr sous Debian GNU/Linux est FOSS Friendly
| Produit | Prix |
|---|---|
| OPEN DMX USB Hardware Interface | $52.00 – $60.00 |
| RGB LED DMX Controller 2 | $48.00 – $76.80 |
| RJ45 Connetor to XLR Female Connector | $11.20 – $14.25 |
| RJ45 to XLR Male DMX Cable Adapter 3ft | $10.99 – $14.00 |
| DMX/XLR converter connector | $10.50 – $12.00 |
| LED Controller Power Supply, USA/EU | $23.10 – $36.96 |
| DMX 512 Terminator, 3 Pole Male Connector | $7.94 |
| Mini Bandeau Rigide RGB 12 Led 20cm 150° 12v DC | 6 € – 12,95 € |
| Raccord intermédiaire pour Bandeau lumineux à Led Longueur 5cm | 1.5 € |
Pour le cablage, entre le bandeau lumineux et le contrôleur à LED, Il faut couper une extrémité du cable de raccord et la dénuder pour brancher sur le bornier à quatre vis de sortie RGB.
Installation du matériel
Une fois que vous avez branché l’OpenDMX au PC, vous devez voir un convertisseur USB-Serial (UART) à l’aide de lsusb :
$ lsusb
Bus 002 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Pour faire fonctionner l’OpenDMX, vous avez besoin du module noyau dmx-usb et d’un environnement de compilation pour les modules. (paquet linux-headers*, etc…).
# cd /usr/src
# git-clone http://www.erwinrol.com/git/dmx_usb_module/
# cd dmx_usb_module
# make
# cp ./dmx_usb.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial
# depmod -a
Comme, l’OpenDMX est un convertiseur USB-Serial, le noyau par défaut le présente comme une interface /dev/ttyUSB.
Il est donc nécessaire de blacklister les modules usbserial dans le fichier /etc/modprobe.d/blacklist, en ajoutant les lignes suivantes :
blacklist usbserial
blacklist usb-serial
blacklist ftdi_sio
Ensuite, ajouter le module dmx_usb dans le fichier /etc/modules et rebooter la machine.
Au reboot, vous devez avoir une interface /dev/dmx0, qu’il faut rendre accessible pour tous les utilisateurs :
# ls -l /dev/dmx0
crw-rw---- 1 root root 180, 192 2010-01-30 00:37 /dev/dmx0
# chmod a+rw /dev/dmx0
Installation du logiciel pour la gestion de la lumière : Open Lighting Architecture (OLA)
Comme, il n’y a pas de paquets Debian disponibles pour ce programme, je vais décrire une procédure d’installation à partir des sources :
Dépendances
Vous allez avoir besoin des dépendances suivantes pour la compilation :
# apt-get install build-essential uuid-dev libcppunit-dev libgcrypt-dev
Compilation de Protocol Buffers de Google
Vous avez besoin de protobuf, pour la gestion de l’échange de données :
# cd /usr/src
# wget http://protobuf.googlecode.com/files/protobuf-2.3.0.tar.bz2
# tar xjf protobuf-2.3.0.tar.bz2
# cd protobuf-2.3.0
# ./configure ; make ; make install
Compilation de google-ctemplate
Vous avez besoin du système ctemplate :
# cd /usr/src
# wget http://google-ctemplate.googlecode.com/files/ctemplate-0.96.tar.gz
# tar xzf ctemplate-0.96.tar.gz
# cd ctemplate-0.96
# ./configure; make ; make install
Compilation de microhttpd (optionnel)
Vous avez besoin de la libmicrohttpd version > à 0.4 (non disponible dans Debian) pour l’interface web de gestion :
# cd /usr/src
# wget ftp://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.4.5.tar.gz
# tar xzf libmicrohttpd-0.4.5.tar.gz
# cd libmicrohttpd-0.4.5
# ./configure; make ; make install
Compilation de OLA
Le projet OLA se découpe en deux parties : un serveur et des clients, dont voici la procédure de compilation.
Pour le serveur :
# cd /usr/src
# wget http://linux-lighting.googlecode.com/files/ola-0.6.0.tar.gz
# tar xzf ola-0.6.0.tar.gz
# cd ola-0.6.0
# ./configure; make ; make install
Pour le client en C++ :
# cd /usr/src
# wget http://linux-lighting.googlecode.com/files/ola-0.6.0.tar.gz
# tar xzf ola-0.6.0.tar.gz
# cd ola-examples-0.6.0
# ./configure; make ; make install
Lancement d’OLAd
Vous pouvez lancer olad, avec un utilisateur qui disspose des droits de lecture / écriture du /dev/dmx0 :
$ olad -l 3
...
Vous pouvez ensuite vérifier si l’OpenDMX a bien été détecté par le serveur à l’aide du client ola_dev_info :
$ ola_dev_info
...
Device 3: OpenDmx USB Device
port 0, OUT Open Dmx at /dev/dmx0
...
Et si vouz avez compilé libmicrohttpd, vous devez pouvoir accèder à l’interface web du daemon, sur le port 9090 :
|
|
Test et validation du bon fonctionnement
Avant de pouvoir manipuler les LEDs, il est nécessaire d’attribuer ununivers au contrôleur OpenDMX à l’aide de la commande ola_patch :
$ ola_patch -d 3 -p 0 -u 0
Ensuite vous pouvez lancer dans deux terminaux les commandes ola_dmxmonitor et ola_dmxconsole.
La première permet de suivre le statut des diffèrents composants et la seconde permet de les controler à l’aide d’un interface graphique en curses.
L’identifiant du contrôleur LED RGB sur le réseau DMX, est fonction de la valeur prise par le petit switch qui se situe sur celui-ci.
Et se découpe de la manière suivante :
- Rouge = valeur du switch ;
- Vert = valeur du switch + 1 ;
- Bleu = valeur du switch + 2.
Vous pouvez faire varier les trois valeurs pour obtenir les diffèrentes couleurs possibles.
Allez plus loin avec l’Open Lighting Architecture (OLA)
OLA supporte de nombreux contrôleurs USB et Ethernet.
Il dispose d’une API Client C++ et Python, ce qui rend son intégration possible et facile dans d’autres projets et offre de nombreuses possiblités.
La diffusion d’informations à l’aide de la lumière d’ambiance et ses possiblités
L’idée de pouvoir contrôler l’intensité et la couleur d’un bandeau à LED qui se situe dans n’importe quel endroit de la maison, offre des possiblités interessantes en matière de diffusion d’informations.
En effet, la lumière permet de diffuser l’information de manière non intrusive.
Voici quelques exemples des possibilités offertes :
- comme la lampe DAL de Violet, se connecter à l’Internet pour exploiter des ressources ;
- Pour ceux qui disposent de l’option Tempo d’EDF, il est possible de diffuser la couleur du jour ;
- Modifier l’Intensité lumineuse en fonction de nombreux paramètres : tempèrature, l’ensoleillement, nombre de personnes présentes dans la pièces, activation d’une alarme, réveil du bébé, etc…
Ce sont quelques exemples des possiblités offertes. Pour le reste vous pouvez faire marcher votre imagination pour créer des nouvelles manières d’inter-agir avec les machines et cette Intelligence ambiante.
Réferences
Voici mes réferences :
- Le Wiki d’OpenDMX.net ;
- Le site du constructeur ENTTEC ;
- Le tutorial LLA, OpenDMX USB and Q Light Controller Tutorial ;
- L’article Comprendre: Le DMX, chez SONOMag ;
- Hippy’s Open DMX USB Resources ;
- Le site du projet DMX4Linux ;
- La présentation du DMX, chez Automated Home.
Conclusion
Le protocole DMX est ancien et souffre de nombreux défaults, mais il présente encore de nombreux avantages tels que :
- la disponiblité de nombreux équipements à prix abordable ;
- sa simplicité.
Il faut noter qu’il existe une alternative plus récente au protocole DMX : Digital Addressable Lighting Interface (DALI).
Il est aussi possible de remplacer le contôleur OpenDMX par une carte Arduino, comme décrit ici.




Merci Christophe, article très intéressant
Par contre, j’ai une question : si on blackliste usbserial, usb-serial et ftdi_sio, il n’y a plus moyen de se servir d’un adaptateur série/USB normal ? Il n’y a pas d’autres solutions, comme forcer le driver pour un périphérique ?
Au final j’avais trouvé un autre driver qui fonctionnait pour les deux mais qui n’est pas encore tout à fait au point…
J’avais déjà eu le même soucis sur un PC où il avait besoin d’un driver pour une carte réseau et un autre driver incompatible pour la deuxième carte réseau (fallait en blacklister une)
Sinon, j’ai failli avoir 2 attaques :
- Violet (Violet Dal) qui n’a toujours pas compris qu’on voulait de l’ethernet, pas du wifi sur ses périphériques
- le prix du Violet Dal… 790€ la lampe… non mais sérieux… :-/
@Olivier : merci
Exact, pour le blacklistage du module, c’est vraiment une solution moyenne … je le sais (sur la machine domotique, je dois avoir 5 à 6 ports USB avec du ftdi_sio …).
C’est pour cette raison, que j’ai ressorti mon NSLU2 du placard, qui avec deux ports USB, fait vraiment bien l’affaire
Pour la lampe DAL, je partage ton avis.
Mais cet article de Linux Devices date de 2004 et parle de la version “prototype” de la lampe vendu aux Galeries Lafayette, c’est plus de l’art
La version standard est encore en cours de développement chez Violet : http://www.violet.net/daldal-la-lampe-qui-transforme_internet-en-lumieres.html
Dans le prochain article, je vais décrire la mise en place de l’ambilight avec une carte Arduino, car acheter deux contrôleurs LEDs RGX DMX pour la télévision va faire exploser mon budjet
Oui, c’est bien dommage de devoir blacklister, surtout que la puce FTDI c’est celle qu’on retrouve dans 99% des adaptateur série/USB.
Ce bon vieux NSLU2
En plus il consomme presque rien, j’avais mesuré la consommation en bootant sur une clé USB et il consommait moins de 2W (je ne sais pas exactement, mon wattmètre ne mesure pas en dessous de 2W, donc il affichait 0W). Avec un disque dur de portable, il me semble que l’ensemble consomme environ 6W.
ça veut dire que ça fait 6ans qu’ils bossent sur cette lampe ? Enfin, je sais bien que Violet a eu quelques problèmes ces derniers mois, mais quand même…
À 30€, en ethernet, j’achète leur lampe… donc autant dire jamais
Sinon, pour infos (je tiens à préciser que je n’ai pas encore testé, ni même acheté), deal extreme a quelques rouleaux de LEDs à un prix très abordable :
http://www.dealextreme.com/details.dx/sku.14965
http://www.dealextreme.com/details.dx/sku.14963 (un commentaire semble indiquer que c’est compatible DMX)
http://www.dealextreme.com/details.dx/sku.14962 (avec télécommande intégrée)
Je ne sais pas si tu connais, mais on peut aussi contrôler les éclairages avec le protocole MIDI. Je n’ai jamais testé et je ne sais pas les avantages/inconvénients de l’un et l’autre.
J’ai juste quelques liens :
http://tomscarff.110mb.com/products_prices.htm
http://www.twyman.org.uk/midilite.htm
http://www.audiomulch.com/midipic/
ça me fait penser qu’il faudrait que je finisse ma MidiBox SID… ( http://www.ucapps.de/midibox_sid.html ) :-/
En effet, avec un arduino tu dois pouvoir bien réduire le budget, parce que je trouve que le matériel n’est quand même pas donné et que la facture monte très rapidement
BTW, you can do away with the Enttec Open DMX and the RGB LED DMX Controller and just use a $30 Arduino board. See http://opendmx.net/index.php/Arduino_RGB_Mixer
@Simon : I know Arduino, I am making my own Ambilight system with it and Boblight :
http://www.csquad.org/?attachment_id=1133
http://www.csquad.org/?attachment_id=1134
I agree, that an Arduino based solution is less expensive but I wanted something more “professional” in order to improve my WAF