DESCRIPTION x10 is a little program for hacking a BSR X10 "Powerhouse" home control device. This gizmo, currently sold by DAK (a discount mail order house) for $49.95, can remotely control lights and appliances in your house by signaling over the house wiring. Since most people know what the X10 system does (see the DAK catalog for details; Radio Shack also sells X10 stuff) I won't describe it in detail here. The gizmo comes with software for IBM PCs, Apples, or Commodores, but I wanted to hang it off my UNIX box. So I wrote this program. The BSR X10 Powerhouse connects to a computer with an RS232 interface. It can store up to 128 events; each event can turn on, turn off, or dim up to sixteen slave units. The X10 box has a battery backed up clock which the computer can read, which turned out to be one of its biggest uses for me -- my computer doesn't have a battery clock. Each slave unit has a one-letter housecode ranging from A to P (for 16 different codes) and a number from 1 to 16. x10's command structure is pretty primitive. See the man pages for details. INSTALLATION Hopefully, the only file that needs to be configured for your system is the makefile. You may need to review x10.h and tty.c if you experience any trouble. Change BIN to the location of your favorite directory. Change OWNER to whichever login you want. Keep the GROUP set to sys. the DFLAGS line in the makefile needs to be configured as follows: add -DVENIX if you are using Venix add -DSYSV if you are using System III or V add -DMINIEXCH if you are using the DEC mini-exchange add -DVIOD if your compiler doesn't have type void add -DXDIR=\"fullpath_name/x10\" if you don't want to use the default path of the current directory After changing the makefile for your system, do 'make'. Next, cd as 'root' to /dev and link the root filesystem and tty port connected to the 'X10' as follows: ln root_fs_special_device x10fs ln tty_port x10 The port connected to the x10 should not have a getty running. The root filesystem needs to be set to group 'sys' and mode 440. ('x10 date' is the only command that requires this. If you do not want to do it because you're worried about security, do not create /dev/x10fs. All other features of x10 will work.) The tty port connected to the x10 needs to be changed to the owner of the 'X10 device', and the mode needs to be set to 600. Finially, do 'make install' as root to install x10 in the proper location, with the proper owner and the proper permissions. PORTABILITY This has been tested under VENIX/Rainbow, which is basically V7 (thus there are no short-identifier problems), and on System V, Release 3.0. It should run OK under BSD-flavor UNIX. NOTES I'm running my X10 through a DEC Mini-Exchange, which is a dumb little 8-port programmable port selector. (My computer has only one, count 'em, serial port with modem control, which is why I use the Mini-Exchange.) There are two VENIX-specific hacks in x10. First, my routine hangup() depends on a modification I made to the VENIX tty driver that causes it to drop DTR if you set the baud rate to zero, and raise it again when you set the baud rate to a nonzero number. Most modern flavors of UNIX have an ioctl or something to do this. Second, there are a number of occurrences of: sleep(SMALLPAUSE); where SMALLPAUSE is #defined to be -10. This is a VENIX-specific hack that means sleep for 10 60ths of a second, or 1/6th of a second. This isn't critical; if VENIX is not defined in the makefile, SMALLPAUSE is set to 1. EXAMPLES Example contents of an id file: 1 Bedroom switched table lamp 2 Office switched floor lamp 3 Living room ceiling lights 4 Front porch and garrage lights 5 Family room hanging lamp 6 Family room portable radio 7 Thermostat 8 Bedroom protable tv Example output of the 'x10 dump all' command using the above id file: SLOT UNIT STATE ID DESCRIPTION 0 c1 Off 001 Bedroom switched table lamp 1 c2 Off 002 Office switched floor lamp 2 c3 Off 003 Living room ceiling lights 3 c4 Off 004 Front porch and garrage lights 4 c5 Off 005 Family room hanging lamp 5 c6 Off 006 Family room portable radio 6 c7 Off 007 Thermostat 7 c8 Off 008 Bedroom protable tv EVENT STATE MODE DAYS TIME UNITS 0 On Normal Everyday 21:00 c5 1 Off Normal Everyday 22:30 c1-8 2 Dim 8 Normal Everyday 21:15 c3 3 Off Normal Everyday 21:45 c3 4 On Today 21:33 c1 5 Dim 4 Security Weekdays 20:15 c2 6 Off Normal Weekend 1:00 c1-2,6-7 - Larry Campbell (maynard!campbell) with help from John Chmielewski (rogue!jlc) September 1, 1986