Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Genius T2021 Brake (~46, 117) #101

Open
WouterJD opened this issue Aug 1, 2020 · 162 comments
Open

Support for Genius T2021 Brake (~46, 117) #101

WouterJD opened this issue Aug 1, 2020 · 162 comments

Comments

@WouterJD
Copy link
Owner

WouterJD commented Aug 1, 2020

Hi Wouter, from Melbourne, Australia

  • I have a Genius T2021 Brake (Non-smart TACX proprietary ANT+), and an original Tacx 2018 Dongle. I am currently running TTS 4.22.5.
    I am interested in liberating my trainer a little to experiment with some of the newer software around. Surely if the Vortex can work, then the Genius must be possible too at some point. I would be happy to try and test any ideas you have.
    Interestingly, I decided to jump in and uninstall the "Jungo" TACX USB drivers, and install the "libusb-win32-1.2.6" drivers instead. TTS4 still works for me! (Windows 10)

FortiusANT is not registering the trainer yet though.
Any tips to try and get it working?

Thanks

Originally posted by @Sigfreid74 in #14 (comment)

@WouterJD
Copy link
Owner Author

WouterJD commented Aug 1, 2020

To start with, please send some photos of the essentials, like headunit and connectivity.

I have the impression you have a USB-connected trainer...

@Sigfreid74
Copy link

Sigfreid74 commented Aug 2, 2020

Thanks for the quick reply Wouter, I'll try and help out where I can -

The "T2020 i-Genius" brake is one of the pre FE-C ANT connected trainers using the TACX proprietary protocols - (like the i-Vortex and the Bushido). No direct USB cable connection like the Fortius. I am using the TACX - supplied T2018 USB ANT dongle.

There is a wireless ANT headunit which is purely optional for use in TTS4, it is only used to control the cursor on the screen while you are on the bike.

There is some information about the Genius ANT interface here:
https://github.com/fluxoid-org/CyclismoProject/wiki/Tacx-Genius
specifically: Device type: 0xd3 (sometimes referred to as "0×53")

I have installed the libusb-win32 drivers and TTS4 can still communicate with the trainer and other ANT devices (like the speed/cadence sensor and HRM). I uninstalled the Jungo USB ANT drivers that came from TACX.

I have installed Python, upgraded PIP and then installed the requirements.txt dependencies. Then I ran ExplorANT.bat and it was not detecting the Genius Brake, but it was detecting the HRM and Garmin Speed/Cadence sensors.

WP_20200802_001
WP_20200802_003

@WouterJD
Copy link
Owner Author

WouterJD commented Aug 2, 2020

My first thought: you do not need libusb at all.
Try the -t i-Vortex flag which causes FortiusANT not to use USB but pair with i-Vortex.

If the pre FE-C devices use the same protocol it should work and in that case read for 'i-Vortex' "Tacx proprietary pre FE-C device".

After your confirmation I will come up with some better name than that.

@WouterJD
Copy link
Owner Author

WouterJD commented Aug 2, 2020

PS I see that -t is not yet wiki-documented😝

@Sigfreid74
Copy link

Hi Wouter - sorry for the delay - I thought I replied yesterday but something must have gone amok...
I tried the -t I-Vortex tag for ExplorANT and FortiusANT and no response so far. The Ant stick is working as ExplorANT picking up the HRM and Garmin speed/Cadence Sensors.
I was wondering if you were using code from the ANT.h file from GoldenCheetah to find the i-Vortex.? it specifies the Ant TYPE as "0x3d" or "61", the frequency is 0x42 (66) and the period is 0x2000 (8192)
According to the TotalReverse analysis of the ANT protocol for Genius - the ANT Device Type is "0x53" or "83", the frequency is 0x3c (60) and the Period is 4096 (0x1000). Can we try changing these values in your code?

@WouterJD
Copy link
Owner Author

WouterJD commented Aug 5, 2020

Sure, use the .py and .try😊
The numbers in the code have been tested for i-vortex and work.

@Sigfreid74
Copy link

My first time doing this - I created a fork and started to change ANTDongle.py. That should effect ExplorANT? I will check the results tonight.

@WouterJD
Copy link
Owner Author

