Files
arm/atxpi
toros 49b6cf89f4 feat(webui): режим console (только RS232-консоль, питание отключено)
- ATXPI_MODE=console: /api/power/* → 403, кнопки питания скрыты в UI
- /api/status отдаёт mode; env-шаблон и install.sh учитывают ATXPI_MODE
- нужно для безопасного запуска панели на серверах-«управленцах» без риска питания
2026-09-08 23:34:23 +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/тяжёлых БД.
  • Никаких реальных проверок питания на «живых» серверах — только стенд.