ErgZone + Intervals.icu Integration (Beta): Row, Ski, Bike, Run

Hey everyone! :waving_hand:

I’m excited to share that we’ve been working on a two-way integration between ErgZone and Intervals.icu, and we’re ready to start beta testing!

This integration streamlines your indoor training by automatically syncing your workouts between Intervals.icu and ErgZone:

  • Import workouts: Your Intervals.icu training calendar automatically syncs to ErgZone, so your planned workouts are ready to go on your Concept2 monitor (or RP3, Rogue, WaterRower, etc)
  • Auto-upload: Completed workouts are automatically uploaded to Intervals.icu as FIT files
  • Sport support: Works with row, ski, bike, and run

This integration is currently in beta and behind a feature flag.

If you’d like to try it out, please send me a private message with the account you registered on ErgZone:

  • Your email address, OR
  • Your Concept2 logbook account username

I’ll enable the integration for you.

This integration is part of ErgZone+ premium features. We normally offer a 7-day free trial, but since this is in beta, we’re extending it to 1 month free for beta testers so you have plenty of time to test everything out.

Looking forward to hearing your feedback! Feel free to reach out with any questions or issues you encounter.


2 Likes

Sync is working great & sending all of the metrics across.

One issue is whether I can design my workouts on Intervals instead of Ergzone & then upload them to Ergzone. I am more used to designing on Intervals & then just sending a workout to the application app when I exercise; also storing the workouts in the Intervals library as a central repository irrespective of the discipline; but in fairness it is easy enough to do on Ergzone which has a library also. And I would not want to make Ergzone essentially just a conduit between the PM5 & Intervals, which it might become for me if that was enabled. Hopefully others though would still value/use the extra features of Ergzone & so hopefully that would not be the case anyway. But something for others to say how they use Ergzone personally & what extra features they would like to see in the future perhaps?

That’s exactly how part of the integration works. Once Intervals.icu is connected, ErgZone creates a dedicated track that holds the planned workouts from Intervals.icu.
ErgZone refreshes that list every 8 hours but you have the option to manually sync it if you want to.
The workouts that appear there are the planned workouts on Intervals.icu for the day. If you complete that workout then the data gets uploaded to Intervals.icu.
After a week if a workout that was planned doesn’t get completed on ErgZone then it is removed from the track.

I now have this integration working well by the look of things. I have two workouts in my calendar one for tomorrow & one for Friday. So clicking into the Intervals folder in Ergzone, as shown in your screenshot above, I see the Wednesday one appear on Weds when in Week View, shown below. This then persists through the rest of the week. Intervals’ Friday workout does not appear in Ergzone until Friday together with the Wednesday one (presumably in case I didn’t get around to doing that previous one?). I also have another manually added workout, not done through Ergzone, that persists firever from what you say. So presumably I would need to delete the original (marked done) to get rid of this from the Ergzone calendar? Not ideal & requires a solution if possible.

I can check that the workout will be sent correctly to the PM5 by clicking on Connect button & it will take me to the view that I will get when executing the workout. So that seems to work well also with the 10x repeats sent correctly.

So now in theory I can a library of workouts in Intervals as well as Ergzone & so can drag & drop them into my Intervals calendar. Easier for me as I am more familair with Intervals than Ergzone. Thanks.

Can you confirm what Sport we need to use Virtual Ski or Nordic Ski in the planning in Intervals or have you changed it now to recognise both types?

My AI Coach, Coach Watts, will be able to see all of my workouts whatever the discipline & manage my SkiErg ones alongside all of the others. If I am injured or fatigued, then CW will also be able to suggest SkiErg (or Row/BikeErg for those who do that) as an alternative workout choice, similar to how Athletica’s Workout Wizard operates, or will do whenever it comes back online at least. Athletica does not recognise SkiErg & so could not do this anyway.

This looks like a very useful integration & so many thanks for all your work & assistance in getting it running.

Dave Bannister

I will accept your previous offer to be added as a coach, that way I can see how those workouts are created in Intervals so I have a better idea of what’s going on. What information you need from me to be added as a coach?

I changed the code to import either types, up to you to decide which one to use.

Do you know , how Ergzone export to intervals.icu will deal with rest intervals ?

@R_S1 It depends how the workout was configured. It would be nice if you could test the integration and let me know what is working and what is not working.

