# 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 (шаг ① — готово, без внешних зависимостей) ```bash 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/тяжёлых БД. - Никаких реальных проверок питания на «живых» серверах — только стенд.