如何轻松和安全地构建的满足合规要求的智能产品,实现业务需求?4月26日,告诉你答案! 了解详情
写点什么

【我的物联网成长记 15】玩转设备软件升级

  • 2019 年 12 月 30 日
  • 本文字数:3145 字

    阅读完需:约 10 分钟

【我的物联网成长记15】玩转设备软件升级

【摘要】 物联网平台支持远程对设备进行软件升级,本文将会为您介绍软件升级的流程与原理。


-----软件升级流程-----

软件(Software)一般分为系统软件和应用软件,系统软件实现设备最基本的功能,比如编译工具、系统文件管理等;应用软件可以根据设备的特点,提供不同的功能,比如采集数据、数据分析处理等。


软件升级又称为 SOTA(SoftWare Over The Air),是指用户可以通过 OTA 的方式支持对 LWM2M 协议的设备进行软件升级。软件升级遵循的协议为 PCP 协议,设备侧需要遵循 PCP 协议进行软件升级的适配开发。SOTA 流程如下图所示:


://bbs.huaweicloud.com/static/ueditor/themes/default/images/spacer.gif


1577150777252658.png


SOTA 升级流程的详细说明:


1~2. 用户在设备管理服务的控制台上传软件包,并在控制台或者应用服务器上创建软件升级任务。


  1. NB-IoT 设备上报数据,平台感知设备上线,触发升级协商流程。


4~5. 物联网平台向设备下发查询设备软件版本的命令,查询成功后,物联网平台根据升级的目标版本判断设备是否需要升级。


  • 如果返回的软件版本信息与升级的目标版本信息相同,则升级流程结束,不做升级处理。

  • 如果返回的软件版本信息与升级的目标版本信息不同,则继续进行下一步的升级处理。


  1. 物联网平台向设备订阅软件升级的状态。


7~8. 物联网平台查询终端设备所在的无线信号覆盖情况,获取小区 ID、RSRP(Reference Signal Received Power,参考信号接收功率)和 SINR(Signal to Interference Plus Noise Ratio,信号干扰噪声比)信息。


  • 查询成功:则根据如下方式计算可同时升级的并发数计算,并按照步骤 10 进行处理。

  • 如下图所示,如果设备的 RSRP 强度和 SINR 强度均落在等级“0”中,则同时可以对该小区的 50 个相同信号覆盖区间的设备进行同时升级。

  • 如果设备的 RSRP 强度和 SINR 强度分别落在等级“0”和“1”中,则以信号较弱的等级“1”为准,则只能同时对该小区的 10 个设备进行升级。

  • 如果设备的 RSRP 强度和 SINR 强度分别落在等级“1”和“2”中,则以信号较弱的等级“2”为准,则只能同时对该小区的 1 个设备进行升级。

  • 如果设备的 RSRP 强度和 SINR 强度不在该 3 个等级范围内,且均可以查询到,则按照信号最弱覆盖等级“2”处理,则只能同时对 1 个设备进行升级。

  • 1577150807458220.png

  • 注:如果用户在软件升级中发现同时进行升级的设备数较少,则可以联系当地运营商检查和优化设备所在小区的无线覆盖情况。

  • 查询失败:则按照步骤 9 进行处理。


  1. 物联网平台继续下发查询小区 ID 信息的命令,获取终端设备所在的小区 ID 信息。


  • 如果查询成功:物联网平台支持同时对该小区的 10 个相同情况的设备进行软件升级。

  • 如果查询失败:则升级失败。


10~12. 物联网平台通知设备有新的软件包版本,设备启动软件包的下载。软件包的下载按照分片的方式进行下载,支持断点续传功能,通过软件包分片中携带的“versionCheckCode”确定是否属于同一个软件包。下载完成后,设备知会物联网平台软件包已下载完毕。


13~14. 物联网平台向设备下发升级的命令,终端设备进行升级操作,升级完成后终端设备向物联网平台反馈升级的结果。


  1. 物联网平台向控制台/应用服务器通知升级的结果。


-----软件升级版本包结构------

