NB-IOT移植移动onenet基础通信套件之Object_ID,实例ID,资源ID
1. 访问是按照分层的,Object_ID/实例ID/资源ID,对应每一层ID的数据类型,目前是分为3层,一个实例下面可以有多个实例id,对下面的数据结构来说,如果是资源ID的话,类型只能是asBuffer,asBoolean,asInteger,asFloat,如果是实例ID的话,则是asChildren的类型,这个asChildren是个数据,包含实例ID下面所有的资源ID。
struct st_cis_data { uint16_t id; cis_datatype_t type; struct { uint32_t length; uint8_t* buffer; }asBuffer; union { bool asBoolean; int64_t asInteger; double asFloat; struct { uint32_t count; struct st_cis_data* array; }asChildren; struct { cis_oid_t objectId; cis_iid_t instId; }asObjLink; } value; } ;
2. 结构体,其中flag代表,后面的3个数据那个是有的,比如flag = 0x110,就是有object ID和实例ID,在大部分情况下,假如某个为0的话(假如实例ID为0),就是指该object ID下面所有的实例ID。
struct st_uri { uint8_t flag; // indicates which segments are set cis_oid_t objectId; cis_iid_t instanceId; cis_rid_t resourceId; };
3. 按照上面的,我的代码并没有实现吗,该指令是一个读取请求消息,如果资源ID,resourceid =‘-1’,则该指令会携带count,代表需要读取该instance下的所有资源,假设是工作服务器的读操作,那么AT+MIPLREADRSP指令里面的值要怎么填写,对AT来说就是字符串,那么指令需要去解析,但是目前根据文档,就是说如果服务下发的是读取实例下面的所有资源,那么这个指令将无法去上传,只能一次一个资源。算了,先按照3级全部在的情况搞吧。
< valuetype >:发送的数据类型 发送的数据类型要求如下: string =1,//字符串型 opaque=2,//不透明类型 integer=3,//整型 float=4,//浮点型 bool=5,//布尔型 <len>:读取的数据长度 <value>:发送的数据值
4. 在此厘清楚object ID,实例ID,资源ID这三个的关系,object ID是分类,比如温度传感器,电池电量,就是两个不同的object ID,然后有2个温度传感器,那么温度传感器A和温度传感器B就是2个实例,资源就是传感器的数据和状态等。object ID,实例ID这两者有点像JAVA语言里面的类和对象。如下是国际组织定义好的object ID。
5. 如下是国际组织定义好的资源 ID。实例ID这个就是第几个设备的编号,按数量就行,不需要定义的。