Skip to content

Dock type 21 (Roborock QV 35A / roborock.vacuum.a168) missing from RoborockDockTypeCode → wash/fill dock entities unavailable #864

Description

@epinethrone

Summary

Dock type 21 — the dock shipped with the Roborock QV 35A (roborock.vacuum.a168) — is missing from RoborockDockTypeCode. Because it's unknown, RoborockDockTypeCode(21) falls back to unknown, is_wash_n_fill_dock() returns False, and the wash_towel_mode trait is skipped at setup. Downstream (Home Assistant) this makes the dock clean-water-tank, dirty-water-tank, and strainer entities permanently unavailable, even though the device reports all of the underlying data.

Environment

  • python-roborock 5.22.0 (as bundled with Home Assistant 2026.7.1). Confirmed the gap is still present on main / v5.26.0.
  • Device: Roborock QV 35A, model roborock.vacuum.a168, firmware 02.36.38.
  • Dock: wash + fill + dry (auto-empty, mop wash, air-dry, clean-water refill).

Root cause (traced end to end)

  1. GET_STATUS reports dock_type: 21 (raw, from the local channel). The tank/strainer data is all present: dss: 169 (encodes clean/dirty water box status) and strainer_work_times arrives in GET_CONSUMABLE.
  2. RoborockDockTypeCode in roborock/data/v1/v1_code_mappings.py has no member for 21 (it jumps saros_10_dock = 18qrevo_s5v_dock = 22saros_20_dock = 27), so RoborockDockTypeCode(21) resolves to unknown via RoborockEnum._missing_.
  3. WashTowelModeTrait.requires_dock_type = is_wash_n_fill_dock; is_wash_n_fill_dock(unknown) is False, so trait setup logs Trait 'wash_towel_mode' not supported, skipping and leaves PropertiesApi.wash_towel_mode = None.
  4. In Home Assistant, the clean_box_empty, dirty_box_full, and strainer_time_left entity descriptions are all gated on support_fn=lambda api: api.wash_towel_mode is not None, so they are filtered out and never created — surfacing as unavailable in HA.

Debug-log excerpt (setup):

Trait 'wash_towel_mode' not supported, skipping

Raw status (trimmed):

{'state': 23, 'dock_type': 21, 'dss': 169, 'wash_phase': 12, 'wash_ready': 1,
 'wash_status': 514, 'dry_status': 0, ...}

Proposed fix

Add dock type 21 as a wash-n-fill dock — the same two-line change as #829 (which added the Qrevo S5V, 22):

  • roborock/data/v1/v1_code_mappings.py: add qv_35a_dock = 21 to RoborockDockTypeCode.
  • roborock/device_features.py: add RoborockDockTypeCode.qv_35a_dock to WASH_N_FILL_DOCK_TYPES.

(Clean-fluid delivery is not supported on this dock — is_clean_fluid_delivery_supported = False — so the clean_fluid_empty entity correctly stays absent; only the clean/dirty water box and strainer entities are restored.)

Happy to open a PR mirroring #829, including the parametrized-test additions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions