fix: skip DP 225 on Zeo H1 (roborock.wm.a63) - #946
Open
yangqian wants to merge 1 commit into
Open
Conversation
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.
Contributor
There was a problem hiding this comment.
🟢 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_SETTINGmodel 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:so
finishedis never set, the wait hits_TIMEOUT = 10.0, and the entire force-load fails withCommand timed out after 10.0s— discarding every DP the device did answer and counting ahealth_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
tests/devices/traits/a01/test_device_feature.pycoverssupports_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.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.