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

Testing Simcline with FTMS v01 #5

Closed
cherryphilip74 opened this issue Dec 5, 2022 · 19 comments
Closed

Testing Simcline with FTMS v01 #5

cherryphilip74 opened this issue Dec 5, 2022 · 19 comments

Comments

@cherryphilip74
Copy link

New section for Tread testing Simcline with FTMS v01
For a fast feedback (if you want) I created a private group in telegram (here link https://t.me/+FBKaD3Kue2Q5MzM0).
I will delete the link once time you joined it.

Can I close the previous Trainer Elite code section?

@Berg0162
Copy link
Owner

Berg0162 commented Dec 5, 2022 via email

@le-joebar
Copy link

le-joebar commented Dec 5, 2022

Hello,

I have been busy reading you for several days.
I have a new Zwift Hub. I also do development with ESP32.
So I am familiar with this environment.
If I order a Bluefruit NRF52, would you be willing to try developing for this trainer?
I don't have a BuethootBLE entry on my desktop.
Is it a problem?
Currently my config is a Desktop ANT+, Zwift companion.
So my setup is:
Pc connected to the Zwift Hub in Ant+ and bluetooth is free.
Thank you very much for your answer.
I have one more question!
Does the FTMS trainer work if I connect in BluethootBLe on the Zwift Companion or just connect the trainer by Ant+ to the PC and via the BluethootBLe on the Simclim via the client?

Joel

@Berg0162
Copy link
Owner

Berg0162 commented Dec 5, 2022

Dear Joel,
I have to look into your questions more carefully! I simply do not have all the answers right now!
The MITM solution we work on is BLE only (see my explanatory notes!). Ant+ is NOT playing any role in the design!
I will be back!
Regards,
Jörgen.

@le-joebar
Copy link

le-joebar commented Dec 5, 2022 via email

@Berg0162
Copy link
Owner

Berg0162 commented Dec 5, 2022

Dear Joel
If I order a Bluefruit NRF52, would you be willing to try developing for this trainer?

It is virtually impossible to develop specifically for all trainer brands. TACX and Wahoo are market leaders with a very large installed base and most of their smart trainers should work with the respective Simcline code versions! FTMS enabled Trainers is another large group of trainers that most likely will work (after this development) with the Simcline FTMS code version. No promises, No garanties!
According to DCRainmaker the Zwift Hub (see review on his site) has FTMS implemented. So in principle your Zwift Hub should work with the present FTMS code...after succesfull development!
There is only one way to be sure: testing is knowing! No promises, No garanties!

I don't have a BuethootBLE entry on my desktop.
Is it a problem?
Currently my config is a Desktop ANT+, Zwift companion.
So my setup is:
Pc connected to the Zwift Hub in Ant+ and bluetooth is free.

FTMS is only working over BLE (by design: bluetooth service) and with BLE enabled PC/Laptop/Tablet at one end and the FTMS enabled trainer at the other end. The Simcline with MITM code is in between. So if you do not have a BLE enabled device of the type PC/Laptop/Tablet (running the control software, Zwift/Rouvy/et cetera), it is never working with FTMS!

I have one more question!
Does the FTMS trainer work if I connect in BluethootBLe on the Zwift Companion or just connect the trainer by Ant+ to the PC and via the BluethootBLe on the Simclim via the client?

As far as I understand what you suggest, the answer is simple: no that will not end up in a working Simcline that catches Grade info from Zwift. The reason is that there can be only one controller (Training/Game app) that drives the trainer. That controller is working over ANT+ or (that is an XOR!) over BLE using FTMS.

Regards,
Jörgen.

@cherryphilip74
Copy link
Author

Have you considered using a D1 Mini NodeMCU ESP32 WiFi and Bluetooth BLE?
Link here: https://amzn.eu/d/2XgwXKY

ESP32 and nRF52 can do WiFi, Bluetooth Classic, and Bluetooth Low Energy (BLE), so seem are equivalent.
Are there technical limitation can't be applied to ESP32?
ESP32 is cheaper than nRF2 also low dimension

Best Regards
Filippo

@le-joebar
Copy link

Dear Jörghen,

Ok I understand.
I will order a BluethootLE dongle for the PC.
I ordered the NRF I will do a series of tests as soon as I receive it.

Joel

@Berg0162
Copy link
Owner

Berg0162 commented Dec 6, 2022

Dear Joel,
Let me hear what your experience is using the Client, Server and Bridge test codes with a Zwift hub at the other side!
Best wishes,
Jörgen.

@Berg0162
Copy link
Owner

Berg0162 commented Dec 6, 2022

Dear Filippo,
I have uploaded the first version of fully working code to run an operational Simcline with all bells and whistles, that supports FTMS enabled trainers: "Simcline_FTMS_v01"
Be careful to prep the code first in accordance with the mechanical specs of your Simcline setup:

// Your hardware MAC/DEVICE ADDRESSES
// Laptop/Desktop Device Address that runs Zwift, in printed format: [00:01:02:03:04:05]
// Little Endian: in reversed order !!!!
#define LAPTOPADDRESS {0x05,0x04,0x03,0x02,0x01,0x00}
// Trainer FTMS enabled Device Address, in printed format: [00:01:02:03:04:05]
// Little Endian: in reversed order !!!!
#define TRAINERADDRESS {0x05,0x04,0x03,0x02,0x01,0x00}

//------------ SET THESE TWO VALUES IN ACCORDANCE WITH THE MECHANICAL RANGE LIMITATIONS OF YOUR SIMCLINE !!! -------------
// Raw Grade Value Minimally (Mechanically: the lowest position of wheel axis) 19000 is equiv. of 10% downhill road grade
#define RGVMIN 19500 // -5% // Always is RGVMIN < 20000 (flat road level)
// Raw Grade Value Maximally (Mechanically: the highest position of wheel axis) 22000 is equiv. of 20% uphill road grade
#define RGVMAX 22000 // 20% // +20% // Always is RGVMAX > 20000 (flat road level)

// Correction for measuring plane difference and midth wheel axis position (1 cm offset is an MEASUREOFFSET of about 40)
#define MEASUREOFFSET 50 // about 1.25 cm

// Notice that unrestricted movement at the boundaries can damage the Actuator and/or construction!
// The following values are respected by the software and will (in normal cases!) never be exceeded!
#define MINPOSITION 265 // VL6180X highest value top microswitch activated to mechanically stop operation
#define MAXPOSITION 535 // VL6180X lowest value bottom microswitch activated to mechanically stop operation

Good luck with the first run for real!
Jörgen.

@cherryphilip74
Copy link
Author

Dear Jörgen!
I tried today the first version of simcline with FTMS.
Simply Wow
Indoor apps support: Zwift, Rouvy

                           **Booting phase and pairing**

photo_2022-12-07_19-46-23

                           **Motor functionality error**

photo_2022-12-07_19-46-53

                           **No Rouvy app started**

photo_2022-12-07_19-47-22

                           **Paired with Direto Sim trainer**

photo_2022-12-07_19-49-29

                           **Rouvy app ready to ride**

photo_2022-12-07_19-50-29
photo_2022-12-07_19-50-47

                           **Rouvy app and Direto Sim trainer disconnected**

photo_2022-12-07_19-51-28
photo_2022-12-07_19-51-38

Big varation of grade percentage between SimCline and Zwift, while those variation is low with SimCline and Rouvy.
Details reported on serial monitor see "new grade percentage section", grade value data from app reported inside << grade>>

                           **SERIAL MONITOR**

18:51:20.421 -> <<-- SIMCLINE supporting: CPS, CSC and FTMS -->>
18:51:20.421 -> ------------------------- Version 01.0 -------------------------
18:51:20.421 -> Simcline equiped with: Feather nRF52832
18:51:20.469 -> Feather internal Get & Set PRSdata to Max: 21600 Min: 19300 Perc.: 100 Displ.: 2
18:51:20.469 -> SSD1306 OLED display is running...

                           << Did you disable the basic motor functionality? >>

18:51:24.343 -> Simcline >> ERROR << Basic Motor Funtions are NOT working!!

                           << any moviment >>

18:51:24.343 -> FTM Service and Chars are 'initialized'
18:51:24.343 -> CP Service and Chars are 'initialized'
18:51:24.343 -> CSC Service and Chars are 'initialized'
18:51:24.343 -> Generic Access Service and Chars are 'initialized'
18:51:24.343 -> Device Information Service and Chars are 'initialized'
18:51:24.343 -> Start Client-side Scanning for CPS, CSC and FTMS!
18:51:24.719 -> Found Advertising Peripheral with FTMS, CPS and CSC! See Raw data packet:
18:51:24.719 -> Timestamp Addr Rssi Data
18:51:24.719 -> 000004280 EE:18:4B:1F:9F:3E -64 03-19-85-04-02-01-06-05-02-26-18-18-18-06-16-26-18-01-20-00-0A-09-44-49-52-45-54-4F-20-58-52
18:51:24.857 -> Feather nRF52 (Central) connected to Trainer (Peripheral) device: [DIRETO XR] MAC Address: EE:18:4B:1F:9F:3E
18:51:24.857 -> Now checking all mandatory Client Services and Characteristics!
18:51:24.857 -> Discovering Client Cycling Power (CP) Service ... Found it! CPS Max Payload: 20 Data Length: 27
18:51:24.904 -> Discovering Client CP Measurement characteristic ... Found it!
18:51:24.996 -> Discovering Client CP Control Point characteristic ... Found it!
18:51:25.091 -> Discovering Client CP Feature characteristic ... Found it!
18:51:25.229 -> -> Client Reads Raw CP Feature bytes: [4] [ 0D 02 00 00 ]
18:51:25.229 -> Pedal power balance supported
18:51:25.229 -> Wheel revolution data supported
18:51:25.229 -> Crank revolution data supported
18:51:25.229 -> Offset compensation supported
18:51:25.229 -> Discovering Client CP Sensor Location characteristic ... Found it!
18:51:25.276 -> -> Client Reads CP Location Sensor: Loc#: 0 Other
18:51:25.276 -> Discovering Cycling Speed and Cadence (CSC) Service ... Found it! CSCS Max Payload: 20 Data Length: 27
18:51:25.322 -> Discovering Client CSC Measurement CHR ... Found it!
18:51:25.415 -> Discovering Client CSC Location CHR ... Found it!
18:51:25.462 -> -> Client Reads CSC Location Sensor: Loc#: 0 Other
18:51:25.462 -> Discovering Client CSC Feature CHR ... Found it!
18:51:25.554 -> -> Client Reads Raw CSC Feature bytes: [2] [ 03 00 ]
18:51:25.554 -> Wheel rev supported
18:51:25.554 -> Crank rev supported
18:51:25.601 -> Found Client Generic Access
18:51:25.694 -> Found Device Name: [DIRETO XR]
18:51:25.742 -> Found Appearance: [1157]
18:51:25.790 -> Found Client Device Information:
18:51:25.882 -> Client Manufacturer: Elite
18:51:26.064 -> Client Serial Number: 52687
18:51:26.064 -> Discovering Client Fitness Machine (FTM) Service ... Found it! FTMS Max Payload: 20 Data Length: 27
18:51:26.110 -> Discovering Client FTM Feature Characteristic ... Found it!
18:51:26.201 -> -> Client Reads Raw FTM Feature bytes: [8] [ 86 50 00 00 0C E0 00 00 ]
18:51:26.201 -> Discovering Client FTM Training Status Characteristic ... Found it!
18:51:26.292 -> Discovering Client FTM Supported Resistance Level Range Characteristic ... Found it!
18:51:26.431 -> -> Client Reads Raw FTM Supported Resistance Level Range bytes: [6] [ 00 00 C8 00 01 00 ]
18:51:26.431 -> Discovering Client FTM Supported Power Range Characteristic ... Found it!
18:51:26.527 -> -> Client Reads Raw FTM Supported Power Range bytes: [6] [ 00 00 A0 0F 01 00 ]
18:51:26.527 -> Discovering Client FTM Indoor Bike Data Characteristic ... Found it!
18:51:26.619 -> Discovering Client FTM Control Point Characteristic ... Found it!
18:51:26.759 -> Discovering Client FTM Status Characteristic ... Found it!
18:51:27.177 -> Configuring the Server Device Information Service
18:51:27.177 -> Configuring the Server Cycle Power Service
18:51:27.177 -> Configuring the Server Cadence and Speed Service
18:51:27.177 -> Configuring the Server Fitness Machine Service
18:51:27.224 -> Configuring the Server NUS Service
18:51:27.224 -> Setting up the Server-side advertising payload(s)
18:51:27.224 -> Setting Server Device Name to: [Sim DIRETO]
18:51:27.224 -> Setting Server Appearance to: [1157]
18:51:27.224 -> Server-side is CPS, CSC and FTMS advertising!
18:51:27.972 -> Feather nRF52 (Peripheral) connected to Central device: [DESK-CHERRYPHIL] MAC Address: 40:23:43:A5:FE:78
18:51:27.972 -> Enabled 'Notify' for Client CP Measurement values
18:51:28.020 -> Enabled 'Indicate' for Client CP ControlPoint Responses
18:51:28.020 -> Enabled 'Notify' for Client CSC Measurement values
18:51:28.020 -> Enabled 'Notify' for Client FTM TrainingStatus values
18:51:28.066 -> Enabled 'Notify' for Client FTM IndoorBikeData values
18:51:28.066 -> Enabled 'Indicate' for Client FTM ControlPoint Response Messages
18:51:28.112 -> Enabled 'Notify' for Client FTM Status values
18:51:28.623 -> Waiting for Central (Zwift) to set CCCD Notify/Indicate (enable) and start....
18:51:30.341 -> Client- and Server-side are Up and Running!
18:51:31.038 -> Central Device Updated CCCD to: [1] --> Server CP: Measurement 'Notify' enabled
18:51:31.504 -> Central Device Updated CCCD to: [1] --> Server CSC: Measurement 'Notify' enabled
18:51:32.812 -> Central Device Updated CCCD to: [1] --> Server FTM: IndoorBikeData 'Notify' enabled
18:51:34.249 -> Central Device Updated CCCD to: [1] --> Server FTM: Status 'Notify' enabled

                            **<< grade shown from Zwift app >>**

18:51:43.376 -> New Grade percentage: 1.2 % RawgradeValue: 20124 << -0.2 % >>
18:52:04.693 -> New Grade percentage: 1.0 % RawgradeValue: 20102 << -0.2 % >>
18:52:05.617 -> New Grade percentage: -0.1 % RawgradeValue: 19990 << -1 % >>
18:52:57.493 -> New Grade percentage: -0.1 % RawgradeValue: 19989 << -1 % >>
18:53:00.730 -> New Grade percentage: -0.1 % RawgradeValue: 19988 << -1 % >>
18:53:01.660 -> New Grade percentage: -0.1 % RawgradeValue: 19987 << -1 % >>
18:53:03.377 -> New Grade percentage: -0.1 % RawgradeValue: 19986 << -1 % >>
18:53:04.355 -> New Grade percentage: -0.2 % RawgradeValue: 19985 << -1 % >>
18:53:05.418 -> New Grade percentage: -0.2 % RawgradeValue: 19983 << -1 % >>
18:53:06.298 -> New Grade percentage: -0.2 % RawgradeValue: 19982 << -1 % >>
18:53:07.273 -> New Grade percentage: -0.2 % RawgradeValue: 19980 << -1 % >>
18:53:08.152 -> New Grade percentage: -0.2 % RawgradeValue: 19978 << -1 % >>
18:53:09.133 -> New Grade percentage: -0.2 % RawgradeValue: 19976 << -1 % >>
18:53:10.109 -> New Grade percentage: -0.3 % RawgradeValue: 19973 << -1 % >>
18:53:11.010 -> New Grade percentage: -0.3 % RawgradeValue: 19970 << -1 % >>
18:53:11.901 -> New Grade percentage: -0.3 % RawgradeValue: 19967 << -1 % >>
18:53:12.788 -> New Grade percentage: -0.4 % RawgradeValue: 19963 << -1 % >>
18:53:13.714 -> New Grade percentage: -0.4 % RawgradeValue: 19958 << -1 % >>
18:53:14.592 -> New Grade percentage: -0.5 % RawgradeValue: 19951 << -2 % >>
18:53:15.520 -> New Grade percentage: -0.6 % RawgradeValue: 19942 << -2 % >>
18:53:16.408 -> New Grade percentage: -0.7 % RawgradeValue: 19928 << -2 % >>
18:53:17.293 -> New Grade percentage: -0.9 % RawgradeValue: 19915 << -3 % >>
18:53:18.268 -> New Grade percentage: -0.9 % RawgradeValue: 19909 << -3 % >>
18:53:19.200 -> New Grade percentage: -0.9 % RawgradeValue: 19912 << -3 % >>
18:53:20.078 -> New Grade percentage: -0.8 % RawgradeValue: 19920 << -2 % >>
18:53:21.051 -> New Grade percentage: -0.7 % RawgradeValue: 19928 << -2 % >>
18:53:21.984 -> New Grade percentage: -0.6 % RawgradeValue: 19935 << -2 % >>
18:53:22.861 -> New Grade percentage: -0.6 % RawgradeValue: 19942 << -2 % >>
18:53:23.836 -> New Grade percentage: -0.5 % RawgradeValue: 19946 << -2 % >>
18:53:24.763 -> New Grade percentage: -0.5 % RawgradeValue: 19950 << -2 % >>
18:53:25.787 -> New Grade percentage: -0.5 % RawgradeValue: 19953 << -2 % >>
18:53:26.673 -> New Grade percentage: -0.4 % RawgradeValue: 19955 << -1 % >>
18:53:27.563 -> New Grade percentage: -0.4 % RawgradeValue: 19958 << -1 % >>
18:53:28.489 -> New Grade percentage: -0.4 % RawgradeValue: 19959 << -1 % >>
18:53:30.118 -> New Grade percentage: -0.4 % RawgradeValue: 19960 << -1 % >>
18:53:31.880 -> New Grade percentage: -0.4 % RawgradeValue: 19961 << -1 % >>
18:53:35.048 -> New Grade percentage: -0.4 % RawgradeValue: 19962 << -1 % >>
18:53:38.218 -> New Grade percentage: -0.4 % RawgradeValue: 19963 << -1 % >>
18:53:42.909 -> New Grade percentage: -0.4 % RawgradeValue: 19964 << -1 % >>
18:53:49.111 -> New Grade percentage: -0.3 % RawgradeValue: 19965 << -1 % >>
18:53:55.305 -> New Grade percentage: -0.3 % RawgradeValue: 19966 << -1 % >>
18:54:00.679 -> New Grade percentage: -0.3 % RawgradeValue: 19967 << -1 % >>
18:54:03.888 -> New Grade percentage: -0.3 % RawgradeValue: 19968 << -1 % >>
18:54:06.262 -> New Grade percentage: -0.3 % RawgradeValue: 19969 << -1 % >>
18:54:08.680 -> New Grade percentage: -0.3 % RawgradeValue: 19970 << -1 % >>
18:54:12.550 -> New Grade percentage: -0.3 % RawgradeValue: 19971 << -1 % >>
18:54:17.247 -> New Grade percentage: -0.3 % RawgradeValue: 19972 << -1 % >>
18:54:25.900 -> New Grade percentage: 0.6 % RawgradeValue: 20063 << -2 % >>
18:54:34.826 -> Server disconnected from Central (Laptop): [DESK-CHER], reason: [13]
18:54:34.826 -> Server is advertising again!
18:55:12.416 -> Feather nRF52 (Peripheral) connected to Central device: [DESK-CHERRYPHIL] MAC Address: 40:23:43:A5:FE:78
18:55:12.416 -> Enabled 'Notify' for Client CP Measurement values
18:55:12.416 -> Enabled 'Indicate' for Client CP ControlPoint Responses
18:55:12.462 -> Enabled 'Notify' for Client CSC Measurement values
18:55:12.462 -> Enabled 'Notify' for Client FTM TrainingStatus values
18:55:12.510 -> Enabled 'Notify' for Client FTM IndoorBikeData values
18:55:12.556 -> Enabled 'Indicate' for Client FTM ControlPoint Response Messages
18:55:12.556 -> Enabled 'Notify' for Client FTM Status values
18:55:13.115 -> Waiting for Central (Zwift) to set CCCD Notify/Indicate (enable) and start....
18:55:15.445 -> Central Device Updated CCCD to: [1] --> Server CP: Measurement 'Notify' enabled
18:55:15.537 -> Central Device Updated CCCD to: [2] --> Server CP: ControlPoint 'Indicate' enabled
18:55:15.722 -> Central Device Updated CCCD to: [1] --> Server CSC: Measurement 'Notify' enabled
18:55:16.140 -> Central Device Updated CCCD to: [1] --> Server FTM: IndoorBikeData 'Notify' enabled
18:55:16.373 -> Central Device Updated CCCD to: [1] --> Server FTM: Status 'Notify' enabled

                            **<< grade shown from Rouvy app >>**

18:56:30.728 -> New Grade percentage: 1.0 % RawgradeValue: 20099
18:56:40.900 -> New Grade percentage: -0.2 % RawgradeValue: 19984 << -0.2 % >>
18:56:51.126 -> New Grade percentage: -0.2 % RawgradeValue: 19984 << -0.2 % >>
18:57:01.173 -> New Grade percentage: -0.2 % RawgradeValue: 19984 << -0.2 % >>
18:57:11.309 -> New Grade percentage: -0.2 % RawgradeValue: 19984 << -0.2 % >>
18:57:21.338 -> New Grade percentage: -0.2 % RawgradeValue: 19984 << -0.2 % >>
18:57:31.554 -> New Grade percentage: -0.2 % RawgradeValue: 19984 << -0.2 % >>
18:57:33.528 -> New Grade percentage: 6.2 % RawgradeValue: 20621 << -0.2 % >>
18:57:43.753 -> New Grade percentage: 6.2 % RawgradeValue: 20621 << 5.8 % >>
18:57:46.695 -> New Grade percentage: 3.0 % RawgradeValue: 20300 << 3.2 % >>
18:57:56.892 -> New Grade percentage: 3.0 % RawgradeValue: 20300 << 3.2 % >>
18:58:06.958 -> New Grade percentage: 3.0 % RawgradeValue: 20300 << 3.2 % >>
18:58:16.990 -> New Grade percentage: 3.0 % RawgradeValue: 20300 << 3.2 % >>
18:58:27.114 -> New Grade percentage: 3.0 % RawgradeValue: 20300 << 3.2 % >>
18:58:32.194 -> New Grade percentage: 4.5 % RawgradeValue: 20450 << 4.8 % >>
18:58:42.367 -> New Grade percentage: 4.5 % RawgradeValue: 20450 << 4.8 % >>
18:58:51.461 -> New Grade percentage: 5.9 % RawgradeValue: 20595 << 6.8 % >>
18:59:01.568 -> New Grade percentage: 5.9 % RawgradeValue: 20595 << 6.8 % >> lost power & cadence signal
18:59:07.680 -> New Grade percentage: 8.8 % RawgradeValue: 20878 << 11.0 % >>
18:59:17.799 -> New Grade percentage: 8.8 % RawgradeValue: 20878 << 11.0 % >>
18:59:21.891 -> New Grade percentage: -0.2 % RawgradeValue: 19983 << -0.2 % >>
18:59:31.951 -> New Grade percentage: -0.2 % RawgradeValue: 19983 << -0.2 % >>
18:59:42.031 -> New Grade percentage: -0.2 % RawgradeValue: 19983 << -0.2 % >>
18:59:52.326 -> New Grade percentage: -0.2 % RawgradeValue: 19983 << -0.2 % >>
18:59:54.326 -> New Grade percentage: 4.8 % RawgradeValue: 20477 << 5.0 % >>
19:00:00.337 -> New Grade percentage: 4.8 % RawgradeValue: 20478 << 5.0 % >>
19:00:05.459 -> New Grade percentage: 7.0 % RawgradeValue: 20696 << 8.2 % >>
19:00:15.576 -> New Grade percentage: 7.0 % RawgradeValue: 20696 << 8.2 % >>
19:00:25.696 -> New Grade percentage: 7.0 % RawgradeValue: 20696 << 8.2 % >> lost power & cadence signal
19:00:32.818 -> New Grade percentage: 3.6 % RawgradeValue: 20360 << 3.9 % >>
19:00:42.950 -> New Grade percentage: 3.6 % RawgradeValue: 20360 << 3.9 % >>
19:00:43.931 -> New Grade percentage: 8.5 % RawgradeValue: 20849 << 11 % >>
19:00:54.013 -> New Grade percentage: 8.5 % RawgradeValue: 20849 << 11 % >>
19:01:02.092 -> New Grade percentage: 1.0 % RawgradeValue: 20099
19:07:34.472 -> Central Device Updated CCCD to: [0] --> Server CP: Measurement 'Notify' disabled
19:07:34.564 -> Central Device Updated CCCD to: [0] --> Server CP: ControlPoint 'Indicate' disabled
19:07:34.705 -> Central Device Updated CCCD to: [0] --> Server CSC: Measurement 'Notify' disabled
19:07:34.798 -> Central Device Updated CCCD to: [0] --> Server FTM: IndoorBikeData 'Notify' disabled
19:07:34.937 -> Central Device Updated CCCD to: [0] --> Server FTM: Status 'Notify' disabled

                            **<< stop ride and exit from app >>**

Best Regards
Filippo

@Berg0162
Copy link
Owner

Berg0162 commented Dec 8, 2022

Dear Filippo,
I am very happy with the results! It looks like the Simcline_FTMS is working very well with your Elite. A few minor points like not correct handling of long device names for the Oled display (only 10 char positions) was already corrected in the version 1.1 that I prepared the last days.

"18:51:24.343 -> Simcline >> ERROR << Basic Motor Funtions are NOT working!!"
Please do not blame the messenger! The code is testing the actuator + Time-of-Flight-sensor assembly for correct functioning by moving it up a determined distance and check exactly the end result. Then it sets a movement down and checks the end result! If this is not working 100%: you will get the error message and any further use of the actuator is blocked...(To avoid damaging the setup!) You know the drill from your Simcline usage (with TACX) in the past.
If one gets this message you have to troubleshoot the involved components and check carefully their assembly in your setup! So please use the test-programs that can be accessed in the Simcline repository....
Let me guess: you have forgotten to plugin the 12V DC power for the actuator... Afterall the board (+Oled+ToF-Sensor) is powered (5V) over the USB connection (needed for the Serial Monitor) with your PC/Laptop, so that is working properly but the actuator is not moving (no power) when requested in the test code --> Error message!

I am puzzeled by your comment: lost power & cadence signal What was happening? How did you know? Please be more specific and detailed about what you observed!

About the discrepancy between the road inclination that the training app is presenting on the screen and what that very same app is sending to the trainer (for setting is resistance) ....... we have been here before!
[Please check this] (https://github.com/Berg0162/simcline/tree/master/Tacx%20Smart#simcline-in-tts4-controlled-operation)

The bottom line is: WhatYouSeeIsNotWhatYouAlwaysGet This sometimes is due to your own settings in the App (Difficulty Setting in Zwift: 50% and not 100%), but also simply App company policy... Rouvy is a positive exception, but there are more!

A new version (v01.1.) is about uploaded: 1) handles disconnection and reconnection of devices more robust, 2) allows for Smartphone connection to set some operation variables and manual control of actuator. Notice: Smartphone can only be connected when the training app (Zwift) is NOT connected, so when the Simcline (Server-side) is advertising --> Only one (1) controlling app is allowed to connect and drive the Simcline at any time. (You know, 2 captains on one ship is a recipe for disaster)
I have also uploaded a new Companion App version that will recognize the Simcline_FTMS (and not only the Simcline_TACX and Simcline_Wahoo versions!).
Thanks for the testing results and keep doing the good work!
Best wishes
Jörgen.

