Skip to content

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 + BikeBridge as 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.

See also