[an error occurred while processing this directive]

Home Automation Tips and Tricks Archive
June 2000

Entry 1- Automating Draw Curtains

Marcus Hyde compguy@quik.com  Gastonia, NC, USA

So how do you automate draw curtains? Mount an old electric auto antennae on the floor next to the pull cord. Attach the antennae to the cord and connect the motor to a power supply and your favorite automation relay. Presto! Automated draw curtains! 

List of Components 
Old antennae motor from an auto junkyard - $5.00 or less 
Clamp - approx 75 cents 
Power supply (12V DC) - $20 Misc. 
Brackets, screws etc. - $2.00 Approximate 
Total Cost of Components - Under $30

Entry 2 - Secure X-10 Without Extra Hardware

Frank J. Perricone hawthorn@sover.net  Montpelier, VT, USA

X-10 components allow for inexpensive, modular, easy automation of household gadgets, and one of the best things about X-10 is the wide availability of modules to control many things: garage door openers, blinds, sprinkler systems, water pumps, even units that will unlock and open your front door. Imagine the convenience: as you pull into the driveway, a single press of your keychain fob turns on the outside and inside lights, unlocks the door, and even opens it for you so you can carry in that double-handful of groceries with ease.

Also imagine the danger. Every X-10 transmitter in the world sends the same exact thing when you press A1 ON. If a neighbor, a friend, or just a cunning burglar figures out what you're doing, all they need to do is poke at a PalmPad from behind a nearby bush until they find the code. Sure, they could have 512 buttons to go through before they find the right one, but do you want to risk it? It's one thing to know that your neighbor could turn on your lights, but it's another thing entirely to know they can open your garage door. Solution? Either add on some expensive hardware, often dealing with difficult compatibility issues, to provide a secure encrypted unique signal that activates things; or abandon the whole project and limit your automation to just controlling things that don't matter.

Neither of these is required, and assuming you're using a CM11A, Ocelot, etc. and versatile enough software, you can add as much security as you like at no cost except a little bit of time. I use HomeSeer ( www.keware.com ) and a CM11A at present, so I'll talk in those terms, but the same approach can be adapted to any software that has variables (or virtual devices) and conditional logic. (I doubt ActiveHome could do it.)

Step 1: Remove all but one of your transceivers. If you have transceivers on multiple housecodes, remove all but one, and set that one to a housecode you don't have any devices on. (For the sake of argument, I'll assume that this is housecode M hereafter.) Switch all your PalmPads to use that housecode. From now on, you will not be directly controlling any of your devices with your PalmPad -- and neither will anyone else. Instead, everything you want to control will be done through an event or macro.

Step 2: Create macros for all your devices. While you're at it, think about whether you need to control things individually. Sometimes you will have a group of lights you turn on all at the same time; better to assign them to only one button or unitcode. Assign each of these macros to one of your buttons on the M housecode (or whichever you used in step 1).

Note: if you have enough devices, you might not be able to fit them all onto one housecode. In this case, you can do one of two things. Either put them onto several housecodes and add more transceivers for them (being sure that you never have a physical device on the same housecode as a transceiver -- only macros), or do some more macro programming that lets you do two-button sequences to control things. This tip should give you inspiration on how to do that (or I might write it up for a future tip). A third possibility is to have one housecode to control the secure things, then use other housecodes the "old-fashioned way" to control the things you don't need to secure.

Step 3: Choose a few of the 32 buttons on housecode M (M1-M16 ON and M1-M16 OFF) to be an "activation sequence", a sort of passcode only you know. For instance, M6 ON, M17 OFF, M3 OFF, M5 ON. It's up to you how many buttons in sequence you want; the more you use, the more secure things will be, and the longer it will take for you to do what you want. For example, assuming that a burglar doesn't know what housecode to use, a two-button sequence would require him to try, on average, 131,072 combinations; a three-button sequence would require 67 million; a four-button sequence would require 34 billion. And that's even if he knew how many buttons to use. If he could do one every three seconds, even a two-button sequence would take four and a half days!

Step 4: Modify your startup process, when your home automation software loads, to create a variable named SecurityLevel and set it to 0. Alternately, you can use a virtual device, and set its dim level to 0. This will vary from software package to software package. Just make sure you can both query and set the level from your scripting system.

Step 5: Create an event or macro called "Reset Security Level". You might want to assign this to an X-10 code (like M16 OFF) so you can do this automatically from your PalmPad, but it should also be possible to have other macros or events trigger it with a time delay. Let it do the following:

