Project to enable Bosch + Garmin integration

⚡ EMTB Pro Go Pro — exclusive discounts & ad-free Peaty's 25% off & more · Ad-free browsing · Pro badge See the deals →
Fair question! I want to prove the concept properly before I start sharing anything. Hopefully not too much of a wait - I'll sign you up for the beta programme 😁
Thanks for all your efforts and willing to share! I am wondering whether one needs a lot of HW manufactoring experience and equipment to follow the instructions and build such a module?
 
Thanks for all your efforts and willing to share! I am wondering whether one needs a lot of HW manufactoring experience and equipment to follow the instructions and build such a module?
There are a few nRF52840 boards that this should work with. The one I'm using needs a tiny bit of soldering to connect the battery but others already have a socket to plug the battery straight in. Obviously there's a chance that using a different board means things don't work the same but that's something we'll discover (and hopefully overcome) along the way!
 
Thank you I really appreciate your efforts! I will try to make myself familiar with nRF52840 to prepare myself for the big day ☺️
 
Good Morning from Germany!

I'm feeling bad about asking for Bulcan experiences in this DiY Thread, but here is the only place where I found some customers.
Spending 200 bucks plus shipping is not mentally ill for getting basic sensors (cadence, speed, power meter l/r, battery level, assistant mode, assistance level), so I have to ask:

- As far as I understand I can mount it directly under the Kiox 400 (between motor and display) and don't have to dissamble the motor housing to get access to the interface of the motor itself, correct?
- One Italian user reported that he gets no updates of the current active/changed assistance mode and it only gets synced once right after booting up the bike system. Can somebody confirm this issue?
- Another discussion I read was the 0 speed issue which breaks the auto pause functionality of Garmin and I have to use a 3rd party RPM sensor on my hub to bypass it. (Stopping for a minute -> Bulcan still reports ghost speed values). Is that true?
- Are there any other known issues?

Thanks in advance!
Rather late reply, sorry, but saw not all your queries were answered.

1. Yes, if you scroll back I uploaded a photo to show where I put mine, just under the kiox. Every bike differed though so available space might be different.
2. Don’t use that feature, only connect power and cadence.
3. Ive set my devise to use Garmin device/GPS speed so this doesn’t affect my readings and auto pause still works as intended.
4. Mines been rock solid since I installed it and never once touched it since, connects everytime and no dropouts.
 
1000025976.webp
Just an update to confirm I'm still going with this - image from today's ride with nrf52840 acting as a power sensor and Garmin showing rider power (grey bar 2nd from top), cadence and I'm using left/right balance to show rider/motor contribution to total power.

Still a few details to sort out to get behaviour as I want it and make it as simple to start up as possible.
 
View attachment 181606Just an update to confirm I'm still going with this - image from today's ride with nrf52840 acting as a power sensor and Garmin showing rider power (grey bar 2nd from top), cadence and I'm using left/right balance to show rider/motor contribution to total power.

Still a few details to sort out to get behaviour as I want it and make it as simple to start up as possible.
Does this require an Android App as well or just the nrf52840 to transfer the data?
 
Does this require an Android App as well or just the nrf52840 to transfer the data?
Yes at the moment the chain is bike to app to nrf52840 to garmin. It also seems that you need the Flow app installed - I've tested my app on a phone without Flow and from what I can see the connection gets dropped and no data is sent. I'm guessing that Flow does some sort of handshake or verification with the bike so that may be worth further exploration after I've shared v1. 0.
 
Yes at the moment the chain is bike to app to nrf52840 to garmin. It also seems that you need the Flow app installed - I've tested my app on a phone without Flow and from what I can see the connection gets dropped and no data is sent. I'm guessing that Flow does some sort of handshake or verification with the bike so that may be worth further exploration after I've shared v1. 0.
Thanks! I have tried quite a few things with a nrf52840 and ESP32. Both paired with the bike, but receiving real data was not possible so far. Will start another try this week.
 
Would you recommend any specific nrf52840 board, like the plus, sense or sense plus for this use case?
 
Would you recommend any specific nrf52840 board, like the plus, sense or sense plus for this use case?
I'm working with the Seeed XIAO nRF52840 Sense because I want to make use of the motion detection to wake the board up. I'll put full details on Github when the project is ready to share.

I'd recommend that people wait until I share the app and use that first to confirm that the bike data is being read, then buy the hardware after that.
 
I'm working with the Seeed XIAO nRF52840 Sense because I want to make use of the motion detection to wake the board up. I'll put full details on Github when the project is ready to share.

