MQTT
i. MQTT FOTA固件升级流程
ii. 设备上报当前固件版本
设备端通过Topic上报固件版本给物联网平台:/ota/inform
校验当前设备是否存在,存在更新当前设备版本
设备连接OTA服务,必须上报版本号
设备端通过MQTT协议推送当前设备固件版本号到Topic: /ota/inform
消息格式如下:
{
"taskId":-1,//当前无升级任务情况
"params": {
"version": "1.0.1", //设备固件的版本信息
"module": "MCU" //固件所属的模块名(预留字段)
}
}
注:设备固件版本号只需要在设备激活上线时上报一次即可,不需要周期循环上报。
参数说明:
参数 | 取值 | 说明 |
taskId | int | 任务ID:当前无升级任务情况取 -1 |
version | String | 设备固件的版本信息。 |
module | String | 固件所属的模块名。(预留字段) |
ⅲ.平台下发固件url给设备端
设备端订阅Topic接收物联网平台的固件升级通知:/ota/upgrade
消息格式如下:
{
"taskId": 1,
"payload": {
"size": 432945, //固件大小,单位:字节
"version": "2.0.0", //固件版本
"url": "https://dmfile.ctwing.cn/file/upgrade/32128a6e8c3e15aea1c7/147589", //固件下载地址
"md5": "93230c3bde425a9d7984a594ac55ea1e", //当签名方法为Md5时,md5值。
"token": "token" //认证信息
"module": "MCU" //固件所属的模块名(预留字段)
}
}
注:
固件下载拼接地址样例
https://dmfile.ctwing.cn/file/upgrade?fileId=32128a6e8c3e15aea1c7&taskId=147589&deviceId=device10001&accessToken=token
ⅳ.根据固件url从文件服务器下载固件
固件下载过程中,设备端向服务端推送升级进度到Topic: /ota/progress
消息格式如下:
{
"taskId": 1, //子任务ID
"params": {
"step": -1, //固件升级进度信息
"desc": "固件升级失败,请求不到固件信息。",
"module": "MCU" //固件所属的模块名(预留字段)
}
}
ⅴ.设备端上报升级进度信息
设备端通过Topic上报固件升级进度:/ota/progress
固件升级过程中,设备端向服务端推送升级进度到Topic: /ota/progress
消息格式如下:
{
"taskId": 1, //子任务ID
"params": {
"step": -1, //固件升级进度信息
"desc": "固件升级失败,请求不到固件信息。",
"module": "MCU" //固件所属的模块名(预留字段)
}
}
参数说明:
参数 | 取值 | 说明 |
step | int | 固件升级进度信息。 取值范围: o [1,100] 之间的数字:表示升级进度百分比。 o -1:表示升级失败。 o -2: 表示下载失败。 o -3: 表示校验失败。 o -4:表示烧写失败。 |
desc | String | 当前步骤的描述信息。如果发生异常,此字段可承载错误信息。 |
module | String | 固件所属的模块名。(预留字段) |
ⅵ.设备端完成固件升级后,上报最新设备固件版本
设备端通过Topic上报固件版本给物联网平台:
设备端完成固件升级后,推送最新的固件版本信息到Topic:/ota/inform
{
"taskId": 1, //子任务ID
"params": {
"version": "1.0.2", //设备固件的版本信息
"module": "MCU" //固件所属的模块名(预留字段)
}
}
参数说明:
参数 | 取值 | 说明 |
taskId | int | 任务ID |
version | String | 设备固件的版本信息。 |
module | String | 固件所属的模块名。(预留字段) |