if SecurityLevel = 100 then speak "System secured." SecurityLevel = 0

I'm assuming you have something like HomeSeer that can speak (in HomeSeer's case, the first line should actually say hs.Speak instead of speak). If not, do whatever you want in the first line -- write to a log, flash a light, whatever. Or just omit it. It's just to provide you with a cue if you happen to be around paying attention.

Step 6: Create an event or macro called "Security 1" mapped to the X-10 key you want to be the first one in your sequence (M6 ON in my example above). Make a script for it like this:

if SecurityLevel = 0 then SecurityLevel = 1 schedule event "Reset Security Level" for ten minutes from now flash or brighten a light, speak something, beep, etc. if desired elseif SecurityLevel = 100 then do whatever you want the key to normally do, if anything else speak "Security violation." SecurityLevel = 0 end if

The middle condition can be omitted if you don't intend to map that key to control something. The last condition can also be omitted if you don't want to do anything in cases of security violations, or replaced with other actions as above. The ten minute period can also be adjusted to your preference.

Step 7: Repeat step 6 for each other key in the sequence you want to use, except the last one. Change the first condition to increment in sequence. For instance, the second button would start like this:

if SecurityLevel = 1 then SecurityLevel = 2

The next would be 2 and 3, etc. The rest of the code is the same each time.

Step 8: Repeat step 6 for the last key in the sequence, except the first section looks like this:

if SecurityLevel = 2 then SecurityLevel = 100 schedule event "Reset Security Level" for ten minutes from now speak "System unsecured for use."

The 2 in the first line is for a three-button code; use one less than the number of buttons in your code. The differences here from in Step 7 are the speak command, or whatever else you want it to do to notify or log the action; and the SecurityLevel being set to 100.

Step 9: For all other events (the ones you created in step 3) make them only run on condition that SecurityLevel = 100. For instance:

if SecurityLevel = 100 then do whatever else speak "Security violation!" SecurityLevel = 0 end if

Step 10: There is no Step 10. You're done.

The advantage of this approach, of course, is that you get very strong security without any additional hardware or even software. The most vulnerable thing you have to worry about is someone plugging a transceiver into an exposed outlet next to your porch and then playing with the PalmPad... and someone that determined will probably just break the glass and be done with it.

The disadvantages include: 
* It takes a while to set things up -- but you only have to do it once. 
* You have to key in the sequence before doing anything, and when you do, you only have ten minutes before it expires and you have to do it again. 
* It takes an extra 0.6 seconds or so for the lights to go on (above and beyond the extra time it takes to key in that sequence). 
* You can't let a motion detector or other sensor trigger anything... because how can the system know if it's really the motion detector or someone hiding in the bushes? Exception: if you keep separate systems as described above in Step 2, the motion detector can trigger things in the unsecured half. 
* If the X-10 system loses a signal, you might have to go back to the beginning, which can be frustrating. You might not even know. 
* You're dependent on that darned computer since you can't turn anything on or off without it. But, you're no more dependent on it than you would be on the central controller of a secure system.

For most of us, most of these disadvantages are minor, null, or exactly the same as any security system would have.

Components: just the software and controller you probably already have. 

Approximate Total Cost: an hour or two to set it up.

Entry 3 - Convenient remote tuning of automated sprinklers.

Konstantin Vyaznikov kvyaznikov@bigfoot.com Nepean, Ontario, Canada

Tuning automated sprinklers usually is a pain during which you become all wet, angry with hardly tuned sprinklers. It is extremely so, if you mount and tune sprinklers by yourself. Solution which I use is very simple. Connect sprinkler timer, which is used (just standard watering timer) to powerline through X10 appliance module. Set sprinkler timer in manual mode for continuous run for desired zone to tune. If appliance is OFF, valve is OFF, as far as there is no power supply to it. If appliance is ON, there is power supply and watering starts. Now by any X10 remote controller you have an ability to switch on/off sprinkler, being NEAR sprinkler by just pushing a button and not running back and forth or crying to somebody to switch sprinkler off being watered at the same time. Certainly there can be done much more modifications to system, but this approach is useful (and extremely cheap!) during installation and tuning, being not watered.

List of Components: 
1. Cheapest: Firecracker from X10. or 
2. X10 appliance module + X10 remote controller.

Approximate Total Cost of Components: 
1. $6 + something left for other purposes. or 
2. X10 appliance - $14 + PalmPad controller - $20 = $34.