WouterJD commented Aug 6, 2020

Succes!
I'm curious whether you will get things work; if not we can ask TotalReverse for assistence!

Regarding constants; I tend to define things once - so it affects ExplorANT as well.

@Sigfreid74
Copy link

No luck so far. I tried changing the lines in AntDongle.py that referred to DeviceType, Frequency and Period to the Genius values - no detection of the genius. Still picking up the Speed/Cadence meter though. I think we will need a higher power to help out. TotalReverse is seem to be needed on the case.

I tried to figure out how to get Wireshark working with Ant using this
https://github.com/jovial/wireshark-ant and also using a program called USBPCAP with wireshark
but I don't really know what I am doing: I will need to try some more with this. Thee purpose was to try and capture some of the traffic the genius produces - I think this is how the reverse engineering experts do it?

@WouterJD
Copy link
Owner Author

WouterJD commented Aug 6, 2020

Do you have a non-Tacx application that pairs with the Genius?

@Sigfreid74
Copy link

No only TTS4

@Sigfreid74
Copy link

I have just registered with ANT to log into the website so I can download ANTWARE . Don't know if it will help, but I might as well try.

@WouterJD
Copy link
Owner Author

I do not know. Mind that Tacx has deliberately scrambled the interface, so it's a matter of searching.

@WouterJD
Copy link
Owner Author

According to the TotalReverse analysis of the ANT protocol for Genius - the ANT Device Type is "0x53" or "83", the frequency is 0x3c (60) and the Period is 4096 (0x1000). Can we try changing these values in your code?

Did you try to implement this in the .py code?
What does "Still picking up the Speed/Cadence meter though." mean?

Perhaps a good idea to send the -d127 tracefile, I will then assist to interpret

@Sigfreid74
Copy link

Sigfreid74 commented Aug 12, 2020

Did you try to implement this in the .py code?

I did try to change the values in AntDongle.py that referred to DeviceType, Frequency and Period to the Genius values
So far - no luck detecting the Genius with ExplorANT

What does "Still picking up the Speed/Cadence meter though." mean?

ExplorANT finds the Garmin Speed/Cadence Sensor on my bike.

I will use the -d127 option and send the file through.

@WouterJD
Copy link
Owner Author

The logfile appears to set the correct parameters

11:04:07,594: FortiusANT receives data from an ANT+ Tacx i-Vortex (VTX Controller), any device
11:04:07,594: SlaveVTX_ChannelConfig()

according to the the quoted values from TotalReverse as you mention above (PS: what is the exact source?)

Searching for "ch=4" gives no activity at all.

You work the same way as I did to get the i-Vortex active; set the parameters and see whether I received some data.
Only when the correct figures were all set I received response.
I have no sniffers and/or network systems to see what is "in the air".

Try to drop a question to TotalReverse on this subject, perhaps (s)he can assist?

I'll be offline next 10 days.

@Sigfreid74
Copy link

Sigfreid74 commented Aug 13, 2020 via email

@mikeymclellan
Copy link

mikeymclellan commented Sep 28, 2020

Just chiming in on this as I've just bought one of these second hand and would like to get it working with Zwift.

I think I've changed the correct parameters for the Genius: mikeymclellan@b783dfc

And this is the debug output from python3 ./FortiusAnt.py -t i-Vortex -d127

