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 降级过程
启动固件降级工作后,咱们会看到一个降级批次。点击进入详情,能够看到待降级设施列表。
在降级批次详情页面,能够查看所有状态的设施状况,包含:待推送,已推送,降级中,降级胜利,降级失败,已勾销。
附录
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/produc…
阿里云物联网平台客户交换群