IoT物联网设备OTA固件升级开发实践——设备管理运营类

发布时间:2024-12-25 03:16

物联网(IoT)设备连接家庭设备,实现智能化管理 #生活常识# #科技应用#

物联网设备OTA固件升级实践

1.前言

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

2.固件升级OTA流程

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

​​固件升级过程使用的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 设备版本信息

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

3.2 固件版本分布

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

3.3 上传新版固件

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

3.4 验证固件

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

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

3.5 批量升级

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

3.6 升级过程

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

正在升级Tab会展示升级中的设备列表和升级进度。

升级成功Tab会展示已经完成固件升级的设备列表。包括当前固件版本,更新时间,状态。

升级失败Tab会展示已经升级失败的设备列表。包括当前固件版本,更新时间,失败原因

附录

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

{

"code":"1000",

"data":{

"size":11472299,

"sign":"83254ac96e141affb8aa42cbfec93723",

"version":"2-45-345b",

"url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/dbab6f742ae389b40db88fc2500b08d0/ck0q5lyav00003i7hezxe0cbg.zip?Expires=1568951190&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=nk0sogaxtyp7dYvKZnjNQ%2BZ8Q9w%3D",

"signMethod":"Md5",

"md5":"83254ac96e141affb8aa42cbfec93723"

},

"id":1568864790381,

"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​​

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

网址:IoT物联网设备OTA固件升级开发实践——设备管理运营类 https://www.yuejiaxmz.com/news/view/557538

相关内容

一文读懂设备OTA升级
阿里云 IoT 物联网实例讲解——实践类
IOT智能设备介绍
物联网设备管理3:如何高效进行设备生命周期管理,从部署到退役?
物联网硬件设备有哪些
iot设备厂家
如何使用OTA控制台升级固件
生活中物联网硬件设备
IOT设备家庭
如何使用OTA固件升级

随便看看