The basic design of the Home Automation System (HAS) hardware is driven by five basic principles, it should be:

  • as simple as possible
  • make use of cheap of the shelf components
  • reliable
  • expandable
  • fast

In addition to these basic principles HAS should have the following properties, it should:

  • not require a bus throughout the house
  • work with "normal" household hardware, e.g. a standard light bulb
  • avoid wireless communication
  • be completely open (as in "open source")

What I came up with is the following architecture that makes use of a central Raspberry Pi and similar SoCs. This Raspberry Pi controls all the standard hardware, e.g. lights & blinds, via I2C-Relays directly attached to the Raspberry Pi. The standard input, i.e. lights switches, is also directly attached to the Raspberry Pi. Therefore, I wired each and every light switch via 12V DC to a number of I2C-optocoupler inputs. 

System architecture overview (left) actual hardware (right)
A few of the wires in the basement during construction (about 10% of the wiring)
Closeup (notice the orange ethernet cables)

This sounds like a fairly complex and expensive way of driving a house, but as a matter of fact wiring 4km of cable instead of the usual 1km for a house of the size of mine is only slightly more expensive but extremely failsafe and allows me to rely on standard and cheap components such as light switches from any brand

Off the shelf (Berker) switches and Buttons as used in the house.

In addition to these basic requirements for a house I added a number of sensors through the building and the adjacent garage, e.g., various temperature, humidity, and barometric pressure sensors. These sensors are connected to Arduinos which in turn connect to the central Raspberry Pi. Conceptually, the Arduino acts as a coprocessor to the main system, doing various pre-processing task like debouncing, filtering, thresholding, and unit conversion. Below is a selection of some of such sensors in the house.

Indoor Sensor: Arduino Yún with temperature and humidity sensor (sensors are separated from the Arduino to make more accurate temperature measurements)
Outdoor Sensor measuring wind speed and brightness
Another outdoor sensor measuring brightness, humidity, and temperature.
Attic sensor for humidity, temperature sensors with a geiger counter (didn't you always wanted to know the gamma ray radiation exposure :-)
Ultrasound distance sensors in the garage to track cars positions (see display below)
An LED grid to display the most important house parameters, e.g. open windows/doors, unlocked doors, lights, garage doors, etc.
LED grid displaying the position of the car while parking.
The same LED grid when no car is moving in. Now it is displaying information about open doors and lights.

Now, all these sensors, displays, switches, etc. need some flexible and efficient system to drive them, thats what I developed the Home Automation System Interface (HASI) language for. You can find out more about it in the software section.