Workout Upload to Wahoo - Insights

Hello.
I’ve read through the list of threads regarding uploading of Workouts to the Wahoo head unit (Bolt for me) and I have some insights/findings and a question.

I am using the manual method of downloading a .MRC file and manually adding it to my Wahoo Bolt via USB to the ‘plans’ folder.
I am able to see my Workouts on the Wahoo and execute them…BUT here are some observations:

  1. In order for a workout to appear/sync to the Wahoo, it MUST contain Power target/target range in at least 1 step of the workout.
  2. If it has NO power target(s) in any steps, the Workout won’t appear in the list of Planned Workouts even with a ‘sync’
  3. The Target Power (Watts) shows up on the Wahoo “Target W” field correctly. If you have a "Target Power Range, the Wahoo takes (roughly) the mid-point of the range and shows it as your “Target W”.
  4. If you have steps in your work out which have Power target(s) and steps which are HR or Cadence targets, ONLY the Power steps will be shown in the Workout on the Wahoo. This will make a Workout that is (e.g.) 1 hour long, appear shorter as the steps without Power will not be counted.
  5. Steps which have a Power target AND a HR and/or Cadence target will show up on the Wahoo. BUT, the HR target or the Cadence target values DO NOT appear on the respective Wahoo fields during the Plan execution.

Which brings me to my question:
Is the fact that the HR nor the Cadence target(s) on ANY step in my workout not being shown on the respective Wahoo Plan fields (e.g. “Target bpm” and “Target rpm”) a known bug? (I can’t find any mention of this in the forum). Or am I not setting up my Workout correctly for these targets to show up in their respective fields on the Wahoo?

Cheers

1 Like

for MRC files downloaded from intervals, if you have a Power Target Range (that isnt’t a Ramp) it will output as the average of the Range

eg:

  • 1m 50-100%

will come out in the MRC as “1m 75% FTP”

