ITPub博客

首页 > 云计算 > 公有云实践 > IoT物联网设备「固件升级」OTA,「资源包更新」最佳实践——实践类

IoT物联网设备「固件升级」OTA,「资源包更新」最佳实践——实践类

公有云实践 作者:AIoT2688 时间:2023-01-05 16:35:09 0 删除 编辑

1.什么是固件升级

固件升级OTA(Over-the-Air Technology)即空中下载技术,是IoT物联网平台必备的一项基础功能。通过OTA方式,我们可以对分布在全球各地的IoT设备进行设备固件升级,而不必让运维人员各地奔波。本文以MQTT协议下的固件升级为例,介绍OTA固件升级流程、数据流转使用的Topic和数据格式。


2.固件升级OTA流程

MQTT协议下固件升级流程如下图所示

image

固件升级过程使用的Topic如下列表

1.设备端通过以下Topic上报固件版本给物联网平台 。

/ota/device/inform/${YourProductKey}/${YourDeviceName}

2.设备端订阅以下Topic接收物联网平台的固件升级通知 。

/ota/device/upgrade/${YourProductKey}/${YourDeviceName}

3.设备端通过以下Topic上报固件升级进度 。

/ota/device/progress/${YourProductKey}/${YourDeviceName}


3.固件升级实战

3.1 设备版本信息

为了实现固件升级功能,首先设备要正确上报当前固件版本,我们在设备详情可以查看到。

image.png

3.2 固件版本分布

当每个设备都准确上报固件版本时,我们可以在控制台查看到全量设备的版本发布情况。

image.png

3.3 上传新版固件

当我们需要做设备固件升级时,首先要上传新版本固件到IoT物联网平台,标记新版本号。

image.png

3.4 验证固件

新固件上传后,我们需要筛选测试设备,来验证固件是否正常,避免新固件导致设备业务异常。

image.png

验证通过后,会看到批量升级功能变为可用状态。

image.png

3.5 批量升级

点击批量升级菜单,进入升级配置页面。我们可以从多个维度筛选待升级的设备,配置升级策略。

image.png

image.png

3.6 升级过程

启动固件升级任务后,我们会看到一个升级批次。点击进入详情,可以看到待升级设备列表。

image.png


在升级批次详情页面,可以查看所有状态的设备情况,包括:待推送,已推送,升级中,升级成功,升级失败,已取消。

image.png


附录

IoT物联网平台推送到设备端的升级消息Payload示例

{
    "code":"1000",
    "data":{        
        "size":2233916,
      "extData":{
        "info":"双11语料包更新"
      },
      "module":"resource",
      "sign":"5a1a416f357f17bfa89823d2fd49ef8b",
      "version":"res-1.2.5",
      "url":"更新包下载的url地址",
      "signMethod":"Md5",
      "md5":"5a1a416f357f17bfa89823d2fd49ef8b"
    },
    "id":1617773607348,
    "message":"success"
}


设备固件升级模拟代码

const fs = require('fs');
const path = require('path');
const mqtt = require('aliyun-iot-mqtt');
//设备身份三元组+区域
const options = {
  productKey: "替换pk",
  deviceName: "替换dn",
  deviceSecret: "替换ds",
  regionId: "cn-shanghai"
}
//建立连接
const client = mqtt.getAliyunIotMqttClient(options);
//订阅ota消息的Topic
const deviceUpgrade = `/ota/device/upgrade/${options.productKey}/${options.deviceName}`
client.subscribe(deviceUpgrade)
//每次连接后,上报当前固件版本
const deviceInform = `/ota/device/inform/${options.productKey}/${options.deviceName}`
client.publish(deviceInform, getFirmwareVersion("1-45-345a"))
//OTA过程中,上报进度
const deviceProgress = `/ota/device/progress/${options.productKey}/${options.deviceName}`
// 消息处理
client.on('message', function(topic, message) {
  if (topic == deviceUpgrade) {
    //收到ota消息,开始升级过程
     doUpgrade(message)
  }
})
// 本地更新
function doUpgrade(message) {
  message = JSON.parse(message)
  // 1.从url下载固件包,更新下载进度...
  client.publish(deviceProgress, getOTAUpgradeData(23))
  // 2.根据signMethod验证文件签名是否和sign值一致
  // verifyFirmware()
  // 3.重启设备,升级固件
  // burn & reboot()
}
// 更新升级进度
function getOTAUpgradeData(step) {
  const payloadJson = {
    "id": 1,
    "params": {
      "step":  step,
      "desc": " xxxxxxxx "
    }
  }
  console.log(payloadJson)
  return JSON.stringify(payloadJson);
}
// 设备当前固件版本
function getFirmwareVersion(version) {
   const payloadJson = {
     "id": 1,
     "params": {
       "version": version
     }
    }
    console.log(payloadJson)
    return JSON.stringify(payloadJson);
}




物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn

 

阿里云物联网平台客户交流群


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70017009/viewspace-2930994/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-04-22

  • 博文量
    134
  • 访问量
    80952