Files
houseplan-card/docs/specs/054-zigbee-topology-overlay.md
T
Matysh 112c260314
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 3m2s
Validate / golden (push) Failing after 51s
Validate / backend (push) Failing after 6m50s
Validate / smoke (push) Failing after 13m44s
Validate / performance (push) Failing after 24m13s
Release v1.61.0-beta.1
2026-08-09 21:51:33 +03:00

4.0 KiB
Raw Blame History

ТЗ #54 — Диагностический Zigbee topology overlay

Цель

По явному запросу показать связи ZHA/Zigbee2MQTT между уже размещёнными устройствами поверх реальной геометрии, не превращая House Plan в редактор сети.

Stage 0 — capability research

На поддерживаемых версиях HA зафиксировать официальные/фактические API:

  • ZHA topology/neighbour source, permissions, direction и LQI semantics;
  • Zigbee2MQTT networkmap request/response через HA MQTT integration либо документированную exposed entity;
  • соответствие IEEE ↔ HA device registry connections;
  • timeout/rate limits и поведение sleeping end devices.

Неподтверждённые command/topic не hardcode-ятся. Каждый provider имеет fixture с обезличенными ids и дату/версию проверенного контракта.

Normalized model

type ZigbeeTopology = {
  provider: 'zha' | 'z2m'; capturedAt: number;
  nodes: Array<{ key: string; deviceId?: string; role: 'coordinator'|'router'|'end' }>;
  links: Array<{ from: string; to: string; lqi?: number; direction: 'one'|'both'|'unknown' }>;
  warnings: string[];
};

Provider adapters живут backend-side либо в изолированном HA adapter; render не знает API. Browser не подключается к MQTT напрямую и не хранит topology в House Plan config.

Fetch/cache/security

  • Overlay off по умолчанию; первый toggle запускает fetch с progress/cancel.
  • Shared per-provider cache TTL 60 s (уточняется Stage 0), in-flight dedupe и hard timeout. Toggle off отменяет UI ожидание, но безопасный backend request может завершить cache.
  • Refresh только явный или после TTL; HA state ticks не сканируют topology.
  • Read permission проверяется backend. Ошибка/unsupported не ломает plan и показывает localized status.

Mapping и визуал

Node сопоставляется marker только через device registry/explicit entity owner. На plan рисуются links, у которых оба конца имеют видимые live markers текущего space. Остальные nodes доступны в summary «Не размещено N», но не рисуются.

Edges — pointer-transparent отдельный layer. Цвет/opacity/thickness отражают нормализованный LQI только при сопоставимой шкале provider; unknown — нейтральный пунктир. Direction optional arrow только при достоверных данных. Coordinator и router имеют legend. Geometry стен не интерпретируется как причина сигнала.

Multiple spaces и lifecycle

Cross-space link не рисуется как линия через разные планы; endpoints получают badge/count и список другого пространства. Hidden/removed/disabled marker не рисуется. Rebind refreshes mapping без нового network scan.

Performance и проверки

  • 20/100/500 nodes, dense mesh; edge cap/viewport culling после Stage 0;
  • provider fixtures, timeout, malformed/cyclic/duplicate links;
  • mapping IEEE/device/entity, cross-space, hidden lifecycle;
  • lazy request/in-flight cache and no fetch on ordinary HA ticks;
  • golden LQI/unknown legend и performance budget;
  • network layer полностью исчезает при toggle off и не меняет config.