重构屏幕控制引擎 + 新增 Web 监控面板
- ScreenManager: 基于优先级(9/5/0)的统一屏幕控制引擎,替代 _tick 中的 散乱 if-else 逻辑 - 四个亮屏事件: scheduled(p9), sensor(p9), manual(p5), external(p0) - GPIO 回调: 电平变化立即触发亮屏(异步线程,不阻塞轮询) - _fast_check: 每秒轻量评估,提高息屏超时精度(±1s 替代 ±30s) - padsleep_web: 通过 IPC 读取守护进程状态的实时 Web 面板 (GPIO 电平/屏幕状态/ADB 连接,端口 31400) - padsleep-web.service: 关联 padsleep.service 的自启动服务 - install.sh: 修复 venv 初始化目录上下文,使用 requirements.txt - IpcClient: 修复 socket 复用导致交替失败的问题 - padsleep_tui: 适配 ScreenManager 状态显示 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
9940db451f
commit
e6fbe550bb
+53
-24
@@ -63,6 +63,8 @@ info "已创建目录 $INSTALL_DIR"
|
||||
# ── 复制文件 ──
|
||||
cp "$SRC_DIR/padsleep.py" "$INSTALL_DIR/"
|
||||
cp "$SRC_DIR/padsleep_tui.py" "$INSTALL_DIR/"
|
||||
cp "$SRC_DIR/padsleep_web.py" "$INSTALL_DIR/" 2>/dev/null || true
|
||||
cp -r "$SRC_DIR/templates" "$INSTALL_DIR/" 2>/dev/null || true
|
||||
cp "$SRC_DIR/requirements.txt" "$INSTALL_DIR/" 2>/dev/null || true
|
||||
|
||||
# 配置文件:目标不存在则复制,存在则保留
|
||||
@@ -77,25 +79,34 @@ fi
|
||||
touch "$INSTALL_DIR/padsleep.log"
|
||||
chmod 644 "$INSTALL_DIR/padsleep.log"
|
||||
|
||||
# ── 创建 Python 虚拟环境 ──
|
||||
# ── 创建 Python 虚拟环境并安装依赖 ──
|
||||
# 进入目标目录确保 venv 上下文正确
|
||||
cd "$INSTALL_DIR"
|
||||
|
||||
if [ ! -d "$VENV_DIR" ]; then
|
||||
info "正在创建 Python 虚拟环境..."
|
||||
python3 -m venv "$VENV_DIR"
|
||||
python3 -m venv .venv
|
||||
info "虚拟环境已创建: $VENV_DIR"
|
||||
else
|
||||
info "虚拟环境已存在,跳过创建"
|
||||
fi
|
||||
|
||||
# ── 安装 Python 依赖 ──
|
||||
info "正在安装 Python 依赖..."
|
||||
"$VENV_DIR/bin/pip" install --quiet adbutils rpi-lgpio 2>&1 || {
|
||||
warn "pip 安装失败,尝试离线安装..."
|
||||
if [ -f "$SRC_DIR/.venv" ]; then
|
||||
cp -r "$SRC_DIR/.venv" "$VENV_DIR"
|
||||
fi
|
||||
}
|
||||
info "正在安装 Python 依赖 (requirements.txt)..."
|
||||
if [ -f "$INSTALL_DIR/requirements.txt" ]; then
|
||||
.venv/bin/pip install --quiet -r requirements.txt 2>&1 || {
|
||||
warn "pip 安装失败,尝试逐个安装..."
|
||||
.venv/bin/pip install --quiet adbutils rpi-lgpio flask flask-socketio 2>&1 || {
|
||||
warn "pip 安装仍然失败,请手动执行: cd $INSTALL_DIR && .venv/bin/pip install -r requirements.txt"
|
||||
}
|
||||
}
|
||||
else
|
||||
.venv/bin/pip install --quiet adbutils rpi-lgpio flask flask-socketio 2>&1 || \
|
||||
warn "pip 安装失败,请手动安装依赖"
|
||||
fi
|
||||
info "Python 依赖安装完成"
|
||||
|
||||
cd "$SRC_DIR" # 回到源目录
|
||||
|
||||
# 设置执行权限
|
||||
chmod 755 "$INSTALL_DIR/padsleep.py"
|
||||
chmod 755 "$INSTALL_DIR/padsleep_tui.py"
|
||||
@@ -121,22 +132,38 @@ WRAPPER
|
||||
|
||||
create_wrapper "padsleep.py" "$BIN_DIR/padsleep"
|
||||
create_wrapper "padsleep_tui.py" "$BIN_DIR/padsleep-config"
|
||||
if [ -f "$INSTALL_DIR/padsleep_web.py" ]; then
|
||||
create_wrapper "padsleep_web.py" "$BIN_DIR/padsleep-web"
|
||||
fi
|
||||
info "已创建命令入口:"
|
||||
info " $BIN_DIR/padsleep → 启动守护进程 ($PYTHON_BIN)"
|
||||
info " $BIN_DIR/padsleep-config → 启动 TUI 配置工具 ($PYTHON_BIN)"
|
||||
info " $BIN_DIR/padsleep-web → 启动 Web 监控面板 ($PYTHON_BIN)"
|
||||
|
||||
# ── 可选:复制 systemd 服务 ──
|
||||
if [ -f "$SRC_DIR/padsleep.service" ]; then
|
||||
cp "$SRC_DIR/padsleep.service" "$SERVICE_DIR/padsleep.service"
|
||||
sed -i "s|WorkingDirectory=.*|WorkingDirectory=$INSTALL_DIR|" "$SERVICE_DIR/padsleep.service"
|
||||
sed -i "s|ExecStart=.*|ExecStart=$PYTHON_BIN $INSTALL_DIR/padsleep.py|" "$SERVICE_DIR/padsleep.service"
|
||||
sed -i "s|^User=.*|User=$RUN_USER|" "$SERVICE_DIR/padsleep.service"
|
||||
systemctl daemon-reload
|
||||
info "已复制 systemd 服务文件: $SERVICE_DIR/padsleep.service"
|
||||
info "服务用户已设为: $RUN_USER"
|
||||
info "可执行以下命令启用:"
|
||||
info " sudo systemctl enable --now padsleep"
|
||||
fi
|
||||
install_service() {
|
||||
local src="$1"
|
||||
local dst="$2"
|
||||
local script="$3"
|
||||
if [ ! -f "$src" ]; then
|
||||
warn "服务文件不存在: $src,跳过"
|
||||
return
|
||||
fi
|
||||
cp "$src" "$dst"
|
||||
sed -i "s|WorkingDirectory=.*|WorkingDirectory=$INSTALL_DIR|" "$dst"
|
||||
sed -i "s|ExecStart=.*|ExecStart=$PYTHON_BIN $INSTALL_DIR/$script|" "$dst"
|
||||
sed -i "s|^User=.*|User=$RUN_USER|" "$dst"
|
||||
info "已安装 $dst"
|
||||
}
|
||||
|
||||
install_service "$SRC_DIR/padsleep.service" "$SERVICE_DIR/padsleep.service" "padsleep.py"
|
||||
install_service "$SRC_DIR/padsleep-web.service" "$SERVICE_DIR/padsleep-web.service" "padsleep_web.py"
|
||||
|
||||
systemctl daemon-reload
|
||||
info "systemd 已重载"
|
||||
echo ""
|
||||
info "启用服务(自启动 + 立即启动):"
|
||||
info " sudo systemctl enable --now padsleep padsleep-web"
|
||||
|
||||
# ── 检查 ADB ──
|
||||
if command -v adb &>/dev/null; then
|
||||
@@ -151,9 +178,11 @@ echo -e "${GREEN}═════════════════════
|
||||
info "安装完成!"
|
||||
echo ""
|
||||
info "使用方法:"
|
||||
echo " 1. 启动守护进程: padsleep"
|
||||
echo " 2. 打开配置界面: padsleep-config"
|
||||
echo " 3. 注册系统服务: sudo systemctl enable --now padsleep"
|
||||
echo " 1. 启动守护进程: padsleep"
|
||||
echo " 2. 打开 TUI 配置界面: padsleep-config"
|
||||
echo " 3. 打开 Web 监控面板: padsleep-web"
|
||||
echo " 4. 注册系统服务: sudo systemctl enable --now padsleep padsleep-web"
|
||||
echo " 5. Web 面板地址: http://树莓派IP:31400"
|
||||
echo ""
|
||||
info "配置文件: $INSTALL_DIR/config.json"
|
||||
info "日志文件: $INSTALL_DIR/padsleep.log"
|
||||
|
||||
Reference in New Issue
Block a user