@le-joebar
Copy link

Hello Jörgen,

I received the adafruit yesterday. The first test FTMS_Client_v02 seems to be good.
I will send you the complete results when I receive the ASUS USB BT500 dongle for the pc.

In the meantime I read your article on " AIRFLOW Thermoregulated Cooling for Indoor Cycling"

Do you think it is possible to include it in the Simcline program so that simcline communicates with Airflow??

Friendship,
Joel

@Berg0162
Copy link
Owner

Berg0162 commented Dec 8, 2022 via email

@le-joebar
Copy link

le-joebar commented Dec 8, 2022

Hello Jorghen,

Here is the first result with FTMS_Client_ v022

I don't know if it's good?

Next test when I receive the dongle for the Pc

Friendship,
Joel

[CFG ] SoftDevice's RAM requires: 0x20002C78
FTMS and Chars 'initialized'
CPS and Chars 'initialized'
CSCS and Chars 'initialized'
GA and Chars 'initialized'
DIS and Chars 'initialized'
Start Scanning for CPS, CSC and FTMS!
[BLE ] BLE_GAP_EVT_ADV_REPORT : Conn Handle = 65535
[BLE ] BLE_GAP_EVT_ADV_REPORT : Conn Handle = 65535
Found advertising Peripheral with FTMS service!, see the Raw Data packet:
Timestamp MAC Address Rssi Data
000000681 F8:9C:FC:53:5E:49 -60 09-02-16-18-26-18-18-18-0A-18
[BLE ] BLE_GAP_EVT_CONNECTED : Conn Handle = 0
[GAP ] MAC = F8:9C:FC:53:5E:49, Type = 1, Resolved = 0
[GAP ] Conn Interval = 20.00 ms, Latency = 0, Supervisor Timeout = 2000 ms
[BLE ] BLE_GAP_EVT_DISCONNECTED : Conn Handle = 0
[GAP ] Disconnect Reason: CONN_FAILED_TO_BE_ESTABLISHED
Feather nRF52 (Central) connected to Trainer (Peripheral) device: [] MAC Address: F8:9C:FC:53:5E:49
Now checking mandatory Client Services and Characteristics!
Discovering Client Cycling Power (CP) Service ... [DISC ] [SVC] Handle start = 1
bool BLEDiscovery::_discoverService(uint16_t, BLEClientService&, uint16_t): 79: verify failed, error = BLE_ERROR_INVALID_CONN_HANDLE
Not Found!
Disconnecting since Client Cyling Power Service is mandatory!
Client Disconnected, reason = 0x3E

