
37
Chapter 2, Automate Your Porch Light
Exhibit A: Bill of Materials
All parts are available from large hardware stores, or home automation web
sites such as http://www.smarthome.com.
Item Quantity Approximate cost Part number
Serial Powerlinc computer interface 1 $35 and up CM11A
X10 wireless transceiver 1 $20 and up 4005X or
400s
X10 motion detector 1 $20 and up MS14A-C
or MS13A
X10 switch 1 $13 and up 2031
Exhibit B: Script Source Code
#!/usr/bin/perl
use lib './blib/lib','./lib';
# Configure user-modifiable codes. "hc" means "housecode"
my $lights_hc = "B";
my $porch_light_unit = "1";
my $floodlight_unit = "2";
my $interior_light_unit = "3";
my $motion_hc = "C";
my $porch_motion_unit = "9";
# These variables just increase readability
my $porch_motion_on = $motion_hc.$porch_motion_unit.$motion_hc."J";
my $porch_motion_off = $motion_hc.$porch_motion_unit.$motion_hc."K";
my $dusk_detected = $motion_hc.($porch_motion_unit + 1).$motion_hc."J";
my $dawn_detected = $motion_hc.($porch_motion_unit + 1).$motion_hc."K";
my (@before, @now, $dusk, $night, $porch_light_on);
my ($floodlight_on, $interior_light_on, $data);
my ($OS_win, $serial_port);
# Load the proper SerialPort module based on platform
BEGIN { $| = 1;
$OS_win = ($^O eq "MSWin32") ? 1 : 0;
if ($OS_win) {
eval "use Win32::SerialPort";
die "$@\n" if ($@);
$serial_port = Win32::SerialPort->new ("COM1",1);
}
else {
eval "use Device::SerialPort"; ...