LWM2M协议中Object ID-对象id和ResourceID-资源id具体含义和连接OneNET物联网平台时候AT指令语句中对应的参数修改。
编码规范官方网址
基于M5310模组实现NB设备接入OneNET实例
接入Onenet平台时主要AT指令语句
AT+MIPLADDOBJ=0,3303,1,"1",1,1
AT+MIPLDISCOVERRSP=0,35748,1,4,"5700"
AT+MIPLNOTIFY=0,msgid,3303,0,5700,4,len,value,0,0
理论篇
这里首先要理解三个参数含义,对象id,实例id,资源id,LWM2M规范定义了每个对象对应客户端的某个特定功能实体object。
Object ID:对象id,上传必须要对应的功能实体,其中常用的3303表示温度,3316表示电压,3317表示电流,3333表示UTC时间,3300表示通用传感器,具体可以看官方文档的这里-见下图。红线以下都是经常使用的对象,温度、湿度、压力等,都是物联网常见的参数。
Instance ID:实例id,instance代表着这个object的不同实例。通过object id和instance id可以确认到一个指定的object实例;比如一个物联网设备检测多个温度,就需要创建一个对象的不同实例。这个据我了解有些模块不支持。
Resource ID:资源id,每个object下可以有多个resource属性数据。比如温度传感器这个实例,其所对应的单位、最大最小值,温度等数值可视为其resource属性。比如你上传一组数据包括单位,最大值最小值,传感器值等等,就能在平台上可视化各种炫酷的图形,统计表格等等,当然这个要物联网平台支持。5700为传感器值,这个是最常用的值而且OneNET平台支持显示sensor value。
总结一下就是我们通过object id区分对象的类型,温度、湿度还是气压等等,通过不同的instance id来区分同一个对象不同的实例,voltage_0、voltage_1、voltage_2等等,用resource id来区分一个具体对象实例的不同属性,比如加速度计的X_value、Y_value、Z_value,等等,这样就可以确定上传的每条数据对应的意义。
实战篇
这里举个移远BC20连接OneNET物联网平台时候AT核心指令语句。
-ref, is 0,创建的通讯套件实例id。
-objId, 对象id,3316表示电压,3317表示电流,3333表示UTC时间,3300表示通用传感器。
-insCount, is 1,创建实例的个数。
-insBitmap,is “1”,必须要双引号,实例的位图,1表示有效。
-attrCount,is 1,属性计数,它指示可读和/或可写资源的计数。
-actCount, is 1,操作计数,指示可执行资源的计数。
发送一个数据
AT+MIPLNOTIFY=0,122179,3316,0,5700,4,4,25.6,0,0
ref, msgId, objId, insId, resId, valueType, len, value, index, flag
-ref , is 0
-msgId ,信息识别码,MIPLOPEN返回的识别码
-objId ,对象id
-insId ,实例号
-resId ,资源号
-valueType ,数据类型,1表示字符串,2表示不透明数据类型,3为整数,4表示浮点数,5表示布尔数。
-len ,数据长度,当数据为字符串时,len=字符串长度。数据为整数时,len可以是2,4或8,数据为浮点数时,其值为4。
-value ,整数或者浮点是的时候,就是对应的文本数据。字符串时,为用双引号引起来
-index ,数据的索引,是N-1到0的递减序列数,到零时,表示这是最后一个数了。
-flag ,1表示第一个数据,2表示中间的数据,3表示最后一个数据。
这里分享一个BC20连接onenet指令
AT+MIPLCREATE //设备创建
AT+MIPLADDOBJ=0,3316,1,"1",1,0 //创建一个对象,1个实例,3303表示温度
AT+MIPLOPEN=0,86400 //注册请求,持续时间1天,此指令返回渐渐较长
AT+MIPLOBSERVERSP=0,101283(MIPLOPEN指令返回),1 //响应观察请求,必须3S之内响应
AT+MIPLDISCOVERRSP=0,35748(MIPLOBSERVERSP指令返回),1,4,"5700" //创建一个资源对象
AT+MIPLNOTIFY=0, 101283(MIPLOPEN指令返回), 3316,0,5700,4,内容长度,内容,0,0 //发送一条数据
AT+MIPLDELOBJ=0,3316
AT+MIPLCLOSE=0
AT+MIPLDELETE=0
这是我测试的记录
AT+MIPLCREATE
+MIPLCREATE: 0
OK
AT+MIPLADDOBJ=0,3316,1,"1",1,1
OK
AT+MIPLOPEN=0,86400
OK
+MIPLEVENT: 0,1
+MIPLEVENT: 0,2
+MIPLEVENT: 0,4
+MIPLEVENT: 0,6
+MIPLOBSERVE: 0,112638,1,3316,0,-1
+MIPLOBSERVE: 0,112638,1,3316,0,-1
AT+MIPLOBSERVERSP=0,112638,1
OK
+MIPLDISCOVER: 0,47103,3316
AT+MIPLDISCOVERRSP=0,47103,1,4,"5700"
OK
+MIPLDISCOVER: 0,47103,3316
AT+MIPLNOTIFY=0,112638,3316,0,5700,4,4,18.7,0,0
OK
AT+MIPLNOTIFY=0,112638,3316,0,5700,4,4,18.8,0,0
OK
+MIPLDISCOVER: 0,47105,3316
AT+MIPLNOTIFY=0,112638,3316,0,5700,4,4,18.8,0,0
OK
+MIPLDISCOVER: 0,47105,3316
+MIPLDISCOVER: 0,47105,3316
AT+MIPLNOTIFY=0,112638,3316,0,5700,4,4,18.8,0,0
OK
AT+MIPLNOTIFY=0,112638,3316,0,5700,4,4,20.8,0,0
OK
AT+MIPLDELOBJ=0,3316
OK
AT+MIPLCLOSE=0
OK
+MIPLEVENT: 0,15
AT+MIPLDELETE=0
OK