Home Control System III
The integrated system is controlled by a central controller running
a custom application written in C/C++. It unifies the network of
hardware distributed throughout the home to provide the inhabitants
with
an integrated system that appears to perform intelligent actions
automatically.
This describes the third generation home control program (set up in
2003).
For a write-up of the previous version, see here.
A bit of history
In 1991, I purchased a PCjr
for $40 and wrote a Borland DOS C++ application to communicate with a TW523
(X-10's powerline interface). This allowed me to send and receive
power line commands to control and monitor the house. After a while, I
outgrew that configuration and found a third party parallel interface
port,
and constructed a DTMF decoder and IR interface. I could now
receive
touch tone commands from the phone, and send IR commands to my
Audio/Video
system. I built a niche into the wall of my kitchen, and housed
the
system in there for a built-in look.

The first PCjr-based home control system. Installed in 1991.
The status of the units are in the left part of the screen, and events
are shown on the right.
More on the Jr here.
I could view the Jr's screen on any TV in
the
house, and it would do somewhat intelligent actions such as mute the
Audio/Video
system when a call came in. As the years went by, I had to
replace
the floppy drive, as the Jr has no hard disk. This made me
realize
that I had to upgrade to a conventional PC, or I would one day be dead
in the water with the old hardware. I had also wanted to add more
I/O, and thought that a network of PIC microprocessors would give me
all
the expansion room that I would need. The network of PIC idea
came
from an existing home control system called HCS.
In 1996, I purchased a 200 MHz Pentium computer, and rewrote the
user
interface with Borland's TurboVision GUI libraries. The RS485
network allowed me to add many more features such as a weather
node, complete phone interface, a power
monitor node, etc. It still ran as a 16-bit DOS application
under
Windows 95 (and later '98). Since '95 was not very stable, I left
open the option of booting up in DOS only, and run in a dedicated mode
if I needed more than a few weeks of reliable operation.

The second generation system using a Pentium computer.
The home control program was augmented with a GUI interface.
See here for more, and here
for a screenshot. Note the PIC modules on top of the
monitor, they are connected by the RS485 network.
Upgrade for the future
In January 2003, the Pentium died, and I had to run out and get another
PC at Best Buy. This time it came preloaded with Windows XP, and
it would not run the 16-bit DOS based application properly (I was
getting
tons of RS485 network errors and time-outs). I was able to boot
up
the new PC with my old hard disk running Windows 98, and continue
operation
basically the same as before, but I knew I had to move with the times,
and upgrade the home control program to a 'real' Windows application.
I started to write the new home control system, called G3
(Generation
III), in March 2003. This time, I used the Borland Builder C++
environment,
a compiler I have used successfully for other projects at work.
It
allows you to build a Windows GUI application using the Visual based
concept,
and it has been very dependable for me. Although I did not intend
to, the new program is a complete rewrite, using only a few dozens
lines
of code from the old system. Before G3, parts of the code that
ran
on the Pentium was from the original source that came with the TW523
more
than ten years ago (!). Since the DOS application ran in a
continuous
loop, it loaded down the PC very much, and other tasks such as web
browsing
were always very slow. Time delays were implemented with
CPU-eating
delay loops. In the Windows way of programming, one uses events
to
fire actions, and when the home control program is not doing anything,
it frees Windows to do other tasks. Timers fire at 1msec interval
to perform the background polling of the PIC network. As a
result,
Windows indicates that the CPU is used less than 2% of the time when
running
only G3. This means web browsing is now smooth, and I can even
play
a video with the DSL connection without disruption of the home control
program or the video.
The new G3 program was put into service only two months after I
started
to write it. Several new features made the one-day trail run
successful,
and I had only some minor tweaks before it was left permanently
running.
One significant feature is 'monitor mode'. This causes the home
control
computer to not control the RS485 bus that it is attached to, but
listen
and decode all the messages. In this manner, the new program
could
gather all the sensor readings and update the user interface and
perform
as usual, except the original home control program is running the
home.
This greatly avoided downtime of the system, a nice feature as we have
grown accustomed to its benefits.

Main screen of the new home control program called G3. Although
only four house codes are visible
at one time, the state of any unit can be determined by changing a
selection on the GUI.
Note the forecast for today is shown. It shows a mostly cloudy
prospect, with
a high of 53F.
Feature List
Here are some of the features of the system. The new ones are
noted.
-
Monitor mode (new). As described above, this causes G3 to monitor
the RS485 network and process all messages and sensor readings into its
internal database for display on the GUI. This allows more than
one
computer on the network to run G3. They would all display the
same
readings, and take the same actions based on events, however only the
active
G3 program would control the network. This was very useful during
the development of the GUI, allowing little downtime during the switch
over.
Monitor mode (here shown as 'passive') causes G3 to process network
traffic on the RS485 line, but it does not generate any. An
update
has added an
'auto' feature to the irrigation control depending on the rain
gauge.
-
Connect to serial ports other than COM1: and COM2: (new). The old
G2 program accessed the UART registers directly, which limited the type
of serial ports it could use. On the other hand, G3 uses a
Windows
compliant library. As a result, it can now use any serial port,
even
virtual serial ports such as those for USB-serial converters, serial
port
redirectors, and serial ports on PCI cards.
-
Connect via TCP/IP (new). Normally, the RS485 network is
connected
to the serial port on the Home Control PC via the first PIC on the
network
via its RS232 to RS485 converter.
However, this new feature causes the program to seek for the network on
the TCP/IP (Ethernet network) at a specific port. With an
appropriate
serial to TCP/IP converter, the first PIC does not need to be located
near
the PC, but could in principle be anywhere in the world.
-
TCP/IP Gateway (new). G3 also acts as a gateway between a
particular
TCP/IP port and the RS485 network. This allows another instance
of
G3 (running on another computer on the network) to control the RS485
network
of PICs. The computer running the gateway function then drops
down
to monitor mode, and continues to update its database to display sensor
readings and home control events. This feature, combined with the
previous one (Connect via TCP/IP) made it easy for me to test
subsequent
version of G3. I could run the new copy from the comfort of my home
office,
and it would connect to the running version in the kitchen.
The user can select from a wide range of options in order to connect
to the RS485 network,
including if it is made available on the TCP/IP network.
-
Downloading of weather forecasts from the internet (new). Text
formatted
forecasts are downloaded
from the web, and parsed for display on the main screen in a
abbreviated
form and the full contents is available in a separate dialog box.
-
In the 'Weather' box of the main G3 screen above, we are expected 50%
probability
of percentage (POP) and a high of 72F.
-
This information is used to determine if the automatic
blinds are to be opened in the morning. If the expected high
is over 80F, the eight blinds in the family room are not opened at dawn.
-
After 3pm, the line in the main screen changes to tomorrow's forecast.
-
The contents of this dialog box is also sent to the event log as part
of
the weather summary in e-mail reports (see below).
The forecast dialog box. Weatherforecasts for the next 7 days
are downloaded and displayed in textual form.
POP means 'Probability Of Percentage'.
-
The names of X-10 units are not hardcoded (new). The names of the
256 possible X-10 units are not hardcoded, but can be edited and saved
to disk. This makes it easier to configure the system without
recompiling.
In the previous generation of home control program this information was
hardcoded.
All X-10 unit names can now be edited at run-time. Compare to
screen shot of the main screen above.
Units not marked as 'Light' do not show dim/bright on the Home Status
window.
-
E-mail reports (new). With better Windows integration and access
to Winsock, G3 can send e-mail reports at a preset time. These
reports
consist of the contents of the event window, and a summary of the day's
weather and power usage.
The user can customize the Internet options such as e-mail and pager
settings.
Some of the settings here are fictitious.
-
Sending messages to my text pager (new). The system can be
triggered
to send me a text page when important events occur. Such as
someone
arriving home, or the tripping of the alarm sensor. In the latter
case, the zone that caused the alarm trip will show up on the text
pager.
-
Better display of events (new). In G2, the user would see for
example
E-2 ON (with a time stamp) when that X-10 command was received.
With
the new system, the user will see Foyer Light (E2) ON (with time
stamp).
This leads to better readability of the event window. In
addition,
if a user is controlling the system by phone (more below), the event
string
will be spoken out loud into the phone line, and the user can better
follow
along what is occurring.
-
Adoption of the concept of a generalized house and unit code
(new).
Commands and events are attached to the concept of generalized house
and
unit code. House codes A through P are mapped directly to the
corresponding
X-10 commands, other events such as from the security system are mapped
to the 'S' house code. For example, S14-ON means that the
security
system has been armed. W1-ON means that the sun has set.
This
latter quantity is from a calculation based on the home's longitude and
latititude. This is provided only as a backup to an X-10
Sundowner
module which uses a sensor to detect sunrise and sunset so that
automatic
actions can occur if it gets dark. The benefit of this feature
will
be made clear with the next item below.
-
User interface for the 'Translator' function. The Translator
function
maps an event from a generalized house code into another based on
certain
conditions, and simulates the actions of an intelligent home. For
example, when the alarm is armed, I can use a Translator rule to
shutdown
all the lights in the home, or to turn on a light when it is dark and
motion
is detected. A collection of more than 70 of these rules help
make
the home appear to anticipate your needs. This very powerful
module
used to be hardcoded, but with the use of Borland Builder has been
changed
to a run-time user interaction using the dialog box below. Almost
any event that occurs can thus trigger another based on the Translator
rules, which leads to a more tightly integrated system. X-10
commands
can trigger IR commands, weather activity can trigger X-10 commands,
events
by the security system (doors, PIR sensors, etc) can trigger the HVAC
system,
etc.
Example of a Translator rule. If the front door is closed
(S4-OFF)
and it is at night (G12-ON),
send an OFF command to the entry way light (D15) after a delay of 2
minutes. On the event window,
the exchange will be documented by the contents of the Comment
box.
This very complex structure allows
great flexibility in defining Translator rules. If the user needs
help, each edit box will pop up a hint if the user
pauses the mouse cursor over it.
-
The 'Custom' rules module. For rules too complex to describe
within
the structure of the Translator rules, they are implemented by
hardcoding
in C++. Although inflexible unless the user recompiles the
system,
it brings to bear all the resources of C++ when firing complex logical
actions. About 12 rules are implemented by hardcoding.
-
One example of such a complex rule is pathway lighting. If a user
gets up late at night and walks around the home, lights will turn on
depending
on which PIR sensor is tripped. However, I only want this to
occur
if it is dark. If lights are already on, I do not want the home
automation
system interfering with the lighting setup.
-
Another is irrigation control. If an irrigation valve starts up unintentionally,
G3 will need to shut it down. However, the logic to detect this
is
too complex for a translator rule.
-
Control of HVAC system. From the user
interface
the user can control setpoints, change the mode (Heat/Cool/Fan) and
ON/OFF
status of the HVAC system as shown in the main G3 window above.
When
the security system is armed, the HVAC system is setback
accordingly.
This feature extends to phone control. A user can control the
HVAC
system when calling in.
-
Display of nine temperature sensors distributed around the home (see
main
screen above) gathered by the thermostat node.
They are:
-
Roof temperature. Temperature inside the weather
station on the roof.
-
Attic temperuture. Sensor inside the attic near the air handler
for
the heat pump.
-
Heat pump exhaust temperature. Temperature of the air exiting the
heat pump air handler.
-
Heat pump intake temperature. Combined with the above sensor,
allows
determination of the performance of the heat pump.
-
Upstairs temperature. Temperature inside the weather display
station
on the second floor.
-
Downstairs temperature. Temperature at the main HVAC thermostat.
-
Furnace exhaust temperature. Temperature at the air exhaust port
of the main furnace/air conditioner unit.
-
Furnace intake temperature. Combined with the above, allows
determination
of the performance of the main HVAC system.
-
Outside temperuture. Temperature outside in the shade of the heat
pump compressor unit.
-
Display of the power line parameters such as
Voltage,
Current, Actual Power, and line frequency. From this other
parameters
such as the power factor and imaginary (reactive) power can be
calculated.
-
Display of the important doors around the home. These are the
Garage,
Kitchen, Front, Basement and Deck door. The status of window
sensors,
glass break sensors and other sensors are not shown, but change of
state
will show up on the event window.
-
Display of the weather node gathered data such
as
wind speed, etc.
-
Ability to send any X-10 command by clicking on the unit name on the
'Home
Status' window. A pop-up menu allows the user to select the
command.
-
Control of the security system, such as
Arming
and Disarming commands, and security levels (away, home, perimeter,
etc).
-
Almost all of the data gathered by G3 can be charted (augmented from
G2).
See below for more information.
-
'Mapper' function that converts commands received from 'A' housecode to
commands for the entire house. Using the unit codes A-1 through
A-8,
a user can control all of the units in the 'Home Status' window on the
G3 screen. Two unit code commands within 15 seconds are needed to
affect this action. The first code signifies which group of
eight,
and the second the individual unit within the group. The groups
are
arranged by column of the display, making it easy to determine the two
unit command based on a visualization of the 'Home Status'
screen.
For example, to turn on the front irrigation valve, the user sends A-1,
A-5, A-ON. This allows control of the entire home via a mini-controller,
phone
interface, IR wrist watch, etc.
-
Phone interface (augmented from G2). The phone
node is connected to one extension of the phone
system, if a user connects to it (either from outside the home or
inside),
it will answer and speak the words 'Ready' once the password has been
given.
The user can then hit a button to send a command to the 'A' house code
(thereby controlling any of the units via the 'mapper' function), or to
request for the help string. While the user is on the phone, the
phone node will also speak out loud any new events printed to the event
window, so that he can verify commands sent (such as 'dishwasher ON',
or
'HVAC set forward').
-
Incoming calls cause a large yellow dialog box to pop up for 30 seconds
with the caller's name and number. Due to the open design of the
home, it can be seen from a wide range of areas, allowing quick
identification
of a caller, should he/she get past the auto-attendant in the phone
system.
-
Coupled with VNC
this
entire interface is available anywhere on the web with nothing more
than
a web browser.
Charts of gathered data
The last set of features to be completed are the charting
functions.
Before I go into this section, I just want to mention that I like
looking
at charts and graphs. I do a lot of it at work, and discovering
trends
and relationships in the data is something I find fun. This
charting
feature existed to a limited extent in the G2 version, but I have
decided
to chart all the analog data that G3 gathers (using the 'TeeChart'
component
from Borland Builder C++). Examples are ambient temperatures and
power line status. This screenful can be switched to if the user
selects that function. The horizontal axis of the chart is the
time
during which the sample was taken. The chart autoscales the
vertical
axis depending on the max and min values of all the graphs shown.
A user can select either the left or right vertical axis for a data
series
by clicking on a series of checkboxes on the left. If the user
needs
help on what a particular check box does, he/she can pause the mouse
over
it, and a hint will pop-up with the name of the corresponding
graph.
Alternately, by clicking on the 'Legend' button, a legend will appear
next
to each pair of checkboxes along with the color of the graph for the
most
complete assistance.
For the user's convenience, a series of preset configurations have
been hardcoded, and can be cycled through to quickly show commonly
needed
graphs. Alternately, the user can just click on the appropriate
checkbox
to enable a graph.

Example of a set of charts showing temperatures around the home.
Here is another chart.
In the example chart above, certain temperatures around the home are
charted. As the user moves the mouse over the chart, a faint
vertical
line snaps to its position. Where it intersects with data, the
value
and name are displayed along with the time on the horizontal
axis.
In this example, at 2:39 pm, the temperature in the attic was 113.9 F,
while the outside temperature was 94.4 F, etc. The checkboxes on
the left turn a particular chart on and off, i.e. if the left box is
clicked,
the graph's axis will be the left one.
One can make some observations on these graphs:
-
On the left hand side starting about 10pm (22:00), the upstairs
temperature
(dark green) cycles as the heat pump turns on and off to cool the
bedrooms.
One can see that cycling reflected in the heat pump intake temperature
(light blue). On another graph this cycling is confirmed by
seeing
the temperature drop throught the heat pump and power draw. This
cycling stops at around 2 am when there is enough cooling due to heat
loss
to the outside air.
-
After the sun rise causes rapid heating starting at 8 am, the attic
(grey)
heats up, exceeding the temperature on the weather station on the roof
(dark green roof temp) at around 10:30 am. The attic continues to
heat up throughout the day, reaching a peak temperature at the vertical
line.
-
Since the heat pump/AC is turned off for the bedrooms during the day,
the
upstairs temperature starts to rise also (dark green) at around 10
am.
At around 4 pm, the upstairs air-conditioning is enabled by G3, and
cooling
starts (light blue Heat Pump Intake falls rapidly). It takes only
about 1 hour before the set point is reached.
-
At around 2 pm, the Downstairs temp (dark maroon) experiences a uptick
in temperature, and triggers the main unit downstairs to start
running.
One can see the Main Intake Temp (brown) rise as warm air rushes
through
the system. This drops as the unit runs, and cools off the main
floor.
When the temperature drops below the hysterisis of the thermostat, the
unit shuts off (small blip down in the Downstairs temperature).
All these temperature change events have their corresponding change in
the power use of the home, which can be seen on another preset
configuration.
The user can also turn that trace on by clicking on its corresponding
check
box. Combined with a trace that shows temperature rise or fall
through
the heating/cooling unit, one can tell how well they are working, or if
service is needed (by comparing the delta T vs power usage).
Long term update
-
5/31/03. Charting functions complete. Software placed in
continuous
use.
-
7/31/03. Added municipal water meter.
Next level up
Back Home