# auto_tools **Repository Path**: work_06/auto_tools ## Basic Information - **Project Name**: auto_tools - **Description**: 自动更新嵌入式设备上的代码,需要服务器端支持 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-13 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AQ300 网络升级工具(PySide6) 用于 **AQ300 设备的网络升级**。工具提供两种升级方式: 1. **本地文件升级**:直接使用“PAK 路径”指定的 `UPDATE_AQ300.PAK`(本地磁盘/网络盘均可)。 2. **FTP 拉取后升级**:从 FTP 服务器 `172.16.9.6` 拉取 `UPDATE_AQ300.PAK` 到本机 `./tmp/`,再进行升级。 > 升级过程通过 Socket(`<设备IP>:9000`)发送 PAK 文件数据;界面使用 `QThread + Signal/Slot` 异步显示日志,避免卡顿。 --- ## 目录 - [功能概览](#功能概览) - [运行环境](#运行环境) - [快速开始(源码运行)](#快速开始源码运行) - [使用说明](#使用说明) - [方式 A:使用本地 PAK](#方式-a使用本地-pak) - [方式 B:FTP 拉取 PAK](#方式-bftp-拉取-pak) - [配置文件 config.ini](#配置文件-configini) - [打包为 EXE(Nuitka)](#打包为-exenuitka) - [常见问题(FAQ)](#常见问题-faq) - [更新日志](#更新日志) --- ## 功能概览 - 支持配置并持久化:设备 IP、PAK 路径、FTP 账号/目录、升级方式 - 支持 **FTP 拉取**:使用 Python 标准库 `ftplib` 后台下载 `UPDATE_AQ300.PAK`(不依赖系统 `ftp` 命令) - 支持 **一键升级**:对设备 `9000` 端口发起 TCP 连接并分包发送文件 - 升级日志实时输出,升级完成后自动恢复“升级”按钮可用状态 --- ## 运行环境 - Windows 10/11 - Python 3.x - 依赖:`PySide6` 安装依赖: ```bash pip install PySide6 ``` --- ## 快速开始(源码运行) ```bash python update.py ``` 启动后在“网络升级”页: - 选择“使用本地文件”或“使用 ftp 拉取的文件” - 填写“主机的 IP”(AQ300 设备 IP) - 填写“PAK 路径”(本地模式需要) --- ## 使用说明 ### 方式 A:使用本地 PAK 1. 选择 **使用本地文件** 2. “PAK 路径”填写: - 直接指向文件:`Z:\UPDATE_AQ300.PAK` - 或者指向目录:`Z:\`(程序会在该路径下查找/拼接默认文件名 `UPDATE_AQ300.PAK`) 3. “主机的 IP”填写 AQ300 设备 IP(默认端口 `9000`) 4. 点击 **升级** ### 方式 B:FTP 拉取 PAK 1. 选择 **使用 ftp 拉取的文件** 2. 点击 **PAK 经 ftp 获取**: - 工具会创建 `./tmp/` 目录(如不存在) - 使用 `ftplib` 连接 FTP 并下载 `UPDATE_AQ300.PAK` 到 `./tmp/` - 下载过程与结果会显示在日志窗口(后台线程,不阻塞 UI) 3. 点击 **升级**:程序将使用 `./tmp/UPDATE_AQ300.PAK` 进行升级 --- ## 配置文件 config.ini 工具启动时会读取/创建同目录下的 `config.ini`,并在界面修改后自动保存。 示例: ```ini [DEFAULT] ip = 172.16.10.174 file_path = z:/ ftp_host = 172.16.9.6 ftp_usrname = lyp ftp_passwd = 123456 ftp_folder = / use_local = 1 ``` 字段说明: - `ip`:AQ300 设备 IP(升级时连接 `:9000`) - `file_path`:本地 PAK 路径(可填目录或完整文件路径) - `UPDATE_AQ300.PAK`:升级包默认文件名(本地模式/FTP 模式最终都需要该文件) - `ftp_host`:FTP 服务器地址(默认 `172.16.9.6`) - `ftp_usrname` / `ftp_passwd`:FTP 登录信息(**注意:明文存储**) - `ftp_folder`:FTP 服务器目录(用于 `cd`) - `use_local`:升级方式 - `1`:使用本地文件(对应 UI 的“使用本地文件”) - `0`:使用 FTP 拉取后的文件(对应“使用 ftp 拉取的文件”) --- ## 打包为 EXE(Nuitka) 仓库中提供了 `py2exe.bat`,使用 Nuitka 进行打包(包含 PySide6 插件、UPX 插件、ICO 图标)。 > 你需要先安装 Nuitka(以及可选的 mingw64 / upx 环境),否则脚本无法运行。 参考命令(来自 `py2exe.bat`): ```bat nuitka --standalone --onefile --mingw64 --show-progress --windows-disable-console --show-memory --remove-output ^ --plugin-enable=pyside6 --plugin-enable=upx ^ --include-qt-plugins=sensible,styles ^ --include-data-files=theme_dark.qss=theme_dark.qss --include-data-files=theme_light.qss=theme_light.qss --include-data-files=bitbug_favicon.ico=bitbug_favicon.ico ^ --output-dir=out ^ --windows-icon-from-ico=bitbug_favicon.ico update.py ``` ### 主题(黑/白)打包说明 程序主题来自 `theme_dark.qss` / `theme_light.qss`。 在 **Nuitka onefile** 模式下,默认不会把这些 `.qss` 放到 exe 同目录,所以需要用 `--include-data-files` 显式包含;否则运行时会找不到文件,导致主题失效(回到 Qt 默认样式)。 产物目录:`./out/`(已在 `.gitignore` 中忽略)。 --- ## 常见问题(FAQ) ### 1) 点击升级后提示“无法连接到服务器 / 连接超时” - 确认设备 IP 是否正确 - 确认设备端口 `9000` 可达(防火墙/路由/VLAN) - 程序默认最多重试 3 次连接 ### 2) 提示“文件不存在” - 本地模式:检查 `file_path` 是否指向 `UPDATE_AQ300.PAK` 或其所在目录 - FTP 模式:先点击“PAK 经 ftp 获取”,确认 `./tmp/UPDATE_AQ300.PAK` 已生成 ### 3) FTP 获取失败 - `ftp_host` 是否可达(网络/路由/VLAN) - 账号密码/目录是否正确(以及服务器是否允许被动模式等策略) ### 4) 安全提示 - `config.ini` 中 FTP 密码为明文存储,建议仅在受控环境使用 - v3.6 起 FTP 拉取不再生成脚本文件,但 `config.ini` 仍包含明文密码,注意不要泄露 --- ## 更新日志 ## v3.6 (2026.03.13) - 网络相关代码质量优化: - TCP 升级:去全局变量、完善超时/重试/异常处理、recv 精确读取(避免短包导致 unpack 异常) - FTP 拉取:改为 `ftplib` 后台线程下载(不依赖系统 `ftp`,也不再生成包含密码的脚本文件) - 修复目录模式下的路径拼接问题(`os.path.join(dir, '/UPDATE_AQ300.PAK')` 会忽略 dir) ### v3.5 (2026.03.13) - 增加 帮助/打开程序目录 的功能,可以直接打开当前程序所在的目录 ### v3.4(2025.01.03) - 增加“使用本地/使用 FTP 拉取文件”的选择(本地优先) ### v3.3 - 修复:升级失败后按钮提前恢复可点击的问题 - 连接尝试次数由 15 次调整为 3 次 ### v3.2 - 增加 FTP 相关配置项,支持通过 `config.ini` 配置(计划:独立配置界面) ### v3.1 - 增加 `QThread` 并用信号/槽传递升级日志 - 升级过程无需多次点击,主界面不再卡顿