# 固件升级
# 操作场景
设备固件升级又称 OTA,是物联网通信服务的重要组成部分。当物联设备有新功能或者需要修复漏洞时,设备可以通过 OTA
服务快速的进行固件升级。
# 实现原理
固件升级的过程中,需要设备订阅下面两个 Topic 来实现与云端的通信。
如下图所示:
Topic:
- 用于发布(上行),设备上报当前版本号,及下载进度上报:
iotlink/thing/up/${productId}/${deviceName}
- 用于订阅(下行),设备接收云端的升级信息:
iotlink/thing/down/${productId}/${deviceName}
# 升级流程
设备的升级流程如下所示:
设备上报当前版本号。
设备端通过 MQTT 协议发布一条消息到 Topic $ota/report/${productId}/${deviceName},进行版本号的上报。消息为 json 格式,内容如下:
{ "method": "report_version", "messageId": "123", "version": "1.0.0.1" }
参数说明:
参数 类型 必选 说明 method String 是 report_version 表示网关设备接收远程控制的响应 messageId String 是 用于上下行消息配对标识 version Integer 是 表示设备上报当前版本号。1.0.0.1表示设备版本号
平台下发升级固件包信息
例如平台中有大于报文中
version
属性的升级包将会发布一条topic为iotlink/ota/upgrade/${productId}/${deviceName}
的报文,内容如下:{ "host": "ip", "messageId": "123", "method": "report_version_reply", "port": "8081", "size": 6348, "status": "Success", "upgradeFlag": 1, "url": "/upload/upload/2022/10/14/crc_20221014154300A001.bin", "version": "1.0.0.2" }
参数说明:
参数 类型 必选 说明 method String 是 report_version_reply表示云端返回设备端的响应 messageId String 是 用于上下行消息配对标识 size Integer 是 固件大小,单位为字节 version String 是 升级版本 host String 是 ip地址或者域名 port String 是 端口号 upgradeFlag Integer 是 端口号 url String 是 下载固件的url status String 是 消息状态
设备收到升级报文通过HTTP协议将固件包下载到本地进行升级
设备端完成升级后,上报最新版本
控制台显示成功