Support for old, non-ANT+ trainers and bikes

(F udgy Pumpkins (B-) kiss) #21

(Pim Hertogs) #22

Couple of updates

  • changed timing on Tacx read/writes seems to have an impact on power updates. With the maximized 48 bytes messages, it seems like power is updated with less lag.

  • analyzed the ANT page sequencing and seems to be ok. It seems like Zwift is not sending any other message than road resistance. It does start sending this after sending the specific trainer data page 0x19. However, the requested user config is also never returned.

Starting to think that maybe there is dependency to the manufacturer and product IDs? Any hints appreciated.

(F udgy Pumpkins (B-) kiss) #23

I agree that it may have to do with manufacturer and product ID.  To that end, I am going to capture the output of a BKool trainer, the wheel off Tacx ANT+ trainer and a Cyclops Magnus Smart. (I have friends who have these trainers).  

I did try to ask Zwift tech support this same question but they blew me off.

Anyone else know?

(Pim Hertogs) #24

Another interesting tool is SimulANT+ which you can download from

It is a simulator which can be used to simulate ANT+ devices. It is really useful play around with configuration parameters to see the effect of those (or not:-)).

I played around with it to simulate a FE-C device and was able to get Zwift to sync with that. But again, only road resistance pages…Haven’t tried different manufacturer ID settings yet.

(Mark Haney) #25

This explains why the grade never is changed by Zwift on the TACX trainer.  The road resistance would appear as a slight change except when in ERG mode, then the changes were pretty drastic.  Does Zwift actually send a grade message to the newer TACX trainers that are considered compatible with ZWIFT?

(F udgy Pumpkins (B-) kiss) #26



The Zwift DOES send slope commands.  So if you go uphill you will get increased resistance.  Also, my bridge tool estimates required wattage based on your speed, rolling resistance slope and weight.  The only two things Zwift sends me are slope and rolling resistance.  I estimate wind resistance but the current implementation can’t take advantage of drafting etc.  I also hard coded in my weight.  If you have been using it, you might be having a tough time.  I weigh 90kg plus 9-10kg for my bike. :)  

So if you go uphill, you will notice, but if you draft, you will not feel anything.

So, as I stated before, I am trying to get zwift to send me ALL data, not just rolling resistance and slope.


(F udgy Pumpkins (B-) kiss) #27

Oh, and the speed is acquired from the trainer, so it is somewhat disjoint from Zwift, as Zwift does a math formula to calculate your speed based on the wattage you put out, but I am reading the speed directly from the trainer.


(Pim Hertogs) #28

Hey Douglas, I also made a patch to take weight from commandline and pass that on into the user configuration. So as long as user configuration is not set, the correct weight is applied. I realized only yesterday I had to push a lot of watts to get up to Box Hill as I am 82 kg :slight_smile:


Will see how I can create a branch in your git. Would it be possible to get write access?

(F udgy Pumpkins (B-) kiss) #29

Pim, I need your email to add you as a collaborator on git.


Not sure if there is a PM here, but if so you can PM me your email.

(Pim Hertogs) #30

Dont think there is PM capabilities here. Can you reach out to pim555 in Git? Or alternatively Pim Hertogs (4C Insights) in LinkedIn?

(Dave Miller) #31


Great to hear that your still out there thinking about the original group of VR riders.  You were always so helpful with Netathlon support.  I go all the way back to Ultracoach VR!

Yes, I would very much be interested in getting my old Tacx I-Magic trainer to work with Zwift.  I ended up buying a Tacx Smart Trainer, but still would like to get my old I-Magic trainer to work.  That way, my spouse or a friend could also ride.  I would also like to get my new Tacx Smart trainer to work with Netathlon as I still think it is a good solution.


(Paul) #32

Wow, Dave Miller, that’s a name from back in the day! Thanks for your kind words.

This bridge app that I’m working on uses the NetAthlon dll responsible for handling communications with bike trainers. So far I’ve only tested it with the (very old) Schwinn Velodyne because it is the only trainer I currently have. The Velodyne communicates via a serial port and it together with my bridge app works rather well with Zwift. Theoretically, the bridge app will also work with your old Tacx trainer even though it connects via USB instead of a serial port, as long as you have both the NetAthlon dll and the old Tacx dll, both of which were installed with NetAthlon. I have some work left to do before I can release it to the wild, but I’ll keep you posted.



(Dave Miller) #33

That’s great Paul.  Thanks for breathing new life into my old trainer.

(Mickael ROUILLERE) #34

Hi all,

My name is Mickael and I’m the owner of an old (but still perfectly working :wink: )1932 head unit.

After spending some time fiddling with the power curves of the Antifier bridge with not much success, I tested your AntBridge today (running on VirtualBox/Ubuntu 16) to ride Zwift both in Single Ride and ERG mode and it did work very well during these 2 small rides (have not tested these to the limits though in terms of slope or power).

In order to get it to work I just had to do a quick modification in the fortius.cpp file in order not to restrict the buffer to 24 or 48 bytes (mine was always 64) but overall very good work so just wanted to congratulate all of you for the smashing work.


(Pim Hertogs) #35

Hi Mickael,

Interesting to hear that you always receive 64 bytes. Have seen this from other 1932 users as well while I always get 24or 48. By optimizing wait cycles between reads/writes I can get close 100% 48 byte reads.

I too appreciate Antifier which works pretty well but for me AntBridge is even working better as it seems to give more accurate power control in Zwift. You might want to give that a try too.




(Mickael ROUILLERE) #36


I would not say that I’m systematically receiving 64 bytes but I was often getting the exception message before I removed the 24/48 bytes constraint.

If you want me to drill further I’m happy to add couple of traces here and there and share my results.


(F udgy Pumpkins (B-) kiss) #37


Thanks for the comments.  Glad it works for you.  



I added you to the github repo.  Did you get access?  Did you push your changes?  I will change the code to allow 64 bytes and push that change tonight.



(Pim Hertogs) #38

Hey Doug, I pushed my changes into a separate branch last Sunday. Can you pls check if you are able to access?

(F udgy Pumpkins (B-) kiss) #39

I will.  I have not done anything with the code for a couple weeks.



(F udgy Pumpkins (B-) kiss) #40

Pim.  I merged all your changes.  Nice work.  I will do a full test next work, but it looks nice.