[IMPLEMENTED] Push workout to Wahoo

This link is broken

I also bumped an earlier feature request:

I noticed a bunch of software improvements over the last months, but a possibility to push planned workouts to a Wahoo unit through an open API has still not been implemented (apart from the proprietary Training Peaks “workout of the day”). This is much easier with units from your competitors!

And got a reply:

Thanks for following up with your feedback. I can confirm that this feature is currently unavailable. However, I am happy to link this ticket to a feature request to demonstrate demand. Our developers see these feature requests when planning firmware updates for our products.

I really hope their developers listen - keep wishing!

2 Likes

I have communicated with Wahoo over this and in fact when the update made file (workout) transfers available again after having been removed I was pro-actively contacted by Wahoo.

Commercially as they own SYSTM I see why they’d want to ring-fence their eco-system so I was pleased.

I have had success having transfered files (workouts) from my PC to the Wahoo treating it as an external USB stick/HDD.

You do then have to select the workout you’d planned so not as sweet an integration as when I was on TrainerRoad.

Hope that helps if people haven’t transfered succesfully.

2 Likes

Any update on this issue/function?

2 Likes

I’ve just send a feature request to wahoo. The API still doesn’t support workout plans :frowning:
https://cloud-api.wahooligan.com/#plans

2 Likes

Hi,

I made a piece of software which eventually allows you to push structured workouts from Intervals to Wahoo.
You will need to have basic\free (paid also fine) TrainingPeaks account (it allows planning workouts for today and tomorrow) and authorized on your Wahoo unit.

To run the app, you need Java 21 and the application jar. How to install Java you can find on the Internet.

  • The application jar you can download from release page.
  • Execute the jar java -jar tp2intervals.jar
  • Open web page http://localhost:8080

Additional information, code, docker image, etc you can in repo

Contact me if you have any questions

edited

5 Likes

Thanks for this but could you please give a detailed guide of exactly how to this :pray::pray:

I have no idea what ‘start the docker container’ means or how to do this. How and where do I do this?

Thanks!! Will be awesome if handy to do.

1 Like

Hi,

I’ve updated readme and added another way to run the app. Also added how to configure the app in the first run.

tl;dr

  1. Install Java version 21
  2. Download jar from here
  3. Execute it java -jar tp2intervals.jar
  4. Open web page http://localhost:8080

Let me know if you have any success.

4 Likes

Hi,

I tried following the instructions but I’m getting this error message:

Is there something Im missing?

Thanks,

Highly probably your configuration for TrainingPeaks is wrong.

In configuration, you need to put all this (key with value) long string

I just released v0.0.3 where slightly updated error reporting

1 Like

Thank you so much. I was able to get it working. I was using the wrong key.

Almost 4 years gone since the original request (April 2020), Wahoo still making life difficult for all their users. Disgraceful…

5 Likes

Hi. Thank you for your effort! I tried your script yesterday because I needed to sync interval’s planned workouts to TP. It synced without error but for some reason only 2 days in calendar. After 2 days of training I opened tp2intervals again but I got “Internal Server Error” by clicking “Submit” and some logs in console:

