1 Architecture
developer edited this page 2026-09-25 10:07:24 +00:00
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.

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 API
  • config.go — загрузка .env
  • log.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-канал) не затираются.