stefaandesmet2003 / ESP32Sterzo

Zwift steering device using ESP32 Arduino
5 stars 3 forks source link

Is code still working? #1

Closed Berg0162 closed 10 months ago

Berg0162 commented 2 years ago

Best Stefaan, Werkt dit nog na de laatste Zwift-Sterzo update? Met vriendelijke groet, J. van den Berg.

stefaandesmet2003 commented 2 years ago

Dag Jörgen, geen idee, voor mij was dit een one-off fun projectje. Heb jij al geprobeerd, of weet je meer? Aan de sterzo kant is allicht niets gewijzigd (in het bijzonder de challenge exchange bv. ) want Elite heeft niet de gewoonte van firmware upgrades. Maar als Zwift nu gaat checken op de naam 'STERZO' bv, of de aanwezigheid van alle BLE services/characteristics van een echte sterzo, dan zou het kunnen fout gaan met deze fake.

stefaandesmet2003 commented 2 years ago

Bedankt @dobon voor de info. Interessant, want bij mij bleef die laatst hangen in 'activating', maar heb toen niet meer al rijdend getest.

dobon commented 2 years ago

@stefaandesmet2003 Je hebt gelijk, ik trek mijn eerdere bericht in. Mijn test was onvoldoende.

Berg0162 commented 1 year ago

Goede morgen Stefaan, Ik heb jouw code niet gecheckt maar heb de afgelopen week de code van K. Wakeham en Fiveohhh bewerkt tot nRF52840 + Bluefruit code en dat werkt niet..meer.... Als ik het goed heb begrepen (door je code te bekijken) heb jij deze mensen ook als bron (voor je code) gebruikt, vandaar mijn nieuwsgierigheid. Voor mij is het ook maar een zijpad want ik heb een Sterzo werkend in de "pain cave". Dat helpt wel met testen maar heeft me nog niet de oplossing gebracht! Een Github vriend in Canada wilde iets proberen en kwam met de suggestie deze code te gebruiken om een "Sterzo-alike" in te bouwen in een zelfbouw indoor "Climb"-opstelling. Daarom ben ik er ingedoken. Na lang zoeken vind ik wel steeds meer berichten dat het protocol is verbroken. Ik heb zelf mijn originele Sterzo via een registratie procedure (Elite app “Upgrado”, hoe verzin je de naam?) moeten updaten naar de nieuwste versie. Die registratie wijst wel in de richting van een echte DRM en dan wordt het moeilijk. Mijn Sterzo reageert (via nRF-Connect) nog steeds op de manier zoals in de code geprogrammeerd echter er komt geen stroom van echte hoekmetingen op gang, wel wordt steeds de default waarde FF:FF:FF:FF gegenereerd... Kennelijk moet er nog iets meer gebeuren in het protocol om validatie te bereiken.... Het zou zomaar kunnen dat het serienummer (via DIS) wordt bevraagd (door Zwift) en op de achtergrond gecheckt tegen Zwift/Elite registratie database, om vervolgens de Sterzo werking vrij te geven.... Dank voor je reactie en als je nog iets te weten komt dat kan helpen hoor ik het graag! Groeten, Jörgen van den Berg.

Op zo 27 mrt. 2022 om 22:57 schreef stefaandesmet2003 < @.***>:

Dag Jörgen, geen idee, voor mij was dit een one-off fun projectje. Heb jij al geprobeerd, of weet je meer? Aan de sterzo kant is allicht niets gewijzigd (in het bijzonder de challenge exchange bv. ) want Elite heeft niet de gewoonte van firmware upgrades. Maar als Zwift nu gaat checken op de naam 'STERZO' bv, of de aanwezigheid van alle BLE services/characteristics van een echte sterzo, dan zou het kunnen fout gaan met deze fake.

— Reply to this email directly, view it on GitHub https://github.com/stefaandesmet2003/ESP32Sterzo/issues/1#issuecomment-1080017695, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANS5LSR5HXQISTIRAPIXNCTVCDKVXANCNFSM5RYZZFQQ . You are receiving this because you authored the thread.Message ID: @.***>

