Table of contents
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.
Architecture
Overview
┌─────────────────────────────────────────────────────────────┐
│ Панель KEBA │
│ ┌──────────────────┐ RS-485 ┌──────────────────┐ │
│ │ multicpumaster │◄────────────►│ go-emu (PTY) │ │
│ └──────────────────┘ └────────▲─────────┘ │
│ │ read │
│ ┌────────┴─────────┐ │
│ │ button file │ │
│ └────────▲─────────┘ │
│ │ write │
│ ┌────────┴─────────┐ │
│ │ web panel │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────────────────┘
multicpumaster опрашивает IO-board по RS-485 (через PTY). Эмулятор читает маску
кнопок из файла и отдаёт её в cyclic-ответах. Веб-панель пишет в файл через HTTP API.
go-emu
Go-сервер, PTY-эмуляция, протоколы обмена, HTTP API.
Файлы:
main.go— точка входа, конфигурацияprotocol.go— simple/cyclic протоколыwebapi.go— HTTP APIconfig.go— загрузка .envlog.go— логирование
web
React-интерфейс (TypeScript, Vite).
Протоколы
Simple Protocol
Инициализация — запрос версии, состояния кнопок, управление выходами.
Cyclic Protocol
Основной режим — обмен каждые ~20–55 мс. Передаёт состояние кнопок и rotating ID.
Cyclic-кадры защищены byte-stuffing (STX=0x02, ESC=0x1b) и BCC (XOR). Simple-кадры —
фиксированный формат 0x96 … 0x8d без stuffing/BCC.
Lease
После записи ненулевой маски через API создаётся lease на 2 сек. Если клиент
перестал слать запросы — кнопки сбрасываются в 0x0000. Изменения через echo
(debug-канал) не затираются.