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

简介: 通过OTA方式,我们可以对分布在全球各地的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 设备版本信息

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

3.2 固件版本分布

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

3.3 上传新版固件

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

3.4 验证固件

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

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

3.5 批量升级

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

3.6 升级过程

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

正在升级Tab会展示升级中的设备列表和升级进度。
image.png
升级成功Tab会展示已经完成固件升级的设备列表。包括当前固件版本,更新时间,状态。
image.png
升级失败Tab会展示已经升级失败的设备列表。包括当前固件版本,更新时间,失败原因
image.png

附录

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);
}

[](#80ifpi)image.png

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
25天前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
11月前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
397 1
|
11月前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
469 4
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
295 7
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
481 9
Apache IoTDB进行IoT相关开发实践
|
12月前
|
人工智能 安全 物联网
|
存储 监控 安全
使用IoT设备优化家庭生活的技术探索
【8月更文挑战第4天】IoT设备以其智能化、便捷性和高效性,正逐步成为现代家庭不可或缺的一部分。从智能照明到智能安防,从智能恒温器到智能厨房,再到智能语音助手,这些设备不仅优化了我们的家庭生活,还提升了我们的生活质量和幸福感。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,未来的智能家居将会更加智能、更加人性化,为我们的生活带来更多惊喜和便利。
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
The article introduces IoTDB, an open-source time-series database designed for efficient management of IoT-generated data. It addresses challenges like real-time integration of massive datasets and security. IoTDB supports high-performance storage,
395 0
Apache IoTDB进行IoT相关开发实践
|
机器学习/深度学习 人工智能 算法
物联网(IoT)就像是一个大型派对,无数的设备都在欢快地交流着信息
【9月更文挑战第4天】在这个万物互联的时代,物联网(IoT)犹如一场盛大的派对,各类设备欢聚一堂。然而,如何让这些设备互相理解并协同工作呢?这就需要机器学习与人工智能的助力。例如,智能空调通过学习你的使用习惯来调节温度,使你更加舒适;智能安防系统则能识别异常行为并及时报警,保障家庭安全。此外,智能农业、交通等领域也因机器学习和人工智能的应用变得更加高效。下面通过一个简单的温度预测代码示例,展示机器学习在物联网中的实际应用,让我们一起感受其强大潜力。
206 0
|
存储 SQL JSON
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?
133 0

相关产品

  • 物联网平台