A few people have asked, so here is the quick lowdown:
I am building a home sensor network for my house as well as a target group of "independent elderly" who have grown kids that want to keep track of them (did you leave the stove on after going to bed? etc).
I would like the system to support lots of distributed sensors, so they need to be inexpensive ($20 target BOM). Right now, your home sensor choices are X10, Z-Wave, etc. They are either too power dependent, too limited or too expensive. You should be able to put a sensor in every room of your house (and maybe some in your garden, garage or yard).
The sensors should be very, very low power and ideally run off of CR2032 batteries or 2 AAAs. My sensor MCU is a Silabs C8051F912 (8K Flash; 768 bytes of RAM and insanely low power). I am programming it with Charley Shattuck's MyForth (sort of a macro-assembler that feels like Forth). I am using an RF12B 433Mhz transceiver using my own protocol (soon to be published). The protocol is encrypted using RC4 (with a 3 byte counter -- 16 million unique key sequences before rolling over is secure enough given a 1 sensor message per minute rate; I am mainly using it for authentication to prevent spoofing -- the data itself isn't that "secret").
I am not that interested in home "control" yet (turning on lights, etc -- anything that involves AC power), but the types of things I want to sense are:
- Basement flooding (Water activated Switch).
- Motion (entry/exit of house and rooms).
- Temperature (each room and outdoors).
- Stove (Motion + temperature + time-of-day): Is the stove on for for a long time? Is anyone in the kitchen? Is it an odd time for the stove to be on?
- Soil moisture (garden).
- Doorbell (button press to ring + log it -- was someone at the door earlier today?)
- Vibration/Motion (Was someone on the back deck?)
- Tap detect (did someone knock on the front door)?
- Open Window/Door
It would be nice to combine as many sensor capability into one device (perhaps vibration, motion, temperature & switch) and then you analyze the data based on what the device is supposed to monitor.
Some of my current sensors elements include:
- Piezo vibration sensors
- Passive IR sensors
- MEMs accelerometers (for knocks, etc)
- Magenetic reed switches (for detecting open windows and doors)
The base station is currently utilizing a Beaglebone running Erlang (in truth I am doing development on a laptop running Erlang, but my test target is the Beaglebone). I am also looking at using RabbitMQ for reliable delivery to the "Cloud" (for further processing/notification). A RabbitMQ queue will run on the Beaglebone so if an Internet connection is not available sensor data is locally queued. A local server (also on the Beaglebone) will feed off of the queues to do things like control lights, bells, pumps, etc. There will be a shovel between the local RabbitMQ and the Cloud based RabbitMQ.
I chose Erlang because it has a nice message protocol parsing capability and OTP is focused on 24/7 availability. I have been familiar with Erlang for over 10 years, but this is the first year I've actually had an opportunity to dive in deeply. Plus I am doing some Erlang at work so there is some mental synergy.
I chose MyForth because it is nice and forces me to really think about small system development.
I chose the Silabs 8051 because it is a very, very nice 8-bit family with a ton of peripheral support -- it is also cheap, ubiquitous and low power . I've used it (and MyForth) on a couple of job related tasks and am very happy with the match.
Where am I right now?
- One prototype PIR + temperature sensor is complete
- One base station radio transceiver -> USB/UART prototype completed.
- Almost done with Erlang base station message processing module (decryption tonight!)
I have a long road ahead, but I am enjoying tackling things at a lower level (I just finished implementing RC4 in MyForth!).