This commit is contained in:
Matysh
2026-08-04 11:21:30 +03:00
parent 93b60c5b8e
commit aa01eaef01
14 changed files with 210 additions and 15 deletions
+6
View File
@@ -27,6 +27,9 @@ right on your Lovelace dashboard.
**Feature highlights**
- ♾️ **An infinite canvas** — there is no "plan size" and no edge to run
past: draw and place devices anywhere, pan at any zoom, zoom out to see
everything, and let one tap fit the whole plan back on screen.
- 🖱 **GUI-first floorplan editor** — rooms, doors & windows, island rooms,
virtual walls and a visual decor layer, all drawn with clicks; room resize
by dragging walls, with live lengths and areas as you drag; smart
@@ -39,6 +42,9 @@ right on your Lovelace dashboard.
the day (white noon → golden hour → deep night), while windows on exterior
walls cast real wedges of sunlight into the rooms; optional cloud cover
from a weather entity.
- 🪟 **Curtains and blinds open on a tap** — one action opens, closes or
stops a cover, and the icon itself morphs between open and closed while a
soft ring pulses as it travels.
- 🌡 **Room cards** with temperature, humidity, Zigbee LQI and light count;
comfort-range temperature fills, per-room signal heatmap.
- 🚪 **Doors, windows and locks** with contact sensors — unlocking is always an
+7
View File
@@ -25,6 +25,10 @@
**Главное**
- ♾️ **Бесконечный холст** — нет «размера плана» и нет края, за который
нельзя выйти: рисуйте и ставьте устройства где угодно, тащите план на
любом зуме, отдаляйтесь, чтобы увидеть всё, и одной кнопкой вписывайте
план обратно в экран.
- 🖱 **Редакторы прямо в карточке** — комнаты, двери и окна, комнаты-острова,
виртуальные стены и декор-слой рисуются кликами; размеры комнат меняются
перетаскиванием стен с живыми длинами и площадями; помощник выравнивания и
@@ -37,6 +41,9 @@
(белый полдень → золотой час → глубокая ночь), а окна внешних стен пускают
в комнаты настоящие клинья солнечного света; облачность — опционально, от
weather-сущности.
- 🪟 **Шторы открываются тапом** — одно действие открывает, закрывает или
останавливает штору, а сам значок морфится между открытым и закрытым
видом и мягко пульсирует кольцом, пока штора едет.
- 🌡 **Карточки комнат**: температура, влажность, Zigbee-сигнал, свет «1 из 3»;
температурная заливка по комфортным границам.
- 🚪 **Двери, окна и замки** с датчиками — отпирание только явной кнопкой,
+1 -1
View File
@@ -45,7 +45,7 @@ PLAN_ORPHAN_TTL_S = 3600
SCHEDULED_GRACE_S = 30 * 24 * 3600
FILES_DIR = "houseplan/files"
CONF_ADMIN_ONLY = "admin_only"
VERSION = "1.56.0"
VERSION = "1.57.0"
DEFAULT_CONFIG: dict = {
"spaces": [],
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -16,5 +16,5 @@
"issue_tracker": "https://github.com/Matysh/houseplan-card/issues",
"requirements": [],
"single_config_entry": true,
"version": "1.56.0"
"version": "1.57.0"
}
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
# Infinite canvas — the spec (source of truth)
Status: approved by the owner 2026-08-03. Dev-branch feature, **no
release**. Scope decisions final: there is no "plan size" any more, the
canvas is conceptually unbounded, storage does not change, and the
Status: approved by the owner 2026-08-03, **shipped in v1.57.0**.
Scope decisions final: there is no "plan size" any more, the canvas
is conceptually unbounded, storage does not change, and the
opening view is always derived from what is actually drawn.
## The problem it closes
+91
View File
@@ -1,5 +1,96 @@
# Changelog
## v1.57.0 — 2026-08-04
Minor release: the canvas becomes infinite — no more "plan size", no
more edge to run past — plus a tap action for curtains and blinds,
a polish pass over the sun, live rulers while placing openings, and a
warm re-mount that no longer flashes.
### The infinite canvas (docs/CANVAS.md)
The idea of a "grid size" or "plan size" is gone. The canvas is
conceptually unbounded — any coordinate is legal, with a `+/-5000`
limit kept only as garbage insurance (about 60 km of plan at the
card's own scale).
- **If your plan ran off the edge, it now just works.** Some plans
grew past the old square and devices simply could not be placed
outside it; the only workaround was to redraw everything. That
limit no longer exists: draw, drag and place devices anywhere, and
nothing needs to be redrawn. Your stored plan is untouched — the
coordinates mean exactly what they always meant, and there is no
migration.
- **Existing plans open exactly as before.** Verified on a real
three-floor config: the opening frames come out bit-for-bit
identical to v1.56.0.
- **The opening view is derived from what is actually drawn.**
`view_box` is now an optional hint for the very first frame only;
after that the starting view is always computed from the real
content, with outliers rejected so one stray room cannot shrink the
whole plan.
- **Pan at any zoom, in every editor.** Dragging the plan used to work
only above 100% zoom; now it works at any zoom and in all editing
modes, with one screen of slack around the content.
- **Zoom out to 3x the content**, so you can see the whole plan and
the space around it.
- **"Fit everything" button** — one tap frames all the content again.
- **A "home is that way" arrow** appears when you have panned away
from the plan, pointing back to it.
- **An adaptive grid.** The grid picks its step from the zoom
(1 / 2 / 5 / 10 ... 1000) instead of a fixed cell, and the dots stay
a muted hint rather than a pattern that competes with the plan.
### Curtains and blinds
- **New "Open/close" tap action for covers.** Closed opens, open
closes, and a cover in motion stops. Offered only for the
unprotected device classes — garage doors, doors and gates stay on
the info dialog, on purpose.
- **The icon itself tells you the state**: it morphs between the open
and closed shape (a table of cover classes, plus aliases resolved
from the base icon), and pulses with a soft ring while the cover is
travelling.
- **A curtain never wears a coloured plate.** No state fill behind a
cover marker, ever.
- **The cover is found among all of the marker's entities**, not just
the primary one — which is the common case for Aqara and
zigbee2mqtt devices — and an explicit "Open/close" choice always
wins the indication.
### Sun polish
- **Brighter, shorter rays.** Opacity up to 0.30, length down 30%,
with crisp sides again.
- **Light fades only along the ray**, and is guaranteed to reach zero
before the wedge ends — the wedge is now clipped by distance along
the ray, so the "bright rim" that appeared with a low, oblique sun
is gone.
- **A hard 3 degree threshold.** The rays appear and disappear at 3
degrees of solar elevation over a two-second fade, instead of
creeping in.
- **The day/night sky catches up with the sun** when you come back to
the tab: a gap of more than 3 degrees is repainted at once, while
normal movement keeps breathing smoothly.
### Everything else
- **Live rulers and the centre magnet while PLACING an opening**, not
only while dragging one — with the distances measured along the
owning room's own edge.
- **A warm re-mount.** When Lovelace recreates the card on reconnect
there is no preloader and no flash of the plan any more, and a
dropped WebSocket never blanks a plan that is already on screen.
- **Room borders and names default to dark grey `#55606c`** instead of
the accent blue. If you picked a colour explicitly, nothing changes.
- **An "About" block at the end of the general settings** — card
version, GitHub and Telegram links.
- **The icon angle now steps by 5 degrees.**
- Audit fixes: the sun-ray cache survives local edits, hidden devices
no longer stretch the frame, the editor's grown frame does not leak
into view mode, an outlier room no longer inflates icon sizes, and a
kiosk pan stays a pan instead of flipping to the next floor.
## v1.56.0 — 2026-08-03
Minor release: the sun comes to the floor plan — a compass, a day/night
+91
View File
@@ -6,6 +6,97 @@
> **Правило проекта:** оба файла пополняются в одном коммите с самим
> изменением — как и остальная документация (см. docs/STATUS.md).
## v1.57.0 — 2026-08-04
Минорный релиз: холст становится бесконечным — больше нет «размера
плана» и края, за который нельзя выйти, — плюс тап-действие для штор и
жалюзи, полировка солнца, живые линейки при размещении проёмов и
тёплый ре-маунт без миганий.
### Бесконечный холст (docs/CANVAS.md)
Понятие «размер сетки» или «размер плана» упразднено. Холст условно
бесконечен — допустима любая координата, а предел `±5000` оставлен
только как страховка от мусора (около 60 км плана в масштабе самой
карточки).
- **Если ваш план «уехал» за границу — теперь он просто работает.**
Некоторые планы выросли за пределы старого квадрата, и устройства
снаружи было не поставить; единственным выходом было перерисовать
всё заново. Этого ограничения больше нет: рисуйте, двигайте и
ставьте устройства где угодно, перерисовывать ничего не нужно. Сам
сохранённый план не тронут — координаты значат ровно то же, что и
раньше, никакой миграции.
- **Существующие планы открываются в точности как прежде.** Проверено
на реальном конфиге с тремя этажами: стартовые рамки совпадают с
v1.56.0 бит-в-бит.
- **Стартовый вид строится по тому, что реально нарисовано.**
`view_box` стал необязательной подсказкой только для самого первого
кадра; дальше вид всегда считается по фактическому содержимому, с
отбраковкой выбросов — одна случайная комната больше не сжимает
весь план.
- **Панорамирование при любом зуме и во всех редакторах.** Раньше
план можно было тащить только выше 100%; теперь — на любом
масштабе и в любом режиме правки, с запасом в один экран вокруг
содержимого.
- **Зум-аут до 3× содержимого** — видно и весь план, и воздух вокруг
него.
- **Кнопка «Вписать всё»** — одно нажатие возвращает кадр по всему
содержимому.
- **Стрелка «дом там»** появляется, когда вы уехали от плана, и
показывает дорогу обратно.
- **Адаптивная сетка.** Шаг сетки выбирается по зуму
(1 / 2 / 5 / 10 … 1000) вместо фиксированной клетки, а точки
остаются приглушённой подсказкой и не спорят с планом.
### Шторы и жалюзи
- **Новое тап-действие «Открыть/закрыть» для штор.** Закрытая —
откроется, открытая — закроется, а штора в движении остановится.
Предлагается только для незащищённых классов: гаражные ворота,
двери и калитки намеренно остаются на информационном диалоге.
- **Состояние видно по самому значку**: он морфится между открытой и
закрытой формой (таблица классов штор плюс алиасы по базовой
иконке) и мягко пульсирует кольцом, пока штора едет.
- **У шторы никогда нет цветной подложки.** Заливки по состоянию за
маркером cover не будет.
- **Cover ищется среди всех сущностей маркера**, а не только среди
основной — частый случай для устройств Aqara и zigbee2mqtt, — а
явно выбранное «Открыть/закрыть» всегда имеет приоритет индикации.
### Полировка солнца
- **Лучи ярче и короче.** Непрозрачность поднята до 0.30, длина
уменьшена на 30%, боковые грани снова чёткие.
- **Свет затухает только вдоль луча** и гарантированно доходит до
нуля раньше конца клина — клин теперь обрезается по расстоянию
вдоль луча, и «светлый бортик», вылезавший на низком косом солнце,
исчез.
- **Жёсткий порог в 3°.** Лучи появляются и исчезают на трёх градусах
высоты солнца с двухсекундной анимацией, а не вкатываются плавно.
- **Фон «день/ночь» догоняет солнце** при возврате на вкладку: разрыв
больше 3° перекрашивается мгновенно, обычный ход по-прежнему дышит
плавно.
### Прочее
- **Живые линейки и магнит центра теперь и при РАЗМЕЩЕНИИ проёма**, а
не только при перетаскивании; расстояния считаются по ребру своей
комнаты.
- **Тёплый ре-маунт.** Когда Lovelace пересоздаёт карточку при
реконнекте, прелоадер больше не показывается и план не мигает, а
обрыв WebSocket никогда не очищает уже показанный план.
- **Цвет границ и названий комнат по умолчанию — тёмно-серый
`#55606c`** вместо синего акцента. Если цвет выбран явно, ничего не
меняется.
- **Блок «О карточке» в конце общих настроек** — версия, ссылки на
GitHub и Telegram.
- **Шаг угла значка — 5°.**
- Находки аудитов: кэш солнечных лучей переживает локальные правки,
скрытые устройства не растягивают кадр, кадр редактора не протекает
в режим просмотра, комната-выброс не раздувает размер иконок, а
киоск-пан остаётся паном и не перелистывает этаж.
## v1.56.0 — 2026-08-03
Минорный релиз: на план приходит солнце — компас, фон «день/ночь» и
+3 -3
View File
@@ -11,16 +11,16 @@
> (versions, publication, infrastructure), DEVELOPMENT.md for new gotchas,
> ARCHITECTURE.md for design changes, ROADMAP.md when plans move.
## Snapshot (2026-08-03)
## Snapshot (2026-08-04)
| Item | State |
|---|---|
| Version | **v1.56.0** everywhere (manifest, const.py, package.json, CARD_VERSION); deployed to the home instance. Minor release: the Sun feature (docs/SUN.md — north compass, day/night backdrop, window light wedges, optional weather cloud cover, opaque room-contour paper), opt-in room temperature from climate devices, design-token pass over styles.ts + native ha-switch/ha-slider, opening-drag shoulder rulers with a center magnet, and the DEV-B701-01 sun-ray cache fix |
| Version | **v1.57.0** everywhere (manifest, const.py, package.json, CARD_VERSION); deployed to the home instance. Minor release "the infinite canvas": no more plan/grid size (docs/CANVAS.md — unbounded canvas with a ±5000 garbage guard, view_box demoted to a first-frame hint, content-derived start view with outlier rejection, pan at any zoom in every editor, 3× zoom-out, "fit everything", "home is that way" arrow, adaptive grid), cover "Open/close" tap action with icon morphing + travel pulse (unprotected classes only, cover found among all marker entities, never a coloured plate), sun polish (0.30 opacity, −30% length, hard sides, fade along the ray only, 3° threshold with a 2 s fade, day/night sky catch-up), opening rulers while PLACING, warm re-mount with no veil and WS outages that never blank the plan, default room border/name #55606c, About block in general settings, 5° icon angle step |
| Workflow | Since 2026-07-22: minor changes go to branch **`dev`** (build + smokes → deploy home → commit → push, NO release); releases are batched on the owner's command (merge dev→main, one tag, one release with a summary changelog, CI checked on dev beforehand) |
| GitHub | https://github.com/Matysh/houseplan-card — **`main` carries every published release, the latest tag is the current version above**; `dev` is where work lands and is merged into `main` at release time (so `dev` is normally equal to or ahead of `main`, never behind). Push via SSH key `ha_jb` (remote git@github.com:…); API releases via the fine-grained PAT in `~/.git-credentials` (Contents R/W, issued 2026-07-23) |
| CI | validate.yml (hacs + hassfest + frontend + backend) green; release.yml attaches the bundle on release publish |
| HACS | Custom repository works. **Inclusion PR: hacs/default#9004** — open, valid, labeled, mergeable clean, never drafted. Queue: 1212 open, 835 older than ours. Merge rate COLLAPSED: 75 in July but almost all in the first decade, 0 in the last week (checked 2026-07-29) — maintainers process in rare bursts; ETA unknowable, months at best. Nothing actionable on our side |
| 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.56.0** via direct copy (HACS custom repo also installed) |
| 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.57.0** 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 |
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "houseplan-card",
"version": "1.56.0",
"version": "1.57.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "houseplan-card",
"version": "1.56.0",
"version": "1.57.0",
"license": "MIT",
"dependencies": {
"lit": "^3.1.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "houseplan-card",
"version": "1.56.0",
"version": "1.57.0",
"description": "Interactive house plan Lovelace card for Home Assistant",
"license": "MIT",
"type": "module",
+1 -1
View File
@@ -57,7 +57,7 @@ import {
} from './space-geometry';
import { langOf, t, type I18nKey } from './i18n';
const CARD_VERSION = '1.56.0';
const CARD_VERSION = '1.57.0';
/** HP-1552 boot-veil timing (AUD-1552-02). The veil holds for at least
* BOOT_MIN_MS; every stage-height change restarts a BOOT_QUIET_MS
* trailing-quiescence requirement (chrome still settling near the cap