добавил gui

This commit is contained in:
2026-06-25 17:25:41 +03:00
parent cdd8fc3f71
commit 41a50a1d1e
19 changed files with 5696 additions and 32 deletions

105
john103C6T6NewVer/README.md Normal file
View File

@@ -0,0 +1,105 @@
# Web GUI для датчиков температуры и клапанов
Веб-интерфейс для:
- мониторинга температур,
- установки уставок,
- ручного и автоматического управления клапанами,
- управления позицией клапана в `%`.
## Быстрый старт
1. Запустите демо backend:
```bash
python mock_server.py
```
2. Откройте страницу:
- `http://127.0.0.1:8080/index.html`
3. В поле `API endpoint` оставьте пустым для демо или укажите `http://127.0.0.1:8080`.
Если API не указан, интерфейс переходит в офлайн-режим (демо) и хранит состояние в `localStorage`.
## Привязка к вашему проекту
GUI читает и пишет данные через `API_PATHS` в `app.js`:
1. Датчики: `/api/sensors`, `/sensors`, `/api/data`, `/state`
2. Клапаны: `/api/valves`, `/valves`, `/api/data`, `/state`
3. Запись: сначала `PUT /api/*/:id`, затем `PUT /api/*` (без `:id`)
Если ваш контракт другой, правьте:
- массив `API_PATHS` в `app.js`
- функции `normalizeSensor`, `normalizeValve` в `app.js`
## Работа с COM-портом (MCU)
Для чтения с порта COM запущен `serial_bridge.py`:
```bash
python serial_bridge.py --serial-port COM3 --baudrate 115200
```
По умолчанию сервис доступен на `http://127.0.0.1:8080`.
Поддерживаемые входящие форматы с порта:
1) JSON-пакет:
```json
{"sensors":[{"id":"zone_1","value":24.5,"setpoint":28.0}], "valves":[{"id":"valve_1","mode":"auto","position":32,"targetTemp":28}]}
```
2) Текстовый формат:
```text
T1=24.5;T1_SETPOINT=28.0;V1_MODE=auto;V1_POS=32;V1_TGT=28
```
Исходящие команды от GUI (`PUT`) также отправляются в порт как JSON:
```json
{"type":"sensor","id":"zone_1","setpoint":28.0}
{"type":"valve","id":"valve_1","mode":"manual","position":50}
```
Если нужен другой протокол от/к MCU (Modbus/байт-структура), пришлите пример кадров — подгоню парсер в `serial_bridge.py`.
В GUI:
- поле `COM порт` показывает список `/api/serial/ports`;
- кнопка `Обновить порты` — принудительно перечитывает список COM;
- кнопка `Подключить` / `Отключить` — вызывает `/api/serial/connect` и `/api/serial/disconnect` в `serial_bridge.py`.
## Форматы API
### GET
- `GET /api/sensors` → массив:
```json
[
{ "id": "zone_1", "name": "Термопара 1", "value": 24.6, "setpoint": 28, "unit": "°C", "zone": "1" }
]
```
- `GET /api/valves` → массив:
```json
[
{ "id": "valve_1", "name": "Клапан 1", "zone": "1", "mode": "auto", "position": 40, "targetTemp": 28, "isOpen": true }
]
```
### PUT
- `PUT /api/sensors/{id}`:
```json
{ "setpoint": 29.5 }
```
- `PUT /api/valves/{id}`:
- ручной:
```json
{ "mode": "manual", "position": 50 }
```
- авто:
```json
{ "mode": "auto", "targetTemp": 28.0 }
```
- или отдельные поля (`mode`, `position`, `targetTemp`).
## Файлы
- `index.html` — разметка страницы
- `styles.css` — стили
- `app.js` — логика интерфейса
- `mock_server.py` — демонстрационный backend
- `serial_bridge.py` — backend для COM-порта