feat: add optional position capability for mowers#1588
Open
Beennnn wants to merge 1 commit into
Open
Conversation
Adds Capabilities.position as an optional CapabilityEvent[PositionsEvent] so devices that don't expose the full map capability (e.g. mowers like the Ecovacs GOAT family) can still report their position to consumers. Wired into the GOAT A1600 RTK (xmp9ds) using GetPos. Other devices stay unaffected (position defaults to None; vacuums keep using CapabilityMap.position).
21 tasks
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #1588 +/- ##
=======================================
Coverage 94.99% 95.00%
=======================================
Files 158 158
Lines 6199 6201 +2
Branches 353 353
=======================================
+ Hits 5889 5891 +2
Misses 248 248
Partials 62 62 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Beennnn
added a commit
to Beennnn/core
that referenced
this pull request
May 14, 2026
`async_register_platform_entity_service` only supports one `entity_domain` per call — registering twice with the same service name silently overrode the vacuum handler, breaking the existing service. Split into two distinct service names: - `ecovacs.raw_get_positions` (vacuums, unchanged, backward-compatible) - `ecovacs.mower_raw_get_positions` (lawn mowers, new) The mower handler still raises `ServiceValidationError` until the optional position capability for mowers lands in deebot-client (see DeebotUniverse/client.py#1588). The test now reflects that user-facing behaviour and will be updated once the lib bump happens. Addresses CI 'Run tests Python 3.14.4 (ecovacs)' fail.
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 `Capabilities.position` as an optional `CapabilityEvent[PositionsEvent]` so devices that don't expose the full map capability (e.g. mowers like the Ecovacs GOAT family) can still report their position to consumers.
Today `PositionsEvent` is only fired through `CapabilityMap.position`, but mowers don't have a `map` capability, so the event never reaches subscribers even though `getPos` works fine on the device. Adding a top-level optional `position` capability lets mowers wire `GetPos` directly without forcing a fake `map` capability.
Changes
Other devices stay unaffected (`position` defaults to `None`; vacuums keep using `CapabilityMap.position`).
Test
`uv run pytest tests/` — 703 passed.