2024-02-04T18:28:11.149+03:00 ERROR 759839 — [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet
[dispatcherServlet] in context with path threw exception [Request processing failed: java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null
at org.freekode.tp2intervals.infrastructure.intervalsicu.workout.IntervalsWorkoutDocDTO$StepValueDTO.mapTargetUnit(IntervalsWorko
utDocDTO.kt:36) ~[!/:0.0.5]
at org.freekode.tp2intervals.infrastructure.intervalsicu.workout.IntervalsToWorkoutMapper.mapTarget(IntervalsToWorkoutMapper.kt:9
8) ~[!/:0.0.5]
at org.freekode.tp2intervals.infrastructure.intervalsicu.workout.IntervalsToWorkoutMapper.workoutStepTargets(IntervalsToWorkoutMa
pper.kt:84) ~[!/:0.0.5]
at org.freekode.tp2intervals.infrastructure.intervalsicu.workout.IntervalsToWorkoutMapper.mapSingleStep(IntervalsToWorkoutMapper.
kt:59) ~[!/:0.0.5]
at org.freekode.tp2intervals.infrastructure.intervalsicu.workout.IntervalsToWorkoutMapper.mapToWorkoutSteps(IntervalsToWorkoutMap
per.kt:45) ~[!/:0.0.5]
at org.freekode.tp2intervals.infrastructure.intervalsicu.workout.IntervalsToWorkoutMapper.mapToWorkout(IntervalsToWorkoutMapper.k
t:25) ~[!/:0.0.5]
at org.freekode.tp2intervals.infrastructure.intervalsicu.workout.IntervalsWorkoutRepository.getPlannedWorkouts(IntervalsWorkoutRe
pository.kt:52) ~[!/:0.0.5]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]

and so on .

This is only hapening with “Plan Workout” submitting. “Copy Plan” works without error (“Plan copied” green message). So I doubt there is something wrong with my cookies/keys settings. It looks like TP banned me after first two synced calendar days, but I’m not sure. Tried to clear cookies on TP and relogin with updating Production_tpAuth in script config, also tried deleting tp2intervals-db.mv.db and configure it from scratch. No success. V0.0.5

Hmm…workout probably has a step target which app can’t handle yet.
Can you send me steps of workout(s), so I can try to reproduce the error?

Well I have 27 planned workouts in Interval’s calendar, 3 of them automatically marked as completed (since it synced to Strava). Not sure what to send you. You can find this whole plan in Interval’s library, it’s named “4wk FTP booster”, first two workouts of this plan was synced to TP successfully, but no more.


Here is 3rd day’s workout for example:

The challenge is to complete 4 short, high intensity intervals of increasing power, after first opening with a steady 15min Tempo effort.

By working aerobically in the early 15min effort you will be improving the ability to deliver oxygen to the working muscles and preserve your carbohydrate stores for the finishing maximal efforts.

Can you achieve the same max power in both sets?
- Varying cadence during warm up. 5m 50%

5x
- 30s 65% 80rpm
- 30s 80% 95rpm

- 3m 50% 85rpm
- maximal efforts coming up. 15m 81%
- 1m 150% 100rpm
- 1m 50% 85rpm
- 30s 170% 100rpm
- 30s 50% 85rpm
- 15s 200% 110rpm
- 45s 50% 85rpm
- 10s 200% 110rpm
- 5m 50% 85rpm
- Settle into your tempo effort. 15m 81% 90rpm
- 1m 150% 100rpm
- 1m 50% 85rpm
- 30s 170% 100rpm
- 30s 50% 85rpm
- 15s 200% 110rpm
- 45s 50% 85rpm
- 10s 200% 110rpm
- 5m 50% 85rpm

As I understand there is no way to specify date range to point what exactly days to sync with TP in “Plan workout” submitting? Is it trying to sync whole Intervals’ calendar?
I just created new account on TP and altered Production_tpAuth in config, still getting Internal server error, it’s odd.

Btw, today I uploaded workout (.mrc) manually to my Bolt via USB in plans/ folder, as I did before, and noticed that probably after last fw update(s) all files named “SD CARD PLAN” now instead of orignal file names, so frustrating. Also .mrc files in Bolt does not support watts in pre-interval countdown 10s-notification (it shows only % of FTP) and does not show text cues/guidelines, where I can write cadence and other useful info about upcoming intervals. None of these problems with Bolt’s TrainingPeaks auto-sync.
Meh it feels like we all in this thread using wrong device :frowning:

The app synchronize only today and tomorrow workouts.

I think I found the problem. Workout 04 - Endurance has target as power zone. ATM the app can’t plan such workouts which have targets as hr\power zones.
I’m gonna take a look next week at this, this is fixable, just not very funny change.

1 Like

A BIG thanks to you sir! I just replaced “z2” with “41-65%” and it synced successfully!
So glad I can stay further with Intervals.icu, love this service.

2 Likes

Hey, thanks you soo much. This is a great step. Kinda unbelievable that it had to come to this. Wahoo not getting of their butt.

works great so far. Only workout with time and % work right now, right? for example

  • Warm Up 20m 56-75%
    Threshold Intervalle 4x
  • 8m 100%
  • 4m 50%

only problem right now is that the submit fails every time if I have a workout for tomorrow planned as well:

2024-02-07T01:44:06.815+01:00 ERROR 23828 — [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path threw exception [Request processing failed: feign.FeignException$FeignClientException: [402 Payment Required] during [POST] to [https://tpapi.trainingpeaks.com/fitness/v6/athletes/4362630/workouts] [TrainingPeaksApiClient#createAndPlanWorkout(String,CreateTPWorkoutDTO)]: ] with root cause

»402 Payment Required« makes me think this is a limitation of my free TrainigPeaks account. I can also only plan a workout for today inside of TrainingsPeaks calendar, not tomorrow. Would it be possible to only push today’s workout? Right now I have to remove every workout from tomorrow inside Intervals.icu and then submit.

It would also be great to only push Cycling workouts? don’t really need my Gym and Swim Workouts in Trainingpeaks (again have to clear everything I have planned tomorrow right now…)

Hi,

In version 0.1.0 you can plan workouts with power zones targets. And I’m making an update where any type of target can be planned (FTP%, Watts, Zone). It all will be converted to FTP% (it’s single thing which TP accepts in terms of power for workouts) on TrainingPeaks no matter what you have in Intervals.

Hm…that’s odd. I always thought TP allows plan workouts for tomorrow. Can you make a screenshot which workouts you have today and tomorrow where you have this error?

Yeah, I can figure out something quick.

Good idea. I will add filter to the UI.

1 Like

I just released v0.1.1 where I added buttons to Plan Today and Plan Tomorrow workouts. Also added filter for activity types.
You can download it here https://github.com/freekode/tp2intervals/releases/download/v0.1.1/tp2intervals.jar

One thing to mention. If you are updating from version 0.0.x, you will need to configure the application again, because I migrated database to a new engine.

Let me know, if you have any issues.

3 Likes