【摘要】 物联网平台支持远程对设备进行软件升级,本文将会为您介绍软件升级的流程与原理。
-----软件升级流程-----
软件(Software)一般分为系统软件和应用软件,系统软件实现设备最基本的功能,比如编译工具、系统文件管理等;应用软件可以根据设备的特点,提供不同的功能,比如采集数据、数据分析处理等。
软件升级又称为 SOTA(SoftWare Over The Air),是指用户可以通过 OTA 的方式支持对 LWM2M 协议的设备进行软件升级。软件升级遵循的协议为 PCP 协议,设备侧需要遵循 PCP 协议进行软件升级的适配开发。SOTA 流程如下图所示:
SOTA 升级流程的详细说明:
1~2. 用户在设备管理服务的控制台上传软件包,并在控制台或者应用服务器上创建软件升级任务。
NB-IoT 设备上报数据,平台感知设备上线,触发升级协商流程。
4~5. 物联网平台向设备下发查询设备软件版本的命令,查询成功后,物联网平台根据升级的目标版本判断设备是否需要升级。
如果返回的软件版本信息与升级的目标版本信息相同,则升级流程结束,不做升级处理。
如果返回的软件版本信息与升级的目标版本信息不同,则继续进行下一步的升级处理。
物联网平台向设备订阅软件升级的状态。
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 进行处理。
物联网平台继续下发查询小区 ID 信息的命令,获取终端设备所在的小区 ID 信息。
如果查询成功:物联网平台支持同时对该小区的 10 个相同情况的设备进行软件升级。
如果查询失败:则升级失败。
10~12. 物联网平台通知设备有新的软件包版本,设备启动软件包的下载。软件包的下载按照分片的方式进行下载,支持断点续传功能,通过软件包分片中携带的“versionCheckCode”确定是否属于同一个软件包。下载完成后,设备知会物联网平台软件包已下载完毕。
13~14. 物联网平台向设备下发升级的命令,终端设备进行升级操作,升级完成后终端设备向物联网平台反馈升级的结果。
物联网平台向控制台/应用服务器通知升级的结果。
-----软件升级版本包结构------
设备升级的软件包文件由各设备厂商提供,在物联网平台上传设备的软件升级包前,需要制作软件升级的版本包,用于修改软件包的描述文件,如软件版本、厂商名称、设备类型、产品模型等信息。下面将详细介绍版本包的制作方法。
新建文件夹命名为“DM”,在 DM 文件夹下新建文件夹,命名为“linux”。
使用 Notepad++文本工具新建一个文本文件,拷贝如下内容到文本中,在 Notepad++工具的“编码”菜单中选择“以 UTF-8 无 BOM 格式编码”,然后将文本进行存储,存储路径选择步骤 1 中的“linux”文件夹,文件名称命名为“UpgradeDesc”,保存类型选择“.json”。
{
“specVersion”: “”,
“fileName”: “”,
“packageType”: “”,
“version”: “”,
“deviceType”: “”,
“manufacturerName”: “”,
“model”: “”,
“protocolType”:"",
“description”:"",
“versionCheckCode”:"",
“deviceShard”:"",
“platform”:"",
“supportSourceVersionList”:[],
“date”:""
}
打开创建的“UpgradeDesc.json”文件,修改软件升级描述文件,相关字段如下表所示。
- 1577150939696835.png
在与“DM”同级目录下创建文件夹,命名为“linux”,该文件夹名称必须同步骤 1 中的文件夹命令保持一致,将厂商软件包(软件包格式无限制)置于该文件中。
选中“DM”和“linux”文件夹,使用压缩工具打包成 ZIP 格式的压缩包,建议命令为“xx_package.zip”。
注:
文件“DM”和“linux”的命名是固定的。
“xx_package.zip”下不能包含 package 这层目录。
仅支持 ZIP 格式的压缩包,不能压缩成其他格式后,例如 rar,再手动修改文件类型为 zip。
-----设备侧适配开发概述------
设备的 OTA 软件升级是基于华为定义的PCP协议进行的,设备侧需根据 PCP 协议定义的交互流程进行适配开发。下面我们将结合物联网平台与设备的软件升级交互流程,介绍终端设备将如何基于 PCP 协议构建交互过程中的请求消息和应答消息,帮助您更好的根据 PCP 协议进行终端侧的软件升级功能开发。
下面我们先了解下 PCP 消息的结构,PCP 协议的请求消息和应答消息都遵循相同的消息结构,主要由这几部分组成:
PCP 协议消息由:起始标识位、版本号、消息码、校验码、数据区长度和数据区组成,各字段的要求和描述如下表所示。
物联网平台发送消息接下来让我们以查询设备版本号为例看下平台与设备交互消息的结构。
根据 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
评论