Ребренд Мониторинг Орбита -> Железный Егорин; accent green->amber #F59E0B; LoginScreen правая половина = Lightning (WebGL, hue 35 тёплый) под стеклянной формой; левая панель — тёплый градиент. Доступ агентам: репо публичный, push german-токеном. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.9 KiB
5.9 KiB
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/<imei>/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.