diff --git a/docs/PRODUCT.md b/docs/PRODUCT.md index fb029f0..c79c575 100644 --- a/docs/PRODUCT.md +++ b/docs/PRODUCT.md @@ -9,7 +9,7 @@ An interactive floor plan for Home Assistant delivered as one HACS package: a storage **integration** (server-side config, WS API, file uploads, auth) + a **Lovelace card** (rendering, room markup editor, drag layout, zoom, live states, temperature, Zigbee LQI, device metadata with PDF manuals, virtual markers, -en/ru localization). GUI-first: no YAML, no hand-made SVG. +live robot vacuums, en/ru localization). GUI-first: no YAML, no hand-made SVG. ## Competitive landscape (stars verified 2026-07-06) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index f69b0e9..e8338f9 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -57,7 +57,13 @@ Track progress in `custom_components/houseplan/quality_scale.yaml` (done/exempt mapping (regex/domain/device_class → mdi icon) stored in config, shipping EN+RU defaults; drop dacha-specific patterns from code. - [x] **Click actions** per device (v1.13.0, simplified v1.38.1): card / more-info / - toggle, with the lock/alarm safety model. + toggle, with the lock/alarm safety model; running an automation/script/scene + with an optional confirmation landed in v1.53.0. +- [x] **Live robot vacuums** (docs/VACUUM.md): a puck driving the plan over a + solved affine transform, one-click calibration by room names or a + drag-and-stretch fit panel, server-recorded trails (current + previous run) + with never/cleaning/always display modes. Adapters: Xiaomi Cloud Map + Extractor, Tasshack dreame-vacuum, Valetudo. Display only — no commands. - [x] **Theming**: light-theme pass done in v1.13.0; HA theme variables everywhere, optional per-space background color. - [ ] Multi-instance question: keep single-instance (one house) but support **multiple diff --git a/docs/STATUS.md b/docs/STATUS.md index 13d9587..d622bf6 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -23,6 +23,7 @@ | Home instance | ha.jbstudio.pro (SSH port **22222**, key `ha_jb`; HA config root is `/mnt/data/supervisor/homeassistant` — `/config` does NOT exist in this SSH environment), deployed **v1.53.1** via direct copy (HACS custom repo also installed) | | Localization | UI en/ru (src/i18n/*.json), everything user-visible localized incl. kiosk popover | | Tests | Four layers: frontend unit (`npm test`, node:test over `test-build/`), pure backend (`pytest tests_backend`, runs anywhere), HA-harness backend (same folder, CI only — needs py3.13 + pytest-homeassistant-custom-component), and browser smokes (`demo/smoke_*.mjs`, headless chromium). **Counts are not written down here** — they went stale within two releases while the version line beside them was kept current, which reads as less coverage than exists (review R5-2). Run `npm run inventory` for the current numbers, or read them off the last CI run | +| Vacuums | Live robot vacuums shipped (docs/VACUUM.md): puck, server-side trails with display modes, fit-panel calibration. Verified on a live Dreame X50 Master | | Demo stand | **https://demo.houseplan.tech** — public, login `demo`/`demo`, resets to a pristine synthetic home every hour. **https://dev.houseplan.tech** — closed (basic auth), auto-deploys the `dev` branch every 10 min. Host: `ssh -i ~/.ssh/hp_stand hp@135.106.166.146`; layout, seeds and gotchas in the memory note `houseplan-demo-stand` | | Community | **Telegram chat: https://t.me/ha_houseplan** (created 2026-07-27) — the primary user-facing support channel; GitHub issues stay for bugs/features. Link it from any new release notes and posts | | Product scope | docs/SCOPE.md (2026-07-22) is the feature guard rail — check before accepting any feature | diff --git a/docs/VACUUM.md b/docs/VACUUM.md index b1b6e9e..adedd4c 100644 --- a/docs/VACUUM.md +++ b/docs/VACUUM.md @@ -122,10 +122,31 @@ Commands of any kind (owner decision: display only) — no tap-to-clean, no zone sending. No-go zones, cleaned-area polygons, cleaning history, multi-robot collision avoidance — v2 candidates. +## Trail display modes + +`marker.vacuum.trail_mode`: `never` | `cleaning` (default — the line hides +the instant the run ends) | `always` (the only mode that also draws the +previous run, at 40% opacity). The legacy boolean `trail` still maps in +(`false` → never). Recording is independent of the mode: the server always +records, the mode only decides what is drawn. + +The last segment is a rAF-driven tip line whose endpoint is glued to the +puck's animated centre every frame, so the path pours out from under the +icon instead of popping in when the next telemetry point lands. + ## Phases - **P1:** adapter framework + all three Tier-A adapters + auto-calibration by rooms + manual 3-point wizard + the puck + trail (both sources). -- **P2:** Tier C room highlight + the demo-stand scripted robot. +- **P2 (next):** Tier C room highlight + the demo-stand scripted robot. - **P3:** Tier B zoo (Roomba, raw Valetudo MQTT), Deebot, multi-map polish by feedback. + +## Shipped in P1 + +Adapters for the three Tier-A integrations, auto-calibration by room +names, the drag-and-stretch fit panel, the puck, server-side trails +(current + previous run) with the three display modes. Verified against a +live Dreame X50 Master: room centres arrive as plain x/y, the active map +name lives on the vacuum entity (`selected_map`), and the robot's Y axis +is flipped versus the screen — hence mirror-on by default.