Files
arm/atxpi
toros a1997b00ac feat(webui): FastAPI REST + WebSocket-консоль + MCP-эндпоинт + браузерный UI
- server.py: /api/power/*, /api/status, /api/history, /ws/console, /mcp (MCPServer streamable-http)
- auth: Bearer-токен (ATXPI_WEB_TOKEN) для /api/* и /mcp/*; WS — через ?token=
- статика: index.html, app.js, style.css + vendored xterm.js (работает офлайн на Pi)
- lightweight: один процесс uvicorn, без node/сборки
- install.sh: отдаю сервис-юзеру владение atxpi/ и /etc/atxpi (pyc/tmp/audit)
2026-09-08 22:55:20 +05:00
..

atxpi

Управляющая плоскость для сервера на базе Raspberry Pi: питание (ATX)

  • RS232-консоль + статус. Цель — компактный «бедняцкий IPMI».

Проект: репозиторий на внутреннем git-хостинге (ветка main). Хост в публичном репо не указываем.

Состав (в репо)

Модуль Назначение
atxctl/ питание: I2C-expander HAT (кнопки PWRBTN/RESET, статус) — существующий
lcd/ статусный OLED (52pi, luma.core) — существующий
ups/ защита от просадки батареи (INA219) — существующий
atxpi/ новый управляющий слой: web-UI + REST + консоль + MCP + CLI

Слои atxpi/

atxpi/
├── core/
│   ├── hardware.py   # абстракция + реальные драйверы (atxctl subprocess, pyserial)
│   ├── mock.py       # фейки для разработки без железа (ATXPI_DRIVER=mock)
│   ├── power.py      # высокоуровневые операции питания
│   └── console.py    # высокоуровневые операции консоли
├── cli/
│   └── atxpi         # CLI: status/on/off/reset/cycle/console
├── webui/            # (далее) FastAPI: REST + WebSocket-консоль + статика
├── mcp/              # (далее) MCP-сервер (stdio) для агентов
├── deploy/           # (далее) systemd-юниты + setup.sh
└── README.md

CLI (шаг ① — готово, без внешних зависимостей)

cd atxpi
export ATXPI_DRIVER=mock        # mock: без железа; по умолчанию real
./cli/atxpi status
./cli/atxpi on | off | reset | cycle
./cli/atxpi console --cmd "uptime" --read

Драйверы

  • ATXPI_DRIVER=real (по умолчанию): питание через atxctl/main.py, консоль через pyserial на SERIAL_PORT (по умолчанию /dev/ttyUSB0, 115200).
  • ATXPI_DRIVER=mock: фейковое питание (состояние в atxpi/tmp/) и консоль-эхо.

Жёсткие требования

  • Работает на Raspberry Pi 2B (armv7, 1 ГБ) — без node/тяжёлых БД.
  • Никаких реальных проверок питания на «живых» серверах — только стенд.