Bluetooth Interface Documentation¶
Service Overview¶
The scooter exposes several Bluetooth LE services for control and monitoring. All services use the base UUID: xxxx-6e67-5d0d-aab9-ad9126b66f91
Device Information¶
- Device Name: "unu Scooter"
- Company ID: 0xE50A
- Advertising: 1 second interval, 3 minute duration
- Connection Interval: 20-75ms
- Security: MITM enabled, LESC enabled, display-only pairing (6-digit PIN), bonding supported
Control Service (9a590000)¶
Primary control interface for scooter functions
| Characteristic | Description | Values |
|---|---|---|
| 9a590001 | Control Input | - "scooter:state lock" - "scooter:state unlock" - "scooter:seatbox open" - "scooter:blinker right" - "scooter:blinker left" - "scooter:blinker both" - "scooter:blinker off" |
| 9a590002 | Power Control | - "hibernate" - "wakeup" - "reboot" (soft reboot via pm-service) - "hard-reboot" (power-cycle all rails via nRF52) |
hard-reboot is only accepted during normal operation (stand-by, suspend, parked, ready-to-drive). It's rejected during active hibernation entry or if a hard reboot is already in progress.
Status Service (9a590020)¶
Provides scooter state information
| Characteristic | Description | Values |
|---|---|---|
| 9a590021 | Operating State | - "stand-by" - "off" - "parked" - "shutting-down" - "ready-to-drive" - "updating" |
| 9a590022 | Seatbox State | - "open" - "closed" - "unknown" |
| 9a590023 | Handlebar Lock | - "locked" - "unlocked" |
| 9a590024 | Temperature | NTCALUG01A thermistor, tenths of °C |
Battery Service (9a590040)¶
Auxiliary battery monitoring
| Characteristic | Description | Values |
|---|---|---|
| 9a590041 | AUX Voltage | 0-15000mV |
| 9a590043 | Charge Status | - "absorption-charge" - "not-charging" - "float-charge" - "bulk-charge" |
| 9a590044 | Charge Level | 0-100% in 25% steps |
Connectivity Battery Service (9a590060)¶
CBB status monitoring
| Characteristic | Description | Values |
|---|---|---|
| 9a590061 | Charge Level | 0-100% |
| 9a590063 | Remaining Capacity | Integer |
| 9a590064 | Full Capacity | Integer |
| 9a590065 | Cell Voltage | mV |
| 9a590072 | Charge Status | - "not-charging" - "charging" - "unknown" |
Power State Service (9a5900a0)¶
System power state monitoring
| Characteristic | Description | Values |
|---|---|---|
| 9a5900a1 | Power State | - "booting" - "running" - "suspending" - "suspending-imminent" - "hibernating-imminent" - "hibernating" |
(cf. State Diagram)
Main Battery Service (9a5900e0)¶
Primary battery monitoring
| Characteristic | Description | Values |
|---|---|---|
| 9a5900e2 | Primary State | - "unknown" - "asleep" - "active" - "idle" |
| 9a5900e3 | Primary Present | 0/1 |
| 9a5900e6 | Primary Cycles | Integer |
| 9a5900e9 | Primary SoC | 0-100% |
| 9a5900ee | Secondary State | - "unknown" - "asleep" - "active" - "idle" |
| 9a5900ef | Secondary Present | 0/1 |
| 9a5900f2 | Secondary Cycles | Integer |
| 9a5900f5 | Secondary SoC | 0-100% |
Power Mux Service (9a590100)¶
| Characteristic | Description | Values |
|---|---|---|
| 9a590101 | Selected Input (read) | Active battery source |
Aux Charger Control Service (9a590120)¶
LTC4020 auxiliary battery charger control
| Characteristic | Description | Values |
|---|---|---|
| 9a590121 | Safe Set (write) | 0=disable, 1=enable (with safety checks) |
| 9a590122 | Force Set (write) | 0=disable, 1=enable (bypass safety checks) |
| 9a590123 | Status (read) | Current charger enabled state |
Accelerometer Service (9a590200)¶
| Characteristic | Description | Values |
|---|---|---|
| 9a590201 | Wake-up Suspend (notify) | Movement detected in suspend mode |
| 9a590202 | Wake-up Hibernation (notify) | Movement detected in hibernation mode |
Extended Commands Service (9a590400)¶
Unified extensible command/response channel for phone app interaction
| Characteristic | Description | Values |
|---|---|---|
| 9a590401 | Command | Write-only, up to 128 bytes. Null-terminated string command (MITM-protected) |
| 9a590402 | Response | Read+notify, up to 512 bytes. Response string from iMX (MITM-protected) |
Supported commands:
| Command | Description | Response |
|---|---|---|
nav:dest lat,lon[,name] |
Set navigation destination | nav:ok |
nav:clear |
Clear navigation destination | nav:ok |
nav:fav:add lat,lon,name |
Save a location | nav:fav:added:<id> |
nav:fav:delete <id> |
Delete saved location | nav:ok |
nav:fav:navigate <id> |
Navigate to saved location | nav:ok |
nav:fav:list |
List saved locations | nav:fav:count:<n> then nav:fav:<id>:lat,lon,name per entry |
usb:ums |
Enter USB Mass Storage mode | usb:ok |
usb:normal |
Exit USB Mass Storage mode | usb:ok |
keycard:list |
List keycards | Response via keycard-service |
keycard:count |
Count keycards | Response via keycard-service |
keycard:add:<uid> |
Add keycard | Response via keycard-service |
keycard:remove:<uid> |
Remove keycard | Response via keycard-service |
time:set <unix_timestamp> |
Set system clock | time:ok |
config:apn <value> |
Set cellular APN | config:ok |
config:hibernate-timer <seconds> |
Set hibernation timeout | config:ok |
config:update-channel <channel> |
Set OTA update channel (stable/testing/nightly) | config:ok |
config:auto-standby-seconds <seconds> |
Set auto-lock idle timeout when parked (0=disabled, 0-3600) | config:ok |
alarm:enable |
Enable alarm system | alarm:ok |
alarm:disable |
Disable alarm system | alarm:ok |
alarm:arm |
Arm alarm (runtime, bypasses enabled setting) | alarm:ok |
alarm:disarm |
Disarm alarm | alarm:ok |
alarm:start / alarm:start:<N> |
Trigger alarm; duration in seconds, default from settings | alarm:ok |
alarm:stop |
Stop active alarm | alarm:ok |
status:maps-available |
Query if offline maps are installed | status:maps-available:true or false |
status:navigation-available |
Query if routing engine is available | status:navigation-available:true or false |
cap:list |
Enumerate supported capability categories | cap:count:<n> then cap:<name> per category |
cap:<category> |
List commands for a category | cap:<category>:count:<n> then cap:<category>:<command> per command |
Error responses follow the pattern <prefix>:error:<details>.
Scooter Info Service (9a59a040)¶
System-level telemetry and configuration
| Characteristic | Description | Values |
|---|---|---|
| 9a59a041 | iMX Software Version | Version string (read-only) |
| 9a59a042 | Mileage/Odometer | Integer, meters (read-only) |
| 9a59a043 | System Time | Unix timestamp string (write-only) |
| 9a59a044 | Navigation Active | 0 = no destination, 1 = destination set (read+notify) |
| 9a59a045 | UMS Status | 0 = normal, 1 = USB Mass Storage mode (read+notify) |
System Info Service (9a59a000)¶
| Characteristic | Description | Values |
|---|---|---|
| 9a59a001 | nRF Version | Version string (e.g. "v2.2.1-ls") |
| 9a59a021 | Reset Reason | Nordic RESETREAS register value (see below) |
| 9a59a022 | Reset Count | Integer |
RESETREAS (Reset Reason Register)¶
Reset reason register. Cumulative unless cleared. Fields are cleared by writing '1'. If no reset sources are flagged, indicates reset from on-chip reset generator (power-on-reset or brownout reset).
| Field | Bit(s) | Access | Description | Value | Meaning |
|---|---|---|---|---|---|
| RESETPIN | 0 | RW | Reset from pin-reset detected | 0 1 |
Not detected Detected |
| DOG | 1 | RW | Reset from watchdog detected | 0 1 |
Not detected Detected |
| SREQ | 2 | RW | Reset from soft reset detected | 0 1 |
Not detected Detected |
| LOCKUP | 3 | RW | Reset from CPU lock-up detected | 0 1 |
Not detected Detected |
| OFF | 16 | RW | Reset due to wake up from System OFF mode (DETECT signal from GPIO) | 0 1 |
Not detected Detected |
| LPCOMP | 17 | RW | Reset due to wake up from System OFF mode (ANADETECT signal from LPCOMP) | 0 1 |
Not detected Detected |
| DIF | 18 | RW | Reset due to wake up from System OFF mode (debug interface mode entry) | 0 1 |
Not detected Detected |
| NFC | 19 | RW | Reset due to wake up from System OFF mode (NFC field detect) | 0 1 |
Not detected Detected |
| VBUS | 20 | RW | Reset due to wake up from System OFF mode (VBUS rising into valid range) | 0 1 |
Not detected Detected |
Register layout has: - Low bits (0-3): Basic reset sources - High bits (16-20): System OFF wake-up sources