Sync Wahoo SYSTM calendar with intervals.icu

I just would like to get back to you and let you know that I found my “error/problem”.
In my Intervals calendar I had a planned workout for the given date (24 February) because of that workout, the suffersync stopped.

I removed all planned workout and suffersync works now:


1 Like

anyone have also a message “Failed to upload to Garmin” due to more than 50 steps?
Any way to change this (a part to do it manually)?

The 50steps is a Garmin limitation. You’ll need to change the workouts (manually)

is that your question?

1 Like

Yes, I do it manually. But is there another solutions?

@Bakermat Where did you get the API definitions of Sufferfest/Systm ?

Is there an easy way to delete multiple planned activities (imported by suffersync)? I know intervals.icu has a feature for training plans with “Delete & Others”, but that options doesn’t seem to be an option for imported activities.

1 Like

Awesome script! All activities synced except for biking ones. I think each one errored with the following:

‘charmap’ codec can’t encode characters in position 245-249: character maps to
Something went wrong: 422 Client Error: for url: https://intervals.icu/api/v1/athlete/i47???/events

(I have obfuscated the url)

Is this todo with biking now having indoor and outdoor versions? I have found a folder with all the bike zwo files in but they are all 0byte.

Anything I can do to brink the bike workouts in?

Thanks again

You can use the “Clear week” option to delete a week at a time:

Or delete all future planned workouts at once:

2 Likes

I seemed to have sorted it by adding utf-8 encoding to the read and write of the zwo file so the 2 lines look like this:

            f = open(filename_zwo, "w", encoding='utf-8')

            zwo_file = open(filename_zwo, 'r', encoding='utf-8')

It fixed it for me and hope the above is of use to others.
It still fails on the race day event (final day of programme) but that’s fine.

Thanks very much for the great script!

1 Like

Hey, is it possible to set a default time for the workout to be added?
Right now there is no time in the workout details:

When using the export calender feature (intervals.icu) it could be helpful, when the workout will be shown at a fixed time at day instead of all day. I guess most people do their sessions more or less at the same time of the day.

That timing was added for sorting order in the calendar as some users were having multiple workouts in a day and wished to have the order the same as their workout timing.

Which timing was added? There is no timing except the “all day” timing.

The one you placed in a Red Box. That was newly added to indicate when the workout should start at.

Work’s kept me busier than expected so apologies for the delay in responding here.

  • @oschmidt, I’d have to check the API calls involved but that might be possible as an optional item in the configuration. However if one has multiple activities planned on a day, they will all be scheduled at the same time which is perhaps what @app4g is referring to.
  • @Vilbs, thanks for that - I’ll do some testing and might force UTF-8 encoding in future versions to avoid this from happening.
3 Likes

This is so cool, thanks for taking the time to create it. Ran it from the iSH app on my iPad, worked perfectly. :pray:

1 Like

Hi,
Can you tell me which app is it? I am interested in running this on my ipad instead of my mac.
Cheers,
r.

Sure, here you go:
iSH Shell on the App Store (apple.com)

After installing the app, run a few commands to get suffersync working:

apk upgrade
apk add python3
apk add --update py-pip
pip install suffersync

Then as per the getting started notes just edit the suffersync.cfg file and add your intervals.icu athlete id & api key, and your Wahoo username & password, and you should be good to go.

2 Likes

Hi ,
i have another question . As these endpoints are not openly exposed by Wahoo and Documented in the Api Documentation . Is this not against copyright to draw Workout data from these sources ? Dont get me wrong , its great to be able to sync Systm with Intervals , but it could be a problem , no ?

Unfortunately, I got a similar error message:

Blockquote
File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/suffersync.py”, line 458, in
main()
File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/suffersync.py”, line 282, in main
start_date_local = datetime.strptime(start_date_local, “%Y-%m-%dT00:00:00”).date()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/_strptime.py”, line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/_strptime.py”, line 349, in _strptime
raise ValueError(“time data %r does not match format %r” %
ValueError: time data ‘2023-03-06T08:00:00’ does not match format ‘%Y-%m-%dT00:00:00’

I’ve also scheduled some workouts manually, but want to sync SYSTM workouts in addition. Why is it conflicting?

Just glancing at this it looks like this is the issue, should be %Y-%m-%dT%H:%M:%S to allow the 8 through

2 Likes