Skip to content

Device Management Commands

Parameters

get_para_info

Get advanced device settings.

Command
{
  "get_para_info": {}
}
Response
{
  "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.

Command
{
  "set_para_info": {
    "obstacle_avoidance_sensitivity": 3,
    "defaultCuttingHeight": 5,
    "path_direction": 90
  }
}
Response
{
  "type": "set_para_info_respond",
  "message": { "result": 0, "value": null }
}

PIN Code

dev_pin_info

Query or set the device PIN code.

Command (query)
{
  "dev_pin_info": {
    "action": "query"
  }
}
Command (set)
{
  "dev_pin_info": {
    "action": "set",
    "pin_code": "1234"
  }
}
Response
{
  "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().

Command
{
  "ota_version_info": null
}
Command
{
  "ota_version_info": {}
}
Response
{
  "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.

Command (full firmware upgrade)
{
  "ota_upgrade_cmd": {
    "type": "full",
    "content": {
      "upgradeApp": {
        "version": "v5.7.1",
        "downloadUrl": "https://<oss-host>/novabot-file/<firmware-file>.deb",
        "md5": "<md5-checksum>"
      }
    }
  }
}
Response
{
  "type": "ota_upgrade_cmd_respond",
  "message": {
    "result": 0,
    "value": null
  }
}

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:

  1. mqtt_node receives command, forwards JSON to ota_client_node via ROS 2 service /ota_upgrade_srv
  2. ota_client_node waits for charging state (download only while charging)
  3. Downloads .deb via libcurl (resume-capable, max 24h timeout)
  4. Verifies MD5 checksum
  5. Extracts with dpkg -x, sets upgrade flag, reboots
  6. run_ota.sh performs atomic swap with rollback on failure

Charger processing:

  1. Charger handles command locally (no LoRa relay)
  2. Downloads firmware via esp_https_ota() (ESP-IDF library)
  3. 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.

Status (device → app)
{
  "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.

Command
{
  "get_current_pose": {}
}
Response
{
  "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.

Command
{
  "get_vel_odom": {}
}
Response
{
  "type": "get_vel_odom_respond",
  "message": { "result": 0, "value": null }
}

get_log_info

Query device log information.

Command
{
  "get_log_info": {}
}
Response
{
  "type": "get_log_info_respond",
  "message": { "result": 0, "value": null }
}

get_version_info

Get firmware version information.

Command
{
  "get_version_info": {}
}
Response
{
  "type": "get_version_info_respond",
  "message": { "result": 0, "value": null }
}

get_dev_info

Get device information.

Command
{
  "get_dev_info": {}
}
Response
{
  "type": "get_dev_info_respond",
  "message": { "result": 0, "value": null }
}

gbf

Unknown diagnostic command (short name suggests debug/factory command).

Command
{
  "gbf": {}
}
Response
{
  "type": "gbf_respond",
  "message": { "result": 0, "value": null }
}

mst

Unknown diagnostic command (short name suggests debug/factory command).

Command
{
  "mst": {}
}
Response
{
  "type": "mst_respond",
  "message": { "result": 0, "value": null }
}

Control Mode

set_control_mode

Switch between control modes (e.g., manual vs autonomous).

Command
{
  "set_control_mode": {
    "mode": 0
  }
}
Response
{
  "type": "set_control_mode_respond",
  "message": { "result": 0, "value": null }
}

get_control_mode

Get the current control mode.

Command
{
  "get_control_mode": {}
}
Response
{
  "type": "get_control_mode_respond",
  "message": {
    "result": 0,
    "value": {
      "mode": 0
    }
  }
}

System Commands

reset_factory

Trigger a factory reset on the mower. The mower subscribes to this command.

Command
{
  "reset_factory": {}
}

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.

Command
{
  "reset_utm_origin_info": {}
}

ROS service: Uses SaveUtmOriginInfo.srv / LoadUtmOriginInfo.srv internally.


wifi_ble_active

Activate/reactivate the WiFi and BLE radios.

Command
{
  "wifi_ble_active": {}
}

WiFi

get_wifi_rssi

Get WiFi signal strength.

Command
{
  "get_wifi_rssi": {}
}
Response
{
  "type": "get_wifi_rssi_respond",
  "message": {
    "result": 0,
    "value": {
      "rssi": -55
    }
  }
}

Timer / Scheduling

timer_task

Push a timer/scheduled task to the mower.

Command
{
  "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.

Command
{
  "timer_task_active": {
    "task_id": "uuid"
  }
}

timer_task_stop

Stop a scheduled timer task.

Command
{
  "timer_task_stop": {
    "task_id": "uuid"
  }
}

Connection

auto_connect

Auto-connect command.

Command
{
  "auto_connect": {}
}

connection_state

Connection state change (unsolicited from device).

Status (device → app)
{
  "type": "connection_state",
  "message": {
    "state": "connected"
  }
}

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 {}.

Command
{
  "get_lora_info": null
}
Command
{
  "get_lora_info": 0
}
Response
{
  "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)