Hacking the Busylight
Over the past couple of months the Busylight has been making quite a splash in the UC community. I don’t want to repeat what’s already been said about it so if you don’t know what it is there’s a write up by Scott Hansleman and a  great video demo by Tom Arbuthnot about it.
We got one in the office the other day and the first question we had was: “can we hack it?”.
The Busylight is definitely a useful tool for Lync users, but there’s lots of other uses where it would come in handy. Leaving aside all the Lync-specific stuff you could do with it, having a USB light you can control means it’s a much cheaper option than an Orb or similar when used for things like:
- Monitoring Service Statuses
- Automated Build Notification
- Warning Systems
- VIP Email Delivery
- Impending Hurricanes
- Impending Family Members
and much, much more. Seriously, there’s loads and loads of use cases.
The question is, can we control it and make it change colour on demand?
The first thing we did after installing the supplied software (available here) was to look in the application folder. The best outcome would have been an SDK guide, but potentially anything like DLLs or CHMs would be handy:
That’s certainly a pretty positive start!
We created a new C# windows console app, and added both the BusyLightHIDCommunications.dll and the LinkLampConfiguration.dll to the project:
From there, a bit of playing around, following IntelliSense and generally trying things out led us to this:
var HidComms = new BusyLightHIDCommunications.UsbDeviceHidCommunication(1240, 63560);
var x = new BusyLightHIDCommunications.UsbDevice(1240, 63560);
x.FindTargetDevice();
var color = new LinkLampConfiguration.Color();
color.Red = 255;
color.Blue = 255;
color.Green = 0;
x.Light(color);
Boom! Purple!
You can even cobble together a simple loop to give you random colours:
Random randomNo = new Random();
while (true)
{
color.Green = randomNo.Next(255);
color.Red = randomNo.Next(255);
color.Blue = randomNo.Next(255);
x.Light(color);
System.Threading.Thread.Sleep(1000);
}
Not a Sound
The Busylight has a speaker, and there are several pre-set ring tones you can set using the supplied software to alert you to an incoming call. It would be really cool if we could trigger those sounds, or even our own.
We didn’t have much luck on this front, unfortunately. The Busylight doesn’t expose itself as an audio device, and I suspect that the sounds are preset and loaded into the device, not sent to it from the software. Either way, we couldn’t work out how to get it to issue the sounds: I’m guessing this is a specific command which the app knows about and is sending to the device.
SDK? Pleeeease?
It would be really great if the team behind the Busylight could offer us an SDK to allow us to open up the sound and make amazing things with it. I can think of loads of really great uses for it and I’m sure it would only increase sales. It would also make it really marketable outside of the UC community to anyone who wants an easy way of indicating status.
I have also asked the busylight people for an sdk, and they’ve said they’re working on it.
However, are you aware of the blink(1)?
http://www.kickstarter.com/projects/thingm/blink1-the-usb-rgb-led
This should do the same job for even cheaper. I’m planning to port my own Lync status indicator app over to the blink(1) as soon as they start shipping. Unfortunately, I don’t think they’ll have a .net api immediately, so I’m not sure how tough this will be.
An SDK has been published! http://www.busylight.com/develop
Btw, did you know that a similar project is also Luxafor? http://luxafor.com/
It is an open source project and APIs are available.