Get step count from Activity Monitor on Watch Face to update faster than once every minute?

Hi all,

I'm developing a WatchFace that gets the current step count using the Activity Monitor: https://developer.garmin.com/connect-iq/api-docs/Toybox/ActivityMonitor/Info.html. In the simulator, i'm able to access the data every few seconds and get the updated count, but on the actual watch (a Forerunner 55) it seems it only updates every minute the count on the monitor. So, on the watch even though the data is requested a few times per minute, the actual count is only updated each minute. Does anyone know if this can be set to update faster?

  • I kind of did the same test on Friday with BIG EASY WF: walked around and entered the glances and then back to the WF. Either the WF was still running, or the steps are somehow cached for a minute, because the steps didn't refresh.

  • Why do you want to see the steps every second? Why isn't it enough once per minute? And if it's not enough then why don't you start a walk activity, there you can see the steps every second.

  • I kind of did the same test on Friday with BIG EASY WF: walked around and entered the glances and then back to the WF. Either the WF was still running, or the steps are somehow cached for a minute, because the steps didn't refresh.

    I just did the same test with Crystal-Tesla. Walked around while pressing DOWN, UP over and over again.

    The steps refreshed every few seconds, just like the native watchface.

    Unlike the native watchface I tried, Crystal-Tesla also updates steps in "real time" (every second), at least while in high power mode.

    Not sure what's happening in your case.

    Have you tried the same with a native watchface?

    Or even the native steps glance? I don't even have to enter the native step glance's main view, steps are updated on the glance view in real time, sometimes with an even finer granularity than when I rapidly switch away from a watchface and back.

    What I mean by that:

    - if I just scroll to the steps glance and walk around, I can see the steps value incrementing by as little as one step (although sometimes the increment is larger)

    - if I rapidly switch away from a native or CIQ watchface and back, steps are usually not updated until a few seconds pass (maybe 5 seconds), and always with a larger increment than one step (since I'm not walking one step per 5 seconds).

    The difference here could just be down to the amount of time it takes for a watchface to fully initialize itself or something. But it's really not significant. I think the main point is that both CIQ apps and native watchfaces/glances can receive updates to the step count more frequently than once per minute, at least on my 955.

  • The goal is not to get every second, but to get them every 20-30 seconds, and to monitor and store the counts at these intervals during the day. Testing showed that once every minute is not fast enough unfortunately.

  • Understand, steps aren't counted by what your foot sees, but by what the watch on your wrist sees.  You can be sitting down, yet moving your wrist around, and you don't want those counted as steps (though fitbit used to do just that and people didn't complain as it made it easier to reach their step goal).

    So there's logic to reject "false steps".  I've not looked into it for years, but it used to be, you needed to take 10 "steps" in a limited time for them to be counted, and then you got credit for the first 10, so your "steps" didn't really ever update every second.  Some insurances give you a discount based on your daily steps, and without this kind of logic, you could be sitting at your desk and shaking your wrist, increasing your "steps", without taking a single one.

    And people walk differently.  Some may shuffle more than others, for example.  Even for the same person, a "step" could look different to the watch when walking on a hard surface vs a soft rug.  The watch needs to be smart enough to handle these different conditions.

    Last I looked, for watches with complications, the complication didn't update every second, and that doesn't involve Activity.Monitor at all.

  • yes, on fr55 even the native WF doesn't refresh the steps every second

  • You're talking about what counts as a step. We're beyond that! Steps that count as steps (we both see them being added after a minute and if you open the Garmin Connect phone app then in real time) are not being returned by the SDK on fr55 in onPartialUpdate, only in onUpdate.

  • Steps that count as steps

    ...

    are not being returned by the SDK on fr55 in onPartialUpdate, only in onUpdate.

    Here’s where I have to disagree again. I think you are still conflating the process of retrieving step info (via ActivityMonitor) and how frequently that info is updated, with the process of rendering display updates (onPartialUpdate / onUpdate), which is why you seem to believe that this has something to do with MIP vs AMOLED. 

    I don’t see any evidence in this thread that OP is somehow able to see step info updated at a faster rate in onUpdate compared to onPartialUpdate. I don’t see how that could be possible, unless the watch changes the internal steps update frequency (for ActivityMonitor) depending on whether it’s in high power or low power mode, which would be ridiculous, especially since MIP low power mode explicitly allows for once per second (partial) watchface updates. That would be tantamount to Garmin saying that you're allowed to update part of your watchface once per second, but not with steps data.

    I don’t think OP even mentioned onUpdate at all.

    My understanding of the situation is that the ActivityMonitor data itself is not updated more than once per minute.

    I guess OP could confirm or deny some of these conjectures:

    - they could also retrieve and render steps in onUpdate (which I assume they would do anyway). If steps are frequently updated in high power mode (after wrist turn), that would confirm what you said. But I doubt this is the case. I expect OP to report the same behaviour for onUpdate as they see in onPartialUpdate

    - they could make a device app which updates the display once per second and simply displays steps from activity monitor. This would eliminate any possible differences due to watchface update quirks. However, I believe OP should see the same behaviour as in the case of the watchface — ie that steps from activity monitor are only updated once per minute 

    if I’m wrong, then either Garmin has a crazy implementation of ActivityMonitor (*) that is inappropriately tied to display updates (**) or something else is going on. 

    (*) and possibly the corresponding internal code that feeds the same data to native watchfaces

    (**) in a way that isn’t even consistent with their own display update capabilities

  • Also, if you're seeing the same problem with a native watchface on fr55, as you rapidly unload and reload the watchface by pressing DOWN and UP over and over again, that would tend to suggest this problem isn't confined to onPartialUpdate().

    Same argument goes for a CIQ watchface which is rapidly unloaded and reloaded.

    You don't even have to do it that rapidly. Look at the watchface, walk around for 10 seconds, then navigate away from the watchface and back (which presumably reloads it). Assuming this is only a problem with onPartialUpdate() and onUpdate works fine(), I would expect steps to be updated, since onUpdate() is going to be called at this point. Even if the watchface is actually not unloaded from memory, I would still expect onUpdate() to be called when you return to the watchface from another screen (how else will the full screen be redrawn?)

    When a watchface is initially (re)loaded and/or when onUpdate() is called, one would expect most stats to be re-fetched from their source (*), with the possible exception of location-dependent data such as weather. Similar to how native watchfaces on fr955 don't update steps frequently, but if I navigate away from the watchface and back, steps may be updated immediately

    (*) there's no reason for watchfaces to cache presumably live data such as steps or HR