LWM2M 协议是 OMA 组织制定的轻量化的 M2M 协议,主要面向基于蜂窝的窄带物联网(Narrow Band Internet of Things, NB-IoT)场景下物联网应用,聚焦于低功耗广覆盖(LPWA)物联网(IoT)市场,是一种可在全球范围内广泛应用的新兴技术。具有覆盖广、连接多、速率低、成本低、功耗低、架构优等特点。
移动 OneNET 平台采用的是基于 NB-IOT 的 LWM2M 协议和 CoAP 协议实现 UE 与平台的通信,其中 LWM2M 协议为应用层协议,CoAP 协议为传输层协议。
1、LWM2M 协议逻辑实体与逻辑接口
(1)LwM2M 定义了三个逻辑实体:
LWM2M Server :接入机,平台服务器接口;
LWM2M client : 客户端,负责执行服务器 的命令和上报执行结果;
Bootstrap server :引导机,负责 配置 LWM2M 客户端。
(2)这三个逻辑实体之间有4个逻辑接口:
Bootstrap:Bootstrap Server 通过这个接口来配置 Clinet - 比如说 LWM2M server 的 URL 地址;
Device Discovery and Registration:客户端注册到服务器并通知服务器客户端所支持的能力;
Device Management and Service Enablement: LWM2M Server 发送指令给 Client 并受到回应.;
Information Reporting:LWM2M Client 来上报其资源信息的,比如传感器温度。
这三个逻辑实体与四个逻辑接口之间的关系如下图:
2、LWM2M 协议栈
Lightweight M2M 协议栈结构如下图所示:
2.1 LWM2M Objects
每个 object(对象)对应客户端的某个特定功能实体。 LWM2M 规范定义了一些标准 Objects,比如:
urn:oma:lwm2m:oma:2; (LWM2M Server Object,其中‘2’为object ID)。
urn:oma:lwm2m:oma:3; (LWM2M Access Control Object,其中‘3’为object ID)。
除了 LWM2M 定义的 object,IPSO 组织也定义了一些常用传感器的 object,比如:
urn:oma:lwm2m:ext:3311;(IPSO Light Control,,其中‘3311’为 object ID)。
每个 object 可以有多个 resource,每个 resource 代表一项 object 属性或者功能。比如 object ID 为 3311 的传感器的部分resource描述如下表:
2.2 LWM2M Protocol
LWM2M Protocol 定义了一些逻辑操作,比如 Read, Write, Execute, Create 和 Delete 等操作。通过这些逻辑操作,实现云平台与终端设备的数据交互。
3、基于LWM2M协议接入移动OneNet实例
在此我们使用北京奇迹物联的 AM20E 模块接入 OneNET 平台。接入之前,需要完成 OneNET 平台侧的用户注册和产品创建。
3.1 产品创建
1. 完成用户注册并登录后,进入开发者中心进行产品创建。
2. 产品创建时,根据页面内容,填写您的产品信息。
3. 产品创建完成之后,添加设备,其中,AM20E 模块的 IMEI 号和 SIM 卡的 IMSI 号,可使用串口调试工具,分别通过 AT+ CGSN指令和 AT+CIMI 指令获取,并填入。
4. 产品创建并添加设备完成之后,可在设备管理界面看到所添加的设备,设备栏灰色表示离线状态。
5. 在模块侧接入流程中,当模块收到平台侧返回的注册结果+MIPLEVENT:0,6,完成注册。设备栏将显示绿色,表示上线状态。
3.2模块接入 OneNET 平台流程
模块完成初始化流程并成功注册网络后,接入 OneNET 平台,流程图如下所示。
上述模块接入 OneNET 平台流程图中,需要说明的是:
数据交互过程中,平台 READ/WRITE/EXECUTE/PARAMETER 操作请求、模块资源值上报、以及模块更新注册信息,这 3 个步骤不分先后顺序,所以未对其按顺序进行编号。
图中虚线箭头表示 OneNET 平台将返回响应结果+MIPLEVENT 给模块侧。+MIPLEVENT 返回值请参考 AT 指令集的说明。
1. 模块初始化
AT
+PBREADY
AT //AT 响应正常
OK
AT+CSQ
+CSQ: 20,99 OK//检测CSQ 正常
AT+CEREG?
+CEREG: 0,1 OK//模块注册网络正常
2. 模块接入 OneNET 平台,完成注册
AT+XIIC=1 OK//获取IP 地址
AT+XIIC?
+XIIC: 1,100.103.238.182 //查询IP 地址已成功获取
OK
AT+MIPLVER? //查询基础通信套件版本2.2.0
OK
AT+MIPLCREATE
+MIPLCREATE:0 //创建基础通信套件成功,返回<ref>为 0,0 是基础通信套件标识,后续 AT 指令都需要使用到它
OK
AT+MIPLADDOBJ=0,3303,2,"11",6,1
//添加对象 3303,2 个实例,6 个属性。其中对象 Objectid3303 需遵守命名规范,请参考链接:
http://www.openmobilealliance.org/wp/OMNA/LwM2M/LwM2MRegistry.html,
OK
AT+MIPLOPEN=0,3600 OK
//模块请求注册
+MIPLEVENT:0,1 //OneNET 平台返回结果 BOOTSTRAP_START
+MIPLEVENT:0,2 //OneNET 平台返回结果 BOOTSTRAP_SUCCESS
+MIPLEVENT:0,4 //OneNET 平台返回结果 CONNECT_SUCCESS
+MIPLEVENT:0,6 //OneNET 平台返回结果 REG_SUCCESS
//模块侧收到上述返回值表示请求注册成功,此时,刷新OneNET 平台可看到设备显示绿色在线状态。
3. 模块响应 OneNET 平台 Observer 请求和 Discover 请求,完成订阅。
+MIPLOBSERVE:0,87667,1,3303,0,-1 //OneNET 平台对象/实例Observe 请求
AT+MIPLOBSERVERSP=0,87667,1 //模块响应 Observe 请求,其中 msgid=87667 必须对应 OneNET 平台 Observe 请求消息中下发的 msgid
OK
+MIPLEVENT:0,21 //模块响应Observe 请求成功
+MIPLDISCOVER:0,153204,3303 //OneNET 平台对象 Discover 请求
+MIPLDISCOVER:0,153204,3303
AT+MIPLDISCOVERRSP=0,153204,1,34,"5700;5701;5601;5602;5603;5604;5605" OK
//模块响应Discover 请求,其中msgid=153204 必须对应 OneNET 平台 Discover 请求消息中下发的msgid。模块响应
Discover 请求时创建7 个资源,每个资源用分号“;”隔开,其中资源Resourceid 5700;5701;5601;5602;5603;5604;5605
需遵守 IPSO 规范定义,请参考链接:
http://www.openmobilealliance.org/wp/OMNA/LwM2M/LwM2MRegistry.html,
+MIPLEVENT:0,21
//平台返回 Discover 请求结果给模块,完成订阅。此时OneNET 平台上可查看到对象 3303 对应的资源列表信息。
4. 模块与 OneNET 平台数据交互
+MIPLREAD:0,21459,3303,0,5700
//平台请求指定资源(此处指Resourceid 5700)的READ 请求
AT+MIPLREADRSP=0,21459,1,3303,0,5700,4,5,20.22,0,0
//模块响应平台 READ 请求,其中msgid=21459 必须对应 OneNET 平台 READ 请求消息中下发的 msgid,4 表示 float 数据类型。模块将资源值 20.22 返回给OneNET 平台侧。
OK
+MIPLEVENT:0,21
//平台请求指定资源(此处指Resourceid 5605)的 EXECUTE
+MIPLEXECUTE:0,11671,3303,0,5605,5,"reset
AT+MIPLEXECUTERSP=0,11671,2/模块执行 EXECUTE 请求
OK
+MIPLEVENT:0,21 //模块收到平台返回的响应结果
AT+MIPLNOTIFY=0,77861,3303,0,5700,4,4,23.5,0,0 OK
//模块向平台侧上报指定资源值,此处上报 float 类型的值 810.56 给Resourceid 5700,其中 msgid=129584 必须对应
前面 OneNET 平台 Observer 请求消息中下发的 msgid。
+MIPLEVENT:0,26
//模块收到平台返回的响应结果,上报资源值成功,点击“操作”的详情按钮,可看到上报资源值的数据流。
//模块收到平台返回的响应结果,刷新OneNET 平台,可看到实例 0,资源 5700 的属性值更新为 20.2199999。
AT+MIPLUPDATE=0,3600,1//模块更新注册信息
+MIPLEVENT:0,11//模块收到平台返回的响应结果,更新注册信息成功
5. 模块删除对象
AT+MIPLDELOBJ=0,3303 OK
6. 模块请求注销
AT+MIPLCLOSE=0 OK
+MIPLEVENT:0,15
7. 删除基础通信套件
AT+MIPLDELETE=0 OK