升级流程
流程概述
OTA升级流程经过精心设计,涵盖任务创建、指令下发、固件传输、进度监控等全生命周期。BladeX平台通过标准化的MQTT通信协议和完善的状态管理,确保每次升级都安全、稳定、可追溯。
一、通信架构
系统采用标准MQTT通信协议,通过精心设计的Topic体系实现双向通信和状态同步。
1. MQTT Topic体系
Topic | 方向 | 说明 |
---|---|---|
/blade/ota/device/inform/${productKey}/${deviceName} | 设备→平台 | 版本上报 |
/blade/ota/device/upgrade/${productKey}/${deviceName} | 平台→设备 | 升级指令 |
/blade/ota/device/progress/${productKey}/${deviceName} | 设备→平台 | 进度上报 |
/blade/sys/${productKey}/${deviceName}/thing/ota/firmware/get | 设备→平台 | 固件拉取 |
/blade/sys/${productKey}/${deviceName}/thing/ota/firmware/get_reply | 平台→设备 | 拉取响应 |
2. 消息格式规范
所有消息采用统一的JSON格式,包含标准字段:id、version、method、params等。
3. 通信时序说明
系统支持推送和拉取两种模式,以满足不同业务场景的需求。
二、推送升级流程
平台主动向设备推送升级任务,适用于设备主动上报版本或平台手动下发升级任务等场景。
1. 流程概览
2. 核心步骤详解
步骤1:设备版本上报
设备需要定期向平台上报当前版本信息,只有设备上报了版本,平台才会匹配升级任务并下发指令。版本上报是触发升级流程的起点。
Topic: /blade/ota/device/inform/${productKey}/${deviceName}
消息格式:
{
"id": "inform_001",
"version": "1.0",
"method": "thing.ota.device.inform",
"params": {
"version": "1.0.0", // 当前固件版本
"module": "main" // 模块名称,默认为main
}
}
参数说明:
- version: 设备当前的固件版本号
- module: 固件模块名称,默认为"main"
步骤2:升级指令下发
平台通过MQTT向设备推送升级任务:
Topic: /blade/ota/device/upgrade/${productKey}/${deviceName}
消息格式:
{
"id": "123456789",
"version": "1.0",
"method": "thing.ota.device.upgrade",
"params": {
"taskId": 123456789,
"version": "2.0.0",
"url": "https://oss.bladex.cn/firmware/sensor_v2.0.0.bin",
"size": 524288,
"sign": "5d41402abc4b2a76b9719d911017c592",
"signMethod": "Md5",
"module": "main",
"extData": {
"retryTimes": 3,
"timeoutMinutes": 30
}
}
}
步骤3:实时进度上报
设备在升级过程中实时上报进度:
Topic: /blade/ota/device/progress/${productKey}/${deviceName}
{
"id": "987654321",
"version": "1.0",
"method": "thing.ota.upgrade.progress",
"params": {
"taskId": 123456789,
"step": "45", // 进度值:1-100为百分比,负数为错误码
"desc": "45%" // 进度描述
}
}
进度值定义:
进度值 | 类型 | 说明 | 备注 |
---|---|---|---|
1-50 | 正常 | 下载阶段 | 按实际下载进度映射 |
51-99 | 正常 | 安装阶段 | 按实际安装进度映射 |
100 | 完成 | 升级成功 | 立即上报新版本 |
错误码定义:
错误码 | 说明 | 处理建议 |
---|---|---|
-1 | 升级失败 | 检查设备日志 |
-2 | 下载失败 | 检查网络连接 |
-3 | 校验失败 | 重新下载固件 |
-4 | 烧录失败 | 检查存储空间 |
三、拉取升级流程
设备主动查询平台获取升级信息,适用于定期检查、自主升级等场景。
1. 流程概览
2. 核心步骤详解
步骤1:固件查询请求
Topic: /blade/sys/${productKey}/${deviceName}/thing/ota/firmware/get
{
"id": "req_001",
"version": "1.0",
"method": "thing.ota.firmware.get",
"params": {
"version": "1.0.0" // 当前版本号
},
"sys": {
"ack": 1 // 需要平台响应
}
}
步骤2:平台响应处理
Topic: /blade/sys/${productKey}/${deviceName}/thing/ota/firmware/get_reply
{
"id": "req_001",
"code": 200,
"data": {
"taskId": 123456789,
"version": "2.0.0",
"url": "https://oss.bladex.cn/firmware/sensor_v2.0.0.bin",
"size": 524288,
"sign": "5d41402abc4b2a76b9719d911017c592",
"signMethod": "Md5",
"extData": {
"retryTimes": 3,
"timeoutMinutes": 30
}
}
}
步骤3:升级进度上报
Topic: /blade/ota/device/progress/${productKey}/${deviceName}
{
"id": "987654321",
"version": "1.0",
"method": "thing.ota.upgrade.progress",
"params": {
"taskId": 123456789,
"step": "45", // 进度值:1-100为百分比,负数为错误码
"desc": "45%" // 进度描述
}
}
进度值定义:
进度值 | 类型 | 说明 | 备注 |
---|---|---|---|
1-50 | 正常 | 下载阶段 | 按实际下载进度映射 |
51-99 | 正常 | 安装阶段 | 按实际安装进度映射 |
100 | 完成 | 升级成功 | 立即上报新版本 |
错误码定义:
错误码 | 说明 | 处理建议 |
---|---|---|
-1 | 升级失败 | 检查设备日志 |
-2 | 下载失败 | 检查网络连接 |
-3 | 校验失败 | 重新下载固件 |
-4 | 烧录失败 | 检查存储空间 |