Skip to content

fix: skip DP 225 on Zeo H1 (roborock.wm.a63) - #946

Open
yangqian wants to merge 1 commit into
Python-roborock:mainfrom
yangqian:fix/zeo-a63-dp225
Open

fix: skip DP 225 on Zeo H1 (roborock.wm.a63)#946
yangqian wants to merge 1 commit into
Python-roborock:mainfrom
yangqian:fix/zeo-a63-dp225

Conversation

@yangqian

@yangqian yangqian commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #945.

Problem

build_force_load_dp_list() adds the softener block — including DP 225 (DEFAULT_SETTING) — to every model that has a softener compartment. The Zeo H1 (roborock.wm.a63) has one, so it gets asked for DP 225, but the device never answers that DP.

send_decoded_command() only completes a query once every requested DP has arrived:

if len(result) != len(query_values):
    return

so finished is never set, the wait hits _TIMEOUT = 10.0, and the entire force-load fails with Command timed out after 10.0s — discarding every DP the device did answer and counting a health_manager.on_timeout() toward an MQTT session restart. The result is an H1 with no state at all, timing out every 10 seconds.

Fix

Gate DP 225 behind a model set and strip it in build_force_load_dp_list(), mirroring how DP 237 (FEATURE_BITS) is already handled for this same device via _UNSUPPORTED_FEATURE_BITS. Unknown models keep the conservative "assume supported" default used by the neighbouring helpers.

Testing

  • New tests/devices/traits/a01/test_device_feature.py covers supports_default_setting() across a63 / a102 / a90 / None, and asserts the force-load list drops DP 225 for the a63 while keeping the other softener DPs and still including it for other softener-equipped models.
  • Full suite passes locally (973 passed).
  • Verified on a real a63: the force-load completes and state loads correctly.

Note

roborock.wm.a102 (H1 Overseas) is the same physical machine and very likely has the same issue, but I only have an a63 to test with, so I left it out. It can be added.

The H1 has a softener compartment, so build_force_load_dp_list() asked it
for DEFAULT_SETTING (DP 225), which the device never returns. Since
send_decoded_command() only completes a query once every requested DP has
arrived, the whole force-load timed out after 10s and every DP the device
did answer was discarded, leaving no Zeo state loaded.

Gate DP 225 behind a model set, matching how FEATURE_BITS (DP 237) is
already handled for this same device.
Copilot AI lite review requested due to automatic review settings September 5, 2026 02:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The change is narrowly scoped, matches the stated root cause, and includes targeted tests validating both the gating helper and the resulting force-load DP list.

Pull request overview

This PR fixes repeated force-load query timeouts on Zeo H1 (roborock.wm.a63) by preventing the library from requesting DP 225 (DEFAULT_SETTING) on that specific model, while keeping the existing “assume supported for unknown models” behavior.

Changes:

  • Add per-model gating for DP 225 via supports_default_setting() and an _UNSUPPORTED_DEFAULT_SETTING model set.
  • Strip DP 225 from build_force_load_dp_list() when the model is known not to support it (a63).
  • Add unit tests covering supports_default_setting() and verifying the force-load DP list behavior for a63 vs other models.
File summaries
File Description
roborock/devices/traits/a01/device_feature.py Adds supports_default_setting() and removes DP 225 from the force-load list for roborock.wm.a63.
tests/devices/traits/a01/test_device_feature.py Introduces tests asserting DP 225 is omitted for a63 and retained for other softener-equipped models.
Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Zeo H1 (roborock.wm.a63): force-loading DP 225 (DEFAULT_SETTING) causes repeated 10s query timeouts

2 participants