Restart the Feather nRF52 Client for a new run! <<<
Couldn't enable notify for Client CP Measurement Characteristic.
Couldn't enable indicate for Client CP Control Point Characteristic.
Couldn't enable notify for Client CSC Measurement Characteristic.
Couldn't enable notify for Client FTM Training Status Characteristic.
FTMS (trainer) is controlled by another Client (Training App)!
Client (Central) is Up and Running!

BSP Library : 1.3.0
Bootloader : s140 6.1.1
Serial No : C2BA380FAD3CBBC2

--------- SoftDevice Config ---------
Max UUID128 : 10
ATTR Table Size : 4096
Service Changed : 1
Central Connect Setting

  • Max MTU : 23
  • Event Length : 3
  • HVN Queue Size : 1
  • WrCmd Queue Size: 1

--------- BLE Settings ---------
Name : ItsyBitsy nRF52840 Express
Max Connections : Peripheral = 0, Central = 1
Address : E2:AA:F7:E9:06:E0 (Static)
TX Power : 0 dBm
Conn Intervals : min = 20.00 ms, max = 30.00 ms
Conn Timeout : 2000 ms
Central Paired Devices:

@cherryphilip74
Copy link
Author

Dear Jörgen,

my comments in bold

Dear Filippo, I am very happy with the results! It looks like the Simcline_FTMS is working very well with your Elite. A few minor points like not correct handling of long device names for the Oled display (only 10 char positions) was already corrected in the version 1.1 that I prepared the last days.