From my last Skierg interval workout done on Feb 2nd it basically holds the last power pre-rest through the whole rest interval. It seems to ignore the actual rest interval/wattage (or lack of it) in Intervals’ summary metric but the Intercaks do show as rest intervals in the timeline graphs & data table. I did not do complete rest in fairness, probably 30-40w, but so slow that it treated it as rest i think & so didn’t register my actually wattage during the rest interval. The plan & graphs are below so you can see what i mean.

If you want to write me a similar workout that might act differently in terms how rest is treated, i can test it tomorrow morning at the gym. I don,t think that complete restt would gave made any difference from what i have read elsewhere but you might know differently?

Rest is treated differently.
Look at these 2 workouts:

Workout 1

10x
- 2m 150w
- 1m 40w

Workout 2

10x
- 2m 150w
- 1m

Workout 1 is created with 20 intervals: 2min, 1min, 2min, 1min … (20 times)
Workout 2 is created with 10 intervals: 2min with 1min rest, 2min with 1 min rest (10 times)

So basically if there isn’t a target then it will be configured as rest.

I’m not 100% if this is the ideal solution maybe configuring everything as an interval will be less confusing.

Let me know your thoughts.

I didn’t see this until after I came back from the gym & so have not tried your version yet.

From my understanding, Intervals would not see the rest intervals without it saying “rest” specifically or using a metric of some value I think e.g. 0.1w.

