NodeFly Buzz: Epiphany Home Automation Software
Every time we profile something cool in our NodeFly Buzz section, we are more and more impressed at the full potential of Node.js. That’s why we continue to share all the cool, fun, awesome products.
This was especially true when we discovered Epiphany. This control system describes itself as a universal remote, an automation system, a lighting control system, a security console, an energy manager, an on-screen interface, a mobile app, a development platform, and a Ubuntu live image.
Still processing that amazing list? Us too. That’s why we chatted with Concierge Solutions’ CTO Jonathan Gould to get clarification and the scoop on Epiphany.
 (A look at some of the hardware you can use with Epiphany.)
NodeFly: I was about to ask you to tell us what Epiphany does, but then I remembered your feature list and started wondering if I should ask what it can’t do. Can you give us a rundown on Epiphany?
Jonathan Gould: The idea of Epiphany is to create an automation platform that is hardware agnostic and open for development. We were commercial integrators for 10 years before going back to our development roots, so we've spent a lot of time in people's basements trying to make all the other automation products out there do what our customers want. We realized a few years ago that those other systems are limited by the hardware choices the manufacturers made and are too closed for a developer to really have the flexibility to innovate.
 So, what does it do? Well, at the core, it boots up on just about any machine and provides a means of devices communicating. We defined a way of describing controllable devices (our driver stack) then connected each of those drivers on a central message queue. Beyond that, we started building drivers for the more common devices on the market - lights, thermostats, door locks, security cameras, alarm panels, and so on. Layer on top of that a theme-able HTML5 user interface and custom browser apps, and we believe you have a pretty powerful automation package.
NodeFly: The entire feature list looks pretty incredible, but are there any specific features that really have you excited from a user perspective?
Jonathan Gould: I'm a big fan of making things talk that shouldn't really talk, so for me it's the developer API. The possibilities are endless and we think a community will grow up pretty quickly sharing their innovations.
NodeFly: How exactly does Epiphany’s home automation software work?
Jonathan Gould: At the center is a scalable, reliable message queue. That's where most other automation systems fail. They build a monolithic application that has everything running in one place. That's not very scalable, and when you add new code for a new feature, you endanger bringing down the whole system.
We use the message queue just to move messages around the home - it doesn't really care what's in the message, just that it gets where it needs to go. That gives us scalability because the rest of the code can be distributed across hardware on larger systems and reliability because new code lives in new places. We don't mess with the old code when we build new features.
The rest of the system "hangs off" of the queue. Each piece is built as an individual server, connected to the queue and processing and sending messages. Servers are where the custom logic to control other systems live. So when a generic "light on" comes from the message queue to a server, it creates the command in whatever custom lighting protocol the lighting system understands. These servers are built in Node.js.
On the other side of the queue is the user interface. Built with Sencha Touch (all object oriented JavaScript), it displays controls for each of the running servers on the network, and can be modified by the end use through our theming engine. Epiphany comes with an on-screen browser so you can access the UI on your television, and there are iOS and Android browsers too.
(Temperature not quite right? Epiphany can help.)
NodeFly: What’s the background on creating it? At what stage did Node.js enter the picture?
Jonathan Gould: One of our requirements from the beginning was that the servers be easy to develop in place without us distributing compilers, libraries, etcetera and the developer setting up a complicated build environment. We originally built the servers with PHP CLI. It worked well, but as we developed the UI SDK along side it, we realized how cool it would be to have both sides of the system written in the same language (switching back and forward between JavaScript and PHP was becoming a pain). That’s where Node.js entered the picture.
NodeFly: What was the main reason you incorporated Node.js?
Jonathan Gould: Unity. Our UI and Server SDK's have virtually the same calls into the driver stack to control things. The developer does everything in JavaScript and we take care of all the communication and configuration in between. The workflow is so much simpler now that we are working in one language.
NodeFly: What challenges did you face in the development process, and how did you work to ensure quality and performance issues were taken care of?
Jonathan Gould: Automated testing has always been a challenge for web developers. We've managed to build a continuous integrations system with automated test using some great tools (Jenkins, Mocha, and Selenium). Every night a new build of Epiphany spins up in VMware and Mocha does its thing. JUnit reports push back up into Jenkins and we see every morning when we get to the office what we broke the day before.
NodeFly: We wanted to congratulate you for your milestone of completing version 1 at the end of May. Any tips of tricks you would pass along to our users when building with Node.js?
Jonathan Gould: Build your tests and test mechanism early. We started too late, and when we sat down to make a list of tests that needed to be written, it was in the hundreds. I think it would have been easier to write these as we finished sprints along the way. I guess we were just too excited to move on to the next piece of code.
NodeFly: Things are early for Epiphany now, but we were wondering if you had any longer-term plans you wanted to share?
Jonathan Gould: The goal for 1.0 was to reach a level of functionality that matched the other systems out there, but to do it in a way that we would be free to innovate beyond that. We met that goal, and now we have some exciting things brewing in the lab. Unfortunately, that's all I can say...
We’d like to thank Jonathan for talking to us about Epiphany. Check it all out on their web site today!Â
Do you know of any cool, creative and fun uses for Node.js that you think we shoulde profile? Just email us at [email protected] to let us know. And if you want more NodeFly Buzz you can search our blog for more articles at http://blog.nodefly.com.
Building your own awesome Node.js product? Then use our dashboard at http://www.nodefly.com to monitor it!Â










