Files
story/docs/device-fleet-delivery.md
T

61 lines
4.2 KiB
Markdown
Raw Normal View History

# MQTT与OTA本次交付记录
2026-09-14,后端/SaaS已部署至 `https://82.157.201.114`,版本 `0.92.0-rc.fleet1`,数据库迁移66。小程序源码在 `C:\Users\19926\WeChatProjects\voicelink`,尚未代用户上传新的微信体验版。
2026-09-18 已发布 `0.96.2-rc.mqtt1`,MQTT 改为明文 TCP 1883。公网 MQTT 协议握手、HTTPS readiness 和宿主机健康检查均通过;旧 8883 已停止监听。
## 已完成
- MQTT 3.1.1 / TCP 1883:设备连接参数、按设备主题发布/订阅、断线状态、30秒心跳、90秒离线判定。MQTT 传输不加密。
- 小程序设备管理:在线/离线/状态未知,当前与最新版本、更新内容、下载地址复制、更新按钮和任务状态;10秒刷新,页面隐藏后停止。
- OTA:校验当前绑定权限、型号、数字顺序号、在线状态和忙碌状态;保存任务后MQTT发送下载地址;设备HTTP上报accepted/success/failed;超时处理及同请求号去重。
- SaaS固件管理:选择型号、版本名称、更新内容、上传文件。顺序号自动生成;先上传、校验,再发布,不覆盖已发布版本。
- 现有签名固件/批量发布的后台接口和数据保留;新简化页面使用独立的设备固件接口。
- 根据用户后续要求,没有修改、编译或烧录EchoEar硬件;最终硬件按接口对接。
## 验证结果
- Go内部包测试通过;隔离数据库的devicefleet、saas、onboarding、httpapi集成测试通过。
- 模拟设备完成真实 MQTT/TCP 连接、心跳、订阅、OTA 指令接收、确认及成功上报;覆盖错误密码、跨设备订阅/上报、错误版本、重复请求、并发升级、离线和超时。
- 小程序44项测试通过;微信原生编译器WXML 8页、WXSS 9文件通过。
- SaaS生产构建通过;浏览器验证上传窗口恰好四项输入,截图位于 `.tmp-fleet-deploy/firmware-upload.png`。
- 线上HTTPS readiness返回200,PostgreSQL、Redis、对象存储正常;schema=66,dirty=false。
- 原 TLS 8883 版本曾通过 SSH 隧道完成联调。2026-09-18 切换为明文 TCP 1883 后,已从外部网络完成 TCP 连通和 MQTT CONNACK 协议验证。
- 线上未上传任何测试固件,未触发真实OTA;原4条有效设备绑定保留。发布前完成加密备份及恢复验证。
## 仍需完成的外部步骤
1. 在微信开发者工具重新上传当前小程序源码,设置为体验版。此前公网IP在微信普通体验环境下的合法请求域名限制仍存在,本次没有改变微信的域名规则。
2. 最终嵌入式硬件实现文档中的心跳及OTA安装/重启回报,再进行实物升级验证。
## 接口文档
- 完整业务流程:[设备接口文档](embedded-device-business-guide-20260914.md)
- 本次新增:[MQTT与OTA接口](device-mqtt-ota.md)
- 桌面交接文档已同步为“设备接口文档-MQTT与OTA版.md”和“设备接口简版.html”。
## 后续部署注意
运行目录:`/opt/data-terminal-cloud/current`,指向 `/opt/data-terminal-cloud/releases/0.92.0-rc.fleet1`。必须保留运行时私有 `.env`,同时设置 `PLATFORM_BUILD_VERSION` 与 `ONBOARDING_RELEASE_VERSION`,不能只改前一个。
Compose叠加顺序:
```sh
docker compose -p data-terminal-cloud \
-f compose.yaml \
-f deploy/server/compose.override.yaml \
-f deploy/server/compose.subtitle.yaml \
-f deploy/server/compose.onboarding.yaml \
-f deploy/server/compose.migration.yaml \
-f deploy/server/compose.fleet.yaml \
--env-file deploy/server/.env up -d --no-deps api callbacks worker web
```
不要重新运行seed或删除数据卷。更换API容器后,分别reload网关和web容器内的Nginx,使静态解析的上游IP更新。
MQTT 直接监听 TCP 1883,不再挂载证书目录,也不需要 MQTT 证书续期服务。健康监控允许端口为 22、80、443、1883。
当前嵌入式Broker只支持单API实例;后续需要多实例扩容时再拆出共享MQTT服务,不要直接复制API实例。
源包SHA256:`8d2f22a1a7ff0606ab1d422112aaefb319e669c0a50db484e9be8da3326bb464`。此记录和后续诊断脚本修订属于部署后的交接补充,未改变运行二进制。