设备升级的软件包文件由各设备厂商提供,在物联网平台上传设备的软件升级包前,需要制作软件升级的版本包,用于修改软件包的描述文件,如软件版本、厂商名称、设备类型、产品模型等信息。下面将详细介绍版本包的制作方法。


  1. 新建文件夹命名为“DM”,在 DM 文件夹下新建文件夹,命名为“linux”。

  2. 使用 Notepad++文本工具新建一个文本文件,拷贝如下内容到文本中,在 Notepad++工具的“编码”菜单中选择“以 UTF-8 无 BOM 格式编码”,然后将文本进行存储,存储路径选择步骤 1 中的“linux”文件夹,文件名称命名为“UpgradeDesc”,保存类型选择“.json”。

  3. {

  4. “specVersion”: “”,

  5. “fileName”: “”,

  6. “packageType”: “”,

  7. “version”: “”,

  8. “deviceType”: “”,

  9. “manufacturerName”: “”,

  10. “model”: “”,

  11. “protocolType”:"",

  12. “description”:"",

  13. “versionCheckCode”:"",

  14. “deviceShard”:"",

  15. “platform”:"",

  16. “supportSourceVersionList”:[],

  17. “date”:""

  18. }

  19. 打开创建的“UpgradeDesc.json”文件,修改软件升级描述文件,相关字段如下表所示。

  20. 1577150939696835.png

  21. 在与“DM”同级目录下创建文件夹,命名为“linux”,该文件夹名称必须同步骤 1 中的文件夹命令保持一致,将厂商软件包(软件包格式无限制)置于该文件中。

  22. 选中“DM”和“linux”文件夹,使用压缩工具打包成 ZIP 格式的压缩包,建议命令为“xx_package.zip”。


注:


  • 文件“DM”和“linux”的命名是固定的。

  • “xx_package.zip”下不能包含 package 这层目录。

  • 仅支持 ZIP 格式的压缩包,不能压缩成其他格式后,例如 rar,再手动修改文件类型为 zip。


-----设备侧适配开发概述------

设备的 OTA 软件升级是基于华为定义的PCP协议进行的,设备侧需根据 PCP 协议定义的交互流程进行适配开发。下面我们将结合物联网平台与设备的软件升级交互流程,介绍终端设备将如何基于 PCP 协议构建交互过程中的请求消息和应答消息,帮助您更好的根据 PCP 协议进行终端侧的软件升级功能开发。


下面我们先了解下 PCP 消息的结构,PCP 协议的请求消息和应答消息都遵循相同的消息结构,主要由这几部分组成:


1577150983209435.png


PCP 协议消息由:起始标识位、版本号、消息码、校验码、数据区长度和数据区组成,各字段的要求和描述如下表所示。


1577150995959624.png


物联网平台发送消息接下来让我们以查询设备版本号为例看下平台与设备交互消息的结构。


根据 PCP 消息结构的定义可以得出,物联网平台向设备下发查询版本号时,各消息字段的填写如下:


  • 起始标识:固定为消息流的前 2 个字节,固定为 FFFE。

  • 版本号:数据类型为 1 个字节整数,且固定为 1,即在消息流中为 01。

  • 消息码:数据类型为 1 个字节整数,查询设备版本的消息码为 19,转换为十六进制为 13。

  • 校验码:数据类型为 2 个字节整数,先将校验码置为 0000,然后将完整的消息码流进行 CRC16 的算法计算得到校验码,再将得到的校验码替换原消息中的 0000。

  • 数据区长度:数据类型为 2 个字节整数,代表数据区的消息长度,根据数据区的数据结构可以得出该条消息无数据区,即数据区长度为 0000。

  • 数据区:数据区代表要真正发送给设备的数据,根据查询版本信息的数据区定义,该条消息是没有实际要传送的数据的,即无需数据区字段。


因此将查询版本消息的码流组合起来得到:FFFE 01 13 0000 0000。前面的校验码时讲了,需要将组合后的消息码流进行 CRC16 算法得到校验码 4C9A,然后将该校验码替换原码流中的 0000 后得到 FFFE01134C9A0000,该消息码流即为物联网平台发送给设备的查询版本信息的消息码流。


设备返回的应答消息


