前景提要
Demo板基础功能调试已在 Quectel BC95 系列模组调试小记 I、II、III中阐述清楚,本文重点关注 LWM2M(NB-IoT)协议以及Demo板如何接入移动 OneNET 平台。
1、LWM2M(NB-IoT)、CoAP 协议
1.1 简介
LWM2M 协议是由 OMA 组织制定的轻量化的 M2M 协议,主要面向基于蜂窝的窄带物联网(Narrow Band Internet of Thing, NB-IoT)场景下物联网应用,聚焦于低功耗广覆盖(LPWA)物联网(IoT)市场,广泛应用于智能停车、智能抄表、智能井盖、智能路灯等应用场景。
1.2 功能特点
NB-IoT 具备四大特点:
- 强连接:轻松支持大量设备联网需求;
- 高覆盖:对于厂区、地下车库、井盖这类对深度覆盖有要求的应用很适用;
- 低功耗:NB-IoT 聚焦小数据量、小速率应用特别对于一些不能经常更换电池的设备和场合,如安置于高山偏远地区中的各类传感监测设备;
- 低成本:低速率、低功耗、低带宽
基于 NB-IoT 的 LWM2M 协议和 CoAP 协议实现 UE 和 OneNET 平台的通信,其中实现数据传输协议中的传输层协议为 CoAP,应用层协议 LWM2M 协议实现。
CoAP 协议有以下特点:
- 基于轻量级的 UDP 协议之上,具有重传机制;
- 协议支持 IP 多播;
- 协议包头小,仅为4个字节;
- 功耗低,适用于低功耗物联网场景
LWM2M 协议属于轻量级的协议适用于各种物联网设备,LWM2M 定义了三个逻辑实体:
- LWM2M Server服务器;
- LWM2M Client客户端,负责执行服务器的命令和上报执行结果;
- LWM2M 引导服务器 Bootstrap Server,负责配置 LWM2M 客户端
1.3 协议详解及常见问题
OneNET采用LWM2M+CoAP协议接入设备,具体内容可参阅文末说明文档,其中包括:1、LWM2M、CoAP协议的介绍;2、资源模型的内容说明;3、SDK接入接口规范;4、SDK使用说明;5、SDK移植说明。
Q1:终端无法和OneNET建立连接
A:首先确定终端是否正常附着到NB网络中,可以通过查看终端的IP地址来确定。在确定终端获取了IP地址后,如果还是不能完成注册,则原因很可能在于NB的核心网对OneNET进行了限制。
Q2:SDK初始化模组失败
A:SDK在启动时会首先对当前模组的工作模式进行配置,使其能够附着进NB网络中,配置的方式是通过一系列AT指令,需要注意的是模组处理每条AT指令都需要一定的时间,故建议AT指令间可以延迟几秒,否则会造成初始化过程失败。
Q3:无法连接到平台,返回 4.03
A:4.03 Forbidden 是鉴权失败,通常是因为 IMEI 和 IMSI 不对。平台通过设备的endpoint name 鉴权,endpoint name 的格式是 IMEI;IMSI中间为分号。
Q4:设备在OneNET门户页面上为什么是离线状态
A:设备的在线状态只跟lifetime 是否过期有关,lifetime 设备连接(Register) 的一个参数,单位为秒,不指定则默认为 86400,lifetime 到期后,平台就会把设备踢下线,此时设备无法上报数据,只能重新连接(Register)。设备可以在lifetime未过期时通过发送 Register Update 报文延长 lifetime。
Q5:读/写/执行返回 TIME_OUT
A:TIME_OUT 是因为平台没有在超时时间内(25秒)收到设备的响应,有几种可能:
1) 网络连接session被核心网回收,NB-IOT 设备通过核心网连接到平台,如果设备在一段时间内(各地情况不一,通常为几分钟)没有上行和下行的活动,核心网会回收连接,此时平台下发的消息无法到达设备
2) 网络问题,NB-IOT 的网络不稳定,尽管CoAP 有重传机制,仍然有可能在25秒内无法完成平台到设备的请求响应的全过程。
Q6:执行接口(Execute)无法下发二进制数据
A:LWM2M 协议中,Execute 操作的参数为字符串,不支持二进制,要下发二进制,可以使用 Write 操作,请参照 API 文档写资源接口。
Q7:连续上传数据,每5分钟才有一条数据保存到平台
A:CoAP 协议通过 message id 和 token 来过滤重复消息,对于上报(Notify)的包,因为每次token相同,如果message id 也不变,会被当作重复消息被过滤。重复消息过滤的时间窗口是 247 秒,即第一条消息被处理后,247秒内的重复消息都会被过滤。
Q8:上传的 Integer/ Float/字符串数据显示为 [10, 100, 123] 这种格式
A:没有使用 IPSO 定义的标准资源模型。对于非 IPSO 模型的 Object ID 和 Resource ID, 平台无法判断资源的数据类型,只能按照二进制处理。
Q9:平台是否支持 DTLS加密传输
A:当前支持基于公钥的DTLS加密(使用 coaps 和 5684端口连接),后续会支持基于 PSK 和X.509证书的加密。
2、HW-BC95-DEMO 接入 OneNET
2.1 协议接入流程
测试接入流程分为平台域和设备域,基于NB模组/SDK方式接入流程图如下所示:
Step 1 创建产品,选择接入协议
如果没有OneNET账号,可以点击这里注册,注册成功后在平台创建一个NB-IoT产品,在设备接入协议选择时选择LWM2M协议,具体创建步骤可查看产品创建步骤。创建产品后,记录该产品的用户ID。
Step 2 创建设备,记录设备ID等信息
创建设备有两种方式:
Option 1 :可以通过页面点击添加设备,输入设备名称和鉴权信息(即IMEI、IMSI),详细查看云端管理、并记录下该设备号。
Option 2: 可以通过调用创建设备API实现设备的创建,输入设备的设备名、接入协议、鉴权信息以及MasterKey等信息,即可在平台上创建设备。部分操作如下图所示:
通过API操作实现效果如下图左onenet_Second所示:
Step3 移植SDK或搭载NB模组,建立UDP连接
结合NB-IoT设备的实际接入方式,目前主要有以下两种,文中采用第一种。
Option 1:NB-IoT设备搭载了已经实现接入OneNET平台的NB模组,设备通过NB模组和NB基站以及核心网等网元连接,实现和OneNET平台进行交互,完成同bootstrap服务器建立UDP连接。
具体方式为设备上电后通过发送AT指令给模组,同时携带endpoint name参数(即鉴权信息IMEI、IMSI等信息)实现设备和平台之间的UDP连接。连接建立成功后,bootstrap服务器会返回的LWM2M接入服务器地址和端口;已经实现接入OneNET平台的NB模组列表详见下表:
Option 2:NB-IoT设备搭载的NB模组未实现接入OneNET平台,建议如下操作:
① 开展NB模组接入OneNET的适配工作(适合有实力的模组公司);
② 自行下载NB-IoT的SDK,开展相应的开发工作自行移植至设备的MCU中。
若SDK已成功移植至MCU后,可在MCU中配置好bootstrap服务器地址、端口号,以及endpoint name参数(即鉴权信息IMEI、IMSI等信息)信息后,通过SDK实现和bootstrap服务器的UDP连接。连接建立成功后,bootstrap服务器会返回LWM2M的接入服务器地址和端口。
bootstrap服务器地址为:coap://nbiotbt.heclouds.com 端口号为:5683
上述两种方式具体接入实例可参见 NB-IoT设备接入实例
Step4 建立设备与平台间的协议连接
在Step3中完成设备获取LWM2M接入服务器的地址后,设备会自动完成和平台间的协议连接。
若已经连接成功,在设备信息中会看到灰色指示变成绿色:
Step5 设备资源列表查看
在Step4中完成设备上线后,通过点击最右边的“资源列表”按钮可以进入该设备的资源列表进行信息查看。设备上线后会上传一个资源列表到平台中,平台可以对这些资源做读、写、执行、订阅等操作。
在资源列表中可以看到设备下的对象名称、实例个数和属性个数。
Step6 设备属性查看,资源数据操作
在Step5中看到设备资源列表后,点击某个具体对象名称后可以看到具体的对象实例以及该对象实例下的属性值等信息。在该页面上可以实现对具体某个属性的读、写、执行以及查看详情等权限,完成对设备某个具体属性的实际操作。
3、参考文档
1、BC95_OneNET测试说明文档V1.1_171228
2、Quectel_BC95_OneNET_Application_Note_V1.0
3、Quectel_QFlash_User_Guide_V2.2
4、Quectel_BC95-B8_ONT_Firmware_Release_Notes_V0101
5、NB-IOT_Protocol_Access_Guide
6、OMA官网