[PROJECT] Bosch eBike live data on Suunto Race S — open source ESP32 bridge + SuuntoPlus app
-
Hi everyone,
I ride a Bosch eBike and I wanted a single place for all my training data: GPS, heart rate, and also what the bike is doing — cadence, motor power, battery consumption. The Suunto app is where I review all my activities, so the goal was to have eBike data recorded directly into the Suunto workout, available for analysis afterwards alongside the rest of the activity data. Seeing it live on the watch face during the ride turned out to be a nice bonus too.
After some digging into the Bosch BLE protocol I built a solution and I’m sharing it here in case it’s useful to others.
The problem: why an ESP32 is needed
Bosch eBikes broadcast live data over BLE using their proprietary Live Data Interface (LDI) protocol (a protobuf-encoded stream over a custom service UUID). Suunto watches don’t natively speak this protocol — they have no built-in way to connect to a Bosch drive unit and decode its data.
The only way to bridge the gap today is with a small piece of hardware in between. I used an ESP32 microcontroller (~€5–10) that acts as a transparent proxy: it connects to the bike as an LDI client, then re-exposes the same data stream as an LDI server that the Suunto can read through a SuuntoPlus app.
It works, but it means carrying an extra device on the bike. A small ESP32 dev board fits neatly zip-tied to the frame, powered from a USB power bank.
The result

A SuuntoPlus app that shows in real time:
Cadence rpm
Speed km/h
Motor power W
Battery %
Odometer km
Post-workout summary includes max and average cadence and power.What you need
A Bosch eBike with smart system and latest firmware from May 1st 2026
Any ESP32-WROOM-32 board (~€5–10)
A Suunto watch with SuuntoPlus support (Race, Race S, Vertical, 9 Peak Pro, …)
VS Code + PlatformIO (for the ESP32) and the SuuntoPlus Editor extension (for the watch app)
Both projects are open source on GitHub:ESP32 bridge: https://github.com/SellA/BoschEBikeESP32
Suunto app: https://github.com/SellA/BoschEBikeSuuntoA note on compatibility
I’ve only tested this on my own setup (my specific Bosch eBike and my Suunto Race S). The LDI protocol should be consistent across Bosch smart system bikes, but I can’t guarantee it works with every bike or every Suunto model. If you try it and run into issues — or if it works great — I’d love to hear back.
A wish for the future

The ESP32 bridge works well, but it’s an extra moving part. The LDI protocol is well-documented and publicly available. It would be fantastic if a future Suunto firmware update added native Bosch LDI support directly on the watch — no bridge required, just the watch connecting to the bike over BLE like any other sensor. I imagine a few other Suunto + Bosch eBike riders out there would appreciate it too. Just putting it out there for the Suunto team!

Ride safe, and happy to answer any questions.
-
I’ve also added a new branch in the ESP32 repo:
https://github.com/SellA/BoschEBikeESP32/tree/feature/multi-modeBesides the standard bridge mode, it now supports exposing standard BLE sensor profiles as well:
Power + Cadence
Speed + Cadence
Power onlyThese modes don’t provide the full Bosch telemetry, but they work without the companion SuuntoPlus app and integrate natively with Suunto’s internal metrics and training features. For example, power data is correctly used for Suunto power zones, training load calculations, and related analytics.
I also updated the integrated WiFi access point UI, where all bridge settings can now be configured directly from the browser:

There is now also a simulation mode that allows testing the connection with Suunto watches and bike computers without needing to connect to the actual eBike. Useful for validating the setup or experimenting with different configurations without having the bike nearby.
-
Hi Michele,
First of all, thank you very much for publishing your Bosch Smart System project. It has been extremely helpful while researching the Bosch ecosystem.
I’m currently analysing Bosch Smart System support in several open-source projects (OpenTracks, Home Assistant, BikeBridge, etc.) to better understand which data is officially available through Bosch’s Live Data Interface (LDI) and which parts still rely on the older proprietary protocol.
After studying the available documentation and source code, only a few questions remain that I hope you might be able to answer from your own experience.
-
Official LDI vs. proprietary Bosch protocol
Does your current implementation rely exclusively on the official Bosch LDI, or do you still need any data from the older reverse-engineered Bosch BLE protocol?
-
Motor Power and Assist Mode
Are these values available through the official LDI, or are they only obtainable through Bosch’s proprietary protocol?
-
Protocol maturity
If someone were starting a new open-source project today, would you recommend building directly on the official LDI, or are there still important reasons to support the older Bosch protocol?
-
Firmware compatibility
Have you observed any significant differences in LDI behaviour between different Smart System bikes (for example Bosch SX vs. Performance Line CX), or has the protocol been consistent in your experience?
-
Field reliability
Are there any officially documented LDI fields that, in practice, are not consistently transmitted by all bikes or firmware versions?
I’m trying to distinguish between what is officially supported, what is universally available in practice, and what still depends on reverse engineering.
Thank you again for sharing your work and for any insights you can provide.
-
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login