设备固件升级,是物联网通信服务的重要组成部分。当物联设备有新功能或者需要修复漏洞时,设备可以通过设备固件升级服务快速的进行固件升级。
固件升级的过程中,需要设备订阅下面两个 Topic 来实现与云端的通信,如下图所示:
示例如下:
$ota/report/${productID}/${deviceName}
用于发布(上行)消息,设备上报版本号及下载、升级进度到云端
$ota/update/${productID}/${deviceName}
用于订阅(下行)消息,设备接收云端的升级消息
以 MQTT 为例,设备的升级流程如下所示:
设备上报当前版本号。设备端通过 MQTT 协议发布一条消息到 Topic $ota/report/${productID/${deviceName}
,进行版本号的上报,消息为 json 格式,内容如下:
{
"type": "report_version",
"report":{
"version": "0.1"
}
}
// type:消息类型
// version:上报的版本号
登录 物联网通信控制台,进行固件上传,并将指定的设备升级到指定的版本。
触发固件升级操作后,设备端会通过订阅的 Topic $ota/update/${productID}/${deviceName}
收到固件升级的消息,内容如下:
{
"file_size": 708482,
"md5sum": "36eb5951179db14a63****a37a9322a2",
"type": "update_firmware",
"url": "https://ota-1255858890.cos.ap-guangzhou.myqcloud.com",
"version": "0.2"
}
// type:消息类型为update_firmware
// version:升级版本
// url:下载固件的url
// md5asum:固件的MD5值
// file_size:固件大小,单位为字节
设备在收到固件升级的消息后,根据 URL 下载固件,下载的过程中设备 SDK 会通过 Topic $ota/report/${productID}/${deviceName}
不断的上报下载进度,上报的内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"downloading",
"percent":"10",
"result_code":"0",
"result_msg":""
},
"version": "0.2"
}
}
// type:消息类型
// state:状态为正在下载中
// percent:当前下载进度,百分比
当设备下载完固件,设备需要通过 Topic $ota/report/${productID}/${deviceName}
上报一条开始升级的消息,内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"burning",
"result_code":"0",
"result_msg":""
},
"version": "0.2"
}
}
// type:消息类型
// state:状态为烧制中
设备固件升级完成后,再向 Topic $ota/report/${productID}/${deviceName}
上报升级成功消息,内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"done",
"result_code":"0",
"result_msg":""
},
"version": "0.2"
}
}
// type:消息类型
// state:状态为已完成
在下载固件或升级固件的过程中,如果失败,则通过 Topic $ota/report/${productID}/${deviceName}
上报升级失败消息,内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"fail",
"result_code":"-1",
"result_msg":"time_out"
},
"version": "0.2"
}
}
// state:状态为失败
// result_code:错误码,-1:下载超时;-2:文件不存在;-3:签名过期;-4:MD5不匹配;-5:更新固件失败
// result_msg:错误消息
物联网设备会出现在部分场景处于弱网环境,在此场景下连接将会不稳定,固件下载会出现中断的情况。如果每次都从0偏移开始下载固件,则在弱网环境有可能一直无法完成全部固件下载,因此固件的断点续传功能特别必要,关于断点续传的具体说明如下。
带断点续传的 OTA 升级流程如下:
说明:
- 弱网环境下步骤3-6有可能会多次执行,执行成功后再执行第7步。
- 执行步骤3后,设备端都会收到需要执行步骤4的消息。
本页内容是否解决了您的问题?