LwM2M协议接入
LwM2M简介
LwM2M(lightweight Machine to Machine),是由OMA(open Mobile Alliance)定义的物联网协议,主要使用在资源受限(包括存储、功耗等)的NB终端。
协议特点
LwM2M协议栈如下图所示:
LwM2M 把设备上的服务抽象为 Object 和 Resource,并在 XML 文件中定义各种 Object 的属性和功能。
LwM2M Objects:每个对象对应客户端的某个特定功能实体。LwM2M 规范定义了标准Objects,比如urn:oma:LwM2M:oma:1; (LwM2M Server Object)、urn:oma:LwM2M:oma:3; (Device Object),每个object下可以有很多resource。 比如Device Object可以有Manufacturer,Model Number等resource。
LwM2M Protocol定义了一些逻辑操作,比如Read、Write、Execute等。
CoAP是IETF定义的Constrained Application Protocol,用来做LwM2M的传输层,下层可以是UDP或者SMS,UDP是必须支持的,SMS可选。
DTLS用来保证客户端和服务器间的安全性。
- 支持IMEI认证和SM9认证两种设备认证方式。
操作前提
1.已创建好产品和设备(细节参考产品管理、设备管理)
2.定义好产品模型(细节参考模型管理)
操作步骤
用户可以通过市面上大多数模组与IoT OS进行对接,此文以移动M5310模组为例进行操作示范。
1.将移动M5310模组插上物联网卡并上电,并通过TTL-USB转接线将串口连接到PC机,PC机打开串口软件。
2.在软件中打开对应的串口号,波特率配置为9600,点击“打开串口”。
3.通过串口工具依次输入以下命令:
1)上电检查流程:
AT //判断模组是否上电开机成功
AT+CSQ //信号质量检查
AT+CEREG? //判断 PS 域附着状态,标识位返回 1 或 5 表示附着正常AT+CGATT? //检查模组 PS 附着状态
2)模组侧设备创建
打开命令自动生成软件OneNET_Tool.exe,在Imei配置项中填入模组IMEI码,在Imsi配置项中填入IMSI码,在Host配置项中填入服务器IP和端口,点击“生成”按钮后在“生成AT指令”栏中会生成一系列字符串,将该字符串复制并粘贴到串口数据发送栏并点击发送,返回0 OK
Eg: AT+MIPLCONF=58,100300002C0100001A00636F61703A2F2F3132332E35392E38312E3130323A313536383911003836353832303033303435313935343B33050501,1,1
3)给模组配置对象 ObjectId 3200
AT+MIPLADDOBJ=0,3200,0 返回 OK
4)设备跟服务器建立连接
AT+MIPLOPEN=0,3600 返回 OK及一系列数据,表示登录成功,此时登录到后台可以看到设备已经上线
5)数据上报,向ObjectId 3200 instanceId 0 resourceId 5505 发送数据
AT+MIPLNOTIFY=0,3200,0,5505,6,"74657374",1返回 OK及一系列数据,表示数据上报成功,平台收到上报数据"74657374"转化的字符串“test”。可修改指令中“”内的内容上报不同数据。
6)登录注销
AT+MIPLCLOSE=0返回 OK
AT+MIPLDELOBJ=0,3200,0 //模组侧订阅资源列表释放
AT+MIPLDEL=0 //模组侧通信实例删除
数据格式
用户在创建产品时可以对产品传输的数据格式进行设置,LwM2M设备可以选择的数据格式为“自定义格式”和“KLink格式”,按照产品格式的不同,设备接入也略有不同。
自定义格式
用户在严格遵守LwM2M协议的情况下,可以进行自定义格式的传输。详情可见LwM2M协议特点。 其设备端操作如上述操作步骤所示。
【注意】
- 用户需要按照自定的格式在产品管理处对产品进行数据解析脚本的编写。数据解析脚本详情。
KLink格式
若用户在建立产品时,选择的数据传输格式为KLink格式,则需要对设备端进行以下改动。
在操作步骤设置模组对象时,设置ObjectId 19;instanceId 0;resourceId 0。
传输的数据要符合KLink格式,并且功能属于LwM2M设备支持的功能。
KLink协议相关可以查看KLink协议接入。
LwM2M设备支持的指令如下表所示。
指令功能 | 发送形式 | 详情 |
---|---|---|
设备上报数据 | D => C | devSend |
云端回复设备上报数据 | C => D | devSendResp |
云端给设备下发指令 | C => D | cloudSend |
设备回复云端下发指令 | D => C | cloudSendResp |
设备上报固件信息 | D => C | reportFirmware |
云端回应设备上报固件信息 | C => D | reportFirmwareResp |
子设备上线 | D => C | devLogin |
云端回复子设备上线 | C => D | devLoginResp |
子设备下线 | D => C | devLogout |
云端回复子设备下线 | C => D | devLogoutResp |