Skip to content

Q10 (B01/ss07): fault codes aren't fully implemented — dpFault (DP 90) surfaces as a raw int; here's an app-sourced fault table + crosswalk to B01Fault #855

Description

@andrewlyeats

On the Q10 (roborock.vacuum.ss07, B01), faults aren't really decoded yet: the container surfaces fault: int straight from dpFault (DP 90), so a fault reaches the user as a bare number. There's no Q10 equivalent of the Q7 B01Fault map, and B01Fault itself isn't referenced from b01_q10. (Doesn't look tracked in the Q10 omnibus #767 yet.)

To help fill that in, I pulled the Q10's fault/notification strings from the device's app bundle and built a crosswalk against the existing B01Fault. Columns:

  • ss07 app text — verbatim from the app's error_<code> strings (English).
  • Seen live — ✅ if I observed that raw dpFault value on my own Q10 during normal use (otherwise it's app-sourced only, not hardware-confirmed).
  • B01Fault (Q7, on main) — the existing upstream label for the same number, or "—" if there's no entry.
  • Notes — where the Q7 label wouldn't fit the ss07 meaning, or where a code is really status/info, not a fault.
code ss07 app text (verbatim) seen live B01Fault (Q7, on main) notes
1 LiDAR turret or laser blocked. Check for obstruction and retry.
2 Bumper stuck. Clean it and lightly tap it to release it.
3 Robot suspended. Move the robot away and restart.
4 Cliff sensor error. Clean cliff sensors, move the robot away from drops, and restart.
5 Clean the main brush and bearings.
7 Rotate the main wheels for cleaning. Move the robot away and restart.
8 Robot trapped. Move the robot away and restart.
9 Make sure the dustbin and filter are installed properly.
12 Low battery. Recharge now.
14 Temperature threshold. Wait for the temperature to return to normal.
16 Robot tilted. Move it to flat floor and restart.
21 Ensure the LiDAR sensor cover is not obstructed.
24 No-Go Zone or Invisible Wall detected. Move the robot away.
27 Mopping module stuck. Remove foreign objects if any.
28 Carpet avoidance mode. Move the robot away and restart.
29 Unable to cross the carpet. Move the robot across the carpet and restart.
46 Install the dust bag.
54 The mop mount fell off.
58 LiDAR sensor may be dirty. Wipe it.
301 The filter has reached its service life. Please replace it immediately. consumable-life notice
302 The main brush has reached its service life. Please replace it immediately. consumable-life notice
303 The side brush has reached its service life. Please replace it immediately consumable-life notice
304 The sensor is left uncleaned for a prolonged period of time. Please clean it. consumable-life notice
310 Dust bag full. Empty it.
400 Starting scheduled cleaning. status/info, not a fault
407 Cleaning in progress. Scheduled cleaning ignored. cleaning_in_progress (407) matches; status/info
500 Empty the dustbin. It has been full for a long time. lidar_blocked (500) Q7 label differs
501 Cleaning completed. Returning to dock. robot_suspended (501) Q7 label differs; status/info
502 Low battery. Resume cleaning after recharging. low_battery (502) matches
503 Docking error. Clear obstacles around the dock and clean charging contacts. dustbin_not_installed (503) Q7 label differs
556 Positioning failed. Starting a new task. relocalization; alert
569 Too frequent emptying attempts. Try again later. main_wheels_entangled (569, = F_568) Q7 label differs
570 Unable to reach the target. Cleaning incomplete. main_brush_entangled (570) Q7 label differs — Q7's "cannot reach target" is F_2007/F_2012
588 Offline warning: The robot has been asleep for a long time and is about to shut down. Charge it. fault_588 (588) Q7 has only a generic placeholder
589 Offline warning: Battery too low. The robot is about to shut down. Charge it. fault_589 (589) Q7 has only a generic placeholder
591 In Do Not Disturb mode, Auto Top-up is disabled. fault_591 (591) Q7 generic placeholder; status/info
707 Clean carpet ultrasonic sensors, and move robot away.
1002 Robot error. Reset the system.
3001 Voice pack update available. Update? notification, not a hardware fault

A couple of things to flag from the crosswalk: several dpFault values are really status/info rather than errors (400, 407, 501, 502, 3001…), and where a number also exists in B01Fault the Q7 label sometimes doesn't fit the ss07 meaning — most clearly 570, which is main_brush_entangled in B01Fault but "unable to reach the target" on the Q10 (Q7's own cannot-reach-target is F_2007/F_2012). So the Q7 map isn't a safe drop-in for the Q10. (The app only exposes these display strings — no identifier names — so a Q10 enum's labels would be yours to name, the same way the existing B01Fault ones are.)

I'm not sure how much of this gap is a genuine per-model difference vs. worth mapping, so I didn't want to assume the fix. Happy to help however works best for you — put up a PR adding a b01_q10 fault map seeded from this table, just make these labels available alongside the raw int, or leave it if the gap is intentional. A couple of extras I can fold in if useful: most of the hardware-fault codes (1–29) also carry a longer error_des_<code> remediation string in the bundle (the same short-plus-long pairing your B01Fault comments already use), and the app groups these into error / alert / offline / other buckets for surfacing. Thanks for all the recent B01/Q10 work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions