Author |
|
jeffw_00 Super User
Joined: June 30 2007
Online Status: Offline Posts: 929
|
Posted: February 23 2008 at 13:12 | IP Logged
|
|
|
Hi-
1) I find myself coding a lot of
GOTO_LABEL if (<condition>,LABEL1,LABEL2)
LABEL2
code continues...
I'd really like a way to code
GOTO_LABEL if (<condition>,LABEL1)
and if the condition fails, fall through to the next line. Is there a way to do this?
2) I've been playing with ph_insteonwithret but I don't seem to be able to get a return value. Here's what I'm doing...
ph_setvar_a(1,9,ph_insteonwithret("[LOCAL1]","[LOCAL6]",0))
LOCAL1 = an insteon ID
LOCAL2 = 18 or 20
but after this is executed, LOCAL9 is blank.
3) is there a way to AND conditions? I.e., if (and(<condition1>,<condition2>),x,y)
I saw the ph_and function but not sure this is a valid use of it.
Thanks
/j
PS - Extra credit... is there an argument for GOTO_LABEL that is the equivalent of JUMP 999 (I.e.,
GOTO_LABEL (if(condition),"CONTINUE","EXIT")
where EXIT is like a jump 999?
thx again
/j
Edited by jeffw_00 - February 23 2008 at 14:25
|
Back to Top |
|
|
BeachBum Super User
Joined: April 11 2007 Location: United States
Online Status: Offline Posts: 1880
|
Posted: February 23 2008 at 14:02 | IP Logged
|
|
|
This may sound funky but I basically NOP the JUMP by using an invalid label. As far as question 3 wouldn't using a + do the AND function for you or am I in the wrong ball park...
Edited by BeachBum - February 23 2008 at 14:02
__________________ Pete - X10 Oldie
|
Back to Top |
|
|
jeffw_00 Super User
Joined: June 30 2007
Online Status: Offline Posts: 929
|
Posted: February 23 2008 at 14:05 | IP Logged
|
|
|
Beachbum - can you give me an example of your invalid label. Do you just use a "FOO" that's undefined?
+ is a concatenate function, what I'm going for is
if (condition1 is true AND condition2 is true, dothis, otherwise-do-this)
thanks
/j
|
Back to Top |
|
|
BeachBum Super User
Joined: April 11 2007 Location: United States
Online Status: Offline Posts: 1880
|
Posted: February 23 2008 at 14:18 | IP Logged
|
|
|
Sure.. IF (PH_GETGLOBAL_S(PH_GETGLOBAL_S("LEVEL_GLOBAL")) = " ", "NEXT", "NOP")
Not true goes to here
JUMP END
Label NEXT True jumps to here.
IF.. I'll check but I think I do that somewhere.
__________________ Pete - X10 Oldie
|
Back to Top |
|
|
jeffw_00 Super User
Joined: June 30 2007
Online Status: Offline Posts: 929
|
Posted: February 23 2008 at 14:25 | IP Logged
|
|
|
yup that works...
Now, i wish there was an argument for GOTO_LABEL that was the equivalent of JUMP 999 (I.e.,
GOTO_LABEL (if(condition),"CONTINUE","EXIT")
where EXIT is like a jump 999.
am I in luck? 8-}
thanks
/j
|
Back to Top |
|
|
BeachBum Super User
Joined: April 11 2007 Location: United States
Online Status: Offline Posts: 1880
|
Posted: February 23 2008 at 14:30 | IP Logged
|
|
|
Next one..
Is this an example of what you are looking for?
IF (PH_GETGLOBAL_S ( "MBR_TV_CHECK" ) = "OFF" AND ( NOW() < 07:58:00) AND (NOW() > RELATIVETIME( 00:00:00, [SUNSET] - 3600 )), 999, 1)
__________________ Pete - X10 Oldie
|
Back to Top |
|
|
jeffw_00 Super User
Joined: June 30 2007
Online Status: Offline Posts: 929
|
Posted: February 23 2008 at 14:40 | IP Logged
|
|
|
yup - that answers qn 3.
thanks
|
Back to Top |
|
|
BeachBum Super User
Joined: April 11 2007 Location: United States
Online Status: Offline Posts: 1880
|
Posted: February 23 2008 at 15:07 | IP Logged
|
|
|
Question 2:
When I SET SYSTEM LOCAL9 ph_insteonwithret ( "kitchen", 17, 200 ) I get a return of 200 in LOCAL9. Maybe this will help you zero in on the problem.
__________________ Pete - X10 Oldie
|
Back to Top |
|
|
jeffw_00 Super User
Joined: June 30 2007
Online Status: Offline Posts: 929
|
Posted: February 23 2008 at 15:17 | IP Logged
|
|
|
yeah - the problem was the 2nd argument had to be a number, replacing "[LOCAL6]" with ph_getvar_n(1,6) fixed it. so this works...
ph_setvar_a(1,9,ph_insteonwithret("[LOCAL1]",ph_getvar_n(1,6),0))
thanks
|
Back to Top |
|
|
BeachBum Super User
Joined: April 11 2007 Location: United States
Online Status: Offline Posts: 1880
|
Posted: February 23 2008 at 15:20 | IP Logged
|
|
|
Well good.. I'm on the way to the beach since it's hovering around 70.
__________________ Pete - X10 Oldie
|
Back to Top |
|
|
jeffw_00 Super User
Joined: June 30 2007
Online Status: Offline Posts: 929
|
Posted: February 23 2008 at 18:47 | IP Logged
|
|
|
it's around 20F here, which is why I'm messing with PH this afternoon 8-}
|
Back to Top |
|
|
dhoward Admin Group
Joined: June 29 2001 Location: United States
Online Status: Offline Posts: 4447
|
Posted: February 23 2008 at 20:34 | IP Logged
|
|
|
Whoa, I was way too slow on this one.
Yep, if a label doesnt actually exist in a Goto Label command, control just transfers to the next line. So you can do this:
Goto Label if(1 = 0,"LOOP1","")
and control will just transfer to the next line as long as you don't have a blank label.
No equivalent of a Jump 999 with labels. However it's very easy to setup and something I do all the time. Just make your very last statement of the macro a label with a value of "END". Then just use the END anytime you want to exit the macro.
The ph_and function is a bitwise and function. So ph_and(4,2) will 0. Similarly, ph_or is a bitwise or function. ph_or(4,2) will equal 6. Logical AND and OR just uses the word AND and OR. So (1 = 1) and (2 = 2) will be true.
Dave.
|
Back to Top |
|
|
jeffw_00 Super User
Joined: June 30 2007
Online Status: Offline Posts: 929
|
Posted: February 23 2008 at 20:36 | IP Logged
|
|
|
thanks dave - I figured out the "END" thing, figured it couldn't hurt to ask about something cleaner. It's a nit though. However, the dropthrough (null label) helps a lot for code cleanliness
/j
|
Back to Top |
|
|
BeachBum Super User
Joined: April 11 2007 Location: United States
Online Status: Offline Posts: 1880
|
Posted: February 23 2008 at 20:45 | IP Logged
|
|
|
Thks Dave...
__________________ Pete - X10 Oldie
|
Back to Top |
|
|