rack:固件下载目录自动清理(每小时,FwStore.prune)

- 固件库里登记过的(界面上传)不自动删;没登记的(ota_push.py 直传、台架镜像)放满 7 天删;
  上传中断的 .tmp 1 小时删;非 <16 hex>.bin / .tmp 的文件名一律不碰
- 板子下载一次几秒就完、回滚用的是板上另一个槽,删旧文件不影响任何板子
- main.py:有 --fw-dir 时起清理循环,出错只记日志;test_firmware.py 加 2 例,共 41 例(本机 + 服务器)
- 已部署;本机模拟板实测放一个 8 天前的孤儿镜像,启动即被清掉

Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
zhou yang
2026-09-27 14:48:12 +08:00
共同撰写人 Claude Opus 5.5
父节点 284571de20
当前提交 1cd4fd4082
共修改 5 个文件,包含 105 行新增和 4 行删除
+4 -1
查看文件
@@ -12,7 +12,7 @@
| 目录 | 内容 |
|---|---|
| `backend/prrack/` | `protocol.py` 板侧协议镜像(命令白名单 / 事件表 / seq)· `bus.py` MQTT 抽象(paho / 进程内假 broker)· `hub.py` 核心 · `recovery.py` 自动恢复 · `db.py` 存储 · `firmware.py` 固件库 + OTA 命令 · `api.py` HTTP+WS · `simboard.py` 模拟板子 · `main.py` 入口 |
| `backend/tests/` | 39 例(pytest),本机与服务器(Python 3.8)都跑 |
| `backend/tests/` | 41 例(pytest),本机与服务器(Python 3.8)都跑 |
| `frontend/` | Vue3 + Vite + Element Plus + ECharts(按需引入) |
| `deploy/` | `deploy.sh` 一键部署 · systemd unit · 每日备份 |
@@ -36,6 +36,9 @@
不勾就只下载 + 切分区,下次复位生效;同一个镜像已就绪时再推一次并勾重启,不重下。
- 新固件 120 s 内连不上 broker 板子自己回滚,界面显示「回滚过:版本号」,事件里有「固件升级(回滚)」。
- 命令行等价物:`firmware/tools/ota_push.py`(不经过后端,直接用 broker 后端账号)。
- **下载目录自动清理**(后端每小时一次,`FwStore.prune`):固件库里**登记过的不删**(界面上传的,要删用删除按钮);
没登记的(`ota_push.py` 直接传的、台架镜像)放满 **7 天**删;上传中断的 `.tmp` 1 小时删;别的文件名一律不碰。
板子下载一次几秒就完,回滚用的是板子自己另一个槽,所以删掉旧文件不影响任何一块板。
## 本机开发