This project is continued from Part 2.

I rewrote most of the original porch light automation code for the ISY-99i, taking advantage of support for variables and adding new features. My ISY-99i home automation controller is running the latest firmware version 3.2.6 (as of this writing).

The new porch light automation features are:

  1. Turn on the porch lights for 10 minutes when the 2420M motion sensor is activated from 30 minutes before sunset to 20 minutes after sunrise.
  2. A forgiving double-click OFF routine to disable the motion sensor and keep the lights off for 2 hours.
    The porch lights are flashed once for confirmation. I wrote this routine because I couldn’t get the ToggleLinc Relay to send a Fast Off event when double-clicking the ToggleLinc switch, no matter how hard I tried.
    This scene is nice when I want to sit on the porch and enjoy the stars or create a night scene for Halloween, etc.
  3. Turning ON the ToggleLinc switch disables the 2 hour off routine, if active.
  4. Have the ISY-99i send and e-mail to me if the 2420M battery needs to be replaced.

The high level ISY-99i, ToggleLinc Relay and 2420M motion sensor events and programs are illustrated in this diagram:

ISY-99i and 2420M Insteon Porch Light Automation Programs and Events Diagram

ISY-99i Porch Light Automation Programs

The following software programs and source code are entered in the ISY-99i Administrative Console in the ProgramsDetails tab as shown:

ISY-99i Admin Console: 2420M Motion Sensor Program Details

Front Porch Light Program Folder

Create a folder to organize the ISY-99i programs for the 2420M motion sensor automation.

Folder Conditions for 'Front Porch Light'
Add conditions to limit when programs in this folder are allowed to run.

If
    - No Conditions - (To add one, press 'Schedule' or 'Condition')

Then
    Allow the programs in this folder to run.

Program: Porch Motion Sensed

Processes 2420M motion sensor events from dusk to dawn and turns on the porch lights if the lights are off and motion is detected.

If
   From    Sunset  - 30 minutes
   To      Sunrise + 20 minutes (next day)
   And Control 'Porch Motion Sensor-Sensor' is switched On
   And (
         Status  'Front Porch Light Switch' is not On
         And Program 'Porch Light On 10 Minutes' is False
       )

Then
   Run Program 'Porch Light On 10 Minutes' (Then Path)

Else
   - No Actions - (To add one, press 'Action')

If the 2420M senses motion, and the ToggleLinc Relay is switched ON, and
the porch light motion sensor program is not already activated, then
turn on the porch lights for 10 mins.

Program: Porch Light On 10 Minutes

Turns the porch lights on for 10 minutes when the 2420M motion sensor detects activity. This program acts as a True/False flag via the Then/Else execution paths for other programs to determine if the porch lights are on because of a motion event trigger.

If
   - No Conditions - (To add one, press 'Schedule' or 'Condition')

Then
   Set 'Front Porch Light Switch' On
   Wait  10 minutes
   Set 'Front Porch Light Switch' Off
   Run Program 'Porch Light On 10 Minutes' (Else Path)

Else
   - No Actions - (To add one, press 'Action')

Turns the porch light on for 10 minutes. A separate program is used here
with no IF conditions such that the 'Wait' isn't reinitialized by new events
triggering a reevaluation of IF conditions had they been present.
This program also serves as a Flag (semaphore):
* True (then path was run) when the porch lights are ON.
* False (else path was last executed) when the porch lights are OFF.

Program: Count Double Off Clicks

The ToggleLinc Relay switch should send a Fast Off INSTEON command when the switch is double-clicked OFF, similar to double-clicking a mouse button. No matter how hard I tried, I could only get the ToggleLinc to send a Fast Off maybe 1 time in 50 double-clicks. I tried double-clicking the switch fast, medium and slow and rarely succeeded in generating a Fast Off event.

I therefore wrote a simulated double-click routine using an Integer variable $Porch_Click_Cnt with a generous 4 second window to detect two consecutive ToggleLinc Relay OFF switch events. INSTEON communications have a certain amount of communications latency, so if 4 seconds doesn’t work reliably for you, try 5 or even 6 seconds to detect two consecutive OFF clicks.

If
   - No Conditions - (To add one, press 'Schedule' or 'Condition')

Then
   $Porch_Click_Cnt += 1
   Wait  4 seconds
   $Porch_Click_Cnt  = 0

Else
   - No Actions - (To add one, press 'Action')

Increment the Porch_Click_Cnt variable for each consecutive ToggleLink Relay
OFF click within 4 seconds. The click counter is reset to zero after 4 seconds.
A dedicated program is used to set the $Porch_Click_Cnt variable to avoid having
a programs IF conditions reevaluated when the program contains a WAIT instruction.

Program: Porch Light Double Click Off

This program detects ToggleLinc Relay OFF switch events and if a simulated double-click has occurred, runs the ‘Porch Light Off 2 Hours’ program.

Note: Clicks can’t be counted in the ‘Porch Light Double Click Off’ program because changing the $Porch_Click_Cnt variable here would force a reevaluation of the ‘Porch Light Double Click Off’ IF condition, the click count would never exceed 1 and the else clause will never execute. This an oddity of the ISY-99i programming environment. The solution is to count clicks in the sub-program ‘Count Double Off Clicks’.