Entry 4 - Make a Switched Outlet control X-10 devices

Tom Porcher porcher@acm.org Stow, MA, USA

I have a number of switched outlets in my house controlled by wall switches.  Unfortunately, the outlets are not always where I want to put a lamp.  This tip shows an inexpensive way to put the controlled lamps where you want them using X-10.

Back in February 1998, a tip was submitted to use the X-10 PowerFlash module (PF284) to accomplish this. However, this has two disadvantages: the PowerFlash module is expensive ($30) and it requires another unswitched outlet.

So here are two less expensive ways of using your existing switched outlets for X-10 control by using radio controllers and a cheap wall transformer.  Note that both of these require an X-10 radio transceiver (TM751, RR501, or any of the security bases) which you probably already have.

#1 - Using a keychain remote (KC674/HC40TX)

This modification requires some parts to be assembled on a separate board and then wired up to the keychain remote.  Note that the keychain remote does not need batteries when this is complete.

The schematic in figure 1 shows the circuit needed for this modification.  The two relays are used to "push" the buttons on the keychain remote when power is turned on or off.  Relay K2 is energized for a short period after the power is applied while capacitor C1 charges.  This relay closes the contacts on the "on" button, sending the "on" signal and thus turning the controlled device on.  Relay K1 is energized whenever power is applied.  The normally-closed contacts of K1 push the "off" button when the power is turned off.  The charge in C1 powers the keychain remote long enough to send the "off" signal, turning the controlled device off.  The rectifier diode D1 keeps K1 from using the charge on C1.  Resistor R2 is to bleed C1 so that it can be ready for the next "on" cycle and also limits the time the "off" signal is sent.  The relays in the parts list are 1 VDC relays with a 12 ohm coil.  You can use other relays but you'll probably have to experiment with the resistor and capacitor values.  For example, if you use a 6V DC wall transformer, you can use the more common 5V relays and then use a voltage divider to supply 3V to the remote.

  1. Assemble the parts shown in the schematic (figure 1) onto a breadboard.  Depending on the actual components used, your assembled unit may look like mine (figures 2 and 3).  Note that I used three 470 uF capacitors instead of a single 1500 uF capacitor and three 10 ohm resistors instead of the 33 ohm one because that's what I had on hand.
  2. Wire the 3 VDC transformer to the board. The positive lead needs to be connected to the junction of the rectifier diode and the 33 ohm resistor.  The negative lead is connected to the relay coils.
  3. You can plug it in now to check that the relays click.  K2 should click very briefly when power is applied; K1 should remain energized until you unplug the transformer.
  4. Unsnap the cover of the remote by carefully prying the two halves apart.
  5. You will need to solder wires onto the surface-mount IC on the remote.  See figure 4 for the IC pinout.
  6. Select which units you would like to control.  Unmodified, you have a choice of eight unit numbers (1 through 8), with the slide switch to select between two of them.  You can also easily modify the remote to control units 9 through 12.  You will need to choose which pair of units the slide switch selects because this needs to be "hardwired".

    Switch selects
    between units...
    Use on/off IC pins Modify unit select?
    1 or 5 19 on, 18 off No
    2 or 6 17 on, 16 off No
    3 or 7 15 on, 14 off No
    4 or 8 13 on, 12 off No
    1 or 9 19 on, 18 off Yes
    2 or 10 17 on, 16 off Yes
    3 or 11 15 on, 14 off Yes
    4 or 12 13 on, 12 off Yes
  7. If you have chosen to control units 9 through 12, you will need to modify the remote as shown in figure 5.  Cut the etch going to IC pin 15 with a razor knife, being sure to have removed some of the etch.  Run a piece of wire from where the etch begins at a diode to IC pin 14.
  8. Cut or enlarge a hole in the cover of the remote to accommodate the wires from the relay board.  Be sure to retain the integrity of both the slide switch and the code wheel holders.
  9. Wire the relay board to the remote using 5 wires as shown in figure 6. Be sure to run the wires through the hole in the cover if needed.  The +VE wire can be connected directly to the positive battery terminal. The negative battery terminal on the remote is surrounded by the remote's radio antenna, so it is better to connect the -VE wire to another location on the board.  The ON and OFF wires are connected to the IC pins shown in the table above for the units you want to control.  The COMMON wire gets connected to the common connection for all the buttons.  Make sure that the wires don't interfere with the operation of the slide switch or the code wheel.
  10. Test the unit before assembly.  Without the code wheel, house code M is selected.  Without the slide switch, the unit is the lower numbered one of the two you wired up.  Set up the radio transceiver to house code M and an appliance or lamp module to house code M and the appropriate unit number.  Plug the transformer in and the controlled light should go on. The "battery" LED on the remote should blink once. Unplug it and the light should go off.  The LED will blink a few times as it dims.
  11. Reassemble the remote by putting the slide switch and code wheel in the front cover and the board on top of that.  Snap the back cover on.  No need for batteries!  See figure 7 for the completed unit.
  12. Select the proper house code and unit, and it's ready to go!

 

