mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 20:29:00 +00:00
v1.57.0
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
|
||||
**Главное**
|
||||
|
||||
- ♾️ **Бесконечный холст** — нет «размера плана» и нет края, за который
|
||||
нельзя выйти: рисуйте и ставьте устройства где угодно, тащите план на
|
||||
любом зуме, отдаляйтесь, чтобы увидеть всё, и одной кнопкой вписывайте
|
||||
план обратно в экран.
|
||||
- 🖱 **Редакторы прямо в карточке** — комнаты, двери и окна, комнаты-острова,
|
||||
виртуальные стены и декор-слой рисуются кликами; размеры комнат меняются
|
||||
перетаскиванием стен с живыми длинами и площадями; помощник выравнивания и
|
||||
@@ -37,6 +41,9 @@
|
||||
(белый полдень → золотой час → глубокая ночь), а окна внешних стен пускают
|
||||
в комнаты настоящие клинья солнечного света; облачность — опционально, от
|
||||
weather-сущности.
|
||||
- 🪟 **Шторы открываются тапом** — одно действие открывает, закрывает или
|
||||
останавливает штору, а сам значок морфится между открытым и закрытым
|
||||
видом и мягко пульсирует кольцом, пока штора едет.
|
||||
- 🌡 **Карточки комнат**: температура, влажность, Zigbee-сигнал, свет «1 из 3»;
|
||||
температурная заливка по комфортным границам.
|
||||
- 🚪 **Двери, окна и замки** с датчиками — отпирание только явной кнопкой,
|
||||
|
||||
@@ -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
@@ -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
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+3
-3
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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 |
|
||||
|
||||
Generated
+2
-2
@@ -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
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user