23:41:26,693: FortiusANT started
23:41:26,693: -d 127 (0b1111111)
23:41:26,693: -H None
23:41:26,693: -p 1.0
23:41:26,693: -t i-Vortex
23:41:26,693: ------------------
23:41:26,717: GetDongle - Try dongle: manufacturer=Dynastream Innovations, product=ANT USB-m Stick, vendor= 0xfcf, product=0x1009(4105)
23:41:27,248: Dongle - Using Dynastream Innovations dongle
23:41:27,248: Tacx   - Pair with Tacx i-Vortex and Headunit
23:41:27,248: AntHRM - Heartrate expected from Tacx Trainer
23:41:28,356: FortiusANT broadcasts data as an ANT+ Controlled Fitness Equipent device (FE-C), id=57591
23:41:28,506: FortiusANT broadcasts data as an ANT+ Heart Rate Monitor (HRM), id=57592
23:41:28,657: FortiusANT receives data from an ANT+ Tacx i-Vortex (VTX Controller), any device
23:41:28,839: FortiusANT receives data from an ANT+ Tacx i-Vortex Headunit (VHU Controller), any device
23:41:29,021: FortiusANT broadcasts data as an ANT+ Bicycle Power Sensor (PWR), id=57596
23:41:29,173: FortiusANT broadcasts data as an ANT+ Speed and Cadence Sensor (SCS), id=57595
23:41:29,344: Ctrl-C to exit
23:41:29,344: Tacx   - Pair with Tacx i-Vortex and Headunit
23:41:29,345: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:30,359: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:31,371: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:32,380: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:33,394: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:34,405: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:35,419: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:36,429: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:37,442: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:38,455: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:39,463: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:40,471: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:41,481: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:42,493: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:43,506: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:44,516: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
23:41:45,530: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
^C23:41:45,605: Stopped
23:41:46,106: FortiusAnt ended

I've attached the logfile FortiusANT.2020-09-28 23-41-26.log

Is what I'm attempting to do correct? I'm happy to get more involved and read through the code more, just thought I'd check I'm on the right path.

[edit]

Also attempted the updated values from fluxoid with no luck. I changed to reusing the DeviceTypeID_VTX constant, for now, as it's used in ExplorAnt.py.

@mikeymclellan
Copy link

There's a little more explanation of the different device ids in the TotalReverse Wiki, it relates to whether you include the pairing bit or not. I'm not really sure what this means, but either way I don't seem to have any success.

@mikeymclellan
Copy link

BTW here's a pcap file of the USB data when starting and connecting to the brake using TTS4 captured with Wireshark
tacx1.pcapng.zip
.

@mikeymclellan
Copy link

mikeymclellan commented Sep 29, 2020

Somewhere along the way I managed to get it to output something 🤷

04:11:20,941: FortiusANT started
04:11:20,941: -d 127 (0b1111111)
04:11:20,941: -H None
04:11:20,941: -p 1.0
04:11:20,942: -t i-Vortex
04:11:20,942: ------------------
04:11:20,958: GetDongle - Try dongle: manufacturer=Dynastream Innovations, product=ANT USB-m Stick, vendor= 0xfcf, product=0x1009(4105)
04:11:21,488: Dongle - Using Dynastream Innovations dongle
04:11:21,488: Tacx   - Pair with Tacx i-Vortex and Headunit
04:11:21,488: AntHRM - Heartrate expected from Tacx Trainer
04:11:22,594: FortiusANT broadcasts data as an ANT+ Controlled Fitness Equipent device (FE-C), id=57591
04:11:22,743: FortiusANT broadcasts data as an ANT+ Heart Rate Monitor (HRM), id=57592
04:11:22,893: FortiusANT receives data from an ANT+ Tacx i-Vortex (VTX Controller), any device
04:11:23,082: FortiusANT receives data from an ANT+ Tacx i-Vortex Headunit (VHU Controller), any device
04:11:23,284: FortiusANT broadcasts data as an ANT+ Bicycle Power Sensor (PWR), id=57596
04:11:23,440: FortiusANT broadcasts data as an ANT+ Speed and Cadence Sensor (SCS), id=57595
04:11:23,607: Ctrl-C to exit
04:11:23,607: Tacx   - Pair with Tacx i-Vortex and Headunit
04:11:23,607: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
04:11:24,614: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
04:11:25,630: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
04:11:26,639: Target=100W Speed= 0.0kmh hr=  0 Current=  0W Cad=  0 r= 100 T= 15
04:11:27,647: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:28,660: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:29,664: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:30,672: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:31,678: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:32,684: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:33,698: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:34,708: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:35,713: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:36,721: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:37,729: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:38,734: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:39,743: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:40,757: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:41,769: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:42,773: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:43,780: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:44,788: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:45,793: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:46,796: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:47,809: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:48,820: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:49,832: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:50,842: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:51,853: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:52,873: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:53,889: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:54,906: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:55,916: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:56,919: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:57,931: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:58,944: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:11:59,953: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:12:00,963: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:12:01,973: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:12:02,985: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:12:03,991: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:12:04,997: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
04:12:06,000: Target=100W Speed=39.8kmh hr=  0 Current=229W Cad=163 r= 100 T= 15
^C04:12:06,418: Stopped
04:12:06,923: FortiusAnt ended

