With news that my old employer would be completely changing its software strategy, essentially abandoning it in favor of a proprietary system from Crestron, I have decided to share my experience from the work I did. This will take the form of an open source home automation server, a.k.a. HAS.
The main goal of HAS is to provide end-users with dynamic room and home control based on the user’s device and security level. This is very important in my view. Home-owners, occupants and guests should have varying levels of control. So for an example a guest should be able to control the room they are in with their iPaq. For example, I can get up and turn off the lights in the room. So, I should be able to remotely turn off those lights. The same is true for the A/V system. However, the home owner certainly would not want me to control other rooms that I could not reach nor should I be able to access the security or HVAC system. In addition, the homeowner might allow them to play MP3s but probably would not want to give the ability to create a permanent play list or order a movie from MovieLink.
Another item to consider is that control could be across multiple systems. Not because of the end user, rather because the system should support multiple vendors including Crestron, Premise, and others. This is so that the software can be used by dealers to support their clients.
This brings us to the most crucial feature reliable, fast device control. The system must work and work at the speed of a light switch, i.e. you flip the light switch and the lights go on or off immediately and with no discernable delay.
If I was prioritize the list it would be ordered as follows:
- Reliable – works without fail
- Fast – performance must be
- sub second response times in device control
- sub second response time for device status
- Reasonably fast for informational display i.e. retrieval of room display, list of lights, media library, etc.
- Multiple control system – the system should support major control systems and be able to add new ones rapidly
- Security – the system should give appropriate control to the user preferable by role i.e. house guest, baby sitter, children, homeowner, etc.
- Dynamic – the system should present a user interface dynamically based on security, device and location.
- Extensible – the system should be easy to extend to new devices and services.
With this in mind I have put together an architecture that should get HAS the ability to accomplish my vision.
Click image to enlarge.
Below is a rough architecture. It is broken into several layers:
- Presentation – this layer is responsible for providing a user interface for a client device based on the services that are available to that client device and user.
- Services – this layer is composed of various services available
- A/V – control of audio and video components and media libraries
- Electrical – control of lights, ceiling fans, pumps
- Climate – control of HVAC, refrigeration, saunas
- Security – control of both computer and physical security systems
- System – information about the home and system
- Logical – this layer provides a consistent API to control devices independent of the actual control mechanism. In addition, the information about the home is stored at this layer
- Physical – this layer provides the actual device dependent control. The architecture of the logical and physical layers is similar to ADO.Net. The programmer only learns the logical interfaces. The physical layer is implemented for a specific database for example MS SQL or Oracle.
The idea is as follows:
- The device sends a request for a UI
- The UI sends the appropriate UI based on the device type, location, and user access control level
- The user can then use that UI to control various functions like lights, A/V, etc.
The key point to this system is that the user gets a UI that is appropriate for the device location, and who they are. So for example, I walk into the home and go to the front hallway touch panel. Touching the panel, I see a room control for the entrance way and front living room. The system knew what to display because it knows that the device is an embedded touch panel in the front entrance. If I want more control I can touch a button for more control. At that point the panel will request that I identify myself. Based on my response it will unlock more functionality, like the ability to control another area, or see all the thermostats.
This is just one way the system can be architected. The next part will be on what tool to use for building the system.
Comments