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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
28天前
|
消息中间件 网络协议 物联网
MQTT常见问题之物联网设备端申请动态注册时MQTT服务不可用如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
5天前
|
存储 安全 物联网
使用 Java 进行物联网(IoT)应用开发
【4月更文挑战第19天】Java,凭借其跨平台特性和丰富库,成为物联网开发热门选择。开发者利用Java进行物联网应用开发,可实现设备连接、数据处理、数据库管理及安全保障。熟悉Java基础、物联网知识、数据通信和数据库管理是必备技能。利用MQTT客户端、数据存储框架和可视化工具能提升开发效率。随着物联网发展,Java在该领域的影响力将持续增强。
|
1月前
|
监控 安全 数据挖掘
物联网平台中如何快速检测设备异常
物联网平台中如何快速检测设备异常
29 0
|
1月前
|
存储 监控 安全
Java基于物联网技术的智慧工地云管理平台源码 依托丰富的设备接口标准库,快速接入工地现场各类型设备
围绕施工安全、质量管理主线,通过物联感知设备全周期、全覆盖实时监测,将管理动作前置,实现从事后被动补救到事前主动预防的转变。例如塔吊运行监测,超重预警,升降机、高支模等机械设备危险监控等,通过安全关键指标设定,全面掌握现场安全情况,防患于未然。
147 5
|
1月前
|
消息中间件 存储 Cloud Native
深度剖析 RocketMQ 5.0,IoT 消息:物联网需要什么样的消息技术?
本文来学习一个典型的物联网技术架构,以及在这个技术架构里面,消息队列所发挥的作用。在物联网的场景里面,对消息技术的要求和面向服务端应用的消息技术有什么区别?学习 RocketMQ 5.0 的子产品 MQTT,是如何解决这些物联网技术难题的。
90817 4
|
1月前
|
XML JSON 网络协议
【开源视频联动物联网平台】设备接入
【开源视频联动物联网平台】设备接入
27 2
|
1月前
|
存储 运维 网络协议
【开源物联网平台】物联网设备上云提供开箱即用接入SDK
IOTDeviceSDK是物联网平台提供的设备端软件开发工具包,可简化开发过程,实现设备快速接入各大物联网平台。设备厂商获取SDK后,根据需要选择相应功能进行移植,即可快速集成IOTDeviceSDK,实现设备的接入。
118 0
|
1月前
|
安全 搜索推荐 物联网
物联网设备的OTA基本原理
物联网设备的OTA基本原理
39 1
|
3月前
|
存储 安全 数据管理
构建智慧家庭的未来:物联网平台与智能家居系统的开发
在数字化时代,物联网平台和智能家居系统的开发日益受到关注。本文将探讨物联网平台和智能家居系统的定义、优势以及开发过程中的挑战与解决方案。通过对智能家居系统的构建和物联网平台的应用,我们可以实现更加智能、高效和安全的生活环境。
|
3月前
|
供应链 NoSQL 物联网
链接全球数十亿台设备!物联网行业如何应对数据管理、实时分析和供应链优化的挑战?
物联网已成为面向未来的解决方案的关键组成部分,且其所蕴含的巨大经济价值潜力有待挖掘
1440 0
链接全球数十亿台设备!物联网行业如何应对数据管理、实时分析和供应链优化的挑战?

相关产品

  • 物联网平台