FortiusANT.2020-09-29 04-11-20.log

And finally, ExplorANT output:

04:59:07,043: Command line error; -V incorrect Tacx i-Vortex=False
04:59:07,044: ExplorANT started
04:59:07,044:          ExplorANT = 2020-05-07
04:59:07,044:          antDongle = 2020-06-16
04:59:07,044: -d 127 (0b1111111)
04:59:07,044: -D -1 (-0x1)
04:59:07,044: -H -1 (-0x1)
04:59:07,044: -F -1 (-0x1)
04:59:07,044: -S -1 (-0x1)
04:59:07,044: -V -1 (-0x1)
04:59:07,044: --------------------
04:59:07,044: Dongles in the system:
04:59:07,060: manufacturer=Dynastream Innovations, product=ANT USB-m Stick, vendor= 0xfcf, product=0x1009(4105)
04:59:07,061: manufacturer=Apple Inc., product=USB-C Digital AV Multiport Adapter, vendor= 0x5ac, product=0x1460(5216)
04:59:07,063: manufacturer=Apple Inc., product=     USB2.0 Hub, vendor= 0x5ac, product=0x100f(4111)
04:59:07,092: manufacturer=Apple Inc., product=     USB3.0 Hub, vendor= 0x5ac, product=0x100e(4110)
04:59:07,095: manufacturer=Apple Inc., product=Apple Internal Keyboard / Trackpad, vendor= 0x5ac, product= 0x27c(636)
04:59:07,095: --------------------
04:59:07,096: GetDongle - Try dongle: manufacturer=Dynastream Innovations, product=ANT USB-m Stick, vendor= 0xfcf, product=0x1009(4105)
04:59:07,631: Using Dynastream Innovations dongle
04:59:07,632: ExplorANT: We're in slave mode, listening to master ANT+ devices
Open channels: 0 04:59:08,234: FortiusANT tries to pair with an ANT+ device, any device
1 04:59:08,387: FortiusANT tries to pair with an ANT+ device, any device
2 04:59:08,538: FortiusANT tries to pair with an ANT+ device, any device
3 04:59:08,691: FortiusANT tries to pair with an ANT+ device, any device
4 04:59:08,837: FortiusANT receives data from an ANT+ Tacx i-Vortex (VTX Controller), any device
5 04:59:09,018: FortiusANT receives data from an ANT+ Tacx i-Vortex Headunit (VHU Controller), any device
6 04:59:09,208: FortiusANT tries to pair with an ANT+ device, any device
7 04:59:09,370: FortiusANT tries to pair with an ANT+ device, any device

04:59:09,518: Pairing, press Ctrl-C to exit
Wait for responses from channel what device is paired: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
04:59:39,734: Pairing stopped
04:59:39,734: --------------------
04:59:41,050: Listening, press Ctrl-C to exit
04:59:42,057: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:43,068: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:44,075: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:45,081: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:46,084: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:47,103: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:48,113: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:49,119: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
04:59:50,121: HRM#= 0 hr= -1 FE-C#= 0 Speed=  -1 Cadence= -1 Power= -1 hr= -1 SCS#= 0 VTX ID=0 Speed=   0 Cadence=  0 Target=-1
^C04:59:50,521: Listening stopped
04:59:51,022: We're done
04:59:51,022: --------------------

ExplorANT.2020-09-29 04-59-07.log

@Sigfreid74
Copy link

Sigfreid74 commented Sep 29, 2020 via email

@WouterJD
Copy link
Owner Author

Hey guys. Sorry for not digging into the issue earlier. @mikeymclellan you seem to be on the right track.
Since I do not have the T2021 I cannot assist very much.
As soon as you have questions, please drop a note.

@WouterJD
Copy link
Owner Author

WouterJD commented Oct 6, 2020

@mikeymclellan @Sigfreid74 How are things proceeding?
If you have a working model, just let me know and I will integrate into FortiusANT

