- ATXPI_MODE=console: /api/power/* → 403, кнопки питания скрыты в UI - /api/status отдаёт mode; env-шаблон и install.sh учитывают ATXPI_MODE - нужно для безопасного запуска панели на серверах-«управленцах» без риска питания
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/тяжёлых БД.
- Никаких реальных проверок питания на «живых» серверах — только стенд.