Live robot vacuums, P1 (docs/VACUUM.md)

The base marker never moves — it is the dock. While the robot cleans, a
round pulsing puck (no badge plate) drives the plan over an affine
transform solved from vacuum-map coordinates: auto-calibration matches
the robot's room list against plan rooms by name, and a three-point
wizard covers integrations without room data. The trail rides the
integration's own path when offered (it predates the card being opened)
and a self-recorded thinned buffer otherwise, lingering ten minutes
after docking. Adapters read the Map Extractor / Tasshack / Valetudo
attribute dialects through one tolerant parser. Display only — no
commands, per the owner's decision.

vacuum.ts is pure logic under 8 new unit tests; the marker schema grew
an optional vacuum block (56 backend tests); smoke_vacuum drives 19
browser asserts including the wizard end to end.
This commit is contained in:
Matysh
2026-07-31 09:19:56 +03:00
parent 831e694f83
commit 40abbccbf0
15 changed files with 1348 additions and 99 deletions
+13
View File
@@ -807,3 +807,16 @@ require hands on real hardware — they remain for the human pass.
crossing wall-segment boundaries
- [ ] Single click still opens the status card; double click opens the properties dialog;
a drag does NOT open either
## Live vacuums (docs/VACUUM.md, P1)
- Docked robot: only the base marker, at the user-placed spot. No puck.
- Cleaning + calibrated map: a round pulsing puck (no badge plate) drives the
plan; the base marker never moves. Heading wedge follows angle+matrix
rotation; no angle attribute — no wedge.
- Trail: integration `path` preferred, else self-recorded; lingers 10 min
after docking; a new run clears it; `trail: false` hides it.
- Hidden marker: neither puck nor trail. Uncalibrated active map: no puck.
- Wizard: 3 stage clicks with the robot parked at 3 spots → matrix saved per
map id; Esc cancels; collinear points are rejected with a toast.
- Auto-calibration needs ≥3 rooms matched by name between the robot and plan.