But fundamentally I think that the issue is with the C2 FIT file anyway as the PM5 just behaves differnetly in terms of recording power/pace if it thinks that it is a rest interval. As explained here ( Concept2 RowErg FIT import ignores lap-defined work/rest intervals - #3 by Author_Bicep ) The FIT file just does not seem to contain a per second record for the rest interval, ot anything near per second even. So from what I am reading, however we parse ithe workout steps, rest Intervals will not show an accurate rest or “ticking over” interval by the look of it. It will register the passage of time at best, or seems to from my workout timeline graph, presumably from the time stamps, but without many data points recorded to register a lower/nil power.

My 2nd Feb 9:41 duration workout FIT (but actually 20:00 if rest is included) only has 459 rows in the Records part when viewed using fitfileviewer. So that is not even a per second record for the 9:41 that it says that I skied as an overall workout duration. If every second of the 1min intense intervals were recorded then there should have been 600 records presumably? The intervals that I created are 557 seconds in total so some of those seconds are ignored/compressed presumably in the FIT.

Hopefully you can download the FIT file from my record (via the Data tab in Timeline view) as I cannot load it here & then view it in a FIT file viewer & you will see what I mean. Or you can perhaps tell me what I am misunderstanding if that is the case. Without that I am not convinced that Intervals parsing or calculating method is the problem.

Dave

1 Like

Maybe I should always program as an interval then?

The fit file that is coming from the C2 Logbook only has records for each stroke. The fit file that is being uploaded from ErgZone directly to Intervals.icu has records for every second.

@greis @R_S1

I have downloaded my Feb 2nd workout via Ergzone Web Admin & uploaded it into Intervals (screenshots below). So it shows that if uploaded via Ergzone then the rest interval power & speed are recorded, unlike if uploaded via the C2 Logbook. I have inserted part of the first rest interval to illustrate this. Intervals still picks out the HIT intervals only which makes sense. So this looks like success.

I will test it again tomorrow (Friday) with some intervals at rest & then some at “tick over” pace to see how it handles them i.e. is there a difference if power/pace is zero. Presumably there shouldn’t be.

I cannot understand why C2 don’t have their FIT file record per second as this seems the common method for all/most other fitness machines & so the most likely that analysis platforms/devices would expect. Presumably there is a reason. Perhaps legacy, e.g. file size &/or they do not want to change it so that PM2/3/4 are adversely affected? Some watches seem to record below 1 record per second also & it is a pain with Intervals as it highlights/potentially treats them differently.

I am a bit disppointed & confused as to why there are/seem to be so few athletes on Intervals’ Forum that use, or at least want to upload their C2 rower or Skierg sessions, or at least have shown interest in this sync or Intervals.row app that is in development. Unless perhaps they use it as in Hyrox fashion & so do not record their sessions ni terms of pwoer or pace but just HR over the different exercises? The Rowsandall sync integration implies that there are likely C2 rowers out there perhaps (e.g. winter training) but presumably they will stay loyal, & have all their historical records, on that platform?

Perhaps @david could chip in with some idea of who is uploading C2 SkiErg or C2 Row into Intervals?


This is the same workout uploaded via the C2 Logbook


Anyway @greis, thanks for sorting this problem out.

Dave

2 Likes

Same. But the more involved I get in my local boathouse, the more I recognize the same thing the intervals.row guy noticed:

The sorts of folks who use Ergs consistently, in my experience, are most interested in getting to the “suffering” portion. Not a whole lot of data-drive, and barely any real interest in tracking their workload. Even machine maintenace takes a backseat. I think, apart from the exceptional business practices, that this is the reason Concept2 is so beloved: it’s just plug and play.

In short, I think we’re a unique breed of fitness-motivated and nerdy :slight_smile:.


I hesitate to ping, but @Jaap_van_Ekris seems to know some folks over at Ergzone and might have some input here. Based on some conversations on the OpenRowingMonitor GH, I think the reasoning is thus:

It is deliberate as in rowing metrics (aside time and distance) do not change in between strokes (this is because we present all metrics averaged across the stroke, instead of instantanuous, as pace/watts/velocity/strokerate/etc.. all vary a lot within the stroke). So reporting per stroke also allows decent counting of them, etc.

He’s speaking primarily to his project’s behaviour, but I’ve noticed C2 PMs’ recording behaviour can be even sparser.


Regarding pause, I think C2 PMs are sort of notorious for their behaviour. See again ORM GH:

OpenRowingMonitor treats planned rest intervals similar to normal time based intervals, with the exception that the rowing engine is forced to stop collecting metrics during that interval. A PM5 considers a rest interval a subordinate attribute of a normal interval, and it isn’t an independent entity.

this is [handled in ORM’s workout behaviour] by adding a rest interval to ORM’s workout schedule.

In reporting, we indeed see the PM5 skipping the split/interval reporting when the pause starts, and including the rest data with the split reporting after the pause has ended. This is consistent with the approach that a rest interval only is an extension of an active interval. In OpenRowingMonitor this behaviour is replicated by not reporting the start of a pause as new split, and combining the data from the active split and the rest split.

People might deviate from their workout plan and take a break mid-session. In OpenRowingMonitor this is treated as a seperate rest split, clearly separating active and passive metrics. The PM5 essentially ignores the pause, lets time continue and does not change split/interval upon detection.

@davidxcz Thanks for your detailed reply.

Presumably it sounds like most who record theit C2 sessions likely prefer it set up as is then. I am a newbie to all this & so will accept their rationale. I suppose with skierg i am thinking of a stroke in a different way to their rowing stroke & also about Intervals will process the FIT file. Just recording the hard intervals which per stroke seems to do is unusual in intervals’ sport types Ultimately if Ergzone can do per second & C2/ORM per stroke then both camps can be accomodated.

In terms of my use of the C2/PM5 skierg, i am looking for the more traditonal 80/20 approach i.e. with high (but at 56yrs old) sustainable volume levels with short length HIT intervals. So measuring e g. efficiency in the easy intervals is as important as the power in the hard ones. I am more of a skinny xc skier phenotype than Steve Redgrave. Most seem the 20/80 types by the sound of it where the 20% is getting to the start line & then back to the clubhouse with 80% the race in between.

This is the exact reasoning indeed. Garmin’s FIT specification describes two approaches to recording waypoints: time driven and event driven. As rowing is a discontinuous sport (we rowers are lazy, so we really work about 1/3 of the time) many metrics are useless when recorded mid-stroke. On a C2, metrics (aside time and distance) are thus calculated once per stroke. On ORM we recalculate all metrics twice per stroke (end drive, end recovery).

A time-based approach will become chaotic, especially when Strava has the tendency to recalculate things based on their own interpretation of time and distance. Mid-stroke data then should present instantanuous speeds, which are way higher and dip way lower in a single stroke, or keep repeating the same pace but will be overwritten by Strava. In essence, time/distance markers will not be consistent with speed/power indicated in the file and presented on the monitor.

Time based reporting also blocks all kind of sensible metrics via post processing. A FIT-file is capable of storing “distance per stroke”, but not “stroke time”. But knowing the exact timing of the stroke allows for metrics like “work per stroke”, etc.. This is why OpenRowingMonitor and a PM5 report based on strokes, not on time, as you lose essential accurate timing information otherwise.

When we implemented our intervals.icu interface for ORM I tested our FIT-file thoroughly, and it worked well, aside the slightly panicked message that there is not one datapoint per second. I normally upload via EXR and Garmin, who do record per second. This leads to weird stuff. For example, Strava’s indicated top speed is useless, as often it is the first part of the drive to the finishline, easily hitting insane paces.

2 Likes

Hi @Jaap_van_Ekris,

Nice to see you here. How are you recording HR data? Are they separate from the stroke events on the fit file?
In our case a time-based approach has all the data and it records more frequent HR measurements which makes HR zone training more precise.

Hi @greis nice to see you here as well!

Officially we do not support training targets/constraints yet (we first have to get beyond the PM5 interface capabilities/limitations for that, so that is for our MQTT interface only, and perhaps a future intervals.icu direct import).

I have some stuff in early testing for the reporting side. Currently HR data is part of the stroke data and indeed one might miss one or two updates (a HR monitor tends to report only once per second). For many purposses it suffices, but indeed when looking at the target-adherence, that might be problematic.

First step for us is to to follow the approach Garmin also uses: the FIT file structure has an element called “Event”. This stores all start stop events (and it should contain WorkoutStep changes (i.e. new Intervals). It also contains all alarm statusses during a session, including:

  • HR (HRHighAlert and HRLowAlert),
  • Power (PowerHighAlert and PowerLowAlert),
  • Speed (SpeedHighAlert and SpeedLowAlert) and
  • Cadance (cadHighAlert and cadLowAlert).

It does so by indicating an event with “HRHighAlert” with type “start” to indicate the rower exceeded his target zone, followed by a “HRHighAlert” with type “stop” to indicate the rower returned to the intended zone. For us, this would be the first step, as we already treat all this data seperatly and thus can manage these alerts inside our FIT-recorder. It answers a lot about goal-adherence, but it might be problematic how to identify if people left HR Zone 2 and entered HR Zone 3, while their training dictates they stay inside Zone 2 or 3. Inside the Garmin ecosystem this isn’t an issue as most trainings are limited to a single zone, but we want to be a bit less restrictive here.

The FIT-file spec also supports a “hr” element. I have not seen it used in the wild yet, including Garmin, so it is a bit tricky to see what all values should be (are some optional, I don’t know). And it might even be that intervals.icu and others don’t even understand it. It allows to store HR values outside the records structure. For us it would be easy to add that element (once we understand the parameters) to all our recordings essentially dumping the HR data as it comes in. This would make the data processing even more accurate as you don’t have to wait for the passing of a second to record the data along with time and distance.

For us, both approaches are clearly on the table for the next release. The seperate HR element is interesting, as it would allow a more accurate handling of HR data (for us, it is another event fired at us), and it would allow decent handling of HR data during pauses.

1 Like

@greis

So I did the intervals workout with hthe first 5 of the rest intervals parsed as “tick over” rather than static rest. The next five were parsed as rest & the did the first three (of those rest intervals) at “tick over” & then the last two as static rest. So a fair variety to examine.

Intervals did not pick out the hard intervals for the first 5 but then did the last 5, presumably to do with the way the workout was parsed perhaps? The power, torque & cadence of the tick over intervals were recorded for the first five (parsed as tick over. But the second five (parsed as static rest) do not have power, torque, or cadence recorded (though the first three should have had low tick over power recorded ideally). Of the last two rest intervals only the first was recorded (no metrics but then the flywheel would have been static for most of it) & the last ignored.

I have not created intervals so that you can see exactly what was recorded & how Intervals has treated the C2 FIT file. The power graph has no trace until the last hard intervals though hovering along where it should be there is power within the graphs y-axis that should have provided a graph line. So I have not worked out what that might mean yet but very annoying. EDIT - My fault as I had stupid limits for the y-axis

The Ergzone upload is equally poor in terms of picking out the hard intervals, managing only the last three. But it has collected data for the first 8 of the easy/rest intervals. Of the last two which were static rest it has ignored the last, foreshortening the total workout duration as for the C2 upload. And the penultimate rest interval it has recorded no data but then that is probably correct as there would have been no data from the PM5. It has recorded HR for that intervals (though HR was inaccurate throughout the workout for some unknown reason (though HR worked fine with my prior 500m TT which had no intervals parsed).

Again I have not created any intervals for the Ergzone upload. Those three are what Intervals itself picked out.

HRM was a Garmin HRM Dual & connected to the PM5

@greis You should be able to download the original FIT files from my record & put them through a FIT file viewer for deeper analysis.

C2 upload


Ergzone upload


Quick update:

We’ve added the external id to the fit file being upload which now allows you to open that result on the ErgZone app. So if you’re on your mobile device and click on that link it will open the app on that specific result, which allows you to see all the details and trigger other actions, like redoing the workout or viewing a history of that specific workout.


If you’re opening on the computer it will just show a page with basic info but we might add a button in there to allow you to open on the admin site where you have to authenticate and see the full details:

1 Like