I'd recommend that people wait until I share the app and use that first to confirm that the bike data is being read, then buy the hardware after that.
Hello everyone,

I am proud owner of a brand new eBike with a Bosch Performance SX motor, and also a data collector with my Garmin. Very excited to use my bike, but also very annoyed by Bosch's lack of data sharing...

Thus, I am also working on an app that would do the bridge between the bike and act as a BLE sensor in Garmin.
I started from RobbyPee's app.

After a huge weekend of work (with the help of Gemini) :
- App is ported to iOS with Kotlin MultiPlatform, so it would probably work using Android too (but I don't have an Andoid phone for now) - but note that Bluetooth management is slightly different from iOS and will probably require adjustments.
- Scanning & connecting to the bike is OK
- Reading data from the bike is OK : speed, cadence, human power, motor power, battery (with a tiny difference from the Bosch app), and many others that will require further tests to understand what they are.
- Showing them in the app is OK
- Publishing them using BLE is OK in Zwift on another phone (showing power & cadence at least)

I am now focusing on the Power Sensor :
- Garmin Edge is detecting the sensor but fails to pair it. They are very strict on the way to detect/pair sensors.
- I managed to pair it twice in 2 days, but I can't manage to get it working each time for now.

Compared to HexagonSun's work with a XIAO chip that can handle ANT+ signals, I am limited to basic sensors due to BLE. - Garmin Edge only manages LEV through ANT+ (which means special pages on Garmin Edges)
- Garmin Edge supports 3 BLE Sensors maximum (max 12 with ANT+, including BLE ones)
- Compared to advanced solutions that reads the CAN bus, it will always require a smartphone that is paired with the bike (and logged-in to eBike Flow).
- But, if it works, no hardware may be required.

I will let you know as soon as I have a bit of time to cleanup a bit, share all this with the community :)

PS : after a lot of tries, there may be issues in using a smartphone, and especially the same that is already paired for "Garmin Connect", and trying to pair it also using BLE.. an additional chip such a SeeedStudio XIAO may be the fast way to success :)
 
Last edited:
after a lot of tries, there may be issues in using a smartphone, and especially the same that is already paired for "Garmin Connect"
Yeah I went through a similar process. Many attempts at getting a phone to act as a BLE power sensor but although the Garmin would find the sensor it would fail to actually connect and receive data (just spinning dots on the screen while it was trying to connect) .

Running nrfConnect on a different phone would show an apparently valid BLE connection with data updating so it's the Garmin being very picky about something the phone was doing. Hence the move to using another board as a bridge.
 
Yeah I went through a similar process. Many attempts at getting a phone to act as a BLE power sensor but although the Garmin would find the sensor it would fail to actually connect and receive data (just spinning dots on the screen while it was trying to connect) .

Running nrfConnect on a different phone would show an apparently valid BLE connection with data updating so it's the Garmin being very picky about something the phone was doing. Hence the move to using another board as a bridge.
Did you try to close the Garmin Connect App? I think Garmin does not allow two Bluetooth connections from the same device.
 
Did you try to close the Garmin Connect App? I think Garmin does not allow two Bluetooth connections from the same device.
I was testing with two phones, one an older Samsung on an earlier version of Android which doesn't have Connect installed. I can't be sure that I tested every BLE config on both phones but I feel like I gave the "phone connection" model a pretty good go.
 
Did you try to close the Garmin Connect App? I think Garmin does not allow two Bluetooth connections from the same device.
yes, I just find out that. when I disable the phone connection on the Garmin Edge, I manage to get a paired sensor :)
still investigating if it's working (before and after putting the phone connexion back... e.g. for the livetrack)
 
I was testing with two phones, one an older Samsung on an earlier version of Android which doesn't have Connect installed. I can't be sure that I tested every BLE config on both phones but I feel like I gave the "phone connection" model a pretty good go.
sure, I'm not very confident in the 100% phone connexion solution.
I will push some tests a bit further but if it appears that "dual" phone connexion is blocking, I will also move to a side-chip such as the seeedstudio xiao nRF52840 that supports BLE and ANT+ (for LEV pages on the Garmin Edge :))
 
yes, I just find out that. when I disable the phone connection on the Garmin Edge, I manage to get a paired sensor :)
Are you running on Android or iPhone? Could be a difference in OS, could be that I need to backtrack a bit! 🤔
 
