NB-IOT 协议接入说明文档
Version: 1.0
版本
时间
修订人
描述
1.0.0
2017/10/30
物联网公司、研究院
A-创建文档,整理接入方案 1.0.0
1、 资源模型介绍
1.1 协议介绍
OneNET 提供了采用 LWM2M+CoAP 协议接入设备的说明文档,用户可以下载学习
相关的具体内容,其中包括:
LWM2M 协议的介绍
LWM2M 是 OMA 组织制定的轻量化的 M2M 协议。LwM2M 定义了三个逻辑实体:
LWM2M Server 服务器;
LWM2M Client 客户端,负责执行服务器的命令和上报执行结果;
LWM2M 引导服务器 Bootstrap Server,负责配置 LWM2M 客户端。
在这三个逻辑实体之间有 4 个逻辑接口:
Device Discovery and Registration:客户端注册到服务器并通知服务器客户端所
支持的能力;
Bootstrap:Bootstrap Server 配置 Client;
Device Management and Service Enablement:指令发送和接收;
Information Reporting:上报其资源信息。
图 1-1 LWM2M 协议栈
LWM2M Objects:每个对象对应客户端的某个特定功能实体。LWM2M 规范定义
了以下标准 Objects,比如
o urn:oma:lwm2m:oma:2; (LWM2M Server Object);
o urn:oma:lwm2m:oma:3; (LWM2M Access Control Object);
o 每 个 object 下 可 以 有 很 多 resource , 比 如 Firmware object 可 以 有
Firmware 版本号,size 等 resource;
o Vendor 可以自己定义 object。
LWM2M Protocol:定义了一些逻辑操作,比如 Read, Write, Execute, Discover or
Observe 等。
LWM2M 协议的具体内容和消息格式可以参考 OMA 的网站
https://en.wikipedia.org/wiki/OMA_LWM2M
CoAP 协议的说明
CoAP(Constrained Application Protocol)协议是 IETF 提出的一种面向网络的
协议,采用了与 HTTP 类似的特征,核心内容为资源抽象、REST 式交互以及可扩展的头选
项等。CoAP 协议基于 REST 构架,REST 是指表述性状态转换架构,是互联网资源访问协
议的一般性设计风格。为了克服 HTTP 对于受限环境的劣势,CoAP 既考虑到数据报长度的
最优化,又考虑到提供可靠通信。一方面,CoAP 提供 URI,REST 式的方法如 GET、POST、
PUT 和 DELETE,以及可以独立定义的头选项提供的可扩展性。另一方面,CoAP 基于轻量
级的 UDP 协议,并且允许 IP 多播。为了弥补 UDP 传输的不可靠性,CoAP 定义了带有重
传机制的事务处理机制。并且提供资源发现机制,并带有资源描述。
CoAP 协议栈示意图
CoAP 由 UDP 作为承载,遵循 UDP 基本的协议报文格式,UDP 数据内容部分按照
CoAP 协议报文格式进行写入传输。
CoAP 协议格式说明如下:
【Ver】版本编号,指示 CoAP 协议的版本号。类似于 HTTP 1.0 HTTP 1.1。
版本编号占 2 位,取值为 01B。
【T】报文类型,CoAP 协议定义了 4 种不同形式的报文:CON 报文,NON
报文,ACK 报文和 RST 报文。
【TKL】CoAP 标识符长度。CoAP 协议中具有两种功能相似的标识符,一种
为 Message ID(报文编号),一种为 Token(标识符)。其中每个报文均包含
消息编号,但是标识符对于报文来说是非必须的。
【Code】功能码/响应码。Code 在 CoAP 请求报文和响应报文中具有不同的
表现形式,Code 占一个字节,它被分成了两部分,前 3 位一部分,后 5 位一
部分,为了方便描述它被写成了 c.dd 结构。其中 0.XX 表示 CoAP 请求的某种
方法,而 2.XX、4.XX 或 5.XX 则表示 CoAP 响应的某种具体表现。
【Message ID】报文编号。
【Token】标识符具体内容,通过 TKL 指定 Token 长度。
【Option】报文选项,通过报文选项可设定 CoAP 主机、CoAP URI、CoAP
请求参数和负载媒体类型等等。
【1111 1111B】CoAP 报文和具体负载之间的分隔符。
CoAP 支持多个 Option,CoAP 的 Option 的表示方法比较特殊,采用增量的方式描
述。一般情况下 Option 部分包含 Option Delta、Option Length 和 Option Val 三部分:
【Option Delta】表示 Option 的增量,当前的 Option 的具体编号等于之前
所有 Option Delta 的总和。
【Option Length】表示 Option Val 终端设备的具体长度。
【Option Val 终端设备】表示 Option 具体内容。
协议报文示意图
CoAP 协议报文中具体数值的意义参考 CoAP 协议:IETF RFC7252。
Object
Object
Instance
Resource
权限
值
数据类型
摄像头 (100)
0
最大像素(0)
像素(1)
最大光圈(2)
最小光圈(3)
光圈(4)
快门(5)
R
RW
R
R
RW
E
12,000,000
12,000,000
2.2
32
5.6
Integer
Integer
Float
Float
Float
当前图像(6)
R
二进制图像
Opaque (二
进制)
R
RW
8,000,000
8,000,000
Integer
Integer
1
…
最大像素(0)
像素(1)
…
…
…
…
光 线 传 感 器
(101)
GPS(102)
陀 螺 仪
0
0
0
(103)
1.2 资源模型
LWM2M 协议定义了三层资源模型:Object, Object Instance, Resource, 每一层都用数
字 ID 来标识。其中,Object 是传感器类别,Object Instance 是传感器具体实例,Resource
是传感器的属性和读数等,每个 Resource 具有不同的权限和数据类型,包括可读(R) /可
写(W) /可执行(E)。
一个终端设备上可能存在多个 Object, 每个 Object 可能存在多个 Object Instance。
例如,把手机看作一个终端设备,则手机上有摄像头,光线传感器,GPS,陀螺仪等多种传
感器,每种传感器便是一个 Object。假定摄像头的 Object ID 为 100,手机上有前后两
个摄像头,即两个 Object Instance, ID 分别为 0, 1。每一个摄像头包括了像素,镜头焦
距,光圈,快门值,快门等多种 Resource。
手机上的部分资源如下:(Object ID, Resource ID 为示例)
可以使用类似于路径的方式来表示某个资源,例如 /100 表示 Object 100 (即摄像头),
/100/0 表示 Object 100, Object Instance 0 (即摄像头 0),/100/0/0 表示 Object 100,
Object Instance 0, Resource 0 (即摄像头 0 的的最大像素)。
IPSO
的
文
档
,
中 定 义 了 一 些 常 用 传 感 器 的 Object ID 和
Resource ID,终端设备应按照 IPSO 文档声明终端上的相关资源。
LWM2M 的资源模型与 OneNET 的数据模型对应如下:
LWM2M
终端设备
Object,
Instance, Resource
Object
OneNET
设备 Device
数据流
Resource Value
数据点
备注
平台为每个设备分配唯一 ID
数 据 流 的 名 称 按 照
规 则
ObjectID_ObjectInstanceID_ResourceID 生成,
例如手机摄像头的例子中,资源 /100/0/1 对应的
数据流为 100_0_1
资源在某个时间点上传的值,与时间戳一起,形成
数据点,存储在 OneNET
1.3 订阅(Observe 机制)
NB-IOT 终端设备通过 LWM2M 协议的订阅(Observe)/上报(Notify) 机制将数据上传到
OneNET 平台。订阅可以在 Object 层,Object Instance 层,Resource 层,订阅上层
Object 时,其所属的所有 Object Instance 都可以上报数据;订阅 Object Instance 时,
其所属的所有 Resource 都可以上报数据。每层订阅都是独立的,由资源路径唯一标识。
例如,同时订阅了 /100/0 和 /100/0/0,则 /100/0/0 的数据会上报两次;只取消订阅
/100/0 或者 /100/0/0 中的某一个, /100/0/0 的数据还是会上传。
设备上线时,平台会主动下发 Observe 消息订阅设备上的所有 Object Instance (可以在
创建设备时关闭自动订阅),也可以使用 API 订阅感兴趣的资源。
UE 与平台间的通信接口基于 LWM2M 协议,在 LWM2M 协议以下基于 CoAP 协议,
通信消息包括四部分:第一部分是发起 Bootstrap,Bootstrap Write,Bootstrap 完成,
第二部分是注册、注销、更新注册消息;第三部分是观测消息、取消观测、消息上报;第四
部分是设备管理操作,包括 read/write/execute 操作。
2、 SDK 使用说明
根据应用的使用方式,基于已经集成 SDK 的模组, 应用可以采取两种方式:第一种方
式是 APP 集成在模组上,这种场景下应用使用 SDK 提供的 API 接口实现;第二种方式是
APP 工作在自己的 MCU 上,同时使用集成了 SDK 的模组来提供 OneNet 及 NBIOT 接入
的相关功能,这种场景下应用使用 SDK 的 AT 接口。
应用厂家使用集成完 SDK 的芯片和模组分为两种,第一种是使用 SDK 提供的 API 接
口,这种方式所有的操作都是同步的,要求 APP 和模组在同一个芯片核内。第二种方式是
使用 AT 接口,这种方式所有操作都是异步的,应用可以在自己的 MCU 中完成自己的应用
的开发。后面分开介绍不同的接口应用的编写。
2.1 API 接口模式的应用
SDK 的 API 接口包括对基础通信套件进行初始化、反初始化以及其他操作、相应的配
置文件、回调函数以及结构体,SDK 提供的 API 接口如下:
2.1.1 API 接口模式的应用
cis_ret_t cis_init (void ** context, void * config, uint32_t size);
功能:根据输入的 config 文件进行 SDK 初始化
参数及返回值: