Device Management Commands¶
Parameters¶
get_para_info¶
Get advanced device settings.
{
"type": "get_para_info_respond",
"message": {
"result": 0,
"value": {
"obstacle_avoidance_sensitivity": 3,
"target_height": 50,
"defaultCuttingHeight": 5,
"path_direction": 90,
"cutGrassHeight": 5
}
}
}
| Parameter | Description |
|---|---|
obstacle_avoidance_sensitivity |
Obstacle detection sensitivity (1-5) |
target_height |
Target mowing height (mm) |
defaultCuttingHeight |
Default blade height level (0-7) |
path_direction |
Mowing path direction (0-180°) |
cutGrassHeight |
Current cutting height setting |
set_para_info¶
Set advanced device settings.
{
"set_para_info": {
"obstacle_avoidance_sensitivity": 3,
"defaultCuttingHeight": 5,
"path_direction": 90
}
}
PIN Code¶
dev_pin_info¶
Query or set the device PIN code.
{
"type": "dev_pin_info_respond",
"message": {
"result": 0,
"value": {
"pin_code": "1234"
}
}
}
no_set_pin_code¶
Flag indicating no PIN code has been set.
OTA Firmware Update¶
ota_version_info¶
Query current firmware versions.
v0.4.0 firmware requires null value
Same as get_lora_info — charger firmware v0.4.0 uses cJSON_IsNull().
{
"type": "ota_version_info_respond",
"message": {
"result": 0,
"value": {
"mower_version": "v5.7.1",
"charger_version": "v0.3.6",
"mcu_version": "v3.5.8"
}
}
}
Handled locally by charger
ota_version_info is handled locally by the charger firmware — it does NOT relay via LoRa.
ota_upgrade_cmd¶
Start an OTA firmware upgrade. The command contains the download URL, target version, and MD5 hash.
{
"ota_upgrade_cmd": {
"type": "full",
"content": {
"upgradeApp": {
"version": "v5.7.1",
"downloadUrl": "https://<oss-host>/novabot-file/<firmware-file>.deb",
"md5": "<md5-checksum>"
}
}
}
}
Upgrade types:
| Type | Description |
|---|---|
full |
Full firmware replacement (.deb for mower, .bin for charger) |
increment |
Incremental app update |
file_update |
Individual file updates (.zip with check.json manifest) |
| system | System upgrade via apt full-upgrade && reboot |
Security
There is no authentication on this command. Any MQTT message on Dart/Send_mqtt/<SN> with ota_upgrade_cmd triggers a firmware download and install. The download URL is not validated — it can point to any server.
Mower processing:
mqtt_nodereceives command, forwards JSON toota_client_nodevia ROS 2 service/ota_upgrade_srvota_client_nodewaits for charging state (download only while charging)- Downloads .deb via libcurl (resume-capable, max 24h timeout)
- Verifies MD5 checksum
- Extracts with
dpkg -x, sets upgrade flag, reboots run_ota.shperforms atomic swap with rollback on failure
Charger processing:
- Charger handles command locally (no LoRa relay)
- Downloads firmware via
esp_https_ota()(ESP-IDF library) - Writes to inactive OTA partition, switches boot partition, reboots
See OTA Update Flow for the complete pipeline.
ota_upgrade_state¶
Unsolicited progress updates during OTA upgrade. Published by the device continuously during download and installation.
{
"type": "ota_upgrade_state",
"message": {
"progress": 45,
"state": "downloading"
}
}
| State | Description |
|---|---|
downloading |
Firmware package being downloaded |
upgrading |
Installing firmware |
success |
Update completed successfully |
fail |
Update failed |
Robot Diagnostics¶
New — discovered in mower firmware
These commands are handled directly by the mower's mqtt_node (not relayed via charger LoRa).
get_current_pose¶
Query the mower's current position directly.
{
"type": "get_current_pose_respond",
"message": {
"result": 0,
"value": {
"x": 1.234,
"y": -5.678,
"theta": 1.57
}
}
}
get_vel_odom¶
Query velocity and odometry data.
get_log_info¶
Query device log information.
get_version_info¶
Get firmware version information.
get_dev_info¶
Get device information.
gbf¶
Unknown diagnostic command (short name suggests debug/factory command).
mst¶
Unknown diagnostic command (short name suggests debug/factory command).
Control Mode¶
set_control_mode¶
Switch between control modes (e.g., manual vs autonomous).
get_control_mode¶
Get the current control mode.
System Commands¶
reset_factory¶
Trigger a factory reset on the mower. The mower subscribes to this command.
Destructive
This resets the mower to factory defaults. No explicit response is sent.
reset_utm_origin_info¶
Reset the UTM GPS origin reference point used by the localization module.
ROS service: Uses SaveUtmOriginInfo.srv / LoadUtmOriginInfo.srv internally.
wifi_ble_active¶
Activate/reactivate the WiFi and BLE radios.
WiFi¶
get_wifi_rssi¶
Get WiFi signal strength.
Timer / Scheduling¶
timer_task¶
Push a timer/scheduled task to the mower.
{
"timer_task": {
"task_id": "uuid",
"start_time": "08:00",
"end_time": "12:00",
"map_id": 0,
"map_name": "map0",
"repeat_type": "weekly",
"is_timer": true,
"work_mode": 0,
"task_mode": 0,
"cov_direction": 90,
"path_direction": 90
}
}
No explicit response
The mower acknowledges timer updates via report_state_timer_data which includes the current timer task list.
timer_task_active¶
Activate a scheduled timer task.
timer_task_stop¶
Stop a scheduled timer task.
Connection¶
auto_connect¶
Auto-connect command.
connection_state¶
Connection state change (unsolicited from device).
LoRa Configuration¶
get_lora_info¶
Get LoRa module configuration. Handled locally by charger (no LoRa relay).
v0.4.0 firmware requires null value
Charger firmware v0.4.0 uses cJSON_IsNull() to validate this command.
You must send null as the value, not 0 or {}.
{
"type": "get_lora_info_respond",
"message": {
"result": 0,
"value": {
"addr": 718,
"channel": 16,
"hc": 20,
"lc": 14
}
}
}
Complete Command Summary¶
Parameters & PIN¶
| Command | Response | Handled by |
|---|---|---|
get_para_info |
get_para_info_respond |
Mower (direct MQTT) |
set_para_info |
set_para_info_respond |
Mower (direct MQTT) |
dev_pin_info |
dev_pin_info_respond |
Mower (direct MQTT) |
no_set_pin_code |
— (flag) | Mower |
OTA Firmware¶
| Command | Response | Handled by |
|---|---|---|
ota_version_info |
ota_version_info_respond |
Charger (local) or Mower (direct MQTT) |
ota_upgrade_cmd |
ota_upgrade_cmd_respond |
Charger (local) or Mower (direct MQTT, via ota_client_node) |
ota_upgrade_state |
— (unsolicited) | Charger or Mower (progress updates during OTA) |
Timer / Scheduling¶
| Command | Response | Handled by |
|---|---|---|
timer_task |
via report_state_timer_data |
Mower |
timer_task_active |
— | Mower |
timer_task_stop |
— | Mower |
Diagnostics (mower only)¶
| Command | Response | Description |
|---|---|---|
get_current_pose |
get_current_pose_respond |
Current position (x, y, theta) |
get_vel_odom |
get_vel_odom_respond |
Velocity/odometry |
get_log_info |
get_log_info_respond |
Device logs |
get_version_info |
get_version_info_respond |
Firmware versions |
get_dev_info |
get_dev_info_respond |
Device info |
get_wifi_rssi |
get_wifi_rssi_respond |
WiFi signal strength |
gbf |
gbf_respond |
Unknown (debug/factory) |
mst |
mst_respond |
Unknown (debug/factory) |
Control Mode (mower only)¶
| Command | Response | Description |
|---|---|---|
set_control_mode |
set_control_mode_respond |
Switch control mode |
get_control_mode |
get_control_mode_respond |
Query control mode |
System (mower only)¶
| Command | Response | Description |
|---|---|---|
reset_factory |
— | Factory reset |
reset_utm_origin_info |
— | Reset GPS origin |
wifi_ble_active |
— | Reactivate radios |
Connection & LoRa¶
| Command | Response | Handled by |
|---|---|---|
auto_connect |
— | — |
get_lora_info |
get_lora_info_respond |
Charger (local, no LoRa) |