Skip to content

BLE Protocol Overview

The Novabot app configures devices via BLE GATT (not via WiFi AP or MQTT). Commands are sent as JSON over a GATT characteristic.

GATT Service Structure

Property Value
Service UUID 0x1234
Characteristic 0x2222 Write Without Response + Notify (commands)
Characteristic 0x3333 Read + Write Without Response

BLE Device Names

Device BLE Name Name Match (case-insensitive)
Charger CHARGER_PILE chargerpile
Mower Novabot / NOVABOT novabot

Frame Format

Large payloads are split into chunks of ~20-27 bytes, surrounded by ASCII markers:

ble_start
{"set_wifi_info":{"sta":{"ss
id":"MyNetwork","passwd":"pa
ssword123","encrypt":0},"ap"
:{"ssid":"LFIC1230700XXX","p
asswd":"12345678","encrypt":
0}}}
ble_end

Command Flow

CRITICAL: Command order differs between charger and mower

The charger has an internal state machine that switches from "provisioning" mode to "info" mode after receiving get_signal_info. For chargers, set_wifi_info MUST be the first command. For mowers, get_signal_info can be sent first.

Charger Command Order

sequenceDiagram
    participant App
    participant Charger as Charger (BLE)

    App->>Charger: BLE Connect
    App->>Charger: Discover Services (UUID 0x1234)
    App->>Charger: Subscribe to 0x2222 Notify
    App->>Charger: Write: set_wifi_info (MUST be first!)
    Charger-->>App: Notify: set_wifi_info_respond
    App->>Charger: Write: set_rtk_info
    Charger-->>App: Notify: set_rtk_info_respond
    App->>Charger: Write: set_lora_info
    Charger-->>App: Notify: set_lora_info_respond
    App->>Charger: Write: set_mqtt_info
    Charger-->>App: Notify: set_mqtt_info_respond
    App->>Charger: Write: set_cfg_info (commit + reboot)
    Charger-->>App: Notify: set_cfg_info_respond
    Note over Charger: Reconnects WiFi + MQTT

Mower Command Order

sequenceDiagram
    participant App
    participant Mower as Mower (BLE)

    App->>Mower: BLE Connect
    App->>Mower: Discover Services (UUID 0x1234)
    App->>Mower: Subscribe to 0x2222 Notify
    App->>Mower: Write: get_signal_info
    Mower-->>App: Notify: get_signal_info_respond
    App->>Mower: Write: set_wifi_info (chunked)
    Mower-->>App: Notify: set_wifi_info_respond
    App->>Mower: Write: set_lora_info
    Mower-->>App: Notify: set_lora_info_respond
    App->>Mower: Write: set_mqtt_info
    Mower-->>App: Notify: set_mqtt_info_respond
    App->>Mower: Write: set_cfg_info (commit + reboot)
    Mower-->>App: Notify: set_cfg_info_respond
    Note over Mower: Reconnects WiFi + MQTT

BLE Commands Summary

Command Response Description
get_signal_info get_signal_info_respond Read WiFi RSSI + GPS quality
get_wifi_rssi get_wifi_rssi_respond Read WiFi signal strength
set_wifi_info set_wifi_info_respond Set WiFi SSID + password
set_mqtt_info set_mqtt_info_respond Set MQTT broker host/port
set_lora_info set_lora_info_respond Set LoRa configuration
set_rtk_info set_rtk_info_respond Set RTK GPS configuration
set_para_info set_para_info_respond Set other parameters
set_cfg_info set_cfg_info_respond Commit/activate configuration

See Charger Provisioning and Mower Provisioning for detailed flows.

See BLE Commands for full payload specifications.

Provisioning mode only

Devices do NOT respond to BLE commands when already connected to WiFi+MQTT (operational mode). BLE provisioning only works when the device is in setup mode.