Это расширенная версия MVP:
- JWT авторизация для REST + WebSocket
- MQTT: отключён anonymous, включены password_file + ACL (panel/backend users)
- Panel Agent: добавлен слой DoorIO (stub + заготовка GPIO) — в Docker используется stub
Важно: GPIO в контейнере не работает. Для реального SBC запускайте
panel-agentна хосте (Linux SBC), а не как docker-сервис, и используйтеDOOR_IO=gpio.
infra/
docker-compose.yml
mosquitto/
Dockerfile
mosquitto.conf
aclfile
backend/
panel-agent/
web/
- user:
admin - pass:
admin
Можно поменять через env в compose:
ADMIN_USERADMIN_PASSJWT_SECRET
panel/panelpass(панель публикует state/events и слушает cmd)backend/backendpass(бек публикует cmd и слушает state/events/ack)
cd infra
docker compose up --buildОткрыть UI: http://localhost:3000
- В UI войдите (admin/admin)
- Нажмите Unlock — появится запись в Command log (SENT->OK)
CLI:
# получить токен
curl -s -X POST http://localhost:8000/api/auth/login -H "Content-Type: application/json" -d '{"username":"admin","password":"admin"}'
# state (подставьте токен)
curl http://localhost:8000/api/panels/entrance-1/state -H "Authorization: Bearer <TOKEN>"- Установить Python 3.11+
- В папке
panel-agent/:
pip install .
export PANEL_ID=entrance-1
export MQTT_HOST=<ip брокера>
export MQTT_PORT=1883
export MQTT_USERNAME=panel
export MQTT_PASSWORD=panelpass
# выбрать IO слой
export DOOR_IO=gpio # или stub
export RELAY_PIN=17 # пример
export REED_PIN=27 # пример
python -m agent.mainbackend/app/security.py— JWT, проверка токенаbackend/app/main.py— REST + WS, защищены dependencyinfra/mosquitto/*— образ mosquitto с сгенерированными паролями + ACLpanel-agent/agent/door_io_*— stub и GPIO заготовкаweb/src/pages/Panel.tsx— login + работа с токеном