diff --git a/README.md b/README.md index f6b6ed5a..091e219a 100755 --- a/README.md +++ b/README.md @@ -35,6 +35,10 @@ right on your Lovelace dashboard. whole groups of lights (works for dumb switches and stateless remotes too). - 🌒 **“Light sources” fill** — a dark house where every lit lamp casts a pool of its own color that spills through doorways and open zone boundaries. +- ☀️ **The sun on the plan** — set the compass and the backdrop lives with + 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. - 🌡 **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 diff --git a/README.ru.md b/README.ru.md index b6a913e3..8412904c 100644 --- a/README.ru.md +++ b/README.ru.md @@ -33,6 +33,10 @@ управлять группой ламп (в т.ч. «тупые» выключатели и кнопки-пульты). - 🌒 **Заливка «Свет по источникам»** — тёмный дом, где каждая горящая лампа даёт пятно своего цвета, проникающее через дверные проёмы и открытые зоны. +- ☀️ **Солнце на плане** — задайте компас, и фон живёт вместе с днём + (белый полдень → золотой час → глубокая ночь), а окна внешних стен пускают + в комнаты настоящие клинья солнечного света; облачность — опционально, от + weather-сущности. - 🌡 **Карточки комнат**: температура, влажность, Zigbee-сигнал, свет «1 из 3»; температурная заливка по комфортным границам. - 🚪 **Двери, окна и замки** с датчиками — отпирание только явной кнопкой, diff --git a/custom_components/houseplan/const.py b/custom_components/houseplan/const.py index 9f8f13fd..7b65d0f0 100755 --- a/custom_components/houseplan/const.py +++ b/custom_components/houseplan/const.py @@ -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.55.3" +VERSION = "1.56.0" DEFAULT_CONFIG: dict = { "spaces": [], diff --git a/custom_components/houseplan/frontend/houseplan-card.js b/custom_components/houseplan/frontend/houseplan-card.js index d32dba20..f3ec9a37 100755 --- a/custom_components/houseplan/frontend/houseplan-card.js +++ b/custom_components/houseplan/frontend/houseplan-card.js @@ -3298,4 +3298,4 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow `} - `}}xo.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorTextDialog:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},xo.ZOOM_MAX=8,xo.ZOOM_MIN=.4,xo._touchSeen=!1,xo._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,xo.styles=Js,customElements.get("houseplan-card")||customElements.define("houseplan-card",xo),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.55.3 ","background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}xo.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorTextDialog:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},xo.ZOOM_MAX=8,xo.ZOOM_MIN=.4,xo._touchSeen=!1,xo._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,xo.styles=Js,customElements.get("houseplan-card")||customElements.define("houseplan-card",xo),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.56.0 ","background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/custom_components/houseplan/manifest.json b/custom_components/houseplan/manifest.json index 61d1c9da..d43ae98a 100755 --- a/custom_components/houseplan/manifest.json +++ b/custom_components/houseplan/manifest.json @@ -16,5 +16,5 @@ "issue_tracker": "https://github.com/Matysh/houseplan-card/issues", "requirements": [], "single_config_entry": true, - "version": "1.55.3" + "version": "1.56.0" } diff --git a/demo/srv/assets/houseplan-card.js b/demo/srv/assets/houseplan-card.js index d32dba20..f3ec9a37 100755 --- a/demo/srv/assets/houseplan-card.js +++ b/demo/srv/assets/houseplan-card.js @@ -3298,4 +3298,4 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow `} - `}}xo.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorTextDialog:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},xo.ZOOM_MAX=8,xo.ZOOM_MIN=.4,xo._touchSeen=!1,xo._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,xo.styles=Js,customElements.get("houseplan-card")||customElements.define("houseplan-card",xo),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.55.3 ","background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}xo.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorTextDialog:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},xo.ZOOM_MAX=8,xo.ZOOM_MIN=.4,xo._touchSeen=!1,xo._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,xo.styles=Js,customElements.get("houseplan-card")||customElements.define("houseplan-card",xo),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.56.0 ","background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/dist/houseplan-card.js b/dist/houseplan-card.js index d32dba20..f3ec9a37 100755 --- a/dist/houseplan-card.js +++ b/dist/houseplan-card.js @@ -3298,4 +3298,4 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow `} - `}}xo.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorTextDialog:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},xo.ZOOM_MAX=8,xo.ZOOM_MIN=.4,xo._touchSeen=!1,xo._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,xo.styles=Js,customElements.get("houseplan-card")||customElements.define("houseplan-card",xo),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.55.3 ","background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}xo.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorTextDialog:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},xo.ZOOM_MAX=8,xo.ZOOM_MIN=.4,xo._touchSeen=!1,xo._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,xo.styles=Js,customElements.get("houseplan-card")||customElements.define("houseplan-card",xo),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.56.0 ","background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index efcbdd0b..5fdb03fb 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,49 @@ # Changelog +## v1.56.0 — 2026-08-03 + +Minor release: the sun comes to the floor plan — a compass, a day/night +backdrop and real sunlight through the windows — plus room temperature +from climate devices, a design-token pass over the UI, live rulers for +opening drags, and a sun-cache fix. + +- **The sun on your floor plan** (docs/SUN.md). Tell the plan where + north is — a compass dial in the general settings, with a per-space + override — and the card starts living by Home Assistant's own + `sun.sun`: + - *Day/night backdrop* (`bg_mode: daynight`): the scene behind the + plan follows the sun's elevation — white at full day, warm gold + through the golden hour, cooling dusk, deep night. The plan itself + dims only ~10% at night, so the rooms stay readable. + - *Light through the windows* (`sun_rays`): every window on an + exterior wall casts a soft wedge of light into its room — clipped + by the room's own contour, warmer near the horizon, stretching + long at sunrise and sunset, short at noon, gone after dark. + - *Clouds, if you want them* (`weather_entity`): point at a weather + entity and an overcast sky mutes the wedges; rain or snow puts + them out. A dead sensor never kills the sun. + - The plan now sits on an *opaque sheet of paper* traced along the + room contours: the scene background — `bg_color` or the daynight + sky — is visible only around the walls and never bleeds through + the rooms; in day/night mode the sheet casts a soft shadow. + - The whole feature is silent until the compass is set; without + `sun.sun` the settings dialog explains why. +- **Room temperature from climate devices.** A new checkbox in the + device dialog puts the AC's or thermostat's `current_temperature` on + the badge next to its icon and into the room's average temperature. +- **UI modernization.** A design-token pass over `styles.ts` — 209 + hard-coded values unified into spacing/radius/font/shadow scales — + and native `ha-switch` / `ha-slider` controls in the dialogs, with a + hard fallback to the old plain inputs where HA components are + unavailable. +- **Live rulers for opening drags.** Dragging a door or window now + shows the live distances to both ends of its wall, measured along + the owning room's edge; a dashed guide and a soft magnet snap the + opening to the wall's center (hold Shift to disable the magnet). +- **Fix DEV-B701-01** — the sun-ray cache is now invalidated by local + geometry edits too, so a wedge can no longer go stale after you move + a wall locally before the server confirms the change. + ## v1.55.3 — 2026-08-02 Patch release: two fixes for the v1.55.2 first-open veil, found by an diff --git a/docs/CHANGELOG.ru.md b/docs/CHANGELOG.ru.md index 30690df5..2ac0ccaa 100755 --- a/docs/CHANGELOG.ru.md +++ b/docs/CHANGELOG.ru.md @@ -6,6 +6,50 @@ > **Правило проекта:** оба файла пополняются в одном коммите с самим > изменением — как и остальная документация (см. docs/STATUS.md). +## v1.56.0 — 2026-08-03 + +Минорный релиз: на план приходит солнце — компас, фон «день/ночь» и +настоящий свет из окон — плюс температура с климатических устройств, +дизайн-токены в UI, живые линейки при перетаскивании проёмов и фикс +кэша солнечных лучей. + +- **Солнце на плане дома** (docs/SUN.md). Скажите плану, где север — + круговой компас в общих настройках с переопределением в каждом + пространстве — и карточка начинает жить по `sun.sun` самого + Home Assistant: + - *Фон «день/ночь»* (`bg_mode: daynight`): сцена за планом следует + за высотой солнца — белый ясный день, тёплое золото золотого + часа, остывающие сумерки, глубокая ночь. Сам план ночью + приглушается лишь на ~10%, комнаты остаются читаемыми. + - *Свет из окон* (`sun_rays`): каждое окно на внешней стене пускает + в свою комнату мягкий клин света — обрезанный контуром комнаты, + теплее у горизонта, длинный на рассвете и закате, короткий в + полдень и гаснущий ночью. + - *Облачность — по желанию* (`weather_entity`): укажите + weather-сущность, и пасмурное небо приглушит клинья, а дождь или + снег погасит совсем. Мёртвый датчик солнце не выключает. + - План теперь лежит на *непрозрачном листе бумаги*, повторяющем + контуры комнат: фон сцены — `bg_color` или небо «дня/ночи» — + виден только вокруг стен и не просвечивает сквозь комнаты; в + режиме «день/ночь» у листа мягкая тень. + - Пока компас не задан, фича полностью молчит; без `sun.sun` + диалог настроек объясняет, почему. +- **Температура с климатических устройств.** Новый чекбокс в диалоге + устройства выводит `current_temperature` кондиционера или + термостата на плашку у значка и учитывает её в средней температуре + комнаты. +- **Модернизация UI.** Токен-проход по `styles.ts` — 209 «зашитых» + значений сведены в шкалы отступов/радиусов/шрифтов/теней — и + родные `ha-switch` / `ha-slider` в диалогах с жёстким фолбэком на + старые инпуты там, где компоненты HA недоступны. +- **Живые линейки проёмов.** При перетаскивании двери или окна теперь + видны живые расстояния до обоих концов стены — по ребру своей + комнаты; пунктирная направляющая и мягкий магнит центрируют проём + на стене (Shift отключает магнит). +- **Фикс DEV-B701-01** — кэш солнечных лучей теперь сбрасывается и + локальными правками геометрии: клин больше не «застревает», если + подвинуть стену до подтверждения сервера. + ## v1.55.3 — 2026-08-02 Патч-релиз: два исправления вуали первого открытия из v1.55.2, diff --git a/docs/STATUS.md b/docs/STATUS.md index 282fbd3e..16ff9cd0 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -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-02) +## Snapshot (2026-08-03) | Item | State | |---|---| -| Version | **v1.55.3** everywhere (manifest, const.py, package.json, CARD_VERSION); deployed to the home instance. Closes the v1.55.2 audit findings AUD-1552-01/02 (boot-veil lifecycle: reconnect restart + full protective window with trailing quiescence + post-reveal soft grace; regressions in `demo/smoke_preloader_lifecycle.mjs`) | +| 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 | | 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.55.3** 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.56.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 | diff --git a/docs/SUN.md b/docs/SUN.md index 46f95808..73fa1cba 100644 --- a/docs/SUN.md +++ b/docs/SUN.md @@ -1,6 +1,6 @@ # Sun on the plan — the spec (source of truth) -Status: approved by the owner 2026-08-03. Dev-only for now (no release). +Status: approved by the owner 2026-08-03. Shipped in v1.56.0. Scope decisions final: the compass lives in the GENERAL settings with a per-space override, the feature is silent until `north_deg` is set anywhere, wedges ship for the FULL card only in v1, and mutual shading diff --git a/package-lock.json b/package-lock.json index 1e061ba0..ba30f110 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "houseplan-card", - "version": "1.55.3", + "version": "1.56.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "houseplan-card", - "version": "1.55.3", + "version": "1.56.0", "license": "MIT", "dependencies": { "lit": "^3.1.3", diff --git a/package.json b/package.json index 84b4906e..03bf277a 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "houseplan-card", - "version": "1.55.3", + "version": "1.56.0", "description": "Interactive house plan Lovelace card for Home Assistant", "license": "MIT", "type": "module", diff --git a/src/houseplan-card.ts b/src/houseplan-card.ts index 9bcc7f2a..84933fdc 100755 --- a/src/houseplan-card.ts +++ b/src/houseplan-card.ts @@ -51,7 +51,7 @@ import { cardStyles } from './styles'; import { fitInSquare, contentBounds, spaceModels } from './space-geometry'; import { langOf, t, type I18nKey } from './i18n'; -const CARD_VERSION = '1.55.3'; +const CARD_VERSION = '1.56.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