Sync Wahoo SYSTM calendar with intervals.icu

quick question, in the case mentioned on the attached how its possible to connect the planned with the done activity?
I suppose the issue is with the “Wahoo SYSTM:” prefix on the completed activity.

2 Likes

Is that one ride or 2 rides you did for the day, your layout looks different to mine? I don’t know how intervals.icu maps a completed workout to a planned one but given the percentage it does seem to map the workout correctly? @david might be able to shed some light here.

Here’s what it looks like for me, if I click on the completed workout I can see the planned workout at the bottom and the planned power in the purple power graph. Even with the name containing “Wahoo SYSTM” which is not in the planned workout name.

It’s late, should’ve looked a bit closer: looks like it’s one completed ride and one planned ride, which is the same workout as the completed one right?

The completed ride has a percentage so it seems to be mapped correctly to a planned workout. Did you happen to have duplicates events for the day that you know of?

Looking forward to using this.

Question: are there any characters that might be forbidden in the password? I ask because the first time I filled everything out and ran it I got several lines of error messages.

I nuked the cfg file and started from scratch. If I try and run it without updating the default it tells me I need to add my user credentials as it should. Cool.

I then update just my username and try again. Now it says that there’s an invalid Wahoo Systm username or password. Also cool.

And then I go in and update the Wahoo password and try again. Then it throws errors.

File “/usr/lib/python3.8/runpy.py”, line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File “/usr/lib/python3.8/runpy.py”, line 87, in _run_code
exec(code, run_globals)
File “/usr/local/lib/python3.8/dist-packages/suffersync.py”, line 451, in
main()
File “/usr/local/lib/python3.8/dist-packages/suffersync.py”, line 249, in main
SYSTM_PASSWORD = config.get(‘WAHOO’, ‘SYSTM_PASSWORD’)
File “/usr/lib/python3.8/configparser.py”, line 799, in get
return self._interpolation.before_get(self, section, option, value,
File “/usr/lib/python3.8/configparser.py”, line 395, in before_get
self._interpolate_some(parser, option, L, value, section, defaults, 1)
File “/usr/lib/python3.8/configparser.py”, line 442, in _interpolate_some
raise InterpolationSyntaxError(
configparser.InterpolationSyntaxError: ‘%’ must be followed by ‘%’ or ‘(’, found: ‘%W9k’

Any thoughts?

UPDATE: Yep, removed any non-alpha/numeric characters from the password and it worked.

1 Like

I just synced my first block from Systm, but I see this being a minor issue. Maybe it would be helpful to have a user configurable prefix in the config file? I personally prefer to have specific prefixes for activities depending on the source.

That one should have paired. Not quite sure why it did not. Anyway you can manually pair by dragging the workout onto the activity (or the other way round) which I have done.

2 Likes

I’m going to give this a go.

1 Like

Good to see you got it sorted, thanks for letting me know. It wouldn’t be too much work to include this so I’ll add it to the next version.

Hi,

Sounds like a great app.
Any tips on how to install on a MacBook pro? My IT capacities are limited. :wink:

The app uses Python, so make sure that’s installed. If you are running a recent version of MacOS, Python3 should already be installed. If that’s the case, you can try this:

python3 -m pip install --upgrade pip
pip3 install suffersync
suffersync

That will create a suffersync.cfg file, add your credentials to that file and run suffersync again in order to sync the workouts.

1 Like

Do you see any issue putting this on a cron job, say on a weekly schedule?

That should be fine, just make sure to put in the end date in the config file far enough into the future.

1 Like

Thanks for the explanation.
I have an old version so I think I will need to install python.

Cheers
r.

For those that happen to use a Karoo bike computer: Hammerhead released a firmware update this week that enables syncing of workouts to their platform using ZWO files and not just via Xert/TP.

With that I updated my karoosync app which works similar to this one, allowing one to send intervals.icu workouts to a Karoo bike computer.

I’m now able to get my Wahoo SYSTM workouts to my Karoo bike computer, something Wahoo hasn’t done yet for their own devices so I’m pretty happy with that.

3 Likes

It seems to work, but I get some errors like this:

Uploaded 2022-04-14: Cadence Builds (Ride)
Error: 500 Server Error:  for url: https://intervals.icu/api/v1/athlete/i20162/events
the JSON object must be str, bytes or bytearray, not NoneType
Something went wrong: [Errno 2] No such file or directory: './zwo/2022-04-15_Trails_Cruising.zwo'

I think maybe this future training plan was added long time ago. Maybe that workout is not available in SYSTM anymore?

It’s looking for a workout called ‘Trails Cruising’ but I can’t find that workout in the current Wahoo SYSTM library, was that a run? It might indeed be deleted but it’s still trying to download it. I’ll improve error handling to just skip the workout in case that happens.

1 Like

it’s not on the library. it’s like “go ride your MTB outside”

1 Like

I’ve made changes based on the feedback above, thanks for that.

Version 1.4.1 is out which avoids uploading invalid workouts. Passwords with special characters should also work now.

3 Likes

Will update.

Would it be feasible to add a configurable prefix for synced workouts? Meaning adding a configurable field in the config file that will be prepended to the workout name from SYSTM.

Workout name in SYSTM could be “Recharger”, the prefix configured as "Wahoo SYSTM: ", and the workout name as synced would be “Wahoo SYSTM: Recharger”.

Thanks.

I’ll add it to the list, although I don’t have much time to work on this as I started a new job. Once you complete the workout, it’ll use whatever you have set in Strava or other platforms for the name though and overwrite it anyway.

1 Like