If
   Control 'Front Porch Light Switch' is switched Off
   And $Porch_Click_Cnt < 2

Then
   Run Program 'Count Double Off Clicks' (Then Path)

Else
   Run Program 'Porch Light Off 2 Hours' (Then Path)

If the ToggleLinc Relay is clicked OFF at least twice within 4 seconds,
then the porch lights will be forced off for 2 hours by disabling the 2420M motion
sensor program.

Program: Porch Light Off 2 Hours

When the ToggleLinc Relay switch is clicked OFF at least twice within 4 seconds, a simulated “double-click” is detected, the porch light is flashed once to confirm the command, and the porch motion sensor program is disabled for 2 hours to keep the lights off.

If
   - No Conditions - (To add one, press 'Schedule' or 'Condition')

Then
   $Porch_Click_Cnt  = 0
   Stop program 'Porch Motion Sensed'
   Disable Program 'Porch Motion Sensed'
   Set Scene 'Front Porch Lights' On
   Wait  1 second
   Set Scene 'Front Porch Lights' Off
   Wait  2 hours
   Enable Program 'Porch Motion Sensed'
   Run Program 'Porch Motion Sensed' (Else Path)

Else
   - No Actions - (To add one, press 'Action')

Turns off the porch lights and disables the motion sensor program for 2 hours,
and resets the motion sensor flag to 0 (False) in case the motion sensor program is
aborted and unable to reset the flag. The porch lights are flashed ON for 1 second
to indicate a double click confirmation.

Program: Porch Light Switched On Cancel 2 Hr Override

Disables the 2 Hour Off program if active and resets the 2420M motion event program when the ToggleLinc Relay is switched ON.

If
   Control 'Front Porch Light Switch' is switched On
   And Program 'Porch Light Off 2 Hours' is True

Then
   Stop program 'Porch Light Off 2 Hours'
   Run Program 'Porch Light Off 2 Hours' (Else Path)
   Enable Program 'Porch Motion Sensed'
   Run Program 'Porch Motion Sensed' (Else Path)

Else
   - No Actions - (To add one, press 'Action')

When the porch light is manually switch on, stop the 1 hour Fast Off and 10 min motion
sensor light programs should they be running, and reset the motion sensor status flag
to false (else path). The 'Porch Motion Sensed' program is enabled as it could have
been disabled by the 2 Hour OFF program.

Program: Porch Light Daily Reset

This is a housekeeping routine to turn off the lights at dawn and reset the program flags and variables.

If
   Time is Sunrise + 15 minutes

Then
   Set 'Front Porch Light Switch' Off
   Enable Program 'Porch Motion Sensed'
   Run Program 'Porch Motion Sensed' (Else Path)
   $Porch_Click_Cnt  = 0
   Enable Program 'Porch Light Off 2 Hours'
   Run Program 'Porch Light Off 2 Hours' (Else Path)

Else
   - No Actions - (To add one, press 'Action')

Turns the porch lights off 15 minutes after dawn and resets the
program flags in case the lights were manually overridden and left on all night.

Program: Porch Motion Sensor Low Battery

Have the ISY-99i send a low battery notification e-mail to me once every 24 hours so I’ll know to replace the 2420M motion sensor battery.

If
   Status  'Porch Motion Sensor-Low Bat' is On

Then
   Repeat Every 24 hours
   Send Notification to 'BobJackson' content 'FrontPorchMotionLowBattery'

Else
   - No Actions - (To add one, press 'Action')

Send an e-mail to myself once every 24 hours when the front porch motion
sensor battery needs replacing. The e-mail account and low battery message are
setup in the ISY-99i Administrative Console 'Configuration' menu tab.

If you prefer different durations for turning the lights on or off, simply change the WAIT period parameter in the ‘Porch Light On 10 Minutes’ and ‘Porch Light Off 2 Hours’ programs.

ISY-99i Programming Test and Debug

The status of the programs and variables can be viewed and managed through the ISY-99i Administrative Console in the ProgramsSummary and ProgramsVariables tabs.

For example, the $Porch_Click_Cnt integer variable can be viewed in real time as the ToggleLinc Relay switch is clicked OFF. When the $Porch_Click_Cnt reaches 2, the  ‘Porch Light Off 2 Hours’ program will execute and turn on the ToggleLinc Relay for 1 second to flash the porch lights for visual confirmation the double-click OFF was confirmed. The “System Busy” message pops up as the porch ToggleLinc Relay is turned ON under program control.

ISY-99i Admin Console: Program Variables Status

Clicking on the ProgramsSummary tab, the ‘Porch Light Off 2 Hours’ is now Running as the WAIT command counts down.

ISY-99i Admin Console: Program Status Summary

Universal Devices ISY-99i/994i iPhone Web Interface

The porch lights can also be controlled with the FREE remote web management interface on the Universal Devices ISY-99i and ISY-994i home automation controller. I’ve setup my ISY-99i for remote access via my local WiFi LAN and any where in the world via my Internet WAN connection with a DDNS service. This is what the ISY-99i remote management interface looks like on my iPhone. The GUI will scroll with a finger swipe to show all of your devices, scenes and programs.

ISY-99i and ISY-994i iPhone Web Management Interface

Hope this helps,
Bob Jackson

Copyright © 2017 HandymanHowTo.com   Reproduction strictly prohibited.