I have been working on a prototype home automation system which will run on a raspberry pi and be fed commands from Arduino sensors. I have started working on a new design and need feed back and ideas. Conceptually its very simple and made to be quite distributed and although I currently only plan to implement this as a C application I eventually want to provide language bindings to make configuration a breeze.
There will be 4 main components, Triggers, a listener and marshallers.
The triggers are things like temperature sensors, bluetooth scanners, etc.
A Listener converts Triggers into Actions.
A Marshaller tells the right device to preform an Action.
A typical use case would be a single RPi running a Listener Server with configured Marshallers, a bluetooth scanner on an Arduino board and a motor attached to the Paspborry Pi GPIO. A plugin which is capable of controlling the motor would register its type and UUID with the Marshaller on load and the commands it can receive (up, down).
The bluetooth scanner would tell all listeners on the network when it encounters a device which it has been paired by triggering a "bluetooth.device_found" event. This would then be converted into a "door.unlock" action by the listener and added to a queue (Redis or Darner seem like a good option). The marshaller would would then issue an "up" action to the plugin.
If you are keen on helping out let me know, all feedback is welcome as well!
I plan on using:
www.c-pluff.org
libev.schmorp.de
http://code.google.com/p/protobuf-c/
https://github.com/wavii/darner
Thanks