stefaandesmet2003 commented 1 year ago

Dag Jörgen, De code hier is quasi dezelfde als van de originele auteurs. Er is dus wel een firmware update gebeurd op de sterzo. Ok, dan is misschien de challenge nu variabel? De fake stuurt steeds dezelfde challenge en dat werkte indertijd met Zwift. Wat stuurt je sterzo? En stuurt die steeds hetzelfde? Wakeham had ook een tabel gemaakt met alle mogelijke combinaties. ben wel vergeten hoe dat weer zat, maar je nrfconnect zal dan wel de correcte replies moeten sturen op de challenges van de sterzo om die te activeren. Of Zwift je sterzo registratie online verifieert, kan je misschien checken door internet af te zetten na het starten van zwift, en dan de sterzo in te schakelen en proberen pairen. Als je wat logs van nrfconnect opstuurt kan ik proberen meezoeken, heb zelf geen sterzo..

Berg0162 commented 1 year ago

Beste Stefaan, Dank voor je uitgebreide antwoord en suggesties! Ik heb een originele Elite Sterzo steerer dus is het niet bepaald een urgent probleem voor mij.... het was meer een kwestie van nieuwsgierigheid en onderzoeken of ik mijn SIMCLINE ontwerpen ( https://github.com/Berg0162/simcline) eventueel kon uitbreiden met "virtueel sturen a la Sterzo". Elite & Zwift beschermen actief hun investeringen in de Sterzo. Het is niet anders! Als je een bezoekje brengt aan https://github.com/Berg0162/simcline https://github.com/Berg0162/simcline dan zul je zien dat ik vrij recent de mogelijkheden heb uitgebreid naar de Wahoo Kickr (proprietary)... Ik zou ook heel graag een zelfde oplossing bieden voor indoor trainers met het open protocol FTMS en heb daar ook al onderdelen voor geprogrammeerd... Jij hebt de nodige ervaring en diepgaande kennis van FTMS dankzij je toepassing voor een Elite Direto... Kunnen we daarover rechtstreeks contact hebben via e-mail en niet in het openbaar via dit kanaal? Groeten, Jörgen.

Op vr 14 okt. 2022 om 00:35 schreef stefaandesmet2003 < @.***>:

Dag Jörgen, De code hier is quasi dezelfde als van de originele auteurs. Er is dus wel een firmware update gebeurd op de sterzo. Ok, dan is misschien de challenge nu variabel? De fake stuurt steeds dezelfde challenge en dat werkte indertijd met Zwift. Wat stuurt je sterzo? En stuurt die steeds hetzelfde? Wakeham had ook een tabel gemaakt met alle mogelijke combinaties. ben wel vergeten hoe dat weer zat, maar je nrfconnect zal dan wel de correcte replies moeten sturen op de challenges van de sterzo om die te activeren. Of Zwift je sterzo registratie online verifieert, kan je misschien checken door internet af te zetten na het starten van zwift, en dan de sterzo in te schakelen en proberen pairen. Als je wat logs van nrfconnect opstuurt kan ik proberen meezoeken, heb zelf geen sterzo..

— Reply to this email directly, view it on GitHub https://github.com/stefaandesmet2003/ESP32Sterzo/issues/1#issuecomment-1278248780, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANS5LSU35KEQDHM5JRFYGK3WDCFBJANCNFSM5RYZZFQQ . You are receiving this because you authored the thread.Message ID: @.***>

stefaandesmet2003 commented 1 year ago

Dag Jürgen, open gerust een issue op m'n andere repo. mooi project trouwens, je simcline. met jouw werk moet het mogelijk zijn ook tacx en wahoo te ondersteunen op de hometrainer app.

ik zie dat je 2 verschillende approaches hebt voor tacx en wahoo. als je de MITM approach wilt gebruiken met FTMS zal je alle BLE services moeten implementeren die Zwift gebruikt (geen idee welke dat zijn). je tacx concept is eenvoudiger voor trainers die ANT+/BLE hebben; in dat geval zal je enkel de FTMS indoor-bike-data notification nodig hebben, die bevat het resistance level dat zwift heeft ingesteld over ANT+; je krijgt die elke seconde, geen polling nodig. er zijn mogelijk verschillen in de range, bij direto is die 0->200 (% / 2), eventueel mee in rekening te brengen voor de conversie naar incline.

kan je je MITM concept niet gebruiken om de comms tussen sterzo en zwift volledig te identificeren? ik denk dat het echt niet zo hard beschermd is als je denkt. ik vermoed dat men zal spelen met de initiële challenge, die misschien volgens een ongedocumenteerd algoritme wordt bepaald bv. op basis van de huidige tijd.

Berg0162 commented 1 year ago

Beste Stefaan, Als ik je goed begrijp dan zie je een directe analogie in FEC over BLE van TACX met FTMS. Voorwaarde is in beide situaties dat de gebruiker primair de Trainer paired over ANT+ met de client (Zwift). Het BLE kanaal blijft dan "vrij" voor het "uitlezen" van de FTMS-IBD-characteristic. Vraag is: update de trainer actief de FTMS IBD-characteristic ondanks het feit dat de trainer primair gecontroleerd wordt via een ANT+ connectie met de client? Immers er zijn dan 2 clients actief.... In het geval van TACX is het antwoord positief maar hoe zit het met b.v. de Elite Direto ? Ik heb alleen een TACX voorhanden en heb geen kennissen die een Elite bezitten. Heb je enig idee? Met vriendelijke groet, Jörgen

Berg0162 commented 1 year ago

Stel dat de IBD-characteristic uitgelezen kan worden, bevat die dan de variabelen waarmee de grade of inclination kan worden berekend die door de via ANT+ controlerende client zijn ingesteld? (IBD levert: Cadence, Power, Speed...) In het geval van FEC over BLE bij TACX is er de mogelijkheid om die actief op te vragen via een Page 51 request.... (standaard ANT+ feature) De nieuwste Direto XR heeft ook support voor FEC over BLE protocol maar Elite heeft NIET Page 51 request geïmplementeerd. Een Simcline gebruiker die recent een nieuwe Direto XR kocht heeft dat uitgezocht..... en benaderde mij voor een oplossing. Zou een van die Custom Elite characteristics niet de toegang tot Grade informatie bieden? Hoe zou Elite de communicatie met hun Rizer product hebben geïmplementeerd? Vast via een van hun Custom characteristics !?

stefaandesmet2003 commented 1 year ago

Hoi, gezellig babbeltje :) op je eerste vraag is het antwoord ja. Als je direto via ANT+ koppelt met Zwift (of andere), doet Zwift alle initialisatie en control, en kan je tegelijkertijd via BLE de power, cadence, resistance, pedal analysis etc ontvangen. (zie python script in bijlage als voorbeeld, file naar .py hernoemen). onder windows werkte bleak heel goed, onder ubuntu was het wel vaak hit & miss. test_bleak.txt IBD heeft niet de inclination, dat is een simulatieparameter, die de trainer intern allicht omrekent naar een resistance setting. En die krijg je wel terug in IBD. direto ondersteunt trouwens de inclination setting over BLE FTMS niet; wel over ANT+ via page 51, en Zwift of RGT gebruiken die ook effectief. ivm dual control : heb ik nooit geprobeerd. Als de trainer via ANT+ wordt gestuurd, krijg je mogelijks geen FTMS control point notifications, omdat je volgens FTMS spec eerst controle moet hebben over de trainer (request control) heb je nog wat input gestuurd op het issue op je repo, hopelijk helpt het je verder!

