I’m replacing the blue fluorescent lighting above my fish tank with LED strips. The original intent was to use blue LEDs, but as I’m already going through the effort, I opted to use RGB LED strips (each LED is made up of three LEDs, one red, one green, and one blue), allowing me to create and endless choice of colors (although I know that I’ll primarily use various flavors of blue to simulate moonlight).
The RGB LED strips come on a reel and are encased in rubber so they are waterproof. The strips can be spliced and reconnected at specified cut marks, and the reconnected strips can be waterproofed, too. RGB LED strips are powered by 4 wires, one each of red green and blue, and a common wire. Run power on the blue and common and the LEDs glow blue. Run power down the red and green and the common and the LEDs glow yellow. You get the idea.
Simply turning on and off power (at full intensity) to any wire is easy, any switch can do that. For greater control, and to be able to mix amounts of each color to obtain the exact color you want, that requires a RGB controller. Most controllers allow for some sort of color selection, and adjust the power to each wire accordingly. Pretty simple.
Where things get trickier is finding the right controller. Most RGB LED controllers are interactive, push a button or turn a knob to control the lights as you wish. What I needed was a way to do this under home automation control, so that changes could be scheduled or occur in response to other actions. And I could not find a single RGB LED controller with a programmatic interface. The next best option was to try the IR route. There are controllers with remote controls, and Insteon home automation can use an infrared link to fake remote control sequences. Unfortunately, that option did not work. The remotes that I found all allowed for cycling through programs or increasing and decreasing lighting power, but none allowed for explicit control over the R, G, and B values.
So, time to introduce a whole new technology and protocol to the mix. DMX512 is a communication standard commonly used to control stage lighting and effects. It’s been around for over 20 years, and is what most clubs and concert halls use to sequence lighting, fog machines, moving lights, and more. It’s a very simple and open protocol, and is widely supported by all sorts of hardware, software, devices, and more.
I found a DMX Decoder which accepts DMX512 commands to power RGB LEDs. The decoder plugs into any DMX512 source on one end (using an XLR connector), and connects to the RGB LEDs (via a simple screw terminal) on the other end. So now all I’d need to do is generate DMX512 sequences programmatically to fully control my lights. Simple, right? Not quite. Unfortunately, my Insteon based home automation system does not support DMX512.
My home automation controller, which I’ve discussed previously, is the ISY-99 from Universal Devices. One feature of the ISY-99 that I had not previously played with was its Network Module, an optional component which allows the controller to communicate with network resources over HTTP, TCP, UDP, and more. Using the Network Module you can talk to just about any networked device, sending raw text, binary data, and more.
With the Network Module I could send DMX512 commands to the DMX Decoder, all I would need is something to bridge DMX512 and Ethernet. And I found this exact bridge, the Ethernet / DMX512 Generator made by Cinetix in Frankfurt, Germany. This device does exactly what I was looking for, it acts (among other things) as a Telnet server, accepts commands, and generates DMX512 sequences which then get passed to the DMX Decoder which in turn controls the RGB LED strips. And the commands are pretty simple. For example, send S001,V$FF to turn on the red to full brightness (S001 is the first slot, red, and V$FF sets the value to 255), and so on. (The only gotcha is that Cinetix does not sell the device in the U.S., so I had to have it shipped to an address in Europe and then brought it over myself).
The last thing to do was to define the commands in the ISY-99. I added a whole bunch of commands, one for each color I’d want. Each command simply sends raw text TCP data to port 23 on the DMX512 Generator, and in milliseconds the lights respond. These commands can now be triggered as needed in the home automation controller. I can invoke them on scheduled intervals, in response to buttons being pushed or toggled, and much more.
So, I now have RGB LED strips above my fish tank powered by a DMX Decoder which receives commands from an Ethernet DMX512 bridge which in turn receives Telnet commands from my ISY-99 home automation controller. (And I even have a little in-house ColdFusion app on my home Intranet which pops up a color picker, allows for color selection, converts the selection to the required DMX512 Generator sequence, and then sends the command as a socket request to the controller)!
Now that I’m reading through everything I just wrote up, it seems like a whole lot of work for what started as a simple fish tank lighting enhancement. But, hey, this stuff is fun. And it’s cool to see all the pieces fit together. And it’s really cool to see just how flexible the Universal Devices ISY-99 is.