Are you running on Android or iPhone? Could be a difference in OS, could be that I need to backtrack a bit! 🤔
I'm using an iPhone.
but I am afraid that iPhone (and probably modern smartphones in general) uses private resolvable addresses (= they change the MAC addresses for privacy and security) that is probably not be managed by the Garmin (or any other similar device) for sensors - and it will cause the Garmin to loss the sensor connectivity.
Btw I can't manage to redetect my sensor event after forgetting the old one XD.
Let's get a XIAO ^^
 
I'm using an iPhone.
but I am afraid that iPhone (and probably modern smartphones in general) uses private resolvable addresses (= they change the MAC addresses for privacy and security) that is probably not be managed by the Garmin (or any other similar device) for sensors - and it will cause the Garmin to loss the sensor connectivity.
Btw I can't manage to redetect my sensor event after forgetting the old one XD.
Let's get a XIAO ^^
note for anybody that would be interrested in a 100% software solution only : you may still use ConnectIQ data fields that will work fine a reliable way.
 
yes, I just find out that. when I disable the phone connection on the Garmin Edge, I manage to get a paired sensor :)
still investigating if it's working (before and after putting the phone connexion back... e.g. for the livetrack)
Sounds great, really curious if it works and very open for testing it...
 
Hello everyone,

A quick update from my side :
  • I focused on using the SeeedStudio XIAO nRF52840 that I ordered (great stuff)
  • I'm working on the "bridge" chip firmware and the app to get it all together - everything is promising :
    • bridge is discovered and connectable.
    • iOS app works fine with simulation data
    • I need to test all that with real bike data (can't get the computer so I had to wrap my chip with its battery to make it embeddable - that is almost done).

Remaining points to share stuff :
  • remove private keys and stuff from the git repo
  • cleanup a lot the project sources and provide a bit of documentation

Welcome help :
  • the iOS app I built is valid for 7 days. Since I don't want to pay 99$/y for a developer key, I went to the "SideStore" solution but can't get it work on my own phone. It will be a pain point for you to use my app... If someone knows the ecosystem and may help, I would be grateful (I'm not a mobile developer).
  • I'm waiting for the "U.S. Government export approval" to get the S340 SoftDevice for the XIAO to manage ANT+... (Evaluation Stack Requests - THIS IS ANT). It seems it usually takes a few weeks... If anybody has a copy of it... stale point either.

Stale points :
  • Use the smartphone as a BLE sensor (managed to get it discoverable and eventually connecting, but not reconnecting, ...)
  • I did not build the Andoid app for now. It should work but android native stuff (bluetooth, background tasks, ...) is not tested at all.

More to come :
  • With the XIAO chip, I also ordered power regulators and a CAN bus shield for a few € more (I'm from France). One day, I may find a bit of time to :
    • plug the chip to the CAN bus power delivery (no battery, no On/Off switch, ...)
    • plug the chip to the CAN bus... to read its data (and so remove the smartphone dependency)
 
I created an account for downloading the ANT+ SDK, we'll see if they give it to me any faster since I'm a US citizen.
 
I'm finally ready to share my Beta release. Full details are in the link below, but in summary it's an Android app that will connect with your bike, plus code to run on a Seeed XIAO nRF52840 Sense board to take the data from the phone app and emulate a power sensor that your Garmin can connect to. You don't need to be a hardware whizz to get it working, and it's about £20-£40 cost of components.


As I say in the Github README, please feed back any successes, failures etc.

app resized.webp


And big thanks to @robbydobs who did the ground work decoding the Bosch messages.
 
Last edited:
Hi
I just found your solution. Nice work congratulations!
Would this work with BES2? gen4 engine (BDU450) + kiox (BUI330)
BTW for feedback, I tried to install the apk on Samsung Galaxy S24 android 15.
Error: App not installed as package appears to be invalid.
Thanks
 
Hi
I just found your solution. Nice work congratulations!
Would this work with BES2? gen4 engine (BDU450) + kiox (BUI330)
BTW for feedback, I tried to install the apk on Samsung Galaxy S24 android 15.
Error: App not installed as package appears to be invalid.
Thanks
Honest answer is that I don't know if it will work with your motor. The best way to test is to install the app and see if it displays data, but obviously I've messed up the APK build so I'll investigate that. You could try building it from the source code using android studio but that's a bit more work. Thanks for letting me know.
 
Keep reading
    Browse all

    Similar Threads

    Community Stats

    Since 2018
    668K
    Messages
    40,712
    Members
    Join 30,000+ Riders, it's free!
    Back
    Top