@WouterJD
Copy link
Owner Author

WouterJD commented Oct 6, 2020

Refer to next response from TotalReverse, perhaps it gives additional information:
totalreverse/ttyT1941#15 (comment)

Unfortunately no. I do not own a Genius.
Maybe I find an affordable used brake on eBay this winter to reverse the protocol.
The Genius uses the same ANT channel frequency (60 = 0x3c) and period (0x1000 = 4096) as the Bushido.
Maybe the protocol is similar, too?
Have a look at:
https://github.com/jovial/PyBushido
https://github.com/fluxoid-org/CyclismoProject/wiki/Tacx-Bushido-Brake-protocol

@m472
Copy link

m472 commented Oct 20, 2020

I am in the same situation - just bought a Tacx Genius T2021 last week and want to connect it to my PC to ride on zwift. I don't have TTS4 available and am trying to connect it using FortiusAnt and my T2028 antenna.

Tried the fork by @mikeymclellan but did not have any luck so far.

@WouterJD
Copy link
Owner Author

@m472 thanks for using FortiusANT, please introduce yourself; I like to know where FortiusANT landed see #14

@m472 @mikeymclellan @Sigfreid74 I have added a short section in the manual (see wiki) and hope that is helpful.

Please keep me posted on progress and/or developments; when I can integrate your work it is helpful for others and -of course- I am curious whether the Genius can be connected as well.

@m472
Copy link

m472 commented Oct 23, 2020

I have now had the chance to do some more testing with my Tacx Genius.

In a first step I have printed all received ANT+ messages to the console. This way I was able to see some communication between the Genius and my computer. Therefor I can confirm the device type 0x53, frequency 50 (2460 MHz) and Period 4096 are correct.

I then checked the different data page numbers that are transmitted. It seems the Genius brake sends three data pages on a regular base: 1, 81, 94 and 221

I don't know anything about ANT+ data pages but it seems the information in pages 1, 81 and 94 is not dependent on weather I turn the cranks or not. The information in data page 221 however definitely changes when the cranks are turned.

The first byte in data page 221 seems to be some kind of sub-index. It takes the values {1, 2, 3}. I then logged all the information for data page 221 during a sprint and looked at the values by adding a print statement in the DecomposeMessage function.

I was able to identify some values as high and low bytes of an integer. Others are always zero (maybe my power output is just too low...). So now I have multiple values that seem to make some sense but I have no idea which signal is which. I hope someone is a bit more familiar with power and speed curves on an indoor trainer and can help me interpret thes curves.

The values val_1 to val_4 are from data page 221 subindex 1,
the value val_5 is from data page 221 subindex 2
and the values val_6 and val_7 are from data page 221 subindex 3.

image

image

image

Any help is appreciated, you can find my code and data here:
https://gist.github.com/m472/172bcc563bd822fc85526de25371097c

@switchabl
Copy link
Contributor

That is mostly how it should work already with the Genius. The difference is that the brake stores the calibration value and status internally and the first step in "Calibrate" is to check that. If the brake reports it already has a valid calibration, calibration is skipped. This check could of course be removed.

Turning the brake off and on again resets the calibration status, so a new calibration will be triggered when you "Start" again.

Cancelling the calibration should be possible with the Genius (I think there is a command for that), but I have not implemented that yet. Problem is also that there is no cancel button. You can let it time out (either 60s or 120s I think).

What I really want to do is this:

  • automatically save calibration value between sessions (Genius does it anyway)
  • calibration can be triggered at any time using "Calibrate" button
  • calibration can also be triggered through FE-C or BLE (e.g. from Zwift)
  • option to auto-calibrate on start-up (but not every time you press Start); disabled by default
  • add automated calibration for magnetic brakes (using spin-down)
  • report calibration value in a standardized way (comparable to red-green-red bar in TTS; Genius implementation already has this); should make "runoff" mostly obsolete

That should get us a big step closer to a modern smart trainer experience. Let me know what you think. I could probably get working on a new branch in the next few days. I now have all the (relevant) trainers and head-units available, so that should make it a lot eaiser to collect data and debug (and less likely to break something by accident).

In the meantime I can of course make a small pull-request to remove the calibration check for the Genius if you and @Sigfreid74 think that would be helpful.

