Run Rule every X Minutes

@Sgt.Flippy_PJ , this is brilliant! Very elegant solution!

It solves a pretty interesting problem for me. I am using smartthings & sharptools as a security system. With this, I am able to have a heartbeat service that checks the online status of my hub every minute (using a HTTP action). As soon as the hub is offline, I will receive a pushover alarm on my cell.

Thank you!

1 Like

I spoke too soon. I noticed that the rule execution stopped after some time for no apparent reason. The log file just stops after a while after a series of clean executions.
@josh is there any type of limitation by any chance how often a rule can be triggered?

Weird, mine’s been running ever since I created the rule, still today.

What do your rule logs say? If you ran into an execution limit, that would be displayed in the logs. It’s 200 executions per rule per 10 minutes at the moment. It’s much more likely that your rule ran into an issue which didn’t allow the second part of the ‘loop’ to reset. While I don’t necessarily recommend building a looping pattern like this, if you are going to do so, it’s better to keep the loop as its own separate rule and keep it as simple as possible to avoid any potential side effects from the rest of the rule logic (especially something like an HTTP action where there’s potential for timeouts and things of that nature that could cause the rule to error out).

Hi Josh,
I have several timed loops that I use for polling devices and updating configurations. Every once in awhile one of the loops will stop running. Is the 200 executions you refer to a rule running?

Thanks

Per rule. And the rest of my original comment still applies… the design of how the variable is looped is critical. If you have other actions within your rule, if any of those fail and the rule doesn’t run to completion, that can break your rule.

Thanks. I was not aware of the 200 execution limit. My loop only sets the loop variable, nothing else involved. Is there anything else on the back end which could cause the loop to not execute?

The first place to check is always the rule logs.

And how is your rule setup? Sharing your rule design would help the community provide better guidance.

Thanks @josh !

My rule is fairly simple. It executes once / minute. Far less than the 200 / 10 minutes. However, I do make an HTTP call as a part of that rule. While the logs do not show any issue, I have changed the design of the rule as follows. Now i believe the rule should still execute even if the HTTP call fails.

Re-surfacing this topic…

I have a few loop timers (5, 10, and 30 min) that I had been using for about 8 or so months using the set variable/delay logic described above. These had been working somewhat reliably until recently where they timeout at some point during the day and I have to manually restart them by resetting the variable status what seems to be daily. Has anyone else had this issue?

Yes, I see this all the time. It does seem like the stoppages are happening more frequently lately.

Thanks @Nezmo - Do you have a good work around? I was considering building a rule to stop and reset these in the middle of the night but was hoping I was just overlooking something simple. @josh any insight? -Ryan

While the approach used in this thread is popular with the community, it’s not something we officially support since it doesn’t have the reliability we would expect. For example, if there are other actions within the rule and those fail, then the rule can abort before it gets to your ‘loop’ variable.

We’ve been working on some pretty significant platform updates behind the scenes and one of these is a new scheduler mechanism. As part of that scheduler, we are considering introducing native ‘loop’ functionality. We still don’t have the details ironed out and I still have some hesitation as looping is generally an anti-pattern when event-driven rules can accomplish the same thing.

:speaking_head: I’d love to hear the community’s use-cases for looping so I can better understand them as we consider a first-class looping feature. Please share if you have one. :speaking_head:

1 Like

Just a heads up that there was an issue on Sunday that may have impacted your timer / state stays triggered rules. You can find the details here:

[RESOLVED] Rules not automatically rescheduling - #4 by josh

We are working on identifying the impacted rules so we can automatically reschedule them. In the meantime, if your Timer Trigger rules were impacted, you can re-save them which will automatically reschedule them.

A Loop Trigger would be great, as you mentioned loops in rules break.

I’m asking what the use-case for a loop is that isn’t better suited by an event-driven approach? Can you tell me about the rules you are creating that need to loop rather than being triggered by an event?

Thanks Josh - Happy to hear this feature is coming! My use cases below. Im currently only using loop timers at 5, 10, 30 and 60 min intervals.

  • A backup trigger for thermostat rules and window shade rules
  • Weather API pulls
  • Refreshing device status for devices that tend to timeout when idle for longer periods
1 Like

I use a loop to refresh my Honeywell T5 thermostat’s connection to SmartThings. Without this refresh the data in ST on!y updates a few times a day making it useless in automations.

1 Like

Doing the same with my T6, temperature only gets updated a few times a day, but I want to use my thermostat to drive my AC as well, since it’s better positioned.
So every few minutes there’s a loop to refresh the thermostat and get a temp reading.

I think for the rest, as your suggestion, I tried to remove all others. But that one remains looped…

The best way i would use a loop is for things like if a rule is supposed to trigger but doesn’t, it can keep trying a specific amount of times. Or for like the light fading up or down, I created my own loops where if my bedroom door closes as the fade is happening, it will stop and call another rule to set the lights to a certain level than shut them off. I sleep with my door open, so if it closes, that means im up and out of the room. Idk if that falls in line with what you asked lol

1 Like