传输数据

发送/接收数据的最大长度与iot_ctx中的buffer的大小有关。
如:buffer设置为1024,以整型类型数据点为例,最多可以一次性发送70个整型数据。

上传数据

◆开发者需明确每个数据点的dpid、类型(通过云平台获取)。根据数据点的类型,调用不同的函数将数据点id、对应数值添加到发送队列中。
◆目前支持的类型包括整数型、布尔型、枚举型、浮点型、字符型、故障型、二进制。
◆上传数据时,需保证在云端创建的数据点是可上报的。
①添加数据点到发送队列

iot_s32  dp_up_add_int  (iot_u8 dpid,    iot_s32   value)
iot_s32  dp_up_add_bool (iot_u8 dpid,    iot_u8    value)
iot_s32  dp_up_add_enum(iot_u8     dpid, iot_u8    value)
iot_s32  dp_up_add_float (iot_u8 dpid,   iot_f32   value)
iot_s32  dp_up_add_string(iot_u8 dpid, const    char*str,iot_u32    str_len)
iot_s32  dp_up_add_fault (iot_u8 dpid, const    char*fault,iot_u32  fault_len)
iot_s32  dp_up_add_binary(iot_u8 dpid, const    iot_u8*bin,iot_u32  bin_len)

②上传一条数据,设备功能发生改变时将最新数据上传,一条数据可包含多个数据点。

iot_s32    iot_upload_dps(    iot_u16*data_seq)
参数 说明
data_seq 传出参数,本条数据的序列号,如果需要确定数据何时上传成功,可记录此发送序列号,与收到的进行对比。
返回值 0 :成功;-1:失败

发布数据

◆publish是BLE MESH网络中的一种特殊传输数据的形式,具体表现为某个设备可以设置publish地址例如0xc0001,其他多个设备subscribe地址0xc0001,如果该设备向其publish地址发送消息,那么所有subscribe该地址的设备都会接收到publish消息。
◆在我们的BLE MESH SDK中建议是接收到APP发送的数据后设备主动调用publish接口。
◆目前该publish接口限制发送的数据不超过7字节,否则传输速率会很慢。
①添加数据点到发送队列
请参考4.1章节说明
②发布一条数据

iot_s32    iot_publish_dps(iot_u16*data_seq);
参数 说明
data_seq 传出参数,本条数据的序列号,如果需要确定数据何时上传成功,可记录此发送序列号,与收到的进行对比。
返回值 0 :成功;-1:失败

接收数据

◆开发者需明确每个数据点的dpid、类型(通过云平台获取)。根据数据点的类型,调用不同的转换函数转换成需要的数值。
◆目前支持的类型包括整数型、布尔型、枚举型、浮点型、字符型、故障型、二进制。
◆接收数据时,需保证在云端创建的数据点是可下发的。
◆接收数据时会判断是否是APP下发的命令,通常APP下发的命令需要做publish操作。
1、填写以下数据结构

iot_download_dps_t iot_down_dps[]= {云端数据点ID 数据点类型 处理函数
{ DP_ID_DP_SWITCH ,    DP_TYPE_BOOL  ,    dp_down_handle_switch   },};

2、定义针对某个数据点的处理函数
函数类型为 typedef dp_down__handle_(void_indata, iot_u32 inlen,iot_u8 is_app)

如数据点switch的类型为bool,则接受其数据的处理函数实现如下:

void   dp_down_handle_switch (  iot_u8* in_data,iot_u32  inlen,iot_u8  is_app    )
{iot_u8    dp_switch=bytes_to_bool(in_data);    
//转换成对应数值
if(dp_switch==0    )
{    }
else    
{    }
//如果是APP发送过来的数据则将该数据进行publish  
if\(is\_app\) {dp\_up\_add\_bool\(DP\_ID\_DP\_SWITCH, dp\_switch\); iot\_publish\_dps\(&seq\);  }  
//硬件操作完成后,应将更新后的状态上报一次  
dp\_up\_add\_bool\(DP\_ID\_DP\_SWITCH, dp\_switch\);  
//上报自身的开关值  
iot\_upload\_dps\(&seq\);  }

3、处理函数要根据数据点的类型,调用不同的转换函数

iot_s32   bytes_to_int (  const iot_u8        bytes[4]);
iot_u8    bytes_to_bool ( const iot_u8        bytes[1]);
iot_u8    bytes_to_enum ( const iot_u8        bytes[1]);
iot_f32   bytes_to_float (const iot_u8        bytes[4]);

其他包括字符串、故障、二进制类型请直接对原始数据进行处理。

4、接收到合法数据后,sdk会自动调用数据点对应的处理函数,处理函数一般会操作改变设备状态。
比如收到开/关命令,处理函数中应先执行设备开/关,接着将最新的设备开关状态通过调用4.1节接口上传至云端。如果is_app等于1表示接受到的数据是APP发送的,那么就要将接受的数据publish出去。

Copyright & copy qinglianyun all right reserved,powered by Gitbook该文件修订时间: 2021-04-22 18:53:48

results matching ""

    No results matching ""