@Sigfreid74
Copy link

Switchabl I think your ultimate proposal is ideal! I don't think the interim pull request is required. I will try just turning the Genius on/off again to re-initiaite calibration. Thanks for the tip. The power and wind resistance values now feel spot on!

@smithnb
Copy link

smithnb commented Jan 25, 2021

Hi,

I was pleasantly surprised to stumble over this solution to using older Tacx trainers with the online platforms like Rouvy and Zwift, so I've dug my i-Genius T2021 trainer out of the shed, followed the instructions for getting it connected in a Win 10 machine, and then have been able to get it connected to Rouvy. All seems fairly straight forward and functional for a while and then I get a set of errors in the Cli:
_18:04:26,998: FortiusANT broadcasts data as an ANT+ Controlled Fitness Equipent device (FE-C), id=57591
18:04:27,200: FortiusANT receives data from an ANT+ Heart Rate Monitor (HRM display), any device
18:04:27,452: FortiusANT receives data from an ANT Tacx Genius (GNS Brake), any device
18:04:27,737: FortiusANT broadcasts data as an ANT+ Bicycle Power Sensor (PWR), id=57596
18:04:27,956: FortiusANT broadcasts data as an ANT+ Speed and Cadence Sensor (SCS), id=57595
18:04:28,159: FortiusANT receives commands from an ANT+ Generic Remote Control
Exception in thread Thread-1:
Traceback (most recent call last):
File "threading.py", line 932, in bootstrap_inner
File "threading.py", line 870, in run
File "FortiusAnt.py", line 387, in Tacx2DongleThread
File "FortiusAnt.py", line 126, in Tacx2Dongle
File "FortiusAntBody.py", line 528, in Tacx2Dongle
File "FortiusAntBody.py", line 1214, in Tacx2DongleSub
File "antDongle.py", line 2354, in msgPage71_CommandStatus
struct.error: required argument is not an integer

I haven't been able to determine what I do if anything to cause it to happen as yet. Stopping and starting things from the UI fixes it for a bit and the the error returns.
Sorry if this has been discussed else where, I did try searching before posting.
More than happy to help debug, provide more info etc.

Thanks,
Nigel

@switchabl
Copy link
Contributor

switchabl commented Jan 25, 2021

@smithnb I think I have seen this a couple of times myself but could never reproduce it properly. If you can manage to get me a full debug log (run with -d 127 option) of this, I suspect it should be a rather easy fix.

EDIT: Actually after playing a bit with the ANT+ simulator I was able to reproduce it myself. So hopefully I won't even need the debug log.

@switchabl
Copy link
Contributor

@smithnb #222 should fix the crash, please test (a Windows binary is available here)

@smithnb
Copy link

smithnb commented Jan 26, 2021

@smithnb #222 should fix the crash, please test (a Windows binary is available here)

Hi, I've tried this fix binary and can't get it to crash. I believe
FortiusAnt.2021-01-26 12-17-31.log
FortiusAntGUI.2021-01-26 12-17-32.log

I have logged the crash on the earlier version attached.

@smithnb
Copy link

smithnb commented Jan 27, 2021

Now that I have a stable build of FortiusAnt running, I have moved on to the next stage - connecting to Rouvy and doing a training session.
At this point I run into two further issues:
I can connect to the trainer (via fortiusant obviously) from Rouvy and/or my Garmin 1030 computer, and should be able to adjust the resistance of the trainer. FortiusAnt displays this change in resistance but the actual resistance of the trainer doesn't actually change.
The second issue is I get a Cadence reading while the trainer spins up during it's calibration phase, but not while I'm actually pedalling on the trainer.
Is any of this familiar to others? I'm not able to verify if it is in fact a problem with my Trainer as I no longer have TTS 4 installed and believe that is now no longer possible on Win10 unless someone can tell me otherwise.

Any suggestions welcome.

Nigel

@switchabl
Copy link
Contributor

@smithnb Please upload a debug log (including some pedaling, changing resistance with either Rouvy or the Garmin) so I can see if there are any obvious issues.

