[IMPLEMENTED] Push workout to Wahoo

Got a reply from Wahoo
image

Thanks for raising a request, as it says the more it is requested the higher up the priority list it goes.

Can we determine what we actually require to do this? (Not used my wahoo for structured training before so leaning on you guys/gals)
I don’t think they have the data architecture to do future workouts as AFAIK there is no calendar.
As such do we go down the ‘Workout of the day route’ or do we just want to be able to upload planned workouts and leave the scheduling of uploading/removing to our/intervals side?

Hope that is clear?

Email - WahooAPI@wahoofitness.com.
Request Ticket - https://support.wahoofitness.com/hc/en-us/requests/new

Skeleton

Hi there,

Could I please request the ability for the Cloud API to support planned workouts.
This feature is severely lacking and creates a much greater headache compared to Garmin to facilitate structured training.

A successful resolution includes:

  • Allowing POST requests to upload planned workouts

Thanks,
xxxx

Request I've raised thus far (hopefully find the best channel to send our requests other than the email)

Hi there,

I enjoy the custom alert feature on my Wahoo, however the placing of the Dismiss button being linked to the middle one is a little frustrating and I propose it be moved to the left button.

The reason being is I link the Wahoo to my 12sp Di2 hoods, this doesn’t control the middle button so if I’m descending I have to take my hands off the bars to press the physical wahoo button rather than simply using the hoods button.

Please let me know this request has been received and the likelihood of being implemented.

(Also, could you point me in the best direction to request Cloud API requests? I find it quite ridiculous that there is no automated solution to push planned structured workouts to the device. I know I’m not alone in this as there are many that love the device but considering a switch to Garmin for this feature)

Thanks,
Ben

2 Likes

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
)