A local, Bluetooth-LE integration for Segway / Ninebot kick-scooters (Max G30 / G30D, ES, E, F series). No cloud account, no MQTT, no bridge — Home Assistant talks to the scooter directly over BLE (through the local adapter or any connectable ESPHome Bluetooth proxy).
Status: beta. Built as a packaged, HACS-installable, self-contained fork of ownbee/ninebot-integration + ownbee/ninebot-ble, with the protocol library and its
miauthcrypto vendored in so nothing is pip-installed at runtime. The upstream author only verified the F-series; G30/G30D support is expected but not yet confirmed on real hardware — testing welcome.
Read-only sensors, polled while the scooter is awake and in range:
- Battery: charge %, voltage, current, two temperatures, health, capacity, remaining mAh, BMS serial & firmware
- Ride data: total mileage, trip mileage, remaining & predicted range, average speed, total/riding operation time, power (W)
- Controller: body temperature, supply voltage, firmware versions (ESC / BLE), error & alarm codes
- State: lock, speed-limit, buzzer/alarm, activated, external battery present, operating mode (Normal/Eco/Sport), KERS level, cruise control, tail light, configured speed limits
Writable entities:
- Ride mode (select): Normal / Eco / Sport
- Recuperation / KERS (select): Off / Medium / Strong
- Cruise control (switch)
- Tail light (switch)
⚠️ Writes are experimental. The write frame is community-derived and not yet fully verified across firmwares — treat the controls as best-effort and check that the value actually changes. Lock/unlock and speed-limit controls are intentionally not shipped yet: a wrong speed-limit write is dangerous, so they follow once the write path is confirmed on real hardware.
The polling interval (default 30 s) is configurable under the integration's Configure button.
Confirmed working on the Max G30D. Other E / MAX / F series scooters using the same protocol are likely to work.
Newer models (G2, G3, F2, E3 …) may use a different, newer BLE protocol that this integration does not speak yet. They are no longer rejected outright: if no known scooter is found, the setup dialog lists every nearby Bluetooth device so an unsupported model can at least be attempted.
If your model doesn't work, this is the most useful thing you can send: open the integration, use Download diagnostics, and attach the file to an issue. It contains what the scooter advertises and which GATT services it exposes — that alone shows whether the existing protocol can apply. No coding needed.
- Home Assistant 2024.12 or newer with the Bluetooth integration set up
(USB adapter passed through, or an ESPHome proxy with
active: true). - The scooter must be awake and within Bluetooth range when polled.
- Firmware new enough to speak the encrypted (miauth) protocol — very old firmwares may not work.
Until this is in the default HACS store, add it as a custom repository:
- HACS → three-dot menu → Custom repositories
- Repository:
https://github.com/BobMcGlobus/ha-ninebot, category Integration - Install Ninebot Scooter, then restart Home Assistant.
The scooter is auto-discovered via its Bluetooth advertisement. Go to Settings → Devices & Services, you should see a discovered Ninebot device — or add it manually via Add Integration → Ninebot Scooter.
On first connect the scooter registers Home Assistant as an authorized device. When Home Assistant asks, press the power button on the scooter once to confirm. No key extraction and no cloud login are required — the app-side key is generated locally per session.
Note: Ninebot scooters typically remember a single paired controller key. Depending on firmware, pairing Home Assistant may re-register the scooter and require you to re-pair the official Segway-Ninebot app afterwards (and vice versa).
- ownbee/ninebot-ble (MIT) — protocol
library, vendored in
custom_components/ninebot_scooter/ninebot_ble/. - dnandha/miauth (AGPL-3.0) — Ninebot crypto,
vendored in
.../ninebot_ble/_miauth/; itself a port of scooterhacking/NinebotCrypto.
Because this project bundles AGPL-3.0 code (miauth), the whole project is
distributed under the GNU AGPL-3.0. See LICENSE and
NOTICE.
This project is not affiliated with, endorsed by, or supported by Segway or Ninebot. Use at your own risk.