# Servaki Monitor — ТЗ и архитектура (сводно по разделам) Единая смартпанель мониторинга: **Энергетика + GPS + Сеть** с авторизацией, RBAC и приёмом реальных данных Navtelecom (FLEX/NTCB). Продолжает наработки `Мониторинг ПО/NAvtelecom` (FLEX-сервер, Wiren Board, Silero-«Рация»). ## Архитектура ``` Устройства Navtelecom ──FLEX/NTCB :2000──▶ flex-server ──MQTT──▶ Node-шлюз ──REST /api + WS /socket──▶ React-фронт (gps.servaki.online) (mosquitto) (адаптеры WB/Traccar/Influx) (за Caddy, TLS) ``` - **Фронт:** React 18 + Vite + TypeScript + Tailwind (Dark-OLED/Light), Recharts, Leaflet, lucide. Дизайн-система навыка ui-ux-pro-max. - **Шлюз (`server/`):** Node + Express + ws. Адаптеры **Wiren Board (MQTT)** / **Traccar (REST/WS)** / **InfluxDB** — активны по env, иначе демо-данные. RBAC + мультиарендность (`clientId`), треки. - **Приём (`deploy/ingest/`):** flex-server (FLEX/NTCB TCP :2000, DB off) + mosquitto. В трекере: домен `gps.servaki.online`, порт `2000`, протокол FLEX. - **Размещение:** фронт+шлюз на vm-mts1 (МТС) за Caddy; дубль/тяжёлые данные — офис-Proxmox. ## Разделы (ТЗ) ### Авторизация - Экран входа: **Яндекс ID** (OAuth: authorize→token→login.yandex.ru/info) + **Демо-доступ** (роль только-просмотр). - Сессия в localStorage. Маппинг email→роль (allowlist админов). Самрегистрация → демо (план: свой арендатор, см. roadmap). ### RBAC / Доступ - Права: на **разделы** (energy/smart/gps/netinfra) и на **объекты** внутри + уровни **view / edit / reports**. - Матрица доступа (админ выдаёт чекбоксами), «Войти как», мультиарендность по `clientId`. ### Энергомониторинг - Источники: Sunways STH (Modbus→WB→InfluxDB) + щитовые шкафы Navtelecom (FLEX, питание AIN3). - KPI (PV/SOC/U-АКБ/I-АКБ/темп BMS/выработка). Графики **PV и SOC — многовекторные** (линия на объект). - Аварии: пиктограмма с раскрытием контекста по клику; «Аварий нет» в сером поле. ### GPS-мониторинг - Источники: Navtelecom FLEX/NTCB → Traccar (REST/WS). Объекты: транспорт + стационарные. - Карта Leaflet, слои **Тёмная/Светлая/OSM/2ГИС/Яндекс**, **треки** (полилинии), фуллскрин. - Слежение (чекбокс), журнал поездок + **маршрут по клику**, контекстное меню (статистика/свойства), отчёты CSV/PDF. ### Сетевая инфраструктура (mesh2) - Узлы Keenetic/Mikrotik/камеры/контроллеры; техинфо (IP/модель/роль/задержка/канал/клиенты/CPU). - **Связанность** узлов на карте (линия/пунктир/анимированный поток по состоянию). Кадры с камер/приборов (3×/сутки). ### Приёмная часть / ingest - flex-server декодирует NTCB-рукопожатие + FLEX 1.0–3.0 (params.py), публикует `navtelecom//state` в MQTT. - Шлюз нормализует в `MonitoredEntity` + строит треки. Проверено эмулятором (`tools/emulator.py`). ## API (шлюз) `POST /api/login` · `GET /api/me` · `GET /api/entities[?type=]` · `GET /api/tracks/:id` · `GET /api/trips[?entityId=]` · `GET /api/events` · `GET /api/channels` · `GET /api/energy/series` · `GET /api/health` · `GET /api/auth/yandex/start|callback` · **WS** `/socket` (snapshot + position/entity/event/channel). ## Демо-сущности и локации (КМВ, клиент «tempelhoff») - Транспорт: `veh-123` ГАЗель-123, `veh-204` МТЗ-82 (двигаются → треки). - Энерго: `cab-07` Щит КТП-7. Инверторы: Склад/Ферма/Цех (PV+SOC). - Сеть mesh2: finik-хаб (10.200.0.1), Keenetic Склад/Ферма, Mikrotik Поля, Камера Въезд, Контроллер Солн. - WB-каналы: реле (Освещение/Ворота/Насос), диммер (Свет офис), вход (Датчик двери — тикает по WS). - Поездки с маршрутами (полилинии), события (питание/дверь/топливо/геозона). ## Roadmap / бэклог - Самрегистрация → собственный арендатор (`clientId`) + привязка устройств по IMEI (свои сущности). - Смарт: датчик двери — пиктограмма замок-открыто/закрыто, мини-журнал, кросс-раздельные события. - Выбор цвета трека объекта; редактирование объекта + выбор пиктограммы сущности. - Реальные адаптеры (развернуть Traccar + InfluxDB-стек); EventBus → «Рация» (Silero). ## Безопасность Секреты (JWT, Яндекс client_secret, токены) — только в `.env` на ноде (chmod 600) и на Я.Диске; **в репозитории только плейсхолдеры** (`.env.example`). `.env`, `node_modules`, `dist` — в `.gitignore`.