乐趣区

关于物联网:IoT物联网设备OTA固件升级开发实践实践类

物联网设施 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"
}

设施固件降级模仿代码

/**
 * node aliyun-iot-device.js
 */
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​​

              阿里云物联网平台客户交换群
退出移动版