Parts list

Item Cost
KC674 keychain remote $7 from X10.com in the RCA overstock section
3 VDC wall transformer $1.50 from All Electronics
(2) 1 VDC SPDT relays, 12 ohm coil $2 ($1 each) from All Electronics
1K resistor $.05 from All Electronics
33 ohm resistor  $.05 from All Electronics
50V rectifier diode $.07 from All Electronics
1500 uF 10V capacitor $.40 from All Electronics
breadboard, hookup wire, etc. $0 more or less if you have it on hand
Total $11.07

#2 - Using a HawkEye motion sensor (MS12A)

This method is much simpler but has these disadvantages over method #1:

Note:  The MS12A is discontinued, replaced by the MS13A.  I don't have an MS13A to verify that this modification will work, but I would expect that the MS13A is similar enough to modify as well.  But this might be a good use for an MS12A you dumped for the MS13A already!

This modification requires removing a jumper from the MS12A, adding three resistors, and connecting this to the wall transformer.  The schematic in figure 8 shows the circuit involved. For a complete schematic of the MS12A, see http://www.nysaes.cornell.edu/cc/staff/pool/homeauto/ms12a.html The MS12A incorporates a dawn/dusk sensor which sends out X-10 ON and OFF codes at dusk and dawn respectively.  These codes are sent to unit UNIT+1 where UNIT is the unit number selected for the motion sensor.  This modification replaces the light sensor with a control voltage from the wall transformer.

  1. Open the MS12A by removing the four Phillips screws on the back.
  2. Cut a hole in the right side of the case to accommodate the cable from the wall transformer.
  3. Cut the jumper D1.  You may also want to remove the CdS cell below the jumper since it won't be needed and it makes more room for working.  See figure 9.
  4. You probably want to disable the motion sensor function.  Cut one of the leads of R15 to disable.
  5. Assemble the three resistors into a "Y".  Solder the leads together.  See figure 10 for this and the following steps.
  6. Connect the two 100K resistors to the left end of the jumper you cut above.
  7. Connect one of the other legs of the Y to the negative battery terminal wire.
  8. Connect the negative lead of the wall transformer to the same negative battery terminal wire.
  9. Connect the last leg of the Y to the positve lead of the wall transformer.
  10. Slip a piece of electrical tape under the resistor Y to prevent shorts when you close the unit up.
  11. Test the unit before assembly.  Insert the batteries.  By default, the MS12A will send the ON/OFF codes on unit A2. Set up the radio transceiver to house code A and an appliance or lamp module to house code A, unit 2.  Plug the transformer in and the controlled light should go on after about 2 seconds. The LED on the MS12A should blink once. Unplug it and the light should go off after a couple of seconds.  The LED will blink again.
  12. Reassemble the unit, making sure that there's enough room for the resistors.
  13. Insert the batteries and set the desired house code and unit number.  Note: You must program the unit number as one less than the unit you wish to control.  To control unit 1, set it to unit 16.

Parts list

Item Cost
MS12A HawkEye motion sensor $20 from X10.com (discontinued; see note about MS13A)
3 VDC wall transformer $1.50 from All Electronics
(2) 100K resistors $.10 from All Electronics
100 ohm resistor  $.05 from All Electronics
hookup wire, etc. $0 more or less if you have it on hand
Total $21.65
 
Entry 5 - Control Multiple House Codes With Palm Pad

Guy Lavoie guy@lavoie.com

