Bosch Smart System (BES3)
BikeBridge connects to Bosch Smart System eBikes over BLE using the Bosch MCSP protocol - no Bosch Flow app, GMS, or account required.
The officially published Live Data Interface (LDI) does not publish any values out of the box.
Supported actions
- Pair and bond with the bike directly (no Flow app)
- Read speed, distance travelled, and battery state of charge and temperature
- Read the assist mode along with its name as configured on the bike
- Receive the assist mode catalog the bike advertises when connecting
- Read the remaining range for each assist mode
- Read the limits configured for each assist mode (maximum speed, motor power, torque, and assistance)
- Keep the bike's clock and timezone in sync with the phone
Bonding and authentication
Pairing uses standard Bluetooth LE "Just Works" authentication and initiates a bond with the bike.
Once bonded, the bike starts its own authentication/registration process. It asks the phone who it is and what it supports, and BikeBridge replies with: identity, capabilities, battery level, time and timezone. The bike only starts streaming ride data after this authentication has been completed, and repeats it on every reconnect.
User info Protocol Buffer:
message UserInfo {
optional string user_id = 1;
optional string displayed_user_name = 2;
}
The username is currently hardcoded to BikeBridge, and the UUID is randomly generated once and reused thereafter (via the Flow app, this is your user account ID).
Registration
The bike only starts streaming ride data for peers that complete the registration process. All of this traffic passes over the MCSP service described below.
The replay is generated in BoschRegistration.kt. A few frames are rebuilt at connect time rather than hardcoded:
- the rider identity and name (a random UUID +
BikeBridgeas the name) - the phone's battery level, TIME and TIME_ZONE
- a heartbeat every 60 seconds keeps the session alive
MCSP
The bike exposes the Bosch MCSP service carrying the MessageBus, a binary protocol on top of which Bosch pushes datapoint updates as protobuf messages.
MCSP:
- Service:
00000010-eaa2-11e9-81b4-2a2ae2dbcce4 - Notify characteristic (bike -> phone):
00000011-eaa2-11e9-81b4-2a2ae2dbcce4 - Write characteristic (phone -> bike):
00000012-eaa2-11e9-81b4-2a2ae2dbcce4
Assist modes and range
The bike advertises the assist mode catalog: a short and a long name per mode, the current mode as a position index into that catalog, and each mode's limits.
The remaining range is pushed per assist mode. The REACHABLE_RANGE datapoint (0x1857) carries a packed list with one value per mode (in km).
Each mode also carries a limits entry (ASSIST_MODE_LIMITS, 0x188B) with the maximum speed (km/h x 100), maximum motor power (W), maximum motor torque, and maximum motor assistance.