# Servaki Monitor — Смартпанель Единая панель мониторинга с **опциональными модулями**: - ⚡ **Энергомониторинг** — Sunways STH → Wiren Board → MQTT/InfluxDB; щитовые шкафы Navtelecom (FLEX/NTCB). - 🧩 **Смартпанель (realty)** — Wiren Board: реле WB-MR, диммеры WB-MDM3, сцены (MQTT). - 🧭 **GPS-мониторинг** — Navtelecom FLEX/NTCB → Traccar (REST/WebSocket); автопарк + стационарные объекты. Продукт «продолжает» наработки `Мониторинг ПО/NAvtelecom` (FLEX-сервер, Wiren Board, Silero-«Рация») и эталоны UI (`orbit-gps-panel.html`, `sunways-dashboard.html`), собирая их в один React-фронт. ## Стек React 18 + Vite + TypeScript + Tailwind. Графики — Recharts, иконки — lucide-react. Дизайн-система (навык **ui-ux-pro-max**): тема **Dark-OLED**, акцент `#22C55E`, фон `#0F172A`, шрифты Fira Sans / Fira Code. ## Архитектура (модульность) ``` src/ core/types.ts — типонезависимое ядро: MonitoredEntity, MonitorEvent (EventBus-контракт) config/modules.ts — реестр модулей + флаги enabled (опциональность / мультиарендность) components/ — AppShell (сайдбар+топбар), ui-примитивы (Card/KPI/Badge/StatusDot) modules/ energy/ smart/ gps/ — три модуля, каждый самодостаточен data/mock.ts — демо-данные (заменяются адаптерами) ``` Источники нормализуются адаптерами в `MonitoredEntity` (energy→InfluxDB, realty→WB-MQTT, transport→Traccar). Модуль включается/выключается флагом `enabled` — далее флаги придут с бэкенда по `clientId`. ## Запуск ```bash npm install npm run dev # http://localhost:5180 npm run build # dist/ ``` ## Деплой - **vm-mts1** (публично, за Caddy — как Heritage): `docker compose up -d --build` → `:8096`, Caddy `reverse_proxy`, поддомен через Beget API + LE-TLS. - **Дубль на офис-Proxmox** (внутренний/дев, рядом с реальным Wiren Board): тот же образ. - Тяжёлый слой данных (InfluxDB/Grafana/MQTT/FLEX-сервер) — отдельным compose на Proxmox. ## Дорожная карта 1. ✅ Каркас + 3 модуля на моках, дизайн-система. 2. Бэкенд-шлюз (Node/Express + PG + Redis): мультиарендность `clientId`, нормализация, кэш, WS. 3. Адаптеры: Traccar (REST/WS), Wiren Board (MQTT deviceBridge), InfluxDB (энерго). 4. EventBus → лента + звук + голос (Silero «Рация»). 5. Карта MapLibre в GPS-модуле; вход (OAuth/OTP).