"18:51:24.343 -> Simcline >> ERROR << Basic Motor Funtions are NOT working!!" Please do not blame the messenger! The code is testing the actuator + Time-of-Flight-sensor assembly for correct functioning by moving it up a determined distance and check exactly the end result. Then it sets a movement down and checks the end result! If this is not working 100%: you will get the error message and any further use of the actuator is blocked...(To avoid damaging the setup!) You know the drill from your Simcline usage (with TACX) in the past. If one gets this message you have to troubleshoot the involved components and check carefully their assembly in your setup! So please use the test-programs that can be accessed in the Simcline repository.... Let me guess: you have forgotten to plugin the 12V DC power for the actuator... Afterall the board (+Oled+ToF-Sensor) is powered (5V) over the USB connection (needed for the Serial Monitor) with your PC/Laptop, so that is working properly but the actuator is not moving (no power) when requested in the test code --> Error message!

I'm forgot to change the highest and lowest value for microswitch activation, now motor works fine
#define MINPOSITION 18 // VL6180X highest value top microswitch activated to mechanically stop operation
#define MAXPOSITION 243 // VL6180X lowest value bottom microswitch activated to mechanically stop operation

I am puzzeled by your comment: lost power & cadence signal What was happening? How did you know? Please be more specific and detailed about what you observed!

