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