Java — Play Store
Hue Limited Edition
Introduction
Hue Limited Edition is an app I worked on at Q42, which gave me an excuse to work with Philips Hue lights!
It differs from the official app and other third-party apps by allowing people to control their Hue lights right from your home and lock screens. They can organise their lights into groups and quickly change the colour by adding their own colour presets.
The app allows them to configure their lights, preview colours before setting them and switching between multiple bridges in seconds. The widgets then allow them to have full control over their lights without ever opening the app again.
Features
- Widgets for home and lock screens to toggle lights and set colours without even unlocking your phone
- Shows the current colour of all lights
- Control all lights or lights in groups instantly with on/off switches and presets
- Reconnects to the bridge without any delay upon opening the app
- Groups automatically synchronise between different devices
- Different widgets can control entirely different bridges on a network
Technology
To be honest, there's not a whole lot of exciting technology behind this project. This is one of those projects that is all about the UX. This ended up taking the most time to get right.
Nevertheless, a project that combines hardware and software is always interesting. The Hue lights communicate with the app
through a device called a bridge. The bridge uses a mesh network to pass state changes to the lights and exposes a nice
REST API to interface with this state. In essence, the bridge is nothing more than a simple JSON datastore. There is an
object for each light, with the current color, on/off state, etc. Apps simply send a PUT
request to a URL like /lights/1
with new JSON state and the light will change to reflect the new state.
This is the first Android project I've worked on that has widgets, which formed an interesting learning experience. Since widgets are completely separate from the main application, communication with them is only indirectly possible. Instead of objects you can modify, they have unique IDs you need to keep track of. When I was still figuring things out, it was sometimes a little difficult to keep track of these and make sure the right information arrived at the right widgets. After a while it all starts making sense, but widgets are still somewhat limited in terms of UI options.