Files
houseplan-card/docs/ROADMAP.md
T

74 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Роадмап: от «карты дачи» к публикуемой универсальной интеграции
Цель: опубликовать в HACS (сначала custom repository, затем PR в default) универсальную
интеграцию «интерактивный план дома»: свои планы на пространство, ручная разметка комнат,
полуавтоматическое размещение устройств, скрытие/переименование/смена иконок, виртуальные
устройства. Никакого хардкода конкретного дома в коде.
## Принципы (зафиксировано)
- Пишем полноценный компонент по паттернам HA dev docs, не захардкоженную фичу.
- Все данные конкретного дома — это **конфигурация инстанса** (server-side Store),
а не код/бандл. Текущие данные дачи станут первым мигрированным инстансом.
- Документировать всё сразу в docs/ (контекст сессий теряется).
- Версионирование хранилищ (Store minor_version + async_migrate) с первого дня.
## Фаза 0 — Гигиена публикации (быстро, без новых фич)
- [x] hacs.json, manifest с обязательными ключами, структура custom_components/*
- [x] CI: hacs/action + hassfest (workflow validate.yml) — добавлено, проверить на GitHub
- [x] 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):
```json
{ "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 поддержать обязательно.