Skip to content

v1.8.0 — Room attribution (both brands) + smarter review card

Choose a tag to compare

@kingchddg901 kingchddg901 released this 12 Jul 07:08

Room attribution comes to both brands, the review card gets smarter about where a run came from, and areas are finally unit-correct.

Added

  • Room attribution for app-started and dispatched runs, on both Eufy and Roborock. The integration recovers which rooms a run actually cleaned from the live room signal (Roborock's native current-room, Eufy's decoded-map pose) plus the swept-area counter. An external (app-started) clean opens the review wizard pre-answered instead of blank; a dispatched clean whose vacuum deviated from the planned order gets its per-room identity corrected. Validated live across simultaneous multi-room runs on both robots.
  • Review card — Origin filter. Filter run history by External (app-started) vs Dispatched (started by this integration).
  • Review card — "Room Mismatch" badge. On a dispatched run where the live room signal disagreed with the assigned room, the run is flagged for review — the assignment is kept, never silently overridden.
  • Review card — custom exclude reason. A "Custom…" chip reveals a free-text field alongside the presets.
  • Review card — Area Cleaned + External badge. External runs now show the floor area cleaned (single and multi-room) and read as "External".
  • Learning-processing toggle. Collect run data always, process on demand — with a "Process pending runs" action and a pending-count display.
  • Diagnostics — cleaning_area unit report. Each vacuum shows its detected cleaning_area unit and normalized m² value.

Fixed

  • cleaning_area is normalized to square meters by the sensor's own unit. On an imperial Home Assistant, Eufy's area sensor reports square feet while Roborock's reports square meters; the value was read as m² regardless, inflating Eufy areas ~10.76×. Now converted live by each sensor's unit_of_measurement.
  • Roborock cleaning_time (bare minutes) was stored as seconds — 60× too low; now unit-converted.
  • Stranded dispatched runs recover. A run interrupted by power loss / a mid-run restart / a firmware hang is finalized as interrupted into the review flow instead of vanishing or corrupting a later run's record.
  • Extreme unexplained-idle runs are held from learning (restorable) so they can't skew baselines.
  • Swept-area attribution handles a non-monotonic cleaning_area — a mid-run sensor reset is re-baselined, not double-counted.
  • External runs are no longer mislabeled "Sanity Failed" in the review list.

Changed

  • Removed the learned room-boundary (vacuum-coordinate) subsystem. Room tracking now runs entirely off the device's native current-room signal and the live map — the drift-prone coordinate-based boundary machinery is gone.

Docs

  • 30 documentation files reconciled with the above (mapping-shelve deletions + the new features); docs/advanced/07-map-bounds-review.md retired to a stub; testing counts refreshed (2,488 test functions / 150 files / 95.2% coverage). The retired trace→bounds design is preserved verbatim in docs/dev/11-mapping-system.md §3 as a disaster-recovery reference.

🤖 Release notes assembled with Claude Code