Berg0162 commented 1 year ago

Stefaan, Bedankt voor je uitgebreide en goed geïnformeerde antwoorden! Echt heel behulpzaam! De code in je Repo's had ik allemaal al zorgvuldig uitgeplozen en bestudeerd. Ze hebben zeker bijgedragen aan mijn huidige kennis niveau! Ik heb mijn kaarten vooralsnog gezet op FTMS, vooral ook omdat het een open standaard is en steeds meer (nieuwe versies van) trainers die ook ondersteunen. Value for effort! Niet alleen Elite en Wahoo maar zelfs sommige van de nieuwste TACX trainers ondersteunen het! Ik heb een Server implementatie van FTMS geprogrammeerd om een diepgaand inzicht te krijgen in het protocol zelf en als eerste helft van een MITM toepassing voor Simcline gebruikers. Bijgevoegd de output van een FTMS server met de volgende (basic) ondersteunde Features: unsigned char ftmfBuffer[8] = {(unsigned char)(AverageSpeedSupported | CadenceSupported | ResistanceLevelSupported),\ (unsigned char)(PowerMeasurementSupported),0x00,0x00,0x00,\ (unsigned char)(IndoorBikeSimulationParametersSupported),0x00,0x00}; Ik ben erg benieuwd naar welke Features jouw Direto ondersteunt. Zou je die kunnen nagaan? Met vriendelijk groet, Jörgen FTMS_Server_Implementation_Debug_Output.txt

