61 lines
4.2 KiB
Markdown
61 lines
4.2 KiB
Markdown
# 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`。此记录和后续诊断脚本修订属于部署后的交接补充,未改变运行二进制。
|