The cadence issue in particular is strange and may suggest a problem with the trainer. So it could be helpful if you can get TTS4 running to check if that works. It works fine on Windows 10 for me (and others). The only problem is that the activation servers are no longer available. But I think you can run it in trial mode for a few days?

@rcerrie
Copy link

rcerrie commented Jan 28, 2021

Just downloaded FortiusAnt 5.1 to get my Genius going on my win10 laptop. Configured the windows app settings to specify the Genius Tacx type in the dropdown menu. But still cannot find the Genius trainer. I am using a Dynastream Ant+ dongle. Any suggestions?

@switchabl
Copy link
Contributor

@rcerrie Please enable the full debug log (Settings -> Developer arguments -> -d = 127) and upload the log files. Some things I can think of:

  • It can sometimes take a minute or two to pair with the trainer
  • If possible, use a USB extension cable with the ANT dongle (to avoid interference from the PC and to get it closer to the brake)
  • If you have TTS installed, can you verify if TTS can find the trainer?

@WouterJD
Copy link
Owner Author

@switchabl I think it's become quiet on this issue; seems we can consider Genius to be fully supported.
If agree, we can close.

@trygvelu
Copy link

I'll add my experiences with testing lately. Running in windows 10 with 2 ANT dongles is the most reliable option for me. I have done some testing with Raspberry pi devices, mostly headless, since wx doesn't run stable on my rPi0. With headless, I have run successfully with ANT and BLE towards Zwift running on the Win10 machine, but I often have problems with the calibration procedure, and also with pairing with the Genius brake. Sometimes I have to power cycle the brake, and restart FortiusAnt to get a connection. Sometimes I start TTS4 to run through the calibration, then exit and start FortiusAnt (headless).
I'm not sure if there are many others using the Genius brake without GUI. Maybe it works for everyone else, and it's just my setup creating problems.
Another potential issue: has work been done on supporting the headunit accessory (the round button interface) for the Genius?

@Paulospg99
Copy link

Paulospg99 commented Mar 17, 2021 via email

@WouterJD
Copy link
Owner Author

Hi @Paulospg99 good to hear from you again; thanks for feedback!


I'm always curious to know who I communicate with and where FortiusANT is used.
I would therefore appreciate that you introduce yourself; perhaps leave a comment under issue #14.


@jonojpsg
Copy link
Sponsor

jonojpsg commented Jun 7, 2021

Hi all,
I am very new to GitHub and was actually just searching for a way to connect my Tacx Genius to Zwift etc when I came across this thread! Looks like you’ve found a workaround to get this happening - my question is, without ANY experience in programming, is it possible for me to grab what you’ve done here and apply it to my Tacx? Would REALLY appreciate any assistance you can give me...oh, and part of the backstory, I bought the trainer off gumtree and when I went to install the Tacx software, it had expired! So do I need to actually install the software before I can use the workaround you have been discussing here?
Thanks in anticipation
Jonathon

@DutchZwolle
Copy link

Hi, i read this issue with interest. Do I understand it correctly that to use FortiusAnt with an old genius, you have to set the t=-t Genius parameter?

@WouterJD
Copy link
Owner Author

Hi @Cadencevr
Welcome to the FortiusANT community


I'm always curious to know who I communicate with, where FortiusANT is used and what configuration is used.
Please tell me what bundle did you buy, and what brake and what head unit do you use?
I would therefore appreciate that you introduce yourself; perhaps leave a comment under issue #14.
You could also consider to visit the sponsor page


And yes - t genius is the option, please read the manual for more info

@DutchZwolle
Copy link

Thanks for the quick reply. I will try this option.

@CruiserXL
Copy link

My settings for all Genius users, with which the software works properly and the values ​​also appear realistic.

TACX Genius Trainer, 2 x ANT+ dongles, 1 x WIN10 Prof PC 64bit

I deactivated the option: Save settings in json file and always start with my parameters in a batch: FortiusANT.exe -a -g -T39-53x26-23-21-19-18-17-16-15-14 -13 -t genius

I measure heart rate directly in Zwift using a SUUNTO strap.

The translation is important for the calibration!

@trishevae
Copy link

trishevae commented Nov 4, 2022

