Indoor Rowing Data Fields Idea – Estimated Distance, Split Pace & Distance per Stroke (Fenix 8 Solar 47mm)

Hello Connect IQ Developers!

I’d like to propose an idea for an indoor rowing data fields:

Objective:

Provide more meaningful rowing metrics when training without a smart rower, relying only on watch sensors.

1. Estimated Distance (Calories-Based Model):

Even without connected equipment, watches already calculate calories and effort metrics. This means distance could be estimated using a physiological relationship:

D = ((C − 300) / 9.6367)^(1/3) × T

Where:

  • D = Estimated distance
  • C = Calories per hour
  • T = Elapsed workout time

This concept is similar to how rowing machines derive pace from power and would require:

  • Calories burned
  • Elapsed time

2. Estimated Split Pace (500m):

Using the estimated distance, split pace could also be derived:

  • Split Pace (500m) = Elapsed Time / (Estimated Distance / 500)

This would allow users to see a familiar rowing metric even without a connected rower (maybe even use it with the virtual pacer?).

3. Estimated Distance per Stroke:

If stroke count or stroke rate is accessible:

  • Distance per Stroke = Estimated Distance / Stroke Count or alternatively;
  • Distance per Stroke = Speed / Stroke Rate

Is stroke detection or stroke metrics accessible enough from a Connect IQ data field, or would this require a full Connect IQ app?

I’d love to hear thoughts from experienced Connect IQ developers.

Thanks.

  • D = ((C − 300) / 9.6367)^(1/3) × T

    If I'm understanding this correctly, this can be done using my data field AppBuilder 5, which is like "Excel for your watch".

    https://apps.garmin.com/en-US/apps/fd690281-9c22-4fee-a81e-3b7f39aa67c5 

    The following formula would display estimated distance in metres:

    setv(0, ((calories / timer * 3600) - 300)); (if (getv(0) lt 0, 0, getv(0)) / 9.6367) ^ (1/3) * timer

    Explanation:

    - calories: calories burned in the current activity (kcal)

    - timer: activity timer (seconds)

    It's similar to your formula except for one thing: the only problem with your formula as written is that seemingly C - 300 can be negative (especially at early parts of the activity), which could lead to a nonsensical negative distance estimate, so I've accounted for this in my formula by using 0 in the case where C - 300 < 0.

    The problem (from my POV) is that I don't know if Garmin would necessarily always estimate calories burned during an activity such that calories per hour is always >= 300. Maybe it would, maybe it wouldn't.

    For anyone else reading this, I found related discussions:

    https://www.reddit.com/r/Rowing/comments/er2zsx/how_to_calculate_an_estimate_distance_per_stroke/

    https://www.reddit.com/r/Rowing/comments/emz8hp/how_to_find_calorieshour_to_500m_split_or_close/ 

    Split Pace (500m) = Elapsed Time / (Estimated Distance / 500)

    setv(0, ((calories / timer * 3600) - 300)); timer / (((if (getv(0) lt 0, 0, getv(0)) / 9.6367) ^ (1/3) * timer) / 500)

    Explanation:

    setv(n, v): sets the value v in the numerical slot n

    getv(n): gets the value from the numerical slot n

    timer: activity timer (seconds)

  • Thank you  ! I'll definetely give it a try, do you know if AppBuilder5 can take spm from cadence? I can see it on the website as one of the available metrics but unsure how that would work for indoor rowing with the accelerometer.

  • I tried using the split time formula you kindly posted but the data field output is stuck with “!Args” and not showing anything

  • Sorry my bad. I edited my comment above

  • thank you! I wanted to test if this would be more or less accurate than taking the average stroke rate at a constant 7m distance per stroke to estimate the split pace and total distance - I've checked my 10 most recent workouts and that distance number seems fairly stable between them - I'd need to use the accelerometer data from the watch though, is this something AppBuilder can do?

  • No, unfortunately not. It really only supports basic activity info for Connect IQ data fields, not raw sensor data.

    To get an idea of what that is:

    https://ciq-appbuilder.blogspot.com/p/variables.html 

  • The problem (from my POV) is that I don't know if Garmin would necessarily always estimate calories burned during an activity such that calories per hour is always >= 300. Maybe it would, maybe it wouldn't.

    Yes, that's what I'm trying to figure out now, it seems Concept 2 has a specific way to determinate calories, I've read this in a reddit post:

    the engineers at Concept2 estimate that you need to burn 4 Calories in order to produce 1 Calorie of mechanical work in terms of moving the flywheel. Plus, they estimate that you need to burn an additional 300 Calories per hour for "keeping alive and awake and going through the rowing motion at a reasonable stroke rate on an erg with the flywheel removed"

    I'll be tweaking the formula to see what results generates the least mean error from the actual rower to make it a bit better

    Btw, do you know which display format I should use (or maybe just leave as Auto?)

  • For anything but pace or time, the auto format is fine.

    For pace (in [distance units] / hour):

    - ensure that the value which is calculated is in units / h (doesn't matter what units is)

    - use the Pace format

    This will convert units / h to mm:ss / unit

    But for split pace (500m) formula:

    It seem that actually calculates seconds / 500m. In this case, you want to use one of the time formats, so that seconds will be displayed as either [hh:]:mm:ss (Time) or mm:ss (Time2). Ofc in practice you will never care about paces slower than 59:59, so it doesn't matter which one you choose.