The basic design of the Home Automation System (HAS) hardware is driven by five basic principles, it should be:
In addition to these basic principles HAS should have the following properties, it should:
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.
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
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.
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.