Jump to content

Basic Logic Question


Recommended Posts

Hi. I have an ISY and am very happy with my Insteon lighting project. I have a very large home and have noticed a few time where scenes or commands are missed. It's rare enough, so I don't worry much about it. In my lighting control set up, there is general lighting program that turns on from sunset until Midnight every day. This general lighting is enough so that if you traverse the home, you will not need to hit a light switch. But it is not enough light to use a room comfortably. When you occupy a room, I have 8 button keypads with scenes and other light controls.

My goal is for all of the lights in any given room to RETURN to their general lighting levels once a scene has been set to off, when that program is running. I need some assistance with the best practices to accomplish this goal. I'm mindful of not overloading the ISY or creating too much complexity. I've listed the options as I see them. I would appreciate any guidance that you can provide.

1. Set the general lighting program to run every 1-5 minutes during the time frame its set the run. The frequency will be determined by what would not cause issues for the ISY. When a scene is turned off in a room, the room will go dark, then the lighting that is part of the general lighting program will turn back on when the timer runs the program again. The downside of this is that if someone is in another room where they have overridden a load that is part of the night lighting scene, that light load will go back to the general lighting preset when the program is run again.

2. Break the GL program into multiple room specific programs, then write a program that if any of the loads in that room in the lighting program are set to 0, then run the program again. This adds complexity, but seems to me to be a good solution

3. Set the off level for the lighting loads being used to the preset level, but only during the duration of the GL scene. I'm not sure if this is even possible, but the simplest solution I can think of would be to run the GL program at a certain time, then during that time period, for the specific loads being controlled by the GL program, have the off level be set to the GL preset. Any scene or activity could increase the brightness of the load, but there would be no way to turn the load to 0. The only circumstance where we would want to override this logic would be perhaps when watching a move, but that is rare enough that I would be willing to implement this for the simplicity of the set up.

I'm sure there are other ways to accomplish this goal as well. I would be grateful if anyone has done this in the past and can provide me with some ideas on how to implement this in my home.

Thank you!

Link to comment

I don't think OFF levels can be anything other than zero.

I like idea #2.  I would not like turning a scene off in one room to affect another.  

My first thoughts would be to create the general lighting scenes for each room.  These scenes should include all devices in the room, setting the ON level to zero for those devices you do not want on in the general scene.  Create the other scenes using the keypad buttons as before.  For each room, create a program such as:

if 

from time is sunset to midnight

or

from time is sunset to midnight

and

(

KPL button A is turned off

or 

KPL button B is turned off

or 

KPL button C is turned off

etc....

)

then

turn on general lighting scene

 

I have not given too much thought to this, but it is my hope that this might give you some ideas.  One problem with this approach is that the lights in the room might turn off, then back on when transitioning from one scene to the general scene.  One way to stop this, if offensive, is to use programs to trigger the KPL scenes, rather than use the KPL buttons as scene controllers.

 

Link to comment

Interesting, so to make sure I understand correctly, you are suggesting I just crease an additional scene in each room, just as I have created before, incorporating all loads and setting them to 0 if they are not in the scene, and then have a program run where if a scene is switched off, then run the default scene during some period of time. To prevent things from turning off and on while scenes switch, would it be better to have the program read:

If Time X - Y and KPL A and B and C are off, then Turn on Default Scene? This way it would require all scenes be off before triggering the default scene. With this logic, I'm curious if during the process of one scene turning off and the other turning on will the default scene be triggered?

Thanks for taking the time to help me with this, I appreciate it.

Shaan

Link to comment

There's a lot of ways this can go. 

I'd create a folder and say from sunrise to 1201am allow these programs to run. Inside this folder I would create programs for the conditions you set

Create 1 program that has a kpl from the rooms that has your general lightimg scene lights in it and status those kpls.

For example:

if time is from sunrise +5 min. to 12am and status FR kpl A-H is off and Status LR kpl A-H is off and status Kitchen kpl A-H is off  then set general lights on. 