During the ride just to test simcline with ftms, the data field (Rouvy) related to power, cadence, speed has shown "N/A" for each parameters for around 1 second, after this time then I got the righ informations. This event accourred 2 times during the test.

I had the same event during last mine workout.
I left "DIRETO SIM (BLE)" trainer enabled In my trainer list of Rouvy (I belived to have changed with "DIRETO XR(ANT+)" trainer) and nRF52 switched on with FTMS_Zwift loaded, so with FTMS used as bridge. During the ride 3 N/A events accourred inside to 60 min workout window.

About the discrepancy between the road inclination that the training app is presenting on the screen and what that very same app is sending to the trainer (for setting is resistance) ....... we have been here before! [Please check this] (https://github.com/Berg0162/simcline/tree/master/Tacx%20Smart#simcline-in-tts4-controlled-operation)

The bottom line is: WhatYouSeeIsNotWhatYouAlwaysGet This sometimes is due to your own settings in the App (Difficulty Setting in Zwift: 50% and not 100%), but also simply App company policy... Rouvy is a positive exception, but there are more!

Is it possible to use a polynominal function? No discrepance with TACX and BKOOL application
Example

image

<style> </style>
SimCline Rouvy SimCline Rouvy SimCline Rouvy SimCline Rouvy SimCline Rouvy SimCline Rouvy SimCline Rouvy SimCline Rouvy SimCline Rouvy
0 0,0 1 0,9 2 1,9 3 3,0 4 4,2 5 5,5 6 6,9 7 8,4 8 10,0
0,1 0,1 1,1 1,0 2,1 2,0 3,1 3,1 4,1 4,3 5,1 5,6 6,1 7,1 7,1 8,6 8,1 10,2
0,2 0,2 1,2 1,1 2,2 2,1 3,2 3,2 4,2 4,5 5,2 5,8 6,2 7,2 7,2 8,7 8,2 10,3
0,3 0,3 1,3 1,2 2,3 2,2 3,3 3,4 4,3 4,6 5,3 5,9 6,3 7,3 7,3 8,9 8,3 10,5
0,4 0,4 1,4 1,3 2,4 2,3 3,4 3,5 4,4 4,7 5,4 6,1 6,4 7,5 7,4 9,0 8,4 10,7
0,5 0,5 1,5 1,4 2,5 2,5 3,5 3,6 4,5 4,8 5,5 6,2 6,5 7,6 7,5 9,2 8,5 10,9
0,6 0,6 1,6 1,5 2,6 2,6 3,6 3,7 4,6 5,0 5,6 6,3 6,6 7,8 7,6 9,4 8,6 11,0
0,7 0,7 1,7 1,6 2,7 2,7 3,7 3,8 4,7 5,1 5,7 6,5 6,7 7,9 7,7 9,5 8,7 11,2
0,8 0,7 1,8 1,7 2,8 2,8 3,8 4,0 4,8 5,2 5,8 6,6 6,8 8,1 7,8 9,7 8,8 11,4
0,9 0,8 1,9 1,8 2,9 2,9 3,9 4,1 4,9 5,4 5,9 6,8 6,9 8,3 7,9 9,8 8,9 11,5

I will test today the v0.1.1

A new version (v01.1.) is about uploaded: 1) handles disconnection and reconnection of devices more robust, 2) allows for Smartphone connection to set some operation variables and manual control of actuator. Notice: Smartphone can only be connected when the training app (Zwift) is NOT connected, so when the Simcline (Server-side) is advertising --> Only one (1) controlling app is allowed to connect and drive the Simcline at any time. (You know, 2 captains on one ship is a recipe for disaster) I have also uploaded a new Companion App version that will recognize the Simcline_FTMS (and not only the Simcline_TACX and Simcline_Wahoo versions!). Thanks for the testing results and keep doing the good work! Best wishes Jörgen.

