1、NB-IOT 协议接入说明文档Version: 1.0版本 时间 修订人 描述1.0.0 2017/10/30 物联网公司、研究院 A-创建文档,整理接入方案 1.0.01、 资源模型介绍1.1 协议介绍OneNET 提供了采用 LWM2M+CoAP 协议接入设备的说明文档,用户可以下载学习相关的具体内容,其中包括:LWM2M 协议的介绍LWM2M 是 OMA 组织制定的轻量化的 M2M 协议。LwM2M 定义了三个逻辑实体: LWM2M Server 服务器; LWM2M Client 客户端,负责执行服务器的命令和上报执行结果; LWM2M 引导服务器 Bootstrap Server,负
2、责配置 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:lw
3、m2m: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
4、.wikipedia.org/wiki/OMA_LWM2MCoAP 协议的说明CoAP(Constrained Application Protocol)协议是 IETF 提出的一种面向网络的协议,采用了与 HTTP 类似的特征,核心内容为资源抽象、REST 式交互以及可扩展的头选项等。CoAP 协议基于 REST 构架,REST 是指表述性状态转换架构,是互联网资源访问协议的一般性设计风格。为了克服 HTTP 对于受限环境的劣势,CoAP 既考虑到数据报长度的最优化,又考虑到提供可靠通信。一方面,CoAP 提供 URI,REST 式的方法如GET、POST、 PUT 和 DELETE,以及可
5、以独立定义的头选项提供的可扩展性。另一方面,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
6、 报文,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 响应的某种具体表现。
7、 【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
8、的具体编号等于之前所有 Option Delta 的总和。 【Option Length】表示 Option Val 终端设备的具体长度。 【Option Val 终端设备 】表示 Option 具体内容。包头 数据内容U D P 数据包伪部首 源端口 目的端口 长度 检验和源 I P 地址 目的 I P 地址 0 1 7 U D P 长度b i tb i t3 2 3 2 8 8 1 61 6 1 6 1 6 1 6伪部首V e r T T K LT o k e n ( i f a n y , T K L b y t e s )C o d e M e s s a g e I DO p t i
9、 o n s ( i f a n y . . . )1 1 1 1 1 1 1 1 P a y L o a d ( i f a n y )2 2 4 8 1 6b i tC o A P 数据包O p t i o n D e l t a O p t i o n L e n g t hO p t i o n D e l t a ( e x t e n d e d )O p t i o n L e n g t h ( e x t e n d e d )O p t i o n V a l u e1 b y t e s0 - 2 b y t e s0 - 2 b y t e s0 o r m o r e
10、 b y t e s协议报文示意图CoAP 协议报文中具体数值的意义参考 CoAP 协议:IETF RFC7252。Object Object InstanceResource 权限 值 数据类型最大像素(0) R 12,000,000 Integer像素(1) RW 12,000,000 Integer最大光圈(2) R 2.2 Float摄像头 (100)0最小光圈(3) R 32 Float1.2 资源模型LWM2M 协议定义了三层资源模型: Object, Object Instance, Resource, 每一层都用数字 ID 来标识。其中,Object 是传感器类别,Object
11、 Instance 是传感器具体实例,Resource 是传感器的属性和读数等,每个 Resource 具有不同的权限和数据类型,包括可读(R) /可写(W) /可执行(E)。一个终端设备上可能存在多个 Object, 每个 Object 可能存在多个 Object Instance。例如,把手机看作一个终端设备,则手机上有摄像头,光线传感器,GPS,陀螺仪等多种传感器,每种传感器便是一个 Object。假定摄像头的 Object ID 为 100,手机上有前后两个摄像头,即两个 Object Instance, ID 分别为 0, 1。每一个摄像头包括了像素,镜头焦距,光圈,快门值,快门等多
12、种 Resource。手机上的部分资源如下:(Object ID, Resource ID 为示例)可以使用类似于路径的方式来表示某个资源,例如 /100 表示 Object 100 (即摄像头),光圈(4) RW 5.6 Float快门(5) E当前图像(6) R 二进制图像 Opaque (二进制)最大像素(0) R 8,000,000 Integer像素(1) RW 8,000,000 Integer1光线传感器(101)0 GPS(102) 0 陀螺仪(103)0 /100/0 表示 Object 100, Object Instance 0 (即摄像头 0),/100/0/0 表示
13、Object 100, Object Instance 0, Resource 0 (即摄像头 0 的的最大像素 )。IPSO 的文档 , 中定义了一些常用传感器的 Object ID 和 Resource ID,终端设备应按照 IPSO 文档声明终端上的相关资源。LWM2M 的资源模型与 OneNET 的数据模型对应如下:LWM2M OneNET 备注终端设备 设备 Device 平台为每个设备分配唯一 IDObject, Object Instance, Resource数据流 数据流的名称按照 规则ObjectID_ObjectInstanceID_ResourceID 生成,例如手机摄
14、像头的例子中,资源 /100/0/1 对应的数据流为 100_0_1Resource Value 数据点 资源在某个时间点上传的值,与时间戳一起,形成数据点,存储在 OneNET1.3 订阅(Observe 机制) NB-IOT 终端设备通过 LWM2M 协议的订阅(Observe)/上报(Notify) 机制将数据上传到OneNET 平台。订阅可以在 Object 层,Object Instance 层,Resource 层,订阅上层Object 时,其所属的所有 Object Instance 都可以上报数据;订阅 Object Instance 时,其所属的所有 Resource 都可以
15、上报数据。每层订阅都是独立的,由资源路径唯一标识。例如,同时订阅了 /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,B
16、ootstrap 完成,第二部分是注册、注销、更新注册消息;第三部分是观测消息、取消观测、消息上报;第四部分是设备管理操作,包括 read/write/execute 操作。2、 SDK 使用说明根据应用的使用方式,基于已经集成 SDK 的模组, 应用可以采取两种方式:第一种方式是 APP 集成在模组上,这种场景下应用使用 SDK 提供的 API 接口实现;第二种方式是APP 工作在自己的 MCU 上,同时使用集成了 SDK 的模组来提供 OneNet 及 NBIOT 接入的相关功能,这种场景下应用使用 SDK 的 AT 接口。应用厂家使用集成完 SDK 的芯片和模组分为两种,第一种是使用 S
17、DK 提供的 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);功能:根据输入的 c
18、onfig 文件进行 SDK 初始化参数及返回值:参数名称 参数含义 类型 描述context 上下文信息 void *指向 void *指针地址的指针变量,基础通信套件在初始化成功后会将申请到的上下文结构体地址写入该变量中config 配置文件信息 void *size config 的大小 uint32_ttypedef unsigned _int16 uint16_t;返回值 返回值含义CIS_RET_ERROR 失败CIS_RET_OK 成功cis_ret_t cis_deinit (void * context);功能:反初始化操作,释放 SDK 占用的资源参数及返回值:参数名称 参
19、数含义 类型 描述context 上下文信息 void * 上下文结构体地址返回值 返回值含义CIS_RET_ERROR 失败CIS_RET_OK 成功cis_ret_t cis_register (void * context, const cis_callback_t* cb);功能:SDK 初始化完成后,该接口向平台进行注册参数及返回值:参数名称 参数含义 类型 描述context 上下文信息 void * 上下文结构体地址cb 设备回调const cis_callback_t*返回值 返回值含义CIS_RET_ERROR 失败CIS_RET_OK 成功cis_ret_t cis_unregister (void * context);功能:该接口用于向服务器发起注销操作参数及返回值:参数名称 参数含义 类型 描述