Configure CleanAreaV2 on the 4 mower models#1596
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #1596 +/- ##
=======================================
Coverage 95.02% 95.02%
=======================================
Files 159 159
Lines 6234 6234
Branches 353 353
=======================================
Hits 5924 5924
Misses 248 248
Partials 62 62 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Adds `area=CleanAreaV2` to `CapabilityCleanAction` for the GOAT family
(xmp9ds A1600 RTK, 5xu9h3 G1, 51rcxt A3000 LiDAR Pro, 300lc5 O500
Panorama). The mowers already accept the same `clean_V2` payload with
`{"act":"s","content":{"type":"spotArea","value":"<zone_id>"}}` — verified
via MQTT sniff on a real A1600 (Trampo zone id=1 confirmed).
Consumers (e.g. home-assistant/core) can now invoke
`device.capabilities.clean.action.area(CleanMode.SPOT_AREA, [zone_id], 1)`
to launch a specific zone on a mower without falling back to the
`Map complete` action.
`getAreaSet type:"ar"` returns the zone definitions (LZMA+base64
encoded) with stable numeric IDs that map to the named zones in the
Ecovacs app, enabling clients to build a zone-name → id lookup at
runtime.
The `CleanAreaV2` API itself is unchanged — this is a pure capability
exposure on hardware definitions.
7ab01f7 to
ca71450
Compare
Contributor
Author
|
Rebased on top of Quick recap:
Available for review when convenient. |
edenhaus
approved these changes
Jul 1, 2026
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.
Summary
Adds
area=CleanAreaV2toCapabilityCleanActionfor the 4 mower hardware models —xmp9ds(GOAT A1600 RTK),5xu9h3(GOAT G1),51rcxt(GOAT A3000 LiDAR Pro),300lc5(GOAT O500 Panorama).Before this change the mower
CapabilityCleanActionhad onlycommand=CleanV2and consumers could not launch a specific zone — they had to fall back to the full-map action.Why
Mowers accept the exact same
clean_V2payload shape as vacuums for spot-area cleaning:{"act":"s","content":{"type":"spotArea","value":"<zone_id>"}}Verified on a real GOAT A1600 (FW 1.15.13) by MQTT sniff while the official app launched zone "Trampo":
getCleanInforesponse reportedcleanState.content = {"type":"spotArea","value":"1"}confirming the same envelope as the existing vacuum CleanAreaV2 implementation produces.getAreaSet type:"ar"exposes the named zones with stable numeric IDs (LZMA+base64 encoded insubsets), giving consumers aname → idlookup table at runtime.So the lib already had the right command (
CleanAreaV2) — only the hardware capability declarations needed updating.What changed
deebot_client/hardware/xmp9ds.pydeebot_client/hardware/5xu9h3.pydeebot_client/hardware/51rcxt.pydeebot_client/hardware/300lc5.pyEach file gets
CleanAreaV2added to thefrom deebot_client.commands.json.clean import …andarea=CleanAreaV2attached to the existingCapabilityCleanAction(command=CleanV2, …).8 lines changed total (4 imports + 4 area parameters).
Tests
pytest tests/hardware/→ 7 passedpytest tests/commands/json/test_clean.py→ 27 passedCleanAreaV2class itself is already covered by the vacuum-side suite; this PR just wires its existing behavior to the mower capability so no new test logic is needed for the command itself.Notes
CleanV2(start/stop/pause/resume) is unchanged — area is an additive capability, not a replacement.🤖 Generated with Claude Code