mirror of
https://github.com/Matysh/houseplan-card
synced 2026-07-31 08:28:31 +00:00
6.8 KiB
6.8 KiB
Роадмап: от «карты дачи» к публикуемой универсальной интеграции
Цель: опубликовать в HACS (сначала custom repository, затем PR в default) универсальную интеграцию «интерактивный план дома»: свои планы на пространство, ручная разметка комнат, полуавтоматическое размещение устройств, скрытие/переименование/смена иконок, виртуальные устройства. Никакого хардкода конкретного дома в коде.
Принципы (зафиксировано)
- Пишем полноценный компонент по паттернам HA dev docs, не захардкоженную фичу.
- Все данные конкретного дома — это конфигурация инстанса (server-side Store), а не код/бандл. Текущие данные дачи станут первым мигрированным инстансом.
- Документировать всё сразу в docs/ (контекст сессий теряется).
- Версионирование хранилищ (Store minor_version + async_migrate) с первого дня.
Фаза 0 — Гигиена публикации (быстро, без новых фич)
- hacs.json, manifest с обязательными ключами, структура custom_components/*
- CI: hacs/action + hassfest (workflow validate.yml) — добавлено, проверить на GitHub
- brand/icon.png
- Публичный GitHub-репозиторий: description, topics, issues on; первый Release v1.2.x
- README EN (основной) + README.ru.md; скриншоты/GIF (обязательны для витрины HACS)
- Заменить codeowners/documentation/issue_tracker на реальные URL после создания репо
Фаза 1 — Конфиг на сервере (декаплинг от дачи) ← ✅ СДЕЛАНО в v1.3.0 (кроме выпиливания бандл-данных — оставлены как fallback до фазы 2)
Новое хранилище houseplan.config (Store v1):
{ "spaces": [ { "id": "f1", "title": "1 этаж", "plan": {"media_id": "...", "type": "svg"},
"view_box": [x,y,w,h], "rooms": [{"id","name","area_id","x","y","w","h"}] } ],
"device_overrides": { "<device_id>": {"hidden":bool,"icon":str,"name":str} },
"virtual_devices": [ {"id","space","name","icon","x","y","note"?, "entity_id"?} ],
"settings": {"exclude_integrations": [...], "group_lights": bool, ...} }
- WS API v2:
houseplan/config/get|set,houseplan/plan/upload(файл плана →<config>/houseplan/через process-executor, отдача через static path), layout как сейчас. - Карточка: при наличии server-config использует его; бандл-данные дачи становятся fallback-примером и затем выпиливаются (миграционный скрипт зальёт их в Store).
- Единицы координат: нормированные (0..1 от плана) для новых конфигов — независимость от разрешения исходника; миграция дачи пересчитает 1489×1053 → нормированные.
Фаза 2 — Редактор разметки в карточке ← ✅ ЯДРО СДЕЛАНО в v1.4.0 (осталось: загрузка плана из UI, правка view_box, редактирование существующих комнат)
- Режим «Настройка» (отдельно от drag-раскладки): рисование/ресайз прямоугольников комнат поверх плана, привязка к area (селектор ha-area-picker), редактирование viewBox (кадр).
- Позже: полигональные комнаты (SVG path), повороты планов.
- Загрузка плана из UI (file upload → WS) + выбор существующего media.
Фаза 3 — Управление устройствами
- Панель устройств в режиме настройки: список неразмещённых (с фильтрами), drag из панели на план; авто-раскладка «сеткой по комнате» кнопкой.
- Оверрайды per-device: скрыть, своя иконка (ha-icon-picker), своё имя. Хранение в config.
- Настраиваемое курирование: исключения интеграций/доменов в options flow вместо хардкода.
Фаза 4 — Виртуальные устройства
- CRUD виртуальных маркеров (имя, иконка, координаты, заметка; опционально ссылка на entity/URL): септик, кран, счётчик без датчика и т.п. Рендер как обычные иконки, клик → карточка с заметкой или more-info привязанной сущности.
Фаза 5 — Полировка UX/фич
- Клик-действия по настройке: toggle для света/розеток, long-press → more-info.
- Тюнинг live-индикации (цвета по теме, badge-и), light-тема.
- Тултипы на тач-устройствах (long-press), доступность (клавиатура, aria).
- Опция LQI: порог «плохого» сигнала, скрытие меток на не-zigbee инстансах.
Фаза 6 — Качество и публикация
- Тесты: pytest (config_flow, websocket_api, миграции Store) + hassfest/hacs action в CI; фронт: vitest на rules/geometry-утилиты.
- Типизация: strict TS-интерфейсы hass (custom-card-helpers или свои), mypy для python.
- Переводы integration+card: en + ru (translations/, локализация строк карточки).
- Quality scale bronze → silver чек-лист; PR в hacs/default; опционально PR в home-assistant/brands (пока хватает brand/ в репо).
Открытые вопросы
- Имя для публикации: «House Plan Card»? домен
houseplanне занят в HACS default — проверить. - Лицензия MIT (в package.json уже MIT) — добавить LICENSE файл.
- Формат планов: SVG предпочтителен (вектор, вес), PNG поддержать обязательно.