# 固件升级

# 操作场景

设备固件升级又称 OTA,是物联网通信服务的重要组成部分。当物联设备有新功能或者需要修复漏洞时,设备可以通过 OTA 服务快速的进行固件升级。

# 实现原理

固件升级的过程中,需要设备订阅下面两个 Topic 来实现与云端的通信。

如下图所示:

img

Topic:

  • 用于发布(上行),设备上报当前版本号,及下载进度上报:iotlink/thing/up/${productId}/${deviceName}
  • 用于订阅(下行),设备接收云端的升级信息:iotlink/thing/down/${productId}/${deviceName}

# 升级流程

设备的升级流程如下所示:

img

  1. 设备上报当前版本号。

    • 设备端通过 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表示设备版本号
  2. 平台下发升级固件包信息

    • 例如平台中有大于报文中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 消息状态
  3. 设备收到升级报文通过HTTP协议将固件包下载到本地进行升级

  4. 设备端完成升级后,上报最新版本

  5. 控制台显示成功