My February 20, 2019, talk to the Boston Linux and Unix group about my ongoing home control project is now available online.
The goal of my system is primarily to learn by doing and thus I’ve been evolving the system over time. It has greatly influenced how I think of the Internet as infrastructure with the web being just one way to use this infrastructure.
Projects like this enable me to look beyond what is available now. The challenge is understanding how to empower others to create their own solutions as consumers and not just as enthusiasts. As much as I can I use off-the-shelf technology supplemented by my own software.
Apologies for the poor audio. I wasn’t wearing a mic and the camera was a few rows back.
The slides are available as a PDF or a PowerPoint.
The system is a work in progress. It started out as an X10-based system with a central program on my desktop computer. The most powerful feature of X10 is that it is a peer system and doesn’t rely on a central controller. The control program running on my desktop complemented this and added scripting capabilities. This is not automation – the scripts add functionality but are not essential. Programming around the limitations of X10 added complexity.
The next step was to use Insteon which is similar to X10 but much higher performance and with many additional capabilities. I have since removed all X10 support, but it has a lasting effect on the code including my variable names with “X10”.
The next stage was to use SmartThings so I could use Zigbee and Z-Wave devices. I also added IP-based devices – LIFX bulbs. More recently I’ve shifted from cloud-based SmartThings to Hubitat which works within my house. The Hubitat people also provide me with a simpler API, so I no longer needed to program around SmartThings complex rule engine. More recently I’ve added Shelly relays, Yeelight (sold by Xiaomi 小米), Philips Signify Hue (Signify), Nanoleaf, and other devices.
The other big change was to implement a web app which allows me to use any modern browser. I mount this on my wall using 3M Command Velcro Strips.
In order to improve reliability, these apps can control the lights by going through an intermediate program written in TypeScript/node that runs on multiple devices. This increases the resilience. The central program still plays a role in tracking the status of the system but is not necessary to control devices. For devices that have a web interface the web app can do direct control, but that ability is limited by blocks on cross-browser calls (CORS).
The next stage is going to be to shift more of the function to the node-based program in order to take advantage of the various libraries available and improve local control.