Here the new feedback from serial monitor

08:13:29.404 -> <<-- SIMCLINE supporting: CPS, CSC and FTMS -->>
08:13:29.404 -> ------------------------- Version 01.0 -------------------------
08:13:29.404 -> Simcline equiped with: Feather nRF52832
08:13:29.404 -> Feather internal Get & Set PRSdata to Max: 21600 Min: 19300 Perc.: 100 Displ.: 2
08:13:29.404 -> SSD1306 OLED display is running...
08:13:35.952 -> Simcline Basic Motor Funtions are working!!
08:13:36.153 -> FTM Service and Chars are 'initialized'
08:13:36.153 -> CP Service and Chars are 'initialized'
08:13:36.153 -> CSC Service and Chars are 'initialized'
08:13:36.153 -> Generic Access Service and Chars are 'initialized'
08:13:36.153 -> Device Information Service and Chars are 'initialized'
08:13:36.153 -> Start Client-side Scanning for CPS, CSC and FTMS!
08:13:49.767 -> Found Advertising Peripheral with FTMS, CPS and CSC! See Raw data packet:
08:13:49.767 -> Timestamp Addr Rssi Data
08:13:49.767 -> 000020376 EE:18:4B:1F:9F:3E -64 03-19-85-04-02-01-06-05-02-26-18-18-18-06-16-26-18-01-20-00-0A-09-44-49-52-45-54-4F-20-58-52
08:13:49.848 -> Feather nRF52 (Central) connected to Trainer (Peripheral) device: [DIRETO XR] MAC Address: EE:18:4B:1F:9F:3E
08:13:49.848 -> Now checking all mandatory Client Services and Characteristics!
08:13:49.848 -> Discovering Client Cycling Power (CP) Service ... Found it! CPS Max Payload: 20 Data Length: 27
08:13:49.848 -> Discovering Client CP Measurement characteristic ... Found it!
08:13:49.968 -> Discovering Client CP Control Point characteristic ... Found it!
08:13:50.088 -> Discovering Client CP Feature characteristic ... Found it!
08:13:50.208 -> -> Client Reads Raw CP Feature bytes: [4] [ 0D 02 00 00 ]
08:13:50.208 -> Pedal power balance supported
08:13:50.208 -> Wheel revolution data supported
08:13:50.208 -> Crank revolution data supported
08:13:50.208 -> Offset compensation supported
08:13:50.208 -> Discovering Client CP Sensor Location characteristic ... Found it!
08:13:50.289 -> -> Client Reads CP Location Sensor: Loc#: 0 Other
08:13:50.289 -> Discovering Cycling Speed and Cadence (CSC) Service ... Found it! CSCS Max Payload: 20 Data Length: 27
08:13:50.329 -> Discovering Client CSC Measurement CHR ... Found it!
08:13:50.490 -> Discovering Client CSC Location CHR ... Found it!
08:13:50.570 -> -> Client Reads CSC Location Sensor: Loc#: 0 Other
08:13:50.570 -> Discovering Client CSC Feature CHR ... Found it!
08:13:50.650 -> -> Client Reads Raw CSC Feature bytes: [2] [ 03 00 ]
08:13:50.650 -> Wheel rev supported
08:13:50.650 -> Crank rev supported
08:13:50.690 -> Found Client Generic Access
08:13:50.770 -> Found Device Name: [DIRETO XR]
08:13:50.851 -> Found Appearance: [1157]
08:13:50.931 -> Found Client Device Information:
08:13:51.011 -> Client Manufacturer: Elite
08:13:51.253 -> Client Serial Number: 52687
08:13:51.253 -> Discovering Client Fitness Machine (FTM) Service ... Found it! FTMS Max Payload: 20 Data Length: 27
08:13:51.293 -> Discovering Client FTM Feature Characteristic ... Found it!
08:13:51.413 -> -> Client Reads Raw FTM Feature bytes: [8] [ 86 50 00 00 0C E0 00 00 ]
08:13:51.413 -> Discovering Client FTM Training Status Characteristic ... Found it!
08:13:51.493 -> Discovering Client FTM Supported Resistance Level Range Characteristic ... Found it!
08:13:51.614 -> -> Client Reads Raw FTM Supported Resistance Level Range bytes: [6] [ 00 00 C8 00 01 00 ]
08:13:51.614 -> Discovering Client FTM Supported Power Range Characteristic ... Found it!
08:13:51.774 -> -> Client Reads Raw FTM Supported Power Range bytes: [6] [ 00 00 A0 0F 01 00 ]
08:13:51.774 -> Discovering Client FTM Indoor Bike Data Characteristic ... Found it!
08:13:51.894 -> Discovering Client FTM Control Point Characteristic ... Found it!
08:13:52.055 -> Discovering Client FTM Status Characteristic ... Found it!
08:13:52.255 -> Configuring the Server Device Information Service
08:13:52.255 -> Configuring the Server Cycle Power Service
08:13:52.255 -> Configuring the Server Cadence and Speed Service
08:13:52.255 -> Configuring the Server Fitness Machine Service
08:13:52.295 -> Configuring the Server NUS Service
08:13:52.295 -> Setting up the Server-side advertising payload(s)
08:13:52.295 -> Setting Server Device Name to: [Sim DIRETO]
08:13:52.295 -> Setting Server Appearance to: [1157]
08:13:52.295 -> Server-side is CPS, CSC and FTMS advertising!