Hello. My name is Artem. I'm from Russia. I have Tacx T2021 (Genius). I got pair with Fortius Ant and Zwift. I got all the data from T2021. I using 2 garmin ant+ stick. But i have little problem. In FortiusANT and Zwift, I see 2 times more power than in the Tacx application on android, which works without fortius and gives clear data. For example, if I pedal at a speed of 10 km/h, I will get 50-70 watts of power in Tacx, 100-140 watts in Fortius. I tried to check the data using -p, but I already have 50% (0.5) and if I put less or more, the data becomes even larger. In total, I managed to get from 2 to 10 times the power increase in Fortius.

"ant": {
"device ID": ""
},
"bluetooth": {
"bless": false,
"nodejs": false
},
"general": {
"autostart": true,
"debug": "127",
"export TCX-file": true,
"gui": true,
"home trainer": false,
"hrm": "-1",
"imperial": false
},
"simulation": {
"manual grade": false,
"manual power": false,
"resistance": true,
"simulate": false
},
"trainer": {
"auto calibrate": true,
"calibrate rolling resistance": "15.0",
"factor": "50",
"grade factor": "100",
"grade factor downhill": "100",
"pedal stroke analysis": false,
"power mode": true,
"runoff": {
"dip": "2",
"max speed": "50",
"min speed": "1",
"power": "0",
"time": "7.0"
},
"transmission": "36-52x30-27-24-21-19-17-15-14-13-12-11",
"type": "Genius"
},
"version": "1"

@WouterJD
Copy link
Owner Author

WouterJD commented Nov 4, 2022

Hi @trishevae
I do not have a Genius so cannot test and/or try to reproduce.
Anyone else on the forum to assist?

@trishevae
Copy link

I don't know. I have read all the documentation and the github forum. I can sent you my connect process (log). May be my settings incorrect

@trishevae
Copy link

My settings for all Genius users, with which the software works properly and the values ​​also appear realistic.

TACX Genius Trainer, 2 x ANT+ dongles, 1 x WIN10 Prof PC 64bit

I deactivated the option: Save settings in json file and always start with my parameters in a batch: FortiusANT.exe -a -g -T39-53x26-23-21-19-18-17-16-15-14 -13 -t genius

I measure heart rate directly in Zwift using a SUUNTO strap.

The translation is important for the calibration!

Hi. Can you help me?

@SandorAttila
Copy link

Hi,
great thank supporting the older Tacx devices! I have the same issue with my Genius T2021. The rated power output is a lot higher (cca 2x?), than i experience on my other Genius smart trainer, that is directly connected with Zwift. I tried the above mentioned setups, but did not resolved it. I can even with my hands make a output of 400watts :-)
Most effect had the -p value adjustment, but even the smallest 50% factor gave a high power value. Could you please help me?

@trishevae
Copy link

Hi, great thank supporting the older Tacx devices! I have the same issue with my Genius T2021. The rated power output is a lot higher (cca 2x?), than i experience on my other Genius smart trainer, that is directly connected with Zwift. I tried the above mentioned setups, but did not resolved it. I can even with my hands make a output of 400watts :-) Most effect had the -p value adjustment, but even the smallest 50% factor gave a high power value. Could you please help me?

Insert one ant+ and run the program and t2021. You need to get information about a successful connection. After that, you do the calibration and run swift. When you get to the moment with the connection of devices, insert the second ant+ and find your t2021

Hi. You need 2 and + (1 for Furtius-ant and 1 for swift) and the target power in the settings is 101, because if you make 100, then for some reason it changes to 20 in the settings and the power drops, because it is multiplied by 20%.

I attached a link to a screenshot of my settings to my fortius-ant. Just download and run mine.

https://drive.google.com/drive/folders/1bMyVSmZYvFVzrkygtwiWFtFmFnhpEZ41?usp=sharing

@SandorAttila
Copy link

Hi! i set the p value ti 101, it works lot more better. I can not see/download the attachemnet, but this is allready a big help, thank You!

@Paulospg99
Copy link

Last week I did some kind of update on zwift and imediatly a felt a lack of power on the turbo trainner,
I change for hard gears and the brake start to loose the brake and let me spinning very fast, has everyone notice this? I'm using the genius T2021, would like to solve this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests