Ninebot Scooter / BLE?

Here is a example output:

python segway_ble_client.py -a <mac-adress> -n <serial> --password <pw-from-app> info


Connecting to <mac> (gen2)...
client.py:646: UserWarning: Using default MTU value. Call _acquire_mtu() or set _mtu_size first to avoid this warning.  warnings.warn(Connected! MTU: 23
Device name (encryption key): <serial>
16:18:29 segway INFO Found Nordic UART service
16:18:29 segway INFO Phase 1: PRE_COMM (gen2)
16:18:30 segway INFO PRE_COMM response (rc=0): XX XX XX XX
16:18:30 segway INFO   auth: XXXX
16:18:30 segway INFO   sn:   XXXX (XXXX)
16:18:30 segway INFO   has_stored_pwd: True
16:18:30 segway INFO   Using CLI-provided password (16 bytes)
16:18:30 segway INFO Phase 3: AUTH
16:18:30 segway INFO AUTH response (rc=0): XXXXXX
16:18:30 segway INFO   Authenticated!
16:18:30 segway INFO Session saved for XX:XX:XX:XX:XX:XX
Authenticated! SN: XXXX
Serial Number:  XXXXX
ECU PN:         XXXXX
Main power:     503 (503=off, 511=on)
Active mode:    none (0x0000)
Battery:        76%
Speed:          0.0 km/h
Ave speed:      0.0 km/h
Trip max spd:   0.0 km/h
Range left:     69.3 km
Speed limit:    0 km/h
Max/rated:      100.0 km/h
Odometer:       XXXX.XXX km
Trip distance:  0.0 km
Precise mi:     0
Trip time:      0s
Time to full:   65535 (65535=N/A)
Power:          0 W (negative=regen)
Alarm:          0x0000
Alarm volume:   50%
Alarm sens:     Low
Auto-lock:      0s
Prompt volume:  66%
Sound preset:   Sound 2
Voltage:        ?
BMS cycles:     ?
rBool:          0x9F00 (2882=off, 2881=on)
FunBool:        0x5230
FunAppBool:     0x0010 (bit 4=electric brake available)
FunAppBool2:    0x0010 (bit 1=TCS available)
CTLBool2:       0x0084 (bit 10=ele brake rev, bit 13=TCS rev)
FunSupBool:     000000000000
Versions:       DIS=6.0.11  MCU=7.0.8  BLE=1.3.8  ECU=1.4.1  BMS=4.0.10

Pretty neat, i would for starters make a little commanline that is converting that to a json and then parse it with tempate into ha.
Would look like this:

{
    "serial_number": "XXXXX",
    "ecu_pn": "XXXXX",
    "main_power": 503,
    "active_mode": "none",
    "battery": 76,
    "speed": 0.0,
    "ave_speed": 0.0,
    "trip_max_spd": 0.0,
    "range_left": 69.3,
    "speed_limit": 0,
    "max_rated": 100.0,
    "odometer": 1234.56,
    "trip_distance": 0.0,
    "precise_mi": 0,
    "trip_time": 0,
    "time_to_full": 65535,
    "power": 0,
    "alarm": "0x0000",
    "alarm_volume": 50,
    "alarm_sens": "Low",
    "auto-lock": 0,
    "prompt_volume": 66,
    "sound_preset": "Sound 2",
    "voltage": null,
    "bms_cycles": null,
    "rbool": "0x9F00",
    "funbool": "0x5230",
    "funappbool": "0x0010",
    "funappbool2": "0x0010",
    "ctlbool2": "0x0084",
    "funsupbool": "000000000000",
    "versions": "DIS=6.0.11 MCU=7.0.8 BLE=1.3.8 ECU=1.4.1 BMS=4.0.10"
}

Hi,
I did some first tests with mqtt:
tichachm/pysegway_mqtt: a MQTT bridge for Segway Scooters based on https://codeberg.org/NootNooot/segway-ninebot-ble-cli

Any advice of where to start on adding this to a HA. Where to host the python script?

All I did is documented in the git repo, for HA Interation see:
pysegway_mqtt/homeassistan_mqtt_sensor.yaml at main · tichachm/pysegway_mqtt

You need to host the script on a device in Bluetooth range with the scooter (like raspberry pi ...).