Connect your Proform TDF Bike to Zwift with TDF Data Bridge

I have two bikes - TDF centennial (PFEX01912.3) and TDF v4 (PFEX01914.0). Both have drop handles and have an android tablet based on 2.2 that looks like this. I’ve tried the zwifit program on a raspberry Pi Zero and a PC running Raspbian. It installs fine and startup is fine.

Looks like the bike you have - even though it is a v1 bike, is a lot newer than the ones I have. Though they have bluetooth, that is only used for heart rate monitor. Hence there is no “connect button” or code displayed in screen. I guess they are ANT+ bikes. In the android settings, I can see bluetooth, but can’t change or pair additional devices. I am getting a ANT+to BLE converter and will try to pair that.

Any other thoughts?

Looks like this only works on newer bikes that can use bluetooth to control the bike.

Tony. I have the PFEX09916 studio cycle. Got the app running on raspberry zero w from your fork, but can’t get the bluetooth to handshake with the bike. The instructions are a bit vague after executing " npm run enable.ble" command and turning on bike, I can’t seem to establish BT connection; the ifit iPad app can see and connect to the bike via Bluetooth so not sure how to check BT on the raspberry. Tia. Jon

Hi Jon. Will update the readme with better instructions. after you run the command npm run enable ble, have your iFit app on your tablet turned off, turn on bike, press the Bluetooth button on bike, will show 4 character code on screen, zwifit will ask for 4 characters, enter them in lower case, then continue through the prompts in zwifit, it will ask you to turn on your tablet and connect with the iFit app when it needs it. FYI, I don’t think it will work on windows due to how the Bluetooth driver works.

Not ant+, but controllable by the iFit app is the key. If you can connect via the iFit app and control the bike then it should work.

Thanks Tony. I had done the config previously entering the values in upper case. I saw in the config file had reversed the BT ID from C50A what I entered to 0AC5 but I thought that might be normal, rather than a caps issue.

I will delete the config file and rerun the one time setup. I started reading through both your code and RasPelik’s code to see if I can start understanding how the iFit Bluetooth protocol works but my JavaScript is like 15 years old so I need to brush up on syntax again :relaxed:

Thanks for your help and the pointers.


Hi Tony, just a brief update after trying a few things. The lowercase BT id made a difference and also having the ipad app off, because it can find the machine now ("Found fitness machine name with code c50a and name I_SB). I feel likes it’s getting close but I still got a couple weird items come up:

  1. after running ‘npm run enable-ble’ it would find the machine but gave a message "(node:2770) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usablity issues. Please use the Buffer.alloc(), BufferallocUnsafe(), Bufferfrom() methods instead: but would continue on and ask me to turn on the fitness machine’s manufacturer’s app… when I do that the on the iFIT app on the ipad (and try to pair), the iFIT app on the pad crashes/closes and i get the message on the console saying "Connected to the app… " then “Disconnected from the app.” then “Disconnected from fitness machine” and returns me back to terminal prompt.

  2. tried a couple more times, and this time after “DeprecationWarning” it would just return back to terminal prompt.

I saw the message about the npm update to 6.14.5 which I didn’t update yet, but not sure if that is related (I will update npm now to see if that helps but wonder if the function calls need renaming in the code because of the deprecation warning)

The iFIT app can otherwise connect to the machine for regular google rides. This in on an iPad gen 3 (IOS 9.3.5). I checked the app for info about the machine in the firmware section: it says machine firmware 81_228 and latest machine firmware 79_15 and says machine is up to date. In the machine info, it says console software version: 81, console hardware version 1. In the setting sections it says version number: 1.0.11, version code: 1.110

A couple other notes, I’m running node-v13.8.0 since that seemed successful for you. And this is on a raspberry pi zero W and I installed the zwifit package from your fork download rather than from the main dawsontoth/zwifit.git since that one didn’t seem to have all the BLE stuff


Hi Tony, just another update. I tried using the iFit app on my iPhone which is on newer IOS and got success! I brought up browser and getting data! Thanks for porting this to work on the bikes!


1 Like


Just about to buy a Proform tdf 1. with the consul as per the above. Would your application work?


Hello Peter,

One week ago I released new TDf Data Bridge V3 (Beta 1) for Windows/Mac and the bikes supported currently are:


Next friday I’ll be releasing Beta 2 which will work with your bike, as well as the rest of the TDF range, including Studio (except for the oldest TDF/Centennial the one with the small, cell-phone like android screen).

All the details can be found on

Please send me an email to and I’ll include you in the distribution list for the Beta 2, and you receive the download link by the end of the week.

Ride On!

Hi Jon/Tony,

Thanks for your very useful posts so far Re the node.js iFit BLE app and Tony thanks for your up to date fork. Really interested in getting this working mainly for use with an iFit BLE treadmill (for zwift use). I have managed to Raspelikan’s BLE version to handshake with my treadmill and can send speed setting commands to the device but unfortunately I’m not able to read data from the device (tested by inserting some java to display array values in the console). I think there is probably some kind of problem with the node.js version I am using and the dependencies/modules. It seems strange the BLE is functioning to some degree but can’t read the data (after setting up seemingly ok).

Can you point me in the right direction as to what version of Pi you are both running your software on, which node.js version etc and which version of linux you are using on the Pi? This would be a very useful starting point knowing there are people out there running this project without any problems.



1 Like

Hi Dan

Looking at buying a proform bike here are the specs would your software work for this

model; pfevex71413.1
le tour de france bike
serial No; ff420c

Hello Alex,

Yes, currently all the bikes (except TDF1.0, Studio, and the ones with manual resistance adjustment) are compatible with v3 of the program.

Feel free to contact me anytime over here or send me an email to if you have any more questions or need assistance installing or running the program.


Is it possible you will work on code for this or similar bikes? I have the cbc version of the proform your de france from costco. Thanks!

Hi Dan,

I’m sure you are so sick of these questions via particular bikes, but I downloaded your program and I’m trying to make anything and everything work with my ProForm Carbon CX Indoor. I’m sad to realize that there is no ANT+ connectivity (and its Bluetooth functionality is limited), so no tracking and saving cycle data to apps like Zwift, Peloton, or any other leaderboard system.

Am I ■■■■ out of luck?

Thank You for any thoughts.


Hello Kery,

Sorry for the late reply. For the moment the ProForm Carbon CX bike is not supported, but I’m trying to get my hands in one to see if there is something I can do to make it work. I suggest you stay tuned with my blog where I post the latest information. Look for TDF Data Bridge in google and it will show you the blog address (it’s hosted in wordpress dot com)

Hope this helps,

Hey Dan,

I thought this would be the answer. I appreciate you taking the time to help out so many people.

Sad I can’t get going. I wanna Zwift! I have been considering a better stationary anyhoo… maybe break the bank with a smart trainer/bike.


hello Dan!
I did everything as you have in the video instructions for the BETA version. there was a question, how to choose a bluetooth sensor TDFDB3-DEMO? I have TDF5 and a USB bluetooth.

@Keri_Conrad I know this is a super late reply, however you should check out QZ - qdomyos-zwift.

I have the same bike as you and use this app to connect to Zwift with full control.

Hi All,

A quick update to the thread. Last week I launched V4 of TDF Data Bridge. this is the new compatibility matrix, for your reference.

Search for TDF Data Bridge blog link on previous messages or simply Google it to get yourself a copy of the program.