I am starting work on a home automation system, the first step of which will be planning the system. As I work through this project, I'll try to keep this project page updated with log entries, but I can't guarantee that I will. The main parts of the system will include automating door locks, lights, heat and AC, and an interface with my home theater system. I also want to incorporate an interface to the system I am working on for my car (you can find that project at http://hackaday.io/project/1244-android-and-raspi-based-car-computer) that will allow access to various bits of data from the car (door lock status, driving logs, etc.).
I'm beginning to consider some methods of enforcing security in this project. As far as control devices, that is anything that can issue commands to the system, I'll implement https and maybe some sort of password authentication. For the periphery devices, I'll put them on their own WiFi network so that they can be isolated from everything else. This way, I don't have to worry about encryption or authentication in addition to the WiFi security. I will implement some sort of extra security for the devices that control doors in the house. You can never have too much security for that which keeps your home safe.
My initial thoughts on the back-end implementation is to use Node.js and Socket.io. This allows for a web-based interface to be used that can adapt to any size screen. This way, the system can be accessed from nearly any device connected to the network. The Node.js installation will run on my existing Windows-based server that is always on. I considered using a Raspberry Pi as the Back-end server but since the Win-server is always on anyways, I didn't see any point in having another device that stays on all time. Also, with several terabytes of storage, I'll be able to log quite a lot activity before I need to start truncating old data.
I'll use Sparkfun's Phant.io data aggregation software since I'll already be running Node.js.This will take care of logging activity and make it easy for the peripheral devices to communicate with the server.
For the individual periphery devices, I think the most cost effective method of connecting them is will be over WiFi using the ESP8266 module. Combined with an AVR, this will make a very powerful method of interfacing with existing hardware throughout the house. I'll be able to control various types of devices and read almost any kind of data that can be read through a sensor.
The biggest hurdle I'll have in the initial planning of this project will be the interface API's. I want to be able to expand this system without having to completely rework any part of it, and if I can, I would like to build-in the capability to expand the system without the need for any coding on the server. Basically, I want to be able to click "options" in the web interface and then "Configure Devices". This will probably be a large undertaking, but what else would I do with my time?