Status Reports¶
Status reports are unsolicited messages sent periodically by devices. They are NOT responses to commands.
Charger Reports¶
up_status_info¶
Main status update from the charger. Published every ~2 seconds.
Topic: Dart/Receive_mqtt/LFIC1230700XXX
Encryption: None (plain JSON)
{
"type": "up_status_info",
"message": {
"charger_status": 285212929,
"mower_status": 0,
"mower_x": 0,
"mower_y": 0,
"mower_z": 0,
"mower_info": 0,
"mower_info1": 0,
"mower_error": 0,
"battery_capacity": 100
}
}
charger_status Bitfield¶
| Bit(s) | Mask | Source | Meaning |
|---|---|---|---|
| Bit 0 | 0x00000001 |
GPS NMEA parser | GPS valid (< 5 consecutive GNGGA parse failures) |
| Bit 8 | 0x00000100 |
RTK quality check | RTK quality OK (< 5 consecutive altitude deviations) |
| Middle bits | DAT_420013b8 |
LoRa RSSI | OR'd when LoRa RSSI in valid range (1-145) |
| Bits 24-31 | 0xFF000000 |
GNGGA field 8 | GPS satellite count (shifted << 24) |
Example values:
| Value (hex) | Byte 3 (sats) | Bits | Meaning |
|---|---|---|---|
0x00000000 |
0 sats | none | No GPS, no RTK, no LoRa |
0x0E000101 |
14 sats | GPS + RTK | 14 satellites, GPS and RTK OK |
0x10000101 |
16 sats | GPS + RTK | 16 satellites, GPS and RTK OK |
0x11000101 |
17 sats | GPS + RTK | 17 satellites, GPS and RTK OK |
mower_error Field¶
Not an error counter from the mower
mower_error is a LoRa heartbeat failure counter on the charger:
- Charger polls mower with LoRa
[0x34, 0x01]every ~1.5 seconds - Mower responds → counter resets to 0
- No response → counter increments by 1
- Only reported when counter >= 2 (filters brief interruptions)
Mower Position Fields¶
Mower position is received via LoRa from the mower's status report (19 bytes):
| Field | LoRa Bytes | Encoding | Description |
|---|---|---|---|
mower_status |
[7-10] | uint32 LE | Operational status |
mower_info |
[11-14] | uint32 LE | Info field 1 |
mower_x |
[15-17] | uint24 LE | X position (local meters) |
mower_y |
[18-20] | uint24 LE | Y position (local meters) |
mower_z |
[21-23] | uint24 LE | Z / heading |
mower_info1 |
[24-25] | uint16 LE | Info field 2 |
Mower Reports¶
The mower sends 3 JSON messages per cycle (~5 second interval), all AES-128-CBC encrypted.
report_state_robot¶
Main status report (~750B JSON, 800B encrypted).
Topic: Dart/Receive_mqtt/LFIN2230700XXX
Encryption: AES-128-CBC
{
"type": "report_state_robot",
"message": {
"battery_power": 100,
"battery_state": "CHARGING",
"work_status": 0,
"error_status": 132,
"error_msg": "",
"cpu_temperature": 35,
"x": 0,
"y": 0,
"z": 0,
"loc_quality": 100,
"current_map_id": "",
"prev_state": 0,
"work_mode": 0,
"task_mode": 0,
"recharge_status": 0,
"charger_status": 0,
"mow_blade_work_time": 72720,
"working_hours": 0,
"ota_state": 0,
"mowing_progress": 0,
"covering_area": 0,
"finished_area": 0,
"sw_version": "v0.3.25",
"mow_speed": 0.0,
"cpu_usage": 45,
"memory_remaining": 512,
"disk_remaining": 2048,
"theta": 1.57,
"perception_level": 1,
"pipe_charge_status": 0,
"cov_area": 75.5,
"cov_ratio": 0.45,
"cov_estimate_time": 30.0,
"cov_remaining_area": 50.2,
"cov_work_time": 25.0,
"cov_direction": 90,
"cov_map_path": "map0",
"current_map_ids": 0,
"target_height": 5,
"map_num": 2,
"finished_num": 1,
"working_time": 120,
"gps_status": 1,
"light": 3,
"cmd_num": 42
}
}
| Field | Type | Description |
|---|---|---|
battery_power |
number | Battery percentage (0-100) |
battery_state |
string | "CHARGING", "DISCHARGING", "NOT_INITIALIZED" |
work_status |
number | Work status (0=idle, see ROS Status Enums) |
error_status |
number | Error code (see Error Codes) |
error_msg |
string | Error message text |
cpu_temperature |
number | CPU temperature (°C) |
cpu_usage |
number | CPU usage percentage |
memory_remaining |
number | Remaining memory (MB) |
disk_remaining |
number | Remaining disk space (MB) |
x, y |
number | Local position coordinates (meters) |
z |
number | Heading / orientation |
theta |
number | Robot heading angle (radians) |
loc_quality |
number | Localization quality (0-100%) |
current_map_id |
string | Active map ID |
current_map_ids |
number | Current mowing map ID (numeric) |
prev_state |
number | Previous state |
work_mode |
number | Work mode |
task_mode |
number | Task mode (cover/mapping/patrol/control) |
recharge_status |
number | Recharge status |
charger_status |
number | Charger connection status |
pipe_charge_status |
number | Charging pipe/station status |
gps_status |
number | GPS status |
mow_blade_work_time |
number | Total blade work time (seconds) |
working_hours |
number | Current session work hours |
working_time |
number | Software runtime (minutes) |
ota_state |
number | OTA update state |
mowing_progress |
number | Mowing progress (0-100%) |
covering_area |
number | Current coverage area |
finished_area |
number | Completed area |
sw_version |
string | Firmware version |
mow_speed |
number | Current mowing speed |
perception_level |
number | AI perception: 0=off, 1=detection, 2=segmentation, 3=sensitive |
light |
number | LED brightness level |
cmd_num |
number | Command sequence number |
Coverage Fields (during mowing)¶
| Field | Type | Description |
|---|---|---|
cov_area |
number | Total covered area (m²) |
cov_ratio |
number | Coverage ratio (0.0-1.0) |
cov_estimate_time |
number | Estimated remaining time (minutes) |
cov_remaining_area |
number | Remaining area to mow (m²) |
cov_work_time |
number | Coverage work time elapsed (minutes) |
cov_direction |
number | Coverage mowing direction (0-180°) |
cov_map_path |
string | Map path being covered |
target_height |
number | Target cutting height (0-7 levels) |
map_num |
number | Total map count in current task |
finished_num |
number | Finished map count |
report_exception_state¶
Exception/sensor status (~100B JSON, 144B encrypted).
{
"type": "report_exception_state",
"message": {
"button_stop": false,
"chassis_err": 0,
"pin_code": "",
"rtk_sat": 29,
"wifi_rssi": 55
}
}
| Field | Type | Description |
|---|---|---|
button_stop |
boolean | Emergency stop pressed |
chassis_err |
number | Chassis error code |
pin_code |
string | PIN code status |
rtk_sat |
number | RTK GPS satellite count |
wifi_rssi |
number | WiFi signal strength |
report_state_timer_data¶
Battery, GPS position, localization, and timer tasks (~440B JSON, 480-496B encrypted).
{
"type": "report_state_timer_data",
"message": {
"battery_capacity": 100,
"battery_state": "CHARGING",
"latitude": 52.1409,
"longitude": 6.2310,
"orient_flag": 0,
"localization_state": "NOT_INITIALIZED",
"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
}
]
}
}
| Field | Type | Description |
|---|---|---|
battery_capacity |
number | Battery percentage |
battery_state |
string | Charge state |
latitude |
number | GPS latitude |
longitude |
number | GPS longitude |
orient_flag |
number | Orientation flag |
localization_state |
string | "NOT_INITIALIZED", "INITIALIZED", etc. |
timer_task |
array | Scheduled task list |
report_state_map_outline¶
Map boundary data (sent after get_map_outline request or after mapping).
{
"type": "report_state_map_outline",
"message": {
"map_id": 0,
"map_name": "map0_work",
"map_type": 0,
"map_position": [
{"latitude": 52.1409, "longitude": 6.2310},
{"latitude": 52.1412, "longitude": 6.2310},
{"latitude": 52.1412, "longitude": 6.2315}
]
}
}
report_state_map_path_list¶
Map path list data (sent by mower).
report_state_unbind¶
Device unbind notification (sent by mower when factory reset or unbind occurs).
report_state_all_by_ble / report2_state_all_by_ble¶
Full state dump sent via BLE. These are comprehensive status messages used during BLE provisioning or diagnostics.
BLE-specific
These reports contain the same fields as report_state_robot + report_exception_state combined, used when the mower communicates via BLE instead of MQTT.
Server-Specific Reports¶
Published on Dart/Receive_server_mqtt/<SN>
These reports use a separate MQTT topic from the standard app-facing reports. They are intended for the server and include acknowledge responses.
report_state_to_server_exception¶
Exception report sent to the server (with server-side acknowledge).
Topic: Dart/Receive_server_mqtt/LFIN2230700XXX
{
"type": "report_state_to_server_exception",
"message": {
"error_status": 132,
"error_msg": "Data transmission loss"
}
}
{
"type": "report_state_to_server_exception_respond",
"message": { "result": 0 }
}
report_state_to_server_work¶
Work result report sent to the server (with server-side acknowledge).
Topic: Dart/Receive_server_mqtt/LFIN2230700XXX
{
"type": "report_state_to_server_work",
"message": {
"work_status": 9,
"cov_area": 150.0,
"cov_work_time": 45.0,
"map_ids": 0,
"target_height": 5
}
}
report_state_battery¶
Battery status report.
{
"type": "report_state_battery",
"message": {
"battery_capacity": 85,
"battery_state": "DISCHARGING"
}
}
report_state_work¶
Work/mowing status report.
{
"type": "report_state_work",
"message": {
"work_status": 1,
"work_mode": 0,
"mowing_progress": 45,
"covering_area": 75.5,
"finished_area": 34.0
}
}
report_exception_state¶
See above (sent by mower).
Error Codes¶
Selected error codes from mower_error_text.dart:
| Category | Examples |
|---|---|
| Motor/Hardware | Blade motor stalled, wheel motor overcurrent, emergency stop, lifted, tilted, turned over |
| Physical | Collided, wheels slipping, outside map |
| Battery | Out of power, low battery |
| Sensors | TOF hardware malfunction, front camera malfunction, chassis error |
| Mapping | Mapping module error, mapping failed, map upload failed |
| Charging | Failed to obtain charging location, QR code not found, unable to leave station |
| GPS | GPS signal weak, poor location quality |
| Network | Network configuration error, WiFi connection failed, Bluetooth disconnected |
Error code 132
Error status 132 = "Data transmission loss" — commonly seen when LoRa connection between charger and mower is interrupted.
ROS Status Enums¶
From RobotStatus.msg:
merged_work_status¶
| Value | Constant | Description |
|---|---|---|
| 0 | FREE |
Idle/standby |
| 1 | COVER |
Coverage mowing |
| 2 | RECHARING |
Returning to charger |
| 3 | MAPPING |
Building a map |
| 4 | CHARGING |
Charging |
| 5 | STOP |
Stopped |
task_mode Values¶
| Mode | Description |
|---|---|
| cover | Coverage mowing task |
| mapping | Map building task |
| patrol | Patrol task |
| control | Manual control |
| other | Other tasks |
CovTaskResult work_status¶
| Value | Meaning |
|---|---|
| 1 | Failed |
| 2 | Cancelled |
| 9 | Complete |
Report Timing¶
gantt
title Mower Report Cycle (~5 seconds)
dateFormat X
axisFormat %L
section Mower → MQTT
report_state_robot (800B enc) :0, 100
report_exception_state (144B enc) :200, 50
report_state_timer_data (480B enc):400, 100
section Charger → MQTT
up_status_info (plain JSON) :0, 50
up_status_info :2000, 50
up_status_info :4000, 50