if it’s a ramp eg:

  • 1m ramp 50-100%
    will come out in the MRC as “1m 50% to 100%” (trainer will increment power periodically, something like 60w/60seconds = 1w per sec

MRC files only support Power Data / Targets. Any Non Power Targets will not get transferred into the MRC file. (It is however in the JSON option - I know this cos I was working on a MRC → JSON parser so that I see if I can migrate my app to using JSON and then also have the HR targets to be used)

AFAIK, i believe the HR Targets / Cadence Targets are for the Garmin Watches / Edge units. I’ve seen them being mentioned in more than a few threads. (also on the recent suunto ones)

3 Likes

Thanks @app4g

Good to know that MRC only supports power.
Sad to know that MRC only supports power.

I guess I will only sync the few Power based workouts for now.
Cheers

What are you trying to do, workout wise for NON-Power workouts? HR Based Workouts? (HR Target? The Trainer won’t know what power to set the resistance to also.)

I’m setting up workouts to do on the road.
They are specific workouts I would normally do on the track (velodrome) as some of them are distance based (e.g. 2 lap efforts), and thought I could continue through the summer season on the road.

I have some workouts that are cadence and/or HR based as well which I do on my rollers (with or without mag resistance depending on the workout). I don’t have a smart trainer.

I see… in that case, it works for suunto and garmin because intervals is pushing the workouts directly to it and in the format which it expects.

ERG/MRC won’t do it for anything other than power.

But if your wahoo supports Cues, you can probably put them into the cues

That is my plan.
I want to test messages and if it works, I’ll just put my HR and/or rpm targets there (it’s basically how I’ve been doing my workouts on the rollers…a timer with messages on my phone).

Otherwise, I like my Wahoo Bolt and don’t want to switch to Garmin.

2 Likes

You and other users need to lean on them to provide an API for uploading planned workouts to compete with Garmin and Suunto :slight_smile:

I am not sure how this fits in with SYSTM though …

5 Likes

We can’t even push SYSTM workouts into their Wahoo head units, this has become a complete joke for Wahoo, I am honestly sick of it.
@david I just tested the python ‘karoosync” to push workouts to Karoo units.
Seems like HAmmerhead now has some kind of API to push workouts to the units. I have one Karoo2 and at least could use that for workouts. Why is it not possible to do directly from Intervals?

1 Like

I believe Training Peaks can push to Wahoo and also Karoo as well IF not mistaken.
but I do not have either of them (only read forums)

That script is using private APIs which is why it requires your Hammerhead username and password. It’s not using an officially supported API and could break at any time. Integrations generate lots of support issues even with official APIs so I can’t do that. Also I would need to store your Hammerhead credentials which isn’t great … that gives complete control over your Hammehead a/c.

Hammerhead uses TP’s “workout of the day” endpoint to pull workouts from TP. I doubt I could persuade them to code similar integration for Intervals.icu.

1 Like

Makes sense. thanks for the explanation

Hi all,

Glad to find answers to questions to popped after two days of testing intervals.icu on Wahoo Bolt (old). Today I tried out the two different formats - .erg and .mrc. Indeed, I was a bit bummed to find that Target RPM is N/A (I still think it’s much more of a bummer or joke that Wahoo doesn’t even allow taking its own workout environment outdoors…).

Also, I noticed that target power LEDs indication worked for the .erg (very handy!), but for the .mrc files, LEDs didn’t work at all during the workout - even for HR.

I would also like to try the text messages trick - do I simply do it like this? https://support.trainerroad.com/hc/en-us/articles/201944204-Creating-a-Workout-from-an-ERG-or-MRC-File

[COURSE TEXT]
600 This is a new message 10
615 This message will show up at 10:15 into the workout 10
[END COURSE TEXT]

?

Thanks and sorry if it seems like being lazy. I used to learn some basic Python and Visual Basic long time ago before I got a serious job, so I’m not really adept at programming… If you are aware of any other solutions, happy to learn!

Best,

Jk

1 Like

if you use intervals to create the MRC/ERG, the cues will appear/get generated automatically.
The format is
time(secs) TAB message TAB duration(secs)

the TAB is important. not a “space”

2 Likes

The correct thing to do is mail Wahoo and put pressure on them to enable API for intervals and others. Right now TrainingPeaks is the only option. That supports HR and Pace. And file upload route only supports power.

2 Likes

Well, yeah… I tried out various text cues on both Wahoo Bolt and Roam. Neither shows any text message.

The format is e.g.:

[COURSE TEXT]
0 Such a nice day to spin like a hamster. 100
120 Test message 1 - short 10
240 Test message 2 - long 50
420 Test message 3 - medium 30
[END COURSE TEXT]

It’s tabs, not spaces, so in principle everything is formatted correctly. Is there anybody out here who actually CAN see course text in Wahoo Bolt/Roam?

@Jk_Herd I found further info elsewhere (Wahoo .plan file format · Issue #1 · ManuelWiese/mrc_tools · GitHub) on the format used in the wahoo .plan files. I also downloaded the wahoo .plan files extracted from a Bolt (see link above) to give me some examples of how they are structured.

I am in the process of creating sample workouts to try and add to my Bolt by simply modifying and renaming one of the files from the link above. I am essentially saving the file as a .plan and then will upload to the plans folder on the Bolt. I’ve created one that uses Power ranges, cadence ranges, and HR ranges…with messages.
e.g. not the whole workout…

=HEADER=
# Provider: TommyBaa

NAME=LACTATE Intervals
# Duration: 100 mins
DURATION=6000

DESCRIPTION=Lactate Tolerance Intervals

=STREAM=

=INTERVAL=
# 20 mins @ 90RPM
MSG = Warm-up
CAD_LO=80
CAD_HI=100
DURATION_SEC=1200
MESG_DURATION_SEC>=1200?EXIT

=INTERVAL=
# 500m Sprint - 500W
MSG = Sprint
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

From what i can tell, you’re not setting up the messages correctly.

If you get to this before me, let us know the outcome!

2 Likes

I thought Wahoo removed this functionality 6+ months ago, are you using an old software version or maybe they brought the ability back.

Edit* Oh happy days they are back!

1 Like

@Tommy_Bal
Could you please paste one example file here ?

I have also elemnt bolt v2 and would like to use own workouts.

And I can create that files either with the linked GitHub sw or just via text Editor or?

Hi @zoboldfuk …sorry for the late reply. I haven’t been looking at the forum for awhile.

Here’s an example workout i created.
I haven’t tested it (summer arrived and I was training outside). But with winter on the way, I’ll try these out in the coming weeks/months.

=HEADER=
# Provider: Name

NAME=LACTATE Intervals
# Duration: 100 mins
DURATION=6000

DESCRIPTION=Lactate Tolerance Intervals

=STREAM=

=INTERVAL=
# 20 mins @ 90RPM
MSG = Warm-up
CAD_LO=80
CAD_HI=100
DURATION_SEC=1200
MESG_DURATION_SEC>=1200?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# 500m Recover - 120W
DISTANCE_M=500
CAD_LO=80
CAD_HI=100
MESG_DURATION_SEC>=20?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# 500m Recover - 120W
DISTANCE_M=500
CAD_LO=80
CAD_HI=100
MESG_DURATION_SEC>=20?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# Long Recover - 100W
HR_HI=157
HR_LO=130
DURATION_SEC=720
MESG_DURATION_SEC>=720?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# 500m Recover - 120W
DISTANCE_M=500
CAD_LO=80
CAD_HI=100
MESG_DURATION_SEC>=20?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# 500m Recover - 120W
DISTANCE_M=500
CAD_LO=80
CAD_HI=100
MESG_DURATION_SEC>=20?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# Long Recover - 100W
HR_HI=157
HR_LO=130
DURATION_SEC=720
MESG_DURATION_SEC>=720?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# 500m Recover - 120W
DISTANCE_M=500
CAD_LO=80
CAD_HI=100
MESG_DURATION_SEC>=20?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# 500m Recover - 120W
DISTANCE_M=500
CAD_LO=80
CAD_HI=100
MESG_DURATION_SEC>=20?EXIT

=INTERVAL=
# 500m Sprint - 500W
DISTANCE_M=500
PWR_LO=500
PWR_HI=500
MESG_DURATION_SEC>=10?EXIT

=INTERVAL=
# 20 mins @ 90RPM Go Home
CAD_LO=80
CAD_HI=100
DURATION_SEC=1200
MESG_DURATION_SEC>=1200?EXIT