Best Regards
Filippo

@Berg0162
Copy link
Owner

Dear Filippo,
This Simcline_FTMS code is working almost perfectly.
The short "glitches: N/A" (CPS and CSC) I cannot explain. Fortunately they are only happening once in an hour and are not fatal.
Next time you run the Simcline unable the Debug function //#DEBUG, possibly there was a missed packet or responses did not occur in time. Debug function is costing time and it might be critical at special moments...
Best Wishes,
Jörgen.

@Berg0162
Copy link
Owner

Dear Filippo,
I saw you have been deleting some of your contributions in this issue.... Any special reason I should know about?
Are you now on a regularly basis using the Simcline code and your setup with the Direto XR during indoor trainingen? Can you give an update of the present status? I would appreciate some feedback about your experiences...
Regards,
Jörgen.

@cherryphilip74
Copy link
Author

Dear Jörgen!

I'm sorry, but I didn't delete anything.
I am surprised by this and have no explanation for what happened.

I'm using SimCline standalone and not together with my bike. The reason is that I have to modify the fork bike mount with the new standard (through pin), at the same time I'm acquiring informations with debug enabled.

To help you I think it could be useful to have an excel file with the expectations.. let's say a bug list that I can fill / observed during my workout.

Regards,
Filippo

@Berg0162
Copy link
Owner

Dear Filippo,
I am as puzzled as you are about posts that disappear....
I suggest you close this issue and if you notice errors or malfunctioning behavior of the Simcline FTMS code please
use: Simcline FTMS with Elite Direto
Best wishes,
Jörgen.

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

No branches or pull requests

3 participants