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