- 产品介绍
- 价格说明
- 快速入门
- 开发指南
- 用户指南
- 最佳实践
- API参考
-
SDK参考
- SDK介绍(联通用户专用)
- 应用侧JAVA SDK API参考(联通用户专用)
- 应用侧Python SDK API参考(联通用户专用)
- 设备侧Agent Lite API参考(C)(联通用户专用)
- 设备侧Agent Lite API参考(Android)(联通用户专用)
- 设备侧Agent Lite API参考(Java)(联通用户专用)
-
常见问题
- 热门问题(联通用户专用)
-
方案咨询(联通用户专用)
- 开发中心、设备接入和设备管理的差异是什么?
- IAM子用户或子项目是否可以开通物联网平台服务?
- 物联网平台支持在华为云的哪些区域开通?
- 如何成为华为IoT生态合作伙伴?
- 物联网平台支持哪些接入方式和协议?
- 华为是否提供模组/硬件终端/应用软件等?
- 设备接入模拟器HubSimulator是否能在设备管理使用?
- 设备接入服务如何获取设备数据?
- 物联网平台的应用和设备可以无限创建吗?
- 物联网平台支持批量注册设备吗?
- 物联网平台对应用和设备有消息流控吗?
- 开发中心单个应用允许接入设备数是多少?
- 数据在物联网平台的保存时间是多久?
- 物联网平台支持的DTLS加密算法有哪些?
- 物联网平台支持二进制大小端模式切换吗?
- 什么是NB-IoT?
- 物联网平台支持的硬件架构和使用的相关组件有哪些?
-
设备集成(联通用户专用)
- 如何获取设备和应用对接地址?
- 如何下载LiteOS IDE/IoT Studio?
- 物联网平台允许一个IMEI号注册多个设备吗?
- 如何设置设备名称?
- IoT设备如何激活?
- 物联网平台如何切换设备的在线/离线状态?
- 通过网关接入的子设备,平台如何识别是哪一个设备?
- deviceId、nodeId和IMEI有什么对应关系?
- Agent Lite和Agent Tiny有什么区别?
- 使用Agent Lite接入的网关设备gwbindinfo.json文件丢失如何处理?
- 运行Agent Lite Java Demo报UnsatisfiedLinkError错误怎么处理?
- 设备如何发送文件至物联网平台?
- 开发中心模拟设备如何上报负数?
- 开发中心支持哪几种省电模式?
- 开发中心支持数据转发吗?
- 开发中心没有设备分组和批量添加设备,怎么办?
- 如何检测NB网络信号?
- NB模组附着网络失败如何处理?
- NB模组绑定设备失败怎么办?
- NB模组无法正常上报数据怎么办?
- NB设备上报数据为字符串时如何转换为二进制编码?
- NB设备接入时,出现513错误?
- 为什么执行AT+CUFN=1会返回error?
- 平台向NB-IoT设备缓存下发命令,为什么设备一直收到同一条控制命令?
- AT+CGDCONT=1, CTNB是什么?
- NB-IoT设备如何选择PSM、DRX、eDRX模式?
- 应用集成(联通用户专用)
-
订阅推送(联通用户专用)
- 调用订阅接口时,回调地址如何获取?
- 应用服务器如何收到命令状态变化的通知?
- 如何获取证书?
- 回调地址可以使用域名吗?
- 订阅后消息推送失败,例如提示503如何处理?
- 应用服务器收到数据,但是平台显示推送失败?
- 应用服务器只有内网地址,能否订阅成功?
- 调用订阅接口时,提示回调地址不合法?
- 物联网平台只支持HTTPS的回调地址吗?
- 回调地址可以修改吗?
- 推送证书失效怎么处理?
- 调用删除单个订阅接口时,subscriptionId如何获取?
- 设备数据变化通知和批量设备数据变化通知的区别是什么?
- 应用服务器如何获取物联网平台推送消息时使用的地址?
- 物联网平台订阅推送是否具有重推机制?
- 为什么设备上报一条数据后应用服务器会收到多条推送?
- 在同一个应用下,平台可以将不同设备上报的数据,推送到两个服务器吗?
- NB-IoT设备已订阅消息确认和命令响应通知,为何应用服务器收不到推送消息?
- 数据上报(联通用户专用)
- 命令下发(联通用户专用)
- 产品模型/Profile(联通用户专用)
- 编解码插件(联通用户专用)
- 软/固件升级(联通用户专用)
- 文档下载
- 通用参考
链接复制成功!
PCP协议介绍(联通用户专用)
平台升级协议(PCP协议)规定了设备和平台之间升级的通信内容与格式。
本协议规定设备和IoT平台(以下简称“平台”)之间的应用层升级协议(简称“PCP协议”),用于实现设备的升级。
通讯方式
- PCP协议运行在应用层,底层可以是LWM2M/CoAP/MQTT或者其他非流式协议。
- 由于PCP协议消息没有使用单独的端口号,并且不依赖于底层协议,为了和设备业务消息区分,PCP协议固定以0XFFFE作为起始字节。因此要求设备的业务消息的前两个字节不能是0XFFFE,更多细节参考附录PCP消息识别。
- 本协议消息采用一问一答模式,所有请求消息都有一个响应消息。
消息结构
字段名 |
字段类型 |
描述和要求 |
---|---|---|
起始标识 |
WORD |
起始标识,固定为0XFFFE。 |
版本号 |
BYTE |
高四位预留;低四位表示协议版本号,当前为1。 |
消息码 |
BYTE |
标识物联网平台与设备之间的请求消息类型,应答消息的消息码和请求消息相同。消息码的定义为:
|
校验码 |
WORD |
从起始标识到数据区的最后一个字节的CRC16校验值,计算前先把校验码字段置为0,计算完成后把结果写到校验码字段。 |
数据区长度 |
WORD |
数据区的长度。 |
数据区 |
BYTE[n] |
可变长度,具体由各个指令定义,可参考下面介绍的各个指令对应的请求消息和应答消息定义。 |
数据类型
数据类型 |
描述 |
---|---|
BYTE |
无符号一字节整数 |
WORD |
无符号二字节整数 |
DWORD |
无符号四字节整数 |
BYTE[n] |
n字节的十六进制数 |
STRING |
字符串 |
本协议采用网络序来传输WORD和DWORD。
查询设备版本消息
请求消息:
方向:平台->设备
字段 |
数据类型 |
描述及要求 |
---|---|---|
无数据区 |
响应消息:
方向:设备->平台
字段 |
数据类型 |
描述及要求 |
---|---|---|
结果码 |
BYTE |
“0X00”处理成功 |
当前版本号 |
BYTE[16] |
当前版本号,由ASCII字符组成,位数不足时,后补“0X00”。 |
- 正常处理:平台根据版本号判断设备是否需要升级,如果需要,下发请求升级。
- 异常处理:如果响应超时,平台中止升级任务。
新版本通知消息
请求消息:
方向:平台->设备
字段 |
数据类型 |
描述及要求 |
---|---|---|
目的版本号 |
BYTE[16] |
目的版本号,由ASCII字符组成,位数不足时,后补“0X00”。 |
升级包分片大小 |
WORD |
每个分片的大小 |
升级包分片总数 |
WORD |
升级包分片总数 |
升级包校验码 |
WORD |
升级包校验码。用户上传升级包时,需要在升级包描述文件里填写校验码 |
应答消息:
方向:设备->平台
字段 |
数据类型 |
描述及要求 |
---|---|---|
结果码 |
BYTE |
“0X00”允许升级 “0X01”设备使用中 “0X02”信号质量差 “0X03”已经是最新版本 “0X04”电量不足 “0X05”剩余空间不足 “0X09”内存不足 “0X7F”内部异常 |
- 正常处理:如果设备不允许升级,平台中止升级任务。
- 异常处理:如果响应超时,而且没收到请求升级包消息,平台中止升级任务。
请求消息包消息
请求消息:
方向:设备->平台
字段 |
数据类型 |
描述及要求 |
---|---|---|
目的版本号 |
BYTE[16] |
目的版本号,由ASCII字符组成,位数不足时,后补“0X00”。 |
分片序号 |
WORD |
表示请求获取的分片序号,从0开始计算,分片的总数为软件包大小除以每个分片的大小并向上取整获得。设备可以保存已经收到的分片,下次直接从缺失的分片开始请求,达到断点续传的效果。 |
响应消息:
方向:平台->设备
字段 |
数据类型 |
描述及要求 |
---|---|---|
结果码 |
BYTE |
0X00处理成功。 0X80升级任务不存在。 0X81指定的分片不存在。 |
分片序号 |
WORD |
表示返回的分片序号。 |
分片数据 |
BYTE[n] |
分片的内容,n为实际的分片大小。如果结果码不为0,则不带此字段。 |
上报升级包下载状态消息
请求消息:
方向:设备->平台
字段 |
数据类型 |
描述及要求 |
---|---|---|
下载状态 |
BYTE |
0X00下载成功。 0X05剩余空间不足。 0X06下载超时。 0X07升级包校验失败。 0X08升级包类型不支持。 |
响应消息:
方向:平台->设备
字段 |
数据类型 |
描述及要求 |
---|---|---|
结果码 |
BYTE |
0X00处理成功。 0X80升级任务不存在。 |
执行升级消息
请求消息:
方向:平台->设备
字段 |
数据类型 |
描述及要求 |
---|---|---|
无数据区 |
响应消息:
方向:设备->平台
字段 |
数据类型 |
描述及要求 |
---|---|---|
结果码 |
BYTE |
0X00处理成功。 0X01设备使用中。 0X04电量不足。 0X05剩余空间不足。 0X09内存不足。 |
上报升级结果消息
请求消息:
方向:设备->平台
字段 |
数据类型 |
描述及要求 |
---|---|---|
结果码 |
BYTE |
0X00升级成功。 0X01设备使用中。 0X04电量不足。 0X05剩余空间不足。 0X09内存不足。 0X0A安装升级包失败。 0X7F内部异常。 |
当前版本号 |
BYTE[16] |
设备当前版本号。 |
响应消息:
方向:平台->设备
字段 |
数据类型 |
描述及要求 |
---|---|---|
结果码 |
BYTE |
0X00处理成功。 0X80升级任务不存在。 |
PCP消息识别
由于PCP协议消息和设备业务消息共用一个端口和URL通讯,平台收到设备的消息时,按照如下步骤判断是PCP协议消息还是业务消息:
- 检查设备是否支持软件升级(根据设备profile的omCapability.upgradeCapability定义),如果不支持,则认为是业务消息。
- 检查设备软件升级协议是否是PCP,如果不是,则认为是业务消息。
- 检查消息前两个字节是否为0XFFFE,如果不是,则认为是业务消息。
- 检查版本号是否合法,如果不合法,则认为是业务消息。
- 检查消息码是否合法,如果不合法,则认为是业务消息。
- 检查校验码是否正确,如果不正确,则认为是业务消息。
- 检查数据区长度是否正确,如果不正确,则认为是业务消息。
- 如果以上检查都通过,认为是PCP协议消息。
对设备的要求:需要设备保证业务消息的起始字节不是0XFFFE。