设备收到物联网平台要查询设备的软件版本号消息,设备要向物联网平台反馈查询的结果,各消息字段的填写如下。


  • 起始标识固定为:FFFE。

  • 版本号固定为:01。

  • 消息码:与请求的消息码一致,为 13。

  • 校验码:CRC16 计算前先用 0000 替代。

  • 数据区长度:根据数据区的字段的数据类型得出数据区长度为 17 个字节,转换为十六进制为:0011。

  • 数据区:根据数据区的定义可知,处理成功的结果码为 00,版本号信息假设为 V0.9,将 V0.9 进行 ASCII 转码得到 56302E39,由于版本号的数据类型为 BYTE[16],即 16 个字节,当前只有 4 个字节,因此需要在版本号数据后面补 0,得到 56302E39000000000000000000000000。因此,数据区合并后为 0056302E39000000000000000000000000。

  • 1577151028585971.png


将查询版本信息的消息流组合起来得到:FFFE 01 13 0000 0011 0056302E39000000000000000000000000。前面讲到,还要将消息流进行 CRC16 算法计算得到校验码为 8DE3。因此,物联网平台向设备查询版本号信息,设备向平台返回的消息流为 FFFE01138DE300110056302E39000000000000000000000000。


本文转载自华为云社区技术博客。


原文链接:https://bbs.huaweicloud.com/blogs/140605


2019 年 12 月 30 日 11:01296

评论

发布
暂无评论
发现更多内容

Redis哨兵(sentinel )机制讲解

Dnnn

理解大端字节和小端字节

Dnnn

anyRTC推流小助手-客户端推流(PUSH RTMP)工具

anyRTC开发者

技术 音视频 WebRTC 直播 RTC

bit比特, Byte字节,基础知识

Dnnn

阿里架构师耗时三个月整理的Spring实战笔记:入门到实战

Java架构师迁哥

干货:不同场景容器内获取客户端源IP的方法

华为云开发者社区

容器 服务端 场景

URL 去重的 6 种方案!(附详细实现代码)

王磊

Java

【API进阶之路】用API打造一条自动化内容生产流水线

华为云开发者社区

自动化 API 部署

GO语言 MD5 四种实现方式

Dnnn

Go 语言

教师节送什么老师最开心?程序员三招解决家长送礼难题!

华为云开发者社区

编程 程序

Centos 上配置大数据环境

yuanhang

大数据

马云:今天的区块链并没有被人们认识到价值!

CECBC

区块链 阿里巴巴 马云

MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?

Dnnn

如何设计Upload组件思考

赵孔磊

初识大数据

yuanhang

大数据

实战解析丨如何对Mysql连接请求的tcpdump内容进行分析

华为云开发者社区

TCP/IP 数据传输

Hadoop 简介

yuanhang

hadoop

GO 语言交叉编译

Dnnn

Go 语言

聊聊开发工程师如何转型产品经理

长沙造纸农

程序员 开发者 产品经理 转型 中年危机

TCP三次握手和四次挥手

Dnnn

Linux命令netstat详解

Dnnn

起飞!这份技术点拉满的ELk+Lucene笔记,可能价值百万

小Q

Java lucene elasticsearch 架构 面试

.NET多线程(Thread,ThreadPool,Task,Async与Await)

AI代笔

分布式追踪系统原理看不懂,40张图带你亲手实践

小Q

Java 架构 面试 分布式 系统设计

算法与数据中台实践之网约车平台

博文视点Broadview

大数据 数据中台 中台 算法 数据

或许是史上最好的AQS源码分析了,AQS基础一

InfoQ_d2212957090d

AQS

学完微软技术总监整理的44 个微服务架构设计模式,我涨薪了

Java架构师迁哥

Atlassian Team Tour 9月23日登陆中国,报名通道已开启!

Atlassian

敏捷开发 数字化转型 金融 Jira

遇到银河提现不了网站维护审核怎么办?

丛林里的余光

数据库 网站平台 提现

epoll的原理和流程

Dnnn

程序员快乐器之JAVA代码生成工具

Learun

敏捷开发 快速开发 生成代码

【我的物联网成长记15】玩转设备软件升级_语言 & 开发_我是卤蛋_InfoQ精选文章