diff --git a/README.md b/README.md index 288223b..1283f03 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,166 @@ # padsleep_adb -基于树莓派,通过adb控制安卓平板亮屏和息屏 +基于树莓派,通过 ADB 控制安卓平板自动亮屏和息屏的守护程序。 -## 项目原理 +## 功能特性 -当触发设定的条件时,通过adb命令,模拟锁屏按键,控制pad自动亮屏和息屏。实现ha终端的省电和延长屏幕寿命。 +- **定时控制**:根据配置的时间段自动亮屏/息屏 +- **超时保护**:屏幕亮起超过设定时长且不在亮屏时间段内 → 自动息屏 +- **无线 ADB**:支持通过 TCP/IP 连接安卓设备(无线调试) +- **TUI 管理**:提供终端界面工具,方便查看状态和修改配置 +- **IPC 通信**:通过 Unix Socket 与 TUI 工具通信 +- **自动重连**:无线连接断开后自动尝试重新连接 -## 开发阶段 +## 系统要求 -第一阶段: +- 树莓派(或其他 Linux 设备) +- Python 3.10+ +- ADB (Android Debug Bridge) +- 安卓平板(已开启 USB 调试或无线调试) -根据时间,定制自动亮屏和自动息屏的时间;当检测到亮屏时间大于5分钟且不在设定的亮屏时间段内,则自动息屏。 +## 安装 -第二阶段: +### 1. 安装系统依赖 -通过GPIO安装人体传感器,做到人来屏亮,人走屏灭。 +```bash +# Debian/Ubuntu +sudo apt update +sudo apt install adb python3-curses -## 开发细节 +# 树莓派 OS +sudo apt install adb +``` -- 在windows上开发,在树莓派上执行 +### 2. 安装 Python 依赖 -- 需要安装adb命令行 +```bash +cd padsleep_adb +pip install -r requirements.txt +``` -- 启动后,能自动以服务方式守护运行 +依赖列表: +- `adbutils>=2.12.0` — Python ADB 库 -- 首次启动时,需要处理adb授权有关问题 \ No newline at end of file +## 使用方法 + +### 启动守护程序 + +```bash +python padsleep.py +``` + +守护程序会自动: +1. 加载配置文件 `config.json` +2. 检测 ADB 设备 +3. 启动 IPC 服务(`/tmp/padsleep.sock`) +4. 进入主循环,定期检查屏幕状态 + +### 启动 TUI 管理工具 + +```bash +# 新终端窗口 +python padsleep_tui.py +``` + +TUI 快捷键: + +| 按键 | 功能 | +|------|------| +| `↑/k` `↓/j` | 选择亮屏时间段 | +| `A` | 新增亮屏时间段 | +| `E` | 编辑选中时间段 | +| `D` | 删除选中时间段 | +| `S` | 选择 ADB 设备 | +| `W` | 无线连接设备 | +| `R` | 刷新状态 | +| `L` | 重载守护进程配置 | +| `F` | 强制息屏 | +| `N` | 强制亮屏 | +| `T` | 重新连接守护进程 | +| `H` | 显示帮助 | +| `Q` | 退出 | + +## 配置说明 + +配置文件 `config.json` 示例: + +```json +{ + "screen_on_periods": [ + {"start": "08:00", "end": "22:00"} + ], + "check_interval_seconds": 30, + "auto_sleep_delay_minutes": 5, + "adb_device_serial": "", + "adb_wireless_host": "", + "adb_wireless_port": 5555, + "adb_wireless_auto_connect": false +} +``` + +### 字段说明 + +| 字段 | 类型 | 默认值 | 说明 | +|------|------|--------|------| +| `screen_on_periods` | array | `[{"start":"08:00","end":"22:00"}]` | 亮屏时间段列表,支持跨天(如 22:00~08:00) | +| `check_interval_seconds` | int | `30` | 检查间隔(秒) | +| `auto_sleep_delay_minutes` | int | `5` | 非亮屏时段屏幕亮起多久后自动息屏(分钟) | +| `adb_device_serial` | string | `""` | 指定 USB 设备 serial,空表示自动选择第一个 | +| `adb_wireless_host` | string | `""` | 无线设备 IP 地址,空表示不使用无线连接 | +| `adb_wireless_port` | int | `5555` | 无线设备端口 | +| `adb_wireless_auto_connect` | bool | `false` | 启动时是否自动连接无线设备 | + +## 无线 ADB 连接 + +### 方式一:配置文件预设 + +在 `config.json` 中设置: + +```json +{ + "adb_wireless_host": "192.168.1.100", + "adb_wireless_port": 5555, + "adb_wireless_auto_connect": true +} +``` + +### 方式二:TUI 手动连接 + +1. 启动 TUI 工具 +2. 按 `W` 键 +3. 输入 IP 地址和端口 +4. 确认连接 + +### 开启安卓设备无线调试 + +1. 连接 USB,执行 `adb tcpip 5555` +2. 或在设备上:设置 → 开发者选项 → 无线调试 → 开启 + +### 连接优先级 + +程序采用 **USB 优先** 策略: +1. 首先尝试 USB 连接 +2. 如果 USB 不可用且配置了无线,尝试无线连接 +3. 无线连接断开后自动重连(最多 3 次) + +## 文件结构 + +``` +padsleep_adb/ +├── padsleep.py # 守护程序主程序 +├── padsleep_tui.py # TUI 管理工具 +├── config.json # 配置文件(首次运行自动生成) +├── requirements.txt # Python 依赖 +└── README.md # 本文档 +``` + +## 开发说明 + +- 在 Windows 上开发,在树莓派上运行 +- 使用 `adbutils` 库与 ADB Server 通信 +- IPC 使用 Unix Socket + JSON 行协议 +- TUI 使用 Python `curses` 库 + +## 许可证 + +MIT License