Page 1 of 1

【已解决】tuyaOS BK7231N_3.3.2版本DP数据蓝牙上报

Posted: 2022年 Dec 16日 10:04
by Insigma866

你好,
基于tuyaOS BK7231N_3.3.2开发的固件如何使用蓝牙上报DP点数据,在SDK中,我只找到了OPERATE_RET ty_bt_dp_report(IN CONST DP_REPT_TYPE_E dp_rept_type, IN CONST VOID_T* data);函数,如果我想实现一次上报两个DP数据该如何实现?或者有没有其他的蓝牙上报的相关接口我没有找到?谢谢!!


Re: tuyaOS BK7231N_3.3.2版本DP数据蓝牙上报

Posted: 2022年 Dec 16日 10:20
by bamy

3.3.2版本TuyaOS已经实现了通道选择的功能,DP上报接口统一使用dev_report_dp_XXX接口上报。接口中会根据当前通道(MQTT/LAN/BLE)状态及优先级定义进行选择,最终会在选定的通道上报DP。接口中可以将多个DP打包上报,具体参考接口说明。


Re: tuyaOS BK7231N_3.3.2版本DP数据蓝牙上报

Posted: 2022年 Dec 16日 10:58
by Insigma866

你好,
VOID_T update_all_dp(VOID_T)
{
OPERATE_RET op_ret = OPRT_OK;

Code: Select all

INT_T dp_cnt = 1; /* update DP number */

/* no connect router, return */
GW_WIFI_NW_STAT_E wifi_state = STAT_LOW_POWER;
get_wf_gw_nw_status(&wifi_state);
if (wifi_state <= STAT_AP_STA_DISC || wifi_state == STAT_STA_DISC) {
    return;
}

TY_OBJ_DP_S *dp_arr = (TY_OBJ_DP_S *)tal_malloc(dp_cnt*SIZEOF(TY_OBJ_DP_S));
if(NULL == dp_arr) {
    TAL_PR_ERR("malloc failed");
    return;
}

dp_arr[0].dpid = DPID_SWITCH; /* DP ID */
dp_arr[0].type = PROP_BOOL; /* DP type */
dp_arr[0].time_stamp = 0;
dp_arr[0].value.dp_bool = get_led_status(); /* DP data */

/* report DP */
op_ret = dev_report_dp_json_async(NULL ,dp_arr, dp_cnt);

/* free requested memory space */
tal_free(dp_arr);
dp_arr = NULL;
if(OPRT_OK != op_ret) {
    TAL_PR_ERR("dev_report_dp_json_async relay_config data error,err_num",op_ret);
}

return;

}
这个是你们提供的例程,按您刚刚说的是不是删除 get_wf_gw_nw_status(&wifi_state);
if (wifi_state <= STAT_AP_STA_DISC || wifi_state == STAT_STA_DISC) {
return;
}
这段代码在仅有蓝牙连接的情况下可实现数据上报?


Re: tuyaOS BK7231N_3.3.2版本DP数据蓝牙上报

Posted: 2022年 Dec 16日 11:20
by bamy

可以这样试一下。
TuyaOS默认优先级是wifi>BLE的,所以在设备mqtt链路不通的情况下,会优先选择蓝牙通道上报DP。


Re: tuyaOS BK7231N_3.3.2版本DP数据蓝牙上报

Posted: 2022年 Dec 16日 13:22
by Insigma866

谢谢,测试是可行的。