Specialized Turbo e-bike integration

I ride a Specialized Turbo e-bike and wanted to track battery health and ride stats in Home Assistant. Specialized’s own app is fine, but I wanted the data in my dashboards alongside everything else.

What it does

It connects to Specialized Turbo e-bikes (2017+ models with a TCU) over Bluetooth Low Energy and exposes telemetry as sensor entities. Turn the bike on, HA discovers it, enter the pairing PIN from the TCU, and you get sensors:

  • Battery: charge %, capacity, remaining Wh, health, temperature, voltage, current, charge cycles
  • Motor/ride: speed, rider power (watts), motor power, cadence, odometer, motor temp

How it works

The bike broadcasts over Bluetooth. Home Assistant picks it up, connects, and starts receiving telemetry. No polling, no cloud, everything stays local. The BLE protocol was reverse-engineered by Sepp62/LevoEsp32Ble (MIT). I wrote a Python library to handle the parsing, and the HA integration sits on top of that.

Install

Available through HACS as a custom repository:

  1. HACS > Integrations > three-dot menu > Custom repositories
  2. Add https://github.com/JamieMagee/ha-specialized-turbo as type Integration
  3. Download, restart HA
  4. Turn on the bike

You’ll need a Bluetooth adapter that HA can reach (USB dongle or an ESPHome Bluetooth proxy with active: true).

Links

If you have a Specialized Turbo, give it a try and let me know how it goes. Bug reports and PRs welcome.

1 Like

No HUD display for your helmet?

…maybe v2.0?

Hi, nice, thanks for the integration.

I wanted to try it with my 1gen Turbo Levo (2018). But I immediately get no_devices_found error when trying to add integration (after install via HACS). But I can see the bike advertised as near bluetooth device via HA.
Do you require the name of the bluetooth device to be named “Specialized Turbo”? Not sure if I am reading the code well.

This is how my bike is identified to HA:

Address: C6:1A:10:12:5E:48
Name: SPECIALIZED
Source: A0:88:69:62:22:F7

Advertisement data

Manufacturer data

525 0x02 0x86 0x57 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

Service data

Service UUIDs

00001816-0000-1000-8000-00805f9b34fb

If needed I have LightBlue in my mobile phone and I am not afraid to tinker a little.