Files
egorin/SPEC.md
T
GermanandClaude Opus 4.8 b1c52ab748 Железный Егорин — форк Орбиты: тёплый стиль (amber), логин с odyssey WebGL-молнией справа, энергомониторинг+панель
Ребренд Мониторинг Орбита -> Железный Егорин; accent green->amber #F59E0B; LoginScreen правая половина = Lightning (WebGL, hue 35 тёплый) под стеклянной формой; левая панель — тёплый градиент.
Доступ агентам: репо публичный, push german-токеном.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 23:57:16 +03:00

65 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.