Skip to content

fix(ilt3k8): use freeClean V2 area command for DEEBOT X9 PRO OMNI - #1749

Open
Rhapsodyan wants to merge 2 commits into
DeebotUniverse:devfrom
Rhapsodyan:fix/x9-pro-omni-freeclean-area
Open

Rhapsodyan wants to merge 2 commits into
DeebotUniverse:devfrom
Rhapsodyan:fix/x9-pro-omni-freeclean-area

Conversation

@Rhapsodyan

@Rhapsodyan Rhapsodyan commented Aug 6, 2026

Copy link
Copy Markdown

Summary

The DEEBOT X9 PRO OMNI (ilt3k8) rejects the legacy area clean command with 20003: rcp not support (see #1477). The profile already used CleanV2 for the base action, but area cleaning still used the legacy CleanArea command (clean + spotArea).

This PR switches the area capability to the V2 freeClean command shape, mirroring the approach already validated for the T90 PRO OMNI (PR #1710).

Pass-count fix (commit 2)

The X9 reads the first freeClean value field as an area id, not as the pass count:

  • value="2,3" fails with selected area not found (area 2 does not exist)
  • value="1,3" used to start only by accident, because 1 happens to be the bathroom area id

Pass count must be set with the separate setCleanCount command (clean.count capability), exactly like the Ecovacs app does. The freeClean value is therefore always built as "1,<id1>,<id2>" (first field is a fixed flag).

Tested on a real X9 PRO OMNI: setCleanCount(2) + value="1,3" starts a 2-pass laundry-room clean correctly. The Home Assistant integration should send setCleanCount(N) before spot_area when N > 1 (already handled by the ecovacs HA custom component calling clean.count.set()).

Checklist

  • Code changes
  • Tested on real hardware (DEEBOT X9 PRO OMNI)
  • No API changes required

Hermes added 2 commits August 6, 2026 23:58
The X9 PRO OMNI rejects the legacy clean/spotArea area command with
'20003: rcp not support' (issue DeebotUniverse#1477). Start already used clean_V2,
but area cleaning still used the legacy CleanArea command.

Switch the area capability to the V2 freeClean command shape
(CleanAreaV2 with CleanMode.FREE_CLEAN), same approach as the T90
PRO OMNI profile (PR DeebotUniverse#1710). Tested on a real X9 PRO OMNI: selected
room cleaning starts correctly (mop wash cycle first, then cleans).
The X9 PRO OMNI reads the first freeClean value field as an AREA id, not
as the pass count: value="2,3" fails with 'selected area not found'
because area 2 does not exist (it worked with 1 pass only by accident,
since "1" is the bathroom area id).

Pass count must be set with the separate setCleanCount command (clean.count
capability), exactly like the Ecovacs app does. Always build
value="1,<id1>,<id2>" (first field is a fixed flag).

Tested on a real X9 PRO OMNI: setCleanCount(2) + value="1,3" starts a
2-pass laundry-room clean correctly.
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.

1 participant