Is there a way to have Macro1 perform Macro2 and for Macro1 to wait for Macro2 to finish before the rest of Macro1 completes without using a delay (which I found to be hit or miss).
Here's what I'd like to do.
Macro1
trigger c1 on
set c2 on (this will trigger macro 2)
*At this point, I want macro2 to finish before the next 2 statements execute.
turn light a3 on
turn light a4 on
End of Macro1
Macro2
Trigger C2 on
turn on light e2
turn on light e3
End of Macro2
Thanks
spam4us unfortunately once a Macro starts there is no way to stop it until it runs to the end. I will have to give this some thought to see if there is any way to work around this. I'm sure there will be some others post here that may have some ideas.
(http://www.bdshost.com/X10/lpup.gif)---(http://www.bdshost.com/X10/lpup.gif)---(http://www.bdshost.com/X10/lpup.gif)---(http://www.bdshost.com/X10/lpup.gif)---(http://www.bdshost.com/X10/lpup.gif)----KDR
Quote from: spam4us on September 09, 2007, 01:52:53 PM
Is there a way to have Macro1 perform Macro2 and for Macro1 to wait for Macro2 to finish before the rest of Macro1 completes without using a delay (which I found to be hit or miss).
Here's what I'd like to do.
Macro1
trigger c1 on
set c2 on (this will trigger macro 2)
*At this point, I want macro2 to finish before the next 2 statements execute.
turn light a3 on
turn light a4 on
End of Macro1
Macro2
Trigger C2 on
turn on light e2
turn on light e3
End of Macro2
Thanks
Maybe if you used
three macros?
Macro1
trigger c1 on
set c2 on (this will trigger macro 2)
End of Macro1
Macro2
Trigger C2 on
turn on light e2
turn on light e3
trigger MACRO 3End of Macro2
MACRO 3 turn light a3 on
turn light a4 on
End of Macro3
KDR & Dave_x10_L,
Thanks for the replies.
KDR, I would like to do this without using a delay since I found that using them is trial and error as far a guessing how much time is needed for the other macros to complete.
Dave_x10_L, the problem using your example is that Macro2 will always trigger Macro3 which may not always be wanted.
I was thinking of having some snippets of code that I could execute as a subroutine so I don't wind up having alot of long routines. An example would be a Front Door macro triggered when someone comes to the front door to run Macro2 to turn on a porch light, run macro3 to ring a chime, and run macro4 to turn on an appliance module.
(Front Door Macro)
Trigger c1 on
run macro2
run macro3
run macro4
Macro2
turn on porch light
turn on front foyer light
Macro3
ring the chime
turn on light next to the chime
Macro4
turn on appliance module
There may be other times where I would only need to run macro3 and macro4.
Example
Someone comes to the back door. I don't want macro2 to run but I do want Macro3 & 4 as well as another macro5. It would look something like this.
(Back Door Macro)
run Macro3
run Macro4
run Macro5
Macro5
turn on back porch light
In this example I can "re-use" macro3 & 4.
Now I know the above is possible, BUT I would like to have macro 4 not execute until Macro3 is finished and not have Macro5 execute until Macro4 is finished without any coding put into Macro3, 4 or 5. Is there a way to say
Run Macro3
Wait for Macro3 to finish
Run Macro4
Wait for Macro4 to finish
Run Macro5
again without using the "Delay" statement.
I have tried the above, but it seems that the macros start to run before the previous one has finished.
Hope this makes sense. It's sure ginving me a headache.
thanks
I think Dave_x10_L's "work around" is about the best you'll be able to do. If you're afraid of macro 2 accidentally triggering macro 3, you can use flags. If you give your macro 2 a unique house / unit code it shouldn't be a problem however.
I did, however, want to remind you that for a macro to be executed by another macro you'll need to create a dummy variable with the same house and unit code as the the macro you want to call. e.g. If you want a macro M1 to call macro M2 you'll need a dummy module also labeled M2. (While there is another way to call a macro, the dummy variable approach is the most reliable.)
What you need to realize is the AHP was not designed to have macros call macros. The work around to have a macro execute a macro by using a dummy variable was discovered by the X10 community. There is no way, however, for a macro to call another macro as a true subroutine.
spam4us :
What you are trying to do is totally possible ,how ever as steven r pointed out you'll need to create phantom modules, use flags and conditions and most likely Else's in your macros!
Understanding how each of these works can be found by doing an advanced search or from links in my Topic: Having ActiveHome Pro Problems? Please Read This First! (Read 21285 times) (http://www.x10community.com/forums/index.php?topic=7951.0)
eg:
front door:
c1 on
set flag 2
turn on dummy module D1
macro for dummy
D1 0n,if flag 2 set
turn on chime and lamp macro address
turn on porch light
turn off dummy (D1)
clear flag 2
Macro for back door
set flag 3
turn on dummy macro D1
else for dummy D1
if flag 3 set
Turn on kitchen light
turn on chime and lamp macro address
turn on radio
clear flag 3
turn off D1
With out the Smart Macros plug-in this isn't possible!
You can let this get very complicated or be very simple, but You don't need a macro to simply turn on an applance module!
every macro can contain it's own conditions and several Else's
eg: lamp chime macro could contain the condition if it is between 7 and 9 am don't turn on chime just the light the else could be turn on lamp and chime
One Note on conditions: The first set of conditions that is met will trigger the macro so you couldn't have a macro with if it is after 6 then the next else to have the condition it is after 6 and flag 2 is set! the second would never fire! ;)
Best of luck
Cheers