Wrist vs Chest Heart Rate on Garmin watch

Hi Guys,

Since a recent update to my watch I noticed that Garmin is trying to do something tricky with heart rate between Optical and Chest Heart rate. I am wondering if I can get this data into a chart in intervals.icu?

*** Adds heart rate dynamic source switching to select the best heart rate data source (watch or chest HRM) to improve accuracy during running activities. ***

I can see the data in fitfileviewer website as per screenshot, just wondering how I get this into a chart? I did try the custom chart activity stream but do not see the Wrist heart rate or External heart rate in the dropdown list.

here is the table in the fit file:

any help would be greatly appreciated.

Cheers

1 Like

For me, Wrist is useless.

1 Like

Same… And this new update is causing me some issues switching between both.

oh wow… didn’t notice that there’s now is 2 diff columns in addition to Heart Rate.
Your screenshot seems to just show that Garmin is now writing both HR to the FIT file but is prioritising External

I added a custom activity stream for this (“Wrist Heart Rate”) with some Javascript to pickup the value. It doesn’t appear in the record fields drop down because the field doesn’t have a name:

{
  for (let m of icu.fit.record) {
    for (let f of m) {
      if (f.num === 136) {
        data.setAt(m.timestamp.value, f.value)
        break
      }
    }
  }
}

I added it to your Monday run. You just need to search for it to display it for yourself and reprocess existing runs to get it.

You could make a custom chart to display normal HR and wrist HR.

3 Likes

Excellent thanks David, I made a simple chart and great to be able to see the data straight from Intervals.icu. If anyone has similar model watch I have shared the chart

Are you trying to determine when you can ditch the strap? Based on these data?

I would love to ditch the strap, but I still get better results with the strap on. My main reason for checking was I am not sure if Garmin is actually showing me wrist or chest strap heart rate during recent activity on the watch display at the time. I had a feeling doing a hard session the heart rate looked too low, and then I found Garmin has made some changes in the last firmware updates. I do prefer if I have the Strap on that it only records from the the Strap and doesn’t try to do anything fancy. It was a track session so my heart rate would get high on the effort, then drop down on the recovery.

I see what you mean. There isn’t an option to disable wrist HR PER activity (except swimming)

I also find that my old model watch will auto use the chest HR even when not in activity mode and I can see the HR widget using it.

But on my newer “hand me down” watch, it will revert back to optical. So much so that now when I do a workout on the phone app, I will just remove the watch.

1 Like

I have tried with disabling optical heart rate on the watch before an activity and then turning back on afterwards, but half the time I forget so that is a pain also. It would be great if they had the option similar to swimming to disable during run or bike etc… cheers

1 Like

Hi @david and @Wazc23 . Very good findings!

I hadn’t realized that my watch was switching between strap and wrist HR. I was assuming strap should always take precedence and I also strongly prefer the strap. I just checked in fit file viewer and I can confirm the switching behavior.

I tried leveraging the custom stream from @Wazc23 but I have a few questions

  • I don’t see the Wrist HR displaying in my charts despite adding the custom stream and checking the checkbox in charts, is this expected?
  • I tried playing the script from the custom stream screen on my latest activity, and I get a “memory limit exceeded” error. Could that be why it does not display?
  • I also see that the field is hard coded by its number (136). Could the field position be different based on the watch? I use a Garmin Forerunner 955
  • If so, how can I figure out what is the field position I am looking for? I would actually be interested in pulling both the Wrist HR and the external HR fields. I want to investigate the difference but also since when the switching behavior started

Thank you in advance and let me know if I can further clarify my questions!

Laurent

If I were Garmin, I’ll be programming the firmware to auto-switch when for some reason the Strap Data is missing for X seconds and then switch back when it’s back.

Hi @Laurent_Caron Have you tried going to the activity, and selecting actions > reprocess file, then refreshing the page. In regards to the 136 I am not sure either how that number was found, and if it may be different on your model watch.

Yes I have tried reprocessing the file, as well as changing the field position to 137, both without any result.

Looking forward to some hints, not sure what to try next!

I have made it easier to lookup fields by number which as a side effect also sorts out the memory limit issue. You can now use f_136 (or f_137 or whatever) to lookup fields by number. I edited your copy of the script and @Wazc23 's original.

{
  for (let m of icu.fit.record) {
    let f = m.f_136
    if (f) data.setAt(m.timestamp.value, f.value)
  }
}

As for the 136, that was discovered by looking at the fit file. As far as I know this isn’t documented anywhere. So it could change or be different on a different watch.

It looks like “external heart rate” is field number 144. So you could just copy the wrist HR stream and make one for that to compare on charts. Please make it public if you do.

I found that by looking at the “getMessagesForName-*.js” script loaded by fitfileviewer.com.

2 Likes