This will allow the lights around the house to turn on in a uniform fashion should the house be dark.

I would then create a program for each room. 

If time is from sunset +5 minutes to 12am and LR kpl A-H is not off set floor lights off. Or Else set floor lights on

Another program: if status kitchen kpl A-H is not off then set under cabinet lights off or else set under cabinet lights on

I would then do 1 last program that simply turns off the general lighting scene at 12am

By doing it this way and using status vs control, you are able control the lights via voice, app, or physical button presses and achieve the same end result. 

Since the individual programs are room specific, any room not in use is not effected by another occupied room. Should an occupied room become empty then it goes back to the general lighting. 

Link to comment
4 hours ago, shaan.mehta said:

Interesting, so to make sure I understand correctly, you are suggesting I just crease an additional scene in each room, just as I have created before, incorporating all loads and setting them to 0 if they are not in the scene, and then have a program run where if a scene is switched off, then run the default scene during some period of time.

Yes.  That scene should be programmed to automatically come on at the beginning of your "time frame", and off at the end.  In addition, any time during that time frame one of your loads is turned off ("set to 0" I think you called it).

 

4 hours ago, shaan.mehta said:

If Time X - Y and KPL A and B and C are off, then Turn on Default Scene? This way it would require all scenes be off before triggering the default scene. With this logic, I'm curious if during the process of one scene turning off and the other turning on will the default scene be triggered?

This looks as if default scene would come on (between X-Y) any time all three KPL buttons are OFF.  Also, if time=X and all the KPL buttons are off, the default scene could turn on.  

Link to comment

I like to use a State variable to control a bank of scenes or programs using scenes and other non-Insteon devices. Then I define Constant values for each scene/setup I desire so that values do not get mixed up and programs read more easily. These same  'constants' are universal for usage throughout my ISY programs.

Now any program can set the controlling State variable and cause the lighting levels desired without spaghetti linking programs together in hard to troubleshoot later,  links.

So I would define a bunch of constants using Integer variables like this:
$cFULLON = 4
$cBRIGHT = 3
$cMEDIUM = 2
$cDIM = 1
$cOFF = 0

Create a folder and create five programs inside it. A program looks like this:
eg.
Program light.dim   <--- one program for each lighting scene desired.
If

       $sVariable is $cDIM
Then
       Set Scene.dim On
       Run NR.Dim.MagicLights 
Else
     ----

Now your controlling programs have an easy job to control lighting levels. This is reflected in the colour status of your program icons as only one selection will ever show true. The rest will always show red / False automatically.
eg.
Set $sVariable = $cBRIGHT

To 'borrow' a light for say GDO left open a program to flash a particular light can be used like this:
eg.
set $iTemp = $sVariable      <---- save the existing levels
Repeat  while GDO is open
     Set Light On
     Set Light Off
     Wait 2 seconds
Repeat 1 time
set $sVariable = -1               <----ensure it triggers
set $sVariable = $sTemp    <----replace original levels
Now the lights are restored to before you 'borrowed' one to indicate the GDO was left open.

KPL button programs now look like this:
eg.
If
      KPL A is switched On
Then
       set $sVariable = $cOFF   <------runs whatever it takes for this setting.

No overlaps are possible and unused scenes and programs indicate properly without any cross program logic required.

 

If a one button KPL rotation through all lighting levels and Off, was desired you can now use a program like this:
Program KPL.increase
If
     KPL A is switched On
Then
    Run program2 (If)

Program2 [Disabled]
If
    $sVariable < $cFULLON
Then
     $sVariable += 1
Else
      $sVariable = $cOFF

Link to comment

Archived

This topic is now archived and is closed to further replies.


  • Recently Browsing

    • No registered users viewing this page.
  • Forum Statistics

    • Total Topics
      36.9k
    • Total Posts
      370.2k
×
×
  • Create New...