I think the only reliable power meter reading you can get from an Elite trainer is the Drivo. Everything is else is ‘calculated’ power value. Other modern Elite trainers are kinda okay once you calibrate them. But for the older wired units, I guess somewhere between Zpower and a Power meter, with upto +/-50 W deviations.
Want accurate power but not a new trainer? Get a used Powertap hub on eBay. I bought mine for $150.
If you have ever dealt with the Elite Support, you might have a bit more sympathy with Zwift as to why they haven’t optimised the older wired trainers. Corresponding with Elite’s customer service team is frustrating experience.
If you have an unsupported Elite Real wired trainers, then go open a ticket and let Zwift know! Keep this thread alive. And request the same from Elite’s support team and on their forums. Someone is dragging the chain. The wired communications protocol isn’t esoteric or even encrypted. Not much difference between pre/post 2006 Elite wired trainer protocols. Message length differs by a few bytes.
You can actually reverse engineer the serial protocol with a port sniffer and known programmed step resistance values. Did a bit of it this week. Bridged that data to ANT+ FE-C with the help of another kind programmer who shared his Serial-to-ANT+ code with me.
Had a RealAxiom v4 channelling though my PC to output via a ANT+ dongle identifying as a Fitness Equipment Device. Dynamic road slope/grade worked! For about 10 minutes, then my device blew two fuses on the resistance unit. (Wasn’t actually on the bike when it happened, was debugging). So maybe it’s a coincident? Anyway, I’m not releasing the binary until I get my trainer repaired and more bug testing performed.
Another solution and much simpler idea would be to write a serial communications wrapper to make the the Elite device looks like a post ~2006 trainer. Or a Computrainer!
To start reverse engineering unsupported Elite Real wired device communications protocols, start by downloading AxtoTest over at https://elitesrl.zendesk.com/hc/en-us/articles/201999801-Calibration-wired
Download and run this too:
Then run AxtoTest. On the RealAxiom V4, if you only change the Resistance value but not the Elevation value, the trainer resistance doesn’t change. But if you set both Resistance AND Elevation, then the trainer will update the to the new resistance value. Alternatively, use Real.exe and create a custom slope-time or power-time workout. Say a gradient or power ramp test, +1% or +25watts per minute, starting at 0% or 0 watts.
On my Axiom v4, the byte value of resistance clips out at ~0xEC = ~6% in Real.exe. Grades 6.1% to 12% exact same thing. (The user manual says that the trainer simulates grades up to 12%, hmm…)
RECEIVER MESSAGE FORMAT (Trainer <— PC)
Typically 6 bytes. The received message length is of the format:
RCV >> F0 01 28 0D 00 F7
Byte 01: 0xF0 is start byte for the message frame
Byte 02: 0x01 Regular/ordinary trainer operation mode.
Byte 03: CONSOLE BUTTONS: 0x21 = ‘+’
0x02 = ‘-’
0x04 = ‘Left’
0x28 = ‘Right’
(Zwift engineers, if you are reading this, please map the console buttons to turn directions!)
Byte 04: Number of times roller has half rotated in 100ms.
Used to calculate speed… eg
Axiom V4 roller diameter = 39.5mm
Roller circumference = 2*pi*(39.5MM) = 124.09MM.
Rounds per roll event = 0.5.
Distance per roll event = 124.09*0.5 = 0.062045 meters. Speed (m/s) = (0.062045m/100ms) * (int)(0x0D)
= 0.625045 * 13 = 8.13 m/s = 29.25 km/h
Byte 05: ??
Byte 06: 0xF7 = end byte of RCV message frame.
I don’t have a wired cadence sensor or analog 5kHz heart rate strap. Maybe the message frame length is an extra 2 bytes long if they are detected?
For TRANSMIT (PC—>Trainer)
Wake up console / identify unit example:
TRX >> F0 08 28 00 00 F7
RCV << F0 08 50 00
Get console unit serial number example:
TRX >> F0 03 00 00 00 F7
RCV << F0 03 00 15 B2 F7
Bytes 4 & 5 = 0x15B2 = 5554 dec.
Set resistance example
TRX >> F0 01 4D 00 00 F7
Byte 3 = 0x4D = 77 dec ~ 1.5% grade.
Hope that helps.