Here is an algorithm that allows you to control any selected House Codes and Unit Codes using a single Palm Pad and transceiver. Better yet, you can also trigger "All Lights On" and "All Units Off" commands from the Palm Pad as well. This algorithm could be programmed using several different controllers, as long as they support conditional statements and interval timing on the order of seconds ( 10 seconds is enough ). You MUST use a dedicated House Code with the Palm Pad and the transceiver to implement this. I have only tried this with the Ocelot, since this is the controller I have. The functionality described here is part of a project I am currently working on; a transceiver that can receive on all House Codes. I spelled out some of the features I wanted to implement a few weeks ago on the comp.home.automation newsgroup, and there are several people awaiting the final product, but in the meantime, here is a software version that you can implement to achieve similar results. Of course, the transceiver will be a faster solution since it receives RF and transmits X-10, and will have a command buffer. With this software implementation, you are sending X-10 to your controller, so you have to wait for the desired X-10 command to then be sent out before you can enter another one. Nonetheless, here is how you use it:

If you look at the Palm Pad, you see two columns of 8 buttons ( ignore Bright/Dim and the 1-8/9-16 slide switch ). Imagine the two columns are labeled as:

A I
B J
C K
D L
E M
F N
G O
H P

Now, if you want, you can press on one of those buttons to "select" the appropriate House Code. After that, you use the Palm Pad the regular way to turn units On or Off for that House Code. As long as you keep sending commands less than 10 seconds apart, the selected House Code remains "active". If you let 10 seconds go by without sending a command, then the program goes back to waiting for a House Code to be selected. This is the way you would send regular On/Off commands as well as Bright and Dim commands.

If you want to send an "All Lights On", you would begin your command sequence ( at least 10 seconds after any On/Off commands ) by pressing the "Bright" button on the Palm Pad, followed within 10 seconds by the House Code selection as shown in the above illustration. An "All Units Off" would similarly be generated by starting with the "Dim" button and then selecting the House Code. In the two cases of "All Lights On" and "All Units Off", the House Code then selected is immediately "forgotten", and you do not have to wait 10 seconds before sending another command.

That's it as far as functionality goes; simple, yet quite versatile. One last detail: Whenever you are selecting a House Code, you can ignore the 1-8/9-16 slide switch. Either position will work since the program treats a received "1 ON" and "9 ON" as equivalent to "House Code A" ( and so on )when it comes to waiiting for a House Code. This minimizes use of the slide switch.

Here is an example of the implementation on the Ocelot. Of course, if you want to be able to control all possible House Codes and Units Codes, the program will become huge. Fortunately, you will usually only want to control 2 or 3 House Codes this way. In the example here, I have implemented control of Units 1 and 2 for House Codes A and B. You can then expand upon this by copying/pasting for the additional codes in each part. Part 1 looks for an initial House Code selection. Part 2 looks instead for the Bright or Dim button being pressed. In both cases, the timer is started and variable 0 is set to indicate the kind of command sequence that was selected ( House Code A to P by values of 1 to 16 respectively, All Off by value of 17, All On by value of 18 ). Part 3 looks for Unit Code commands ( On, Off, Bright , Dim) that are received while the timer is active and always restart a new timer interval so that several commands can be sent within a selected House Code, as long as the commands are never more than 10 seconds apart. Part 4 looks for a House Code selection after an All On or All Off sequence was selected, and stops the timer when this is done. Part 5 simply checks if the timer has exceeded 10 seconds, and if so, stops it. Enjoy.

Cost: none…

STATEMENT COMMENT
   
  PART 1 wait for house code selection
   
IF X10 N/1 ON Command If N1 ON command received
 OR X10 N/9 ON Command or N9 ON command received
 AND Timer0 = 0                          and timer is not yet started
  THEN Timer0=1                          then start timer
  THEN v0=1 var = 1 (for house code A)
   
IF X10 N/2 ON Command If N2 ON command received
 OR X10 N/10 ON Command or N10 ON command received
 AND Timer0 = 0 and timer is not yet started
  THEN Timer0=1 then start timer
  THEN v0=2 var = 2 (for house code B)
   
  PART 2 look for All ON/OFF prefix
   
IF Received X10 N/BRIGHT, 1 times If N BRIGHT command received
 AND Timer0 = 0 and timer is not running
  THEN Timer0=1 then start timer
  THEN v0=18 and set variable to 18 (ALL LTS ON)
   
IF Received X10 N/DIM, 1 times If N DIM command received
 AND Timer0 = 0 and timer is not running
  THEN Timer0=1 then start timer
  THEN v0=17 and set variable to 17 (ALL UNITS OFF)
   
  PART 3 Look for Unit code and command
  *** House code A ***
   
IF X10 N/1 ON Command If N1 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 1 and variable indicates HC "A"
  THEN Timer0=1 then retrigger the counter
  THEN X10 Quick On A/1 and turn on A 1
   
IF X10 N/1 OFF Command If N1 OFF command received
 AND Timer0 > 0 and timer is running
 AND v0 = 1 and variable indicates HC "A"
  THEN Timer0=1 then retrigger the counter
  THEN X10 Quick Off A/1 and turn off A 1
   
IF X10 N/2 ON Command If N2 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 1 and variable indicates HC "A"
  THEN Timer0=1 then retrigger the counter
  THEN X10 Quick On A/2 and turn on A 2
   
IF X10 N/2 OFF Command If N2 OFF command received
 AND Timer0 > 0 and timer is running
 AND v0 = 1 and variable indicates HC "A"
  THEN Timer0=1  then retrigger the counter
  THEN X10 Quick Off A/2 and turn off A 2
   
IF Received X10 N/BRIGHT, 1 times If Bright command received
 AND Timer0 > 0 and timer is running
 AND v0 = 1     and variable indicates HC "A"
  THEN Timer0=1 then retrigger the counter
  THEN Transmit X10 A/BRIGHT, 1 times and transmit A bright command
   
IF Received X10 N/DIM, 1 times If Dim command received
 AND Timer0 > 0 and timer is running
 AND v0 = 1 and variable indicates HC "A"
  THEN Timer0=1 then retrigger the counter
  THEN Transmit X10 A/DIM, 1 times and transmit B dim command
   
  *** House code B ***
   
IF X10 N/1 ON Command If N1 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 2 and variable indicates HC "B"
  THEN Timer0=1 then retrigger the counter
  THEN X10 Quick On B/1 and turn on B 1
   
IF X10 N/1 OFF Command If N1 OFF command received
 AND Timer0 > 0 and timer is running
 AND v0 = 2     and variable indicates HC "B"
  THEN Timer0=1 then retrigger the counter
  THEN X10 Quick Off B/1 and turn off B 1
   
IF X10 N/2 ON Command If N2 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 2 and variable indicates HC "B"
  THEN Timer0=1 then retrigger the counter
  THEN X10 Quick On B/2 and turn on B 2
   
IF X10 N/2 OFF Command If N2 OFF command received
 AND Timer0 > 0 and timer is running
 AND v0 = 2 and variable indicates HC "B"
  THEN Timer0=1 then retrigger the counter
  THEN X10 Quick Off B/2 and turn off B 2
   
IF Received X10 N/BRIGHT, 1 times If Bright command received
 AND Timer0 > 0 and timer is running
 AND v0 = 2 and variable indicates HC "B"
  THEN Timer0=1 then retrigger the counter
  THEN Transmit X10 B/BRIGHT, 1 times and transmit B bright command
   
IF Received X10 N/DIM, 1 times If Dim command received
 AND Timer0 > 0 and timer is running
 AND v0 = 2 and variable indicates HC "B"
  THEN Timer0=1 then retrigger the counter
  THEN Transmit X10 B/DIM, 1 times and transmit B dim command
   
  PART 4 Look for HC to turn All ON/OFF 
   
IF X10 N/1 ON Command If N1 ON command received
 OR X10 N/9 ON Command Or N9 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 18 and variable indicates All ON
  THEN Timer0=0 then stop the counter
  THEN Transmit X10 A/All Lights ON and transmit A all lights ON
   
IF X10 N/2 ON Command If N2 ON command received
 OR X10 N/10 ON Command    Or N10 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 18 and variable indicates All ON
  THEN Timer0=0 then stop the counter
  THEN Transmit X10 B/All Lights ON and transmit B all lights ON
   
IF X10 N/1 ON Command If N1 ON command received
 OR X10 N/9 ON Command Or N9 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 17 and variable indicates All OFF
  THEN Timer0=0 then stop the counter
  THEN Transmit X10 A/All Lights OFF and transmit A all units OFF
   
IF X10 N/2 ON Command If N2 ON command received
 OR X10 N/10 ON Command Or N10 ON command received
 AND Timer0 > 0 and timer is running
 AND v0 = 17 and variable indicates All OFF
  THEN Timer0=0 then stop the counter
  THEN Transmit X10 B/All Lights OFF and transmit B all units OFF
   
  PART 5 verify if timer expires
   
IF Timer0 Becomes > 10 If timer reaches 10 seconds
  THEN Timer0=0 then stop the timer
END OF PROGRAM (null)