传输数据

传输数据点数据

发送/接收数据的最大长度与iot_ctx中的buffer的大小有关。

如:buffer设置为2048,以整型类型数据点为例,最多可以一次性发送60个整型数据。


上传数据


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

① 添加数据点到发送队列

void  dp_up_add_int  ( const char sub_id[32], iot_u8 dpid, iot_s32 value)
void  dp_up_add_bool ( const char sub_id[32], iot_u8 dpid, iot_u8 value)
void  dp_up_add_enum ( const char sub_id[32], iot_u8 dpid, iot_u8 value)
void  dp_up_add_float (const char sub_id[32], iot_u8 dpid, iot_f32 value)
void  dp_up_add_string(const char sub_id[32], iot_u8 dpid, const char   *str ,  iot_u32  str_len)
void  dp_up_add_fault (const char sub_id[32], iot_u8 dpid, const char   *fault, iot_u32 fault _len)
void  dp_up_add_binary(const char sub_id[32], iot_u8 dpid, const iot_u8 *bin,   iot_u32   bin_len)

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

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


typedef enum DATA_ACT_TYPE
{
    DATA_ACT_NORMAL                 = 0,        //默认发送数据,并触发联动
    DATA_ACT_FORBIT_LINKAGE         = 1,        //发送数据,但该数据不会触发联动
}DATA_ACT_T;

接收数据


  • 开发者需明确每个数据点的dpid、类型(通过云平台获取)。根据数据点的类型,调用不同的转换函数转换成需要的数值。

  • 目前支持的类型包括整数型、布尔型、枚举型、浮点型、字符型、故障型、二进制。

  • 接收数据时,需保证在云端创建的数据点是可下发的。

① 填写以下数据结构

    iot_download_dps_t iot_down_dps[] =

    {       云端数据点ID    数据点类型      处理函数

        { DP_ID_DP_SWITCH, DP_TYPE_BOOL, dp_down_handle_switch },

    };

② 定义针对某个数据点的处理函数,函数类型为

    void dp_down__handle*( char sub_id[16], iot_u8* indata, iot_u32 inlen );

其中sub_id为NULL时可能是硬件单品,也可能是网关自身的数据。
如,数据点switch的类型为bool,则接受其数据的处理函数实现如下:

    void dp_down_handle_switch ( char sub_id[16],iot_u8* in_data, iot_u32 inlen )

    {

        iot_u8 dp_switch = bytes_to_bool( in_data ); //转换成对应数值

        if( dp_switch == 0 )

        { }

        else

        { }

    }

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

    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] );

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

④ 接收到合法数据后,sdk会自动调用数据点对应的处理函数,处理函数一般会操作改变设备状态。
比如收到开/关命令,处理函数中应先执行设备开/关,接着将最新的设备开关状态通过调用5.1节接口上传至云端。



传输自定义数据

透传自定义数据


  • 可透传任意格式自定义数据,请与app开发者自行约定

  • 手机端在线,云端不保存数据,直接转发至手机

  • 手机端离线,云端最多会保存20条数据,待手机上线时发送,发送后清空

iot_s32 iot_tx_data ( const char sub_id[32],  iot_u32* data_seq,  iot_u8* data,  iot_u32 data_len );
参数             说明
sub_id 硬件单品:NULL
网关自身数据:NULL
子设备数据:自定义的子设备id,仅限字母数字组合
data_seq 传出参数,本条数据的序列号,如果需要确定数据何时上传成功,可记录此发送序列号,与收到的进行对比。
data 字符形式、二进制形式、特殊字符的自定义数据
data_len 自定义数据长度
返回值 0:成功;
-1:失败


接收自定义数据


  • 接收来自app的透传数据,格式请与app开发者自行约定

  • 设备在线,云端收到app数据后,直接透传至设备

  • 设备离线,云端最多会保存20条app数据,待设备上线时发送,发送后清空

    回调函数中不可执行太多耗时代码。

void iot_rx_data_cb ( char sub_id[32],  iot_u32 data_ timestamp ,  iot_u8 * data,  iot_u32 data_len );
参数             说明
sub_id 硬件单品:NULL网关自身数据:NULL子设备数据:自定义的子设备id,仅限字母数字组合
data_timestamp 时间戳,云端收到本条数据的时间点,如果不需要过期消息可以通过时间戳过滤掉
data 自定义数据,仅支持字符型
data_len 自定义数据长度
Copyright & copy qinglianyun all right reserved,powered by Gitbook该文件修订时间: 2021-04-22 18:53:48

results matching ""

    No results matching ""