This project started as a simple proof of concept if it would be possible to get some simple RGB light working using a DMX interface.
After researching about possible interfaces I decided for the Eurolite DMX Pro 512 for which I was able to find some information about it’s serial protocol.
Another challenge was to find a reliable serial port library which is also available on other platforms as Windows which I use to develop the software. Here I decided for the fazecast jSerialComm library which also is playing well on the raspberry pi mini computers (which was mandatory as I wanted to set up a little raspy applicance lighting in the living room).
After playing around a bit a first prototype was implemented which was able to fade in a color from black and vice versa (wow!).
In the meantime (and about four years later) the project went through different stages ranging from kind of modular approach to pure chaos messing up UI code with logic. In between the UI was also capable of reading and playing time code. But this turned out not to be reliable enough to use it in production environments so I tossed it.
The current flavor of the project which you have in front of you now has a layered approach which strictly separates the technical stuff needed to talk with the DMX interface from the client code. The interface to the outside world such as a JAva-FX UI which still exists and a web interface which is not fully implemented yet is the REST module. With this approach it is possible to run the server component in form a little shaded jar on a mini computer such as the raspberry pi while running a complex user interface elsewhere.
This is a complete rewrite in kotlin as I no longer want to write java code. To make my life easier a bit and because I only have access to one DMX interface which I anaged to find documentation for, I have boiled down everything to be dedicated to this which is the Eurolite DMX 512 Pro.
A printout of the thread with those golden informations which kick started me once back and the original hardware manual are attached to this project
My home setup consists of
-
video receiver (currently a Yamaha RX-V6A)
-
5.1.2 loudspeaker system
-
front, center and surround: Magnat Monitor Supreme series
-
upper surround for Atmos: Yamaha
-
-
4k bluray player (Sony), a harmony hub along with a Harmony
-
Technics CD Player (still running after 30 years in operation)
-
Telekom Magenta Tv stick
-
75" flat screen by LG
-
Harmony Elite universal remote with a hub
-
Some DMX fixtures
-
Some RGB Led Stripes controlled by shelly devices
-
Some House lighting also controlled by shelly devices
-
An Idual RGB light used as the default back light of my TV set
-
Finally a raspberry pi 3b running the klanglicht application
-
Lightmanager Air as the central control of all this
The setup of the lightmanager contains also configurations for my DMX lighting setup behind the Hifi rack. AS the UI is not allowing special things like color previews for buttons I came up with a special naming convention for the comments which is then scraped out from reading the HTML markup of the lightmanagers UI.
Over time the collection of light scenes grew and grew which makes maintaining this within the lightmanager pretty uncomfortable.
As I have implemented handlers in this project to control
-
Shelly devices
-
Lightmanager Air scenes
-
Sound programs of my Yamaha receiver
The only thing not controllable directly is the one Idual back light.
So my current idea is to move away from scraping all the configuration out of the Lightmanager and building a control web page out of it.
Instead I want to have a local configuration (still not decided if this will be a little database or just a json file) within the server and generate a control webpage from that.
Of course the lightmanager is still needed to act as the interface between the Harmony and the rasp berry pi. But with this setup the amount of scenes in the light manager should be reduced drastically.