stefaandesmet2003 commented 1 year ago

Dag Jürgen, Bij deze!

Screenshot_2022-10-17-17-16-44-104_no nordicsemi android mcp Screenshot_2022-10-17-17-16-22-226_no nordicsemi android mcp Screenshot_2022-10-17-17-15-41-334_no nordicsemi android mcp

Berg0162 commented 1 year ago

Hartelijk dank voor de gedetailleerde info! Dat gaat zeker helpen om FTMS client-server code te optimaliseren! Ik vergat nog bij de "FTMS_Server_Implementation_Debug_Output" te vermelden dat die het resultaat is van de eerste minuten indoor rijden tijdens de Volcano route op Zwift. Nu ga ik de client zijde coderen en dan met twee Adafruit Feathers en Zwift testen... Jij hebt vast niet een Adafruit Feather Express rondslingeren zodat je MITM code componenten van mij zou kunnen testen tegen een echte Elite en Zwift? Met vriendelijke groet, Jörgen.

stefaandesmet2003 commented 1 year ago

Geen adafruit hw sorry, wel een barebone nrf51 en wemos esp32. Lijkt erop dat ik die van onder het stof mag halen, maar dat is hier meer iets voor de donkere wintermaanden ;)

buckfast-beekeeper commented 10 months ago

@stefaandesmet2003: De software op een ESP32 en op een ESP32S3 gezet. Beide ESP geven in de Serial monitor aan dat de Sterzo ready is. Toch krijg ik het 'steering' symbool niet in de zwift applicatie. Niet als de Sterzo eerst wordt opgestart, niet als eerst Zwift wordt opgestart. In apparaatbeheer zie ik de Sterzo wel verschijnen. Dus is er wel degelijk BLE communicatie. Geprobeerd op 2 verschillende laptops. Blijkbaar zijn er in Zwift toch wat zaken gewijzigd.

De Wahoo Kickr, Wahoo hartslag meter en Garmin cadabce sensor melden zich wel perfect als BLE device. Omdat ik ANT+ als standaard gebruik is er normaal alleen de Sterzo die van BLE gebruik maakt. Enig idee?

stefaandesmet2003 commented 10 months ago

@stefaandesmet2003: De software op een ESP32 en op een ESP32S3 gezet. Beide ESP geven in de Serial monitor aan dat de Sterzo ready is. Toch krijg ik het 'steering' symbool niet in de zwift applicatie. Niet als de Sterzo eerst wordt opgestart, niet als eerst Zwift wordt opgestart. In apparaatbeheer zie ik de Sterzo wel verschijnen. Dus is er wel degelijk BLE communicatie. Geprobeerd op 2 verschillende laptops. Blijkbaar zijn er in Zwift toch wat zaken gewijzigd.

De Wahoo Kickr, Wahoo hartslag meter en Garmin cadabce sensor melden zich wel perfect als BLE device. Omdat ik ANT+ als standaard gebruik is er normaal alleen de Sterzo die van BLE gebruik maakt. Enig idee?

stefaandesmet2003 commented 10 months ago

@buckfast-beekeeper ik heb al sinds vorig jaar hetzelfde, maar kom er niet aan toe om het verder uit te zoeken. Zwift heeft dit achterpoortje gesloten, maar er is zeker nog een ander dat open staat...