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
相关文章
|
4月前
|
传感器 物联网 网络架构
ENS、IoT设备、X86、ARM
ENS(Enterprise Name Service)是企业名称服务,是一种为物联网设备提供命名和寻址服务的技术。ENS通过为物联网设备分配唯一的名称和地址,使得物联网设备可以被网络中的其他设备和服务所识别和访问。 IoT设备(Internet of Things device)是连接到互联网的物理设备,可以收集和共享数据,用于监测、控制和优化各种业务流程和操作。IoT设备包括各种传感器、执行器、网关和路由器等。
40 2
|
7月前
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
607 1
|
6月前
|
JSON 算法 物联网
物联网中利用OTA技术升级的基本原理与方法
物联网中利用OTA技术升级的基本原理与方法
221 0
|
2月前
|
网络协议 物联网 5G
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
|
6天前
|
存储 安全 物联网
使用 Java 进行物联网(IoT)应用开发
【4月更文挑战第19天】Java,凭借其跨平台特性和丰富库,成为物联网开发热门选择。开发者利用Java进行物联网应用开发,可实现设备连接、数据处理、数据库管理及安全保障。熟悉Java基础、物联网知识、数据通信和数据库管理是必备技能。利用MQTT客户端、数据存储框架和可视化工具能提升开发效率。随着物联网发展,Java在该领域的影响力将持续增强。
|
4月前
|
传感器 物联网 5G
物联网的通信技术以及Wi-Fi、一键配网技术、BLE、GPRS(2G)、LTE-Cat1 、NB-IoT简介
物联网的一个重要的特点是接入了网络,因此这些设备才能将传感器采集的数据上传到云平台,然后根据平台对数据的分析做出反应。而这种接入网络的技术,就是通信技术,是物联网的基础之一。通信的方式可以分为有线和无线两种方式,因为有线通信的成本较高,无线通信技术在物联网中应用比较广泛。
104 1
|
1月前
|
消息中间件 存储 Cloud Native
深度剖析 RocketMQ 5.0,IoT 消息:物联网需要什么样的消息技术?
本文来学习一个典型的物联网技术架构,以及在这个技术架构里面,消息队列所发挥的作用。在物联网的场景里面,对消息技术的要求和面向服务端应用的消息技术有什么区别?学习 RocketMQ 5.0 的子产品 MQTT,是如何解决这些物联网技术难题的。
90837 4
|
7月前
|
传感器 监控 数据可视化
手把手教你用IoT设备监控家庭环境数据
本实验带您体验如何通过六合一传感器(温度、湿度、二氧化碳、PM2.5、PM10、甲醛)实现家庭环境数据实时采集,并搭建可视化大屏实时监控。
304 0
|
5月前
|
安全 物联网 物联网安全
物联网安全IoT攻击向量威胁
物联网主要有两种感染途径:暴力破解弱密码和利用网络服务中的漏洞。
106 0
|
6月前
|
边缘计算 安全 物联网
开源在物联网(IoT)中的应用
开源在物联网(IoT)中的应用
136 0

相关产品

  • 物联网平台