§4 SPEC.md референса, четыре карточки: Basics (имя и масштаб в сетке 1fr/175, подложка двумя choice-карточками, callout о пересчёте масштаба), Appearance (строка-тумблер границ с иконкой и подписью, сегмент стиля стен с образцами линии, плашка цвета с hex/прозрачностью/Reset, сегмент заливки с деталями режима, компактный список «Видимые слои» с логикой «включено = видно» — К2), Room cards (строка-тумблер названий, четыре плитки значений с отключением и callout-ссылкой, слайдер размера с числом, концами и «Сбросить до 100%», образец карточки внутри блока на тинте — Q2), Sun & light (сегмент фона, плашка цвета фона, радио «свет через окна» в строку, север селектом с компасом 44 px и полем градусов, строка-тумблер свечения). Одна форма на два рантайма. `renderSpaceForm` в `editors/space-form.ts` собирает тело и футер; редакторский вход (`space-settings-dialog.ts`) и онбординг подают порт с тем, что у них различается, и сами рисуют `<hp-dialog data-kind=…>` — контракт #489 требует литеральный kind. Копия разметки онбординга на 300 строк удалена; локальные дубли CELL_CM_* и strictNumber там же — тоже («одно число — один источник»). К10 (решение владельца Q1): Save активен только при изменениях и без ошибок, в футере «Есть несохранённые изменения» либо ссылка «Проверьте поля: N» к первому ошибочному; «✕», Cancel и Escape с изменениями спрашивают через `_confirmDanger`, без изменений закрывают сразу. Снимок делается при открытии (`editors/space-form-state.ts`, WeakMap по хосту) — `SpaceDialogState` не получил ни одного ключа. Валидация: имя, подложка без изображения, диапазон температур, север 0–359 — с `aria-invalid` и текстом под полем. Строки. 51 новый ключ живёт в ленивом словаре `i18n/settings` (приём #423/#459), не в первом кадре: стартовый граф 291 260 при потолке 292 500. Отдельный словарь, а не `support`, — иначе онбординг тянул бы весь словарь редактора ради одной формы. 11 существующих ключей переименованы по Q6 («Space name», «Appearance», «Room cards», «Draw it myself», «Zigbee signal next to devices»…), 9 мёртвых удалены из четырёх локалей. `hp-color-opacity` получил `hide-label`: подпись рисует плашка, `label` остаётся для title/aria и `smoke_color_picker_consumers` проходит без правок (AC5). Смоки. Переписаны осознанно (К6 снят), каждый — с пометкой #600 у правки: smoke_hide_layers (компактные строки, инверсия К2 проверяется кликом), smoke_ux_fixes (сегмент, строка-тумблер, поля °C, ширина 560 — Q7), smoke_dialog_footer_width (560 для form-shell), smoke_temp_fill (два поля по id), smoke_settings_dialog_cards (три сегмента), smoke_space_settings и smoke_space_create_display_defaults и smoke_lazy_editor_chunk (choice-карточка по смыслу, не по индексу — порядок §4.2 draw → file), smoke_space_scale_defaults (поле с единицей). Новый фокусный свидетель demo/smoke_space_settings_form.mjs: состав карточек и отсутствие старой разметки, оболочка 560 и один скроллер, цели 44, запись каждого нового контрола в свой ключ, Save/dirty/вопрос при закрытии, семь контрольных ширин (320…1920). Мутанты: space-fill-segment-writes-a-neighbour-key, space-save-enabled-without-changes, space-discard-without-asking, space-layer-toggle-loses-inversion. Контрактные тесты: `houseplan-source.mjs` дописывает общие модули диалогов к логическому исходнику; коллектор i18n видит `help(...)` порта и `shelp(...)` (заодно встал на учёт `radar.help`, проходивший мимо счётчика — 30 → 35). Потолок ленивого редакторского графа 225 900 → 236 300 (замер 235 560) с разбором в bundle-budget.mjs: словарь на четыре локали и подписи — большая часть роста; промежуточно, итог в конце серий. Гейты: typecheck, build, bundle:sync, npm test 2792 pass (красным был только потолок — поднят с доводом), 10 смоков пространства зелёные, smoke_color_picker_consumers без правок, mutation-gate --check. Issue: #600 User-Visible: no
🏠 House Plan — a live home map for Home Assistant
📘 Full user guide · 🇷🇺 Русский · 🗂 Project issues
Your whole home at a glance
House Plan turns Home Assistant into a live map of your home. Open the dedicated House Plan item in the Home Assistant sidebar, upload a plan or draw rooms, bind them to Home Assistant areas, and the area's devices appear automatically. You can immediately see where a light is on, a door is open, a room is too cold, Zigbee signal is weak, or a leak sensor has fired.
Setup is entirely graphical: no floor-plan YAML, Inkscape, or external editor. Plan data and device positions live on the Home Assistant server and stay in sync across screens.
Edit on a desktop computer. View and kiosk are fully supported on phones and tablets. The editors are designed primarily for a mouse and keyboard; individual touch editing operations may be awkward or unavailable. See the exact touch support contract.
What House Plan provides
- Live state and safe actions. Lights and other safe devices can toggle from the plan; a lock cannot be opened by an accidental plan tap.
- Three built-in editors. Plan creates rooms, walls and openings; Device places and configures markers; Background adds lines, labels and furniture.
- Area-aware rooms. New devices appear automatically, while room cards can show temperature, humidity, light state and average LQI.
- Light and environment. Room fills, lamp Glow, wall shadows, a day-cycle backdrop and sunlight through windows.
- Doors, windows, gates and vacuums. Openings follow real contacts and locks; a robot can show its position, dock and travelled path.
- Several floors and screens. Space tabs, swipe navigation, local viewport, and a separate initial floor for each card.
- Wall-display kiosk. A plan-only view with fullscreen navigation and icon sizes saved for that display.
Your first working room
- Install the integration and open House Plan in the Home Assistant sidebar.
- Create the first space: upload SVG/PNG/JPG/WebP, reuse an uploaded image, or choose no image and draw the plan by hand.
- In Plan, select Room outline, place vertices, and click the first point to close the outline.
- Name the room and bind it to a Home Assistant area. Use “No area” for a room that has no devices.
- Open Device: devices from the bound area are already placed; drag their markers to the correct positions.
- Optionally use Background for lines, text and furniture.
- Return to View. The plan now displays live state and accepts safe actions.
Every workflow and edge case is in the full user guide. The Background editor contract and vacuum guide are the authorities for those subsystems.
Installation
HACS
House Plan is in the HACS default catalog — no custom repository needed.
- In HACS search for House Plan and install it.
- Restart Home Assistant.
- Open Settings → Devices & services → Add integration → House Plan.
The sidebar page and optional dashboard cards are registered automatically.
After installing or updating House Plan,
restart Home Assistant and fully reload the page: Ctrl+F5 on Windows/Linux or
Cmd+Shift+R on macOS.
Storage mode (Home Assistant default)
No YAML is normally needed. If automatic registration did not make the card
available, open Settings → Dashboards → menu ⋮ → Resources → Add
resource, enter /houseplan_files/houseplan-card.js, and select JavaScript
module.
YAML resources mode (Home Assistant 2026.2+)
To manage resources in configuration.yaml independently of the dashboard
mode, use:
lovelace:
resource_mode: yaml
resources:
- url: /houseplan_files/houseplan-card.js
type: module
Legacy Home Assistant 2024.6–2026.1
Only for a full-YAML dashboard that is already managed in YAML, use:
lovelace:
mode: yaml
resources:
- url: /houseplan_files/houseplan-card.js
type: module
mode: yaml changes the dashboard itself to YAML mode. Do not switch a storage
dashboard to legacy YAML just for House Plan; use the Storage mode instructions
above instead. Do not use the on-disk path inside custom_components; Home
Assistant does not serve that path as a JavaScript module.
Manual installation
Copy the complete custom_components/houseplan release folder to
config/custom_components, restart Home Assistant, and add the House Plan
integration. Do not copy only houseplan-card.js: the card also uses an
internal manifest and content-hashed modules from the same release.
Open House Plan
After the integration is added, open House Plan in the Home Assistant sidebar. This full-page view is the primary entry point and needs no dashboard or YAML setup. It remembers the last space but always returns from another HA page in View rather than reopening an editor. Users without editing permission see the same live plan without editor controls.
If the sidebar entry cannot be registered, the integration and existing dashboard cards continue to work; check Settings → System → Repairs → System information → House Plan after restarting and hard-refreshing HA.
Optional dashboard card
Add the card only when House Plan must be embedded in a dashboard. In a Sections view it requests full width by default, while a manual size chosen in HA remains authoritative. Add it in the UI or as:
type: custom:houseplan-card
title: House plan
Different screens may start on different spaces:
type: custom:houseplan-card
default_floor: ground
All cards share server-side rooms and coordinates. Current mode, viewport and selected space remain local to the screen. Revision checks and live sync cover concurrent clients, but avoid editing the same object in two browsers at once.
Detailed documentation
- Full user guide
- Mouse/touch/keyboard matrix
- Plan tools
- Background editor
- Robot vacuums
- Touch support
Support and feedback
- Questions and plan examples: Telegram @ha_houseplan.
- Bugs and proposals: GitHub Issues.
- Before reporting, update House Plan, restart HA and hard-refresh the page. Include the version, browser, logs and reproduction steps; private entity IDs may be replaced with fictional ones.
Documentation screenshots are produced by the reproducible
npm run build && node demo/docs/capture.mjs command using synthetic data only. Scenario version,
source fingerprint and every image hash are recorded in the
screenshot index.
License: MIT.






