OTA固件升级
一、流程概述HTTPS 方式 OTA 升级流程描述结合 MQTT 服务、设备和 Web 端总结的主题发送情况:云端下发升级包信息给设备:主题:/${serialNumber}/http/upgrade/set
方向:云端 -> 设备
触发时机:在 Web 端判断 OTA 版本可升级且用户确认升级后
消息内容:包含升级包的 URL、版本和状态,如
{
"taskId": 26,
"url": "/profile/iot/1/2024-0824-001954.bin",
"version": 1.2,
"status": 1
}设备上报升级进度:主题:/${serialNumber}/http/upgrade/reply方向:设备 -> 云端触发时机:设备下载升级包过程中定时上报消息内容:包含升级进度和状态,如 {
"taskId": 26,
"progress": 100,
"version": "1.2",
"status": 2
}设备升级完成后上报最新版本以及状态:主题:/${serialNumber}/http/upgrade/reply
方向:设备 -> 云端
触发时机:设备端升级完成后
消息内容:包含最新版本和状态,如
{
"taskId": 26,
"version": "1.2",
"status": 3
}模拟的整体交互流程: // status状态字段定义
AWAIT(0, "等待升级","未推送固件到设备"),
SEND(1, "已发送","已发送设备"),
REPLY(2, "升级中","设备OTA升级中"),
SUCCESS(3, "成功","升级成功"),
FAILED(4, "失败","升级失败"),
STOP(5, "停止","设备离线停止推送"),
UNKNOWN(404, "未知","未知错误码");
//主题定义
${taskId}/ws/ota/status 是云端后台推送给云端前台的一个展示状态主题
${serialNumber}/http/upgrade/set 是云端推送给设备的主题
${serialNumber}/http/upgrade/reply 是设备上给云端的主题左边是云端上报 , 右边是设备上报
Topic: /26/ws/ota/status
{
"serialNumber": "D1832O34Z5M1",
"status": 0,
"timestamp": 1724482221250
}
Topic: /26/ws/ota/status
{
"serialNumber": "D1832O34Z5M1",
"status": 1,
"timestamp": 1724482221251
}
Topic: /D1832O34Z5M1/http/upgrade/set
{
"taskId": 26,
"url": "/profile/iot/1/2024-0824-001954.bin",
"version": 1.2,
"status": 1
}
Topic: /D1832O34Z5M1/http/upgrade/reply
{
"taskId": 26,
"progress": 5,
"version": "1.2",
"status": 2
}
Topic: /26/ws/ota/status
{
"serialNumber": "D1832O34Z5M1",
"status": 2,
"timestamp": 1724482231404,
"progress": 5
}
Topic: /D1832O34Z5M1/http/upgrade/reply
{
"taskId": 26,
"progress": 50,
"version": "1.2",
"status": 2
}
Topic: /26/ws/ota/status
{
"serialNumber": "D1832O34Z5M1",
"status": 2,
"timestamp": 1724482251326,
"progress": 50
}
Topic: /D1832O34Z5M1/http/upgrade/reply
{
"taskId": 26,
"progress": 70,
"version": "1.2",
"status": 2
}
Topic: /26/ws/ota/status
{
"serialNumber": "D1832O34Z5M1",
"status": 2,
"timestamp": 1724482290405,
"progress": 70
}
Topic: /D1832O34Z5M1/http/upgrade/reply
{
"taskId": 26,
"progress": 100,
"version": "1.2",
"status": 2
}
Topic: /26/ws/ota/status
{
"serialNumber": "D1832O34Z5M1",
"status": 2,
"timestamp": 1724482302296,
"progress": 100
}
Topic: /D1832O34Z5M1/http/upgrade/reply
{
"taskId": 26,
"progress": 100,
"version": "1.2",
"status": 3
}
Topic: /26/ws/ota/status
{
"serialNumber": "D1832O34Z5M1",
"status": 3,
"timestamp": 1724482308749
}二进制包方式OTA升级一、引言OTA(Over-the-Air)升级是一种通过无线网络对设备进行远程升级的技术。本文档旨在详细描述 OTA 升级的流程,包括升级启动、升级包传输等环节。
二、OTA 升级流程概述平台自行拼装 OTA 格式,启动 OTA 升级。云端向设备发送升级启动指令。设备收到升级启动指令后,进行校验和验证,若通过则向云端回复指令。云端收到设备的正确回复后,开始 OTA 升级包传输。云端向设备发送升级包传输指令。设备收到升级包传输指令后,进行校验和验证,若通过则向云端回复指令。云端根据设备的回复判断是否所有升级包都已传输完成,若未完成则继续发送下一个升级包传输指令,直至升级完成。三、具体流程步骤主题:
云端 -> 设备:/{deviceNum}/fetch/upgrade/set设备 -> 云端:/{deviceNum}/fetch/upgrade/reply报文示例:
升级启动阶段:云端 -> 设备: 0x55aa 0x00 0x0A 0x0004 [固件包字节数] [校验和]设备 -> 云端: 0x55aa [0x00 - 0xFF] 0x0A 0x0001 [升级包分包传输大小] [校验和]升级包传输阶段:云端 -> 设备: 0x55aa 0x00 0x0B 0x0004 + [数据包长度] [包偏移][数据包内容] [校验和]设备 -> 云端: 0x55aa [0x00 - 0xFF] 0x0B 0x0000 [校验和]升级启动云端 -> 设备:云端向设备发送升级启动指令,指令包含帧头(0x55aa)、版本号(0x00)、指令类型(0x0A)、子指令(0x0004)、固件包字节数和校验和(从帧头开始,按字节求和,对 256 求余)。设备 -> 云端:设备收到升级启动指令后,进行校验和验证。若校验和验证通过,设备向云端回复指令,指令包含帧头(0x55aa)、版本号(0x00 - 0xFF)、指令类型(0x0A)、子指令(0x0001)、升级包分包传输大小(0x00:256byte(默认);0x01:512byte;0x02:1024byte)和校验和(计算方式同云端发送的指令)。升级包传输云端 -> 设备:云端向设备发送升级包传输指令,指令包含帧头(0x55aa)、版本号(0x00)、指令类型(0x0B)、子指令(0x0004 + 数据包长度)、前四字节为包偏移,后面为数据包内容(若包偏移大于等于固件包大小,则包传输结束)和校验和(从帧头开始,按字节求和,对 256 求余)。设备 -> 云端:设备收到升级包传输指令后,进行校验和验证。若校验和验证通过,设备向云端回复指令,指令包含帧头(0x55aa)、版本号(0x00 - 0xFF)、指令类型(0x0B)、子指令(0x0000)、空内容和校验和(计算方式同云端发送的指令)。升级完成判断云端收到设备的回复后,判断是否所有升级包都已传输完成。若已完成,OTA 升级结束。若未完成,继续发送下一个升级包传输指令,回到升级包传输步骤。二、注意事项在整个升级过程中,校验和的验证是确保数据准确性和完整性的重要环节,任何校验和不匹配的指令都应被视为错误并进行相应的处理。升级包的传输过程中,需要确保无线网络的稳定性,以避免数据丢失或传输中断。若升级过程中出现异常情况,应具备相应的错误处理机制,例如重试、回滚等操作,以保证设备的正常运行。三、操作流程HTTPS 方式 OTA 升级流程操作1. 运维管理-产品固件:添加固件,选择产品:2. 固件详情添加任务:产品固件列表点击固件详情 * 新增任务,升级范围可选全部设备或指定设备 **注意**:选择预定升级时间,会在该时间节点升级,如果不选择,点击保存后立即升级 3. 实时观察任务升级进度:查看任务详情:
等待预定升级时间开始升级:
设备升级中:
设备升级成功:
二进制包方式OTA流程操作同上