Page 1 of 1
Progressively longer location check intervals
Posted: 02 Jan 2015 10:28
by Almir
I'm trying to create a flow that checks my location and then if I am static at the same location, it increases the length it waits until the next check. So, for instance, the flow is set to check every five minutes. I would like it to notice if I am not moving any more and then progressively reduce the checks from one in five minutes to one in 10 minutes, then to 30 and then to one hour etc. How would I go about this in the most simple way possible?
Almir
Re: Progressively longer location check intervals
Posted: 02 Jan 2015 15:04
by Martin
Hi,
You could build multiple flows each with a trigger
Periodic Location Update with different timings like 5m, 10m and 30m and use an action
Set Flow State to enable only the flow you are currently interested in.
Alternatively you could use trigger
Global Variable Date/Time and an action
Init Variable Location and set the variable that holds the time of the next trigger time using a script.
Something like this might work (untested). The flow doubles the update interval each time when you are still at the same place.
-trigger
Global Variable Date/Time
-action
Init Variable Location
-action
Script
Code: Select all
if (global_last_location == null)
{
// initially set the update interval to one minute when the flow is executed for the first time
global_update_interval = 60000;
}
else
{
// calculate distance of the last location and the currently known location
d = distance(global_last_location, location);
if (d > 1000)
{
log("moved more than 1000m, reset update interval to one minute");
global_update_interval = 60000;
}
else
{
global_update_interval = global_update_interval * 2;
log("not moved, increase update interval to {global_update_interval}");
}
}
global_last_location = location;
global_trigger_date = getDate() + global_update_interval;
You could also split the script into multiple conditions
Expression and multiple actions
Script.
The getDate() function call in the last line returns the current time of the system. It's better to use getDate() than variable triggertime in this case to ensure that the next check really is in the future and not already passed when initializing the location takes a long time and triggertime is in the past. It's not an issue when you set the timeout in
Init Variable Location to a value that's shorter than the minimum of global_update_interval.
Regards,
Martin
Re: Progressively longer location check intervals
Posted: 02 Jan 2015 15:13
by Almir
Thanks very much for the elaborate response, Martin, and for the code you provided. I'll try and make that work with my flows as you suggest.
Thinking about this, it occurred to me how practical it would be to be able to change trigger parameters from inside a flow. This would make it much simpler to implement things like this and many other scenarios I suspect.
Re: Progressively longer location check intervals
Posted: 02 Jan 2015 15:23
by Martin
It's on my list of features to support variables in triggers at some point which should also make such things a little bit easier but it will certainly take some time until I can start working on this feature.