This page contains links to the current "stable" and
development versions of the HomeDaemon home automation software.
HomeDaemon is a package developed by myself after trying just about every
other product on the market and freely available for this purpose. It was
written in direct response to the incredible frustration that I felt with
many of these packages, most of which got SO close to "doing it
right" but just couldn't quite make the last quantum leap.
HomeDaemon is an evolving product, and currently runs nearly
everything in my house - it ties in to lighting, security, irrigation (sprinklers)
and even my holiday lighting scheme. The current configuration runs over 300
events and has two "control points" in the home as well as direct
access to some functions by IR remote control. It also includes a compiled
CGI program for status and remote control of the entire system from any location
providing you have a functional web server on your machine (Apache is recommended)
The package was developed to run on FreeBSD, and in the version
available here also compiles and runs cleanly on Linux. The code is pure "C"
and is extremely efficient; no games, no perl scripts, no nonsense. It requires
shared memory and IPC support in your kernel to operate (which, for some FreeBSD
users, will require a kernel recompile).
If you're interested in what the returned status page looks
like over the web you can view it here (for
obvious reasons the control functions are disabled; this is not the actual
active program but rather a saved copy.) There are also screen shots at
this link for the Leopard Touchscreen (an Applied Digital product) in
actual use showing some of the things that interface is capable of.
The code is made available under a license that allows redistribution
but not inclusion in any work for which money is charged without explicit
permission. Please read the LICENSE and README files carefully before installing
this package. It also requires Dan Lancini's "x10d" package to run
the CM11A X10 interface. Note that Dan's code requires one header include
to be added ("#include <sgtty.h>") for FreeBSD; I am not aware
of what, if anything, has to be done under Linux to get it to compile.
Be aware that the "current" code may have both new
features and plenty of bugs, and also that it is possible, but not likely,
that an upgrade to "current" MAY NOT be reversible. Basically, unless
you're willing to play with new things, stay away from the "current"
code branch. If you do grab the "current" branch, it is absolutely
essential that you go through the README file to learn what is being worked
on and what has changed, particularly if you were running a STABLE branch
The current STABLE software supports:
- X10 devices via the CM11A and Dan Lancini's "x10d" interface
program, including Leviton extended (direct access) dimming commands
- The ADICON SECU16, SECUI16, RLY8XA digital and analog input and output series,
including RPN-based scaling of analog inputs (for temperature sensors, etc)
- The ADICON Leopard touch-screen controller (both for status and as a full-function
control point, including direct numeric input via a "number pad"
function.) Multiple units are fully supported, provided you have the serial
ports necessary to run them (each requires one port.)
- A CGI web-based interface that allows complete screen definition, layers,
and any other construct you would like for the returned (and displayed) data,
along with control capability.
- User-settable timers for arbitrary execution of events at defined times
without having to code them in the permanent event list. For example, if you
have a "Water Yard" event that usually fires on Saturdays at 4:00
AM, and you'd like to water the yard at 5:00 PM this afternoon, you can set
a timer to do that as a "one shot". This requires either a Leopard
(to key the times in) or you can shove these into the command socket via a
small program. A command line program is in the works for the next release.
- The new firmware in the Leopard is now supported with proper backlight control.
- Fixes for some serial cards that BADLY botch time-limited input (rant on:
this instance of "stupid programmer" issues with driver programming
has existed in various serial drivers since at least 1983 - when I first started
working with Unix! Isn't it long past damn time that people wrote and tested
code to the specifications?! Nearly twenty freaking years and I'm still
finding these kinds of problems in serial drivers?! Driver programmers take
note - you should be strung up by your toenails for this one; its a serious
problem and one that makes anything approaching real-time programming involving
a serial interface nearly impossible.)
- As of V4.14 the code is SMP-safe in that variable stores are now interlocked to insure that they complete before the modifying process gets a second look at them. Previously this relied on scheduler behavior inherent to all Unix systems where on blocking system calls the processes' time slice was released. With an SMP system this is no longer true; as a consequence semaphores have been implemented to insure that variable stores are completed before the modifying process is allowed to continue execution.
- As of V5.0 the ZWave Leviton interface and some Zwave devices (switches and dimmers, with support for PIRs and wall controllers) are supported. Also, the X10 support is now in a completely separate module, so those users who wish to run without X10 at all can now do so without having to "dummy up" an interface to do so. Please note that there are significant changes to the events file and startup requirements - read the documentation if you're coming from 4.x!
- As of 5.9 there are additional significant changes in the Zwave code, and existing installations must either reboot or remove the shared memory segment from any previous run before upgrading (with "ipcrm") due to a change in its size.
- 5.11 and beyond include Zwave Thermostat Support. Multiple zones/units are fully supported by the code. A fairly-complete implementation of an actual thermostat control protocol is in the events.english.sample file. There are limitations in the code at the present time, specifically:
- Only Fahrenheit and full-degree units are handled.
- The manual fan override is not supported
- The CGI interface will display full status off the "zwave-table" stanza, but there is no support for individual Zwave unit display, nor can the CGI interface directly control the Thermostat (you can, however, execute any event from the CGI interface, which can modify the operating mode of the Thermostat
- 5.13 supports the TRANE Z-Wave enabled thermostat including the ability to run in AUTO changeover mode and manually control the fan (the Wayne Dalton/Intermatic unit didn't have a soft fan control capability.)
- 5.14 supports the Melloware "Lightswitch" application for both iPhones and Android devices.
Both distributions are made in SOURCE FORM ONLY. I may, in the
future, consider binary releases.
The STABLE release is: HomeDaemon.tar.gz
(Gzipped tar file, V5.14)
NEW: Check our our embedded option for a HomeDaemon system!
NOTES: It has come to my attention that a change Dan
Lancini made to his "x10d_cm11" driver (the CM11A interface that
is required for X10 operation of this package), that had previously been believed
NOT to impact HomeDaemon, in fact DOES impact it - and in a severely negative
way. This problem is FIXED in the STABLE code. If you find that Leviton EXTENDED
DIM commands are not being properly reflected in the status displayed with
either the DUMP program or the CGI status, you need to update. See the README
file in the package!
sent from this link should pertain ONLY to the "HomeDaemon" software.
I do not guarantee a response, but I will read all comments sent. Please do
NOT send HTML-ized email - I cannot read it and won't respond to it. Patches
for other operating systems as well as comments and suggestions are appreciated.