Suunto app Forum Suunto Community Forum
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    [PROJECT] Bosch eBike live data on Suunto Race S — open source ESP32 bridge + SuuntoPlus app

    Scheduled Pinned Locked Moved Suunto Plus Development
    3 Posts 2 Posters 507 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Michele SellaM Offline
      Michele Sella
      last edited by

      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

      Screenshot.png

      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/BoschEBikeSuunto

      A 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.

      1 Reply Last reply Reply Quote 9
      • Michele SellaM Offline
        Michele Sella
        last edited by

        I’ve also added a new branch in the ESP32 repo:
        https://github.com/SellA/BoschEBikeESP32/tree/feature/multi-mode

        Besides the standard bridge mode, it now supports exposing standard BLE sensor profiles as well:

        Power + Cadence
        Speed + Cadence
        Power only

        These 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:
        241b5f60-a758-476f-9131-c1158af2009e-image.png

        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.

        S 1 Reply Last reply Reply Quote 0
        • S Offline
          stereodreieck86 @Michele Sella
          last edited by stereodreieck86

          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.

          1. 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?

          2. Motor Power and Assist Mode

            Are these values available through the official LDI, or are they only obtainable through Bosch’s proprietary protocol?

          3. 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?

          4. 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?

          5. 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.

          1 Reply Last reply Reply Quote 0

          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
          • First post
            Last post

          Suunto Terms | Privacy Policy