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

    Fields

    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