Page 1 of 1

【已同步-低功耗DP缓存需要面板修改】BK7231NL 低功耗传感器开发 DP下发收不到如何改

Posted: 2022年 Dec 14日 10:11
by 梁修道

你好 我们WiFi低功耗传感器有个自定义DP需要下发,产品设计上是app设置后,需要用户按一下设备按键,就可以同步下发数据

但是,我们发下 下列函数 没有收到下发数据
VOID dev_obj_dp_cb(IN CONST TY_RECV_OBJ_DP_S *dp)

需要实现这个功能的话,如何做呢?谢谢


Re: BK7231NL 低功耗传感器开发 DP下发收不到如何改

Posted: 2022年 Dec 14日 10:19
by 一线长天

低功耗DP,需要应用主动通过如下API从云端拉取下来

Code: Select all

/**
 * @brief Query dp for low power
 *
 * @param[in] dps: dp string
 * @param[in] cnt: dp count
 * @param[out] obj_dps: dp in object format
 * @param[out] raw_dps: dp in raw format
 *
 * @note This API is used for quering dp for low power
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET sf_dp_low_power_query(IN CONST UCHAR_T *dps, IN CONST UINT_T cnt,
                                  OUT TY_RECV_OBJ_DP_S **obj_dps, OUT TY_RECV_RAW_DP_S **raw_dps);

示例如下

Code: Select all

OPERATE_RET op_ret = OPRT_OK;
UCHAR_T dps = [1,3,4,6,7]; //想要从云端拉取的dp id列表,由应用决定
UINT_T cnt = CNTSOF(dps), i = 0;
TY_RECV_OBJ_DP_S *obj_dps = NULL; 
TY_RECV_RAW_DP_S *raw_dps = NULL; //只会返回一个raw型dp

op_ret = sf_dp_low_power_query(dps, cnt, &obj_dps, &raw_dps);
if(op_ret !=  OPRT_OK) {
	TAL_PR_ERR("sf_dp_low_power_query err:%d", op_ret );
	return;
}
/*
* TODO:根据应用场景,处理返回的dp列表
* 与正常的dp指令,即DEV_OBJ_DP_CMD_CB以及DEV_RAW_DP_CMD_CB的处理类似
*/
if(obj_dps) {
	for(i=0; i<obj_dps->dps_cnt; i++) {
		TAL_PR_DEBUG("obj dpid:%d tp:%d", obj_dps->dps[i].dpid,  obj_dps->dps[i].type);
	}
}

if(raw_dps) {
	TAL_PR_DEBUG("raw dpid:%d ", raw_dps->dpid);
}

if(obj_dps) {
	Free(obj_dps), obj_dps = NULL;
}

if(raw_dps) {
	Free(raw_dps), raw_dps= NULL;
}

Re: BK7231NL 低功耗传感器开发 DP下发收不到如何改

Posted: 2022年 Dec 14日 11:24
by 梁修道

好的 是否在按键唤醒后且wifi连接上的情况下 去调用?


Re: BK7231NL 低功耗传感器开发 DP下发收不到如何改

Posted: 2022年 Dec 14日 21:20
by 梁修道
一线长天 2022年 Dec 14日 10:19

低功耗DP,需要应用主动通过如下API从云端拉取下来

Code: Select all

/**
 * @brief Query dp for low power
 *
 * @param[in] dps: dp string
 * @param[in] cnt: dp count
 * @param[out] obj_dps: dp in object format
 * @param[out] raw_dps: dp in raw format
 *
 * @note This API is used for quering dp for low power
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET sf_dp_low_power_query(IN CONST UCHAR_T *dps, IN CONST UINT_T cnt,
                                  OUT TY_RECV_OBJ_DP_S **obj_dps, OUT TY_RECV_RAW_DP_S **raw_dps);

示例如下

Code: Select all

OPERATE_RET op_ret = OPRT_OK;
UCHAR_T dps = [1,3,4,6,7]; //想要从云端拉取的dp id列表,由应用决定
UINT_T cnt = CNTSOF(dps);
TY_RECV_OBJ_DP_S *obj_dps = NULL; 
TY_RECV_RAW_DP_S *raw_dps = NULL; //只会返回一个raw型dp

op_ret = sf_dp_low_power_query(dps, cnt, &obj_dps, &raw_dps);
/*
* TODO:根据应用场景,处理返回的dp列表
* 与正常的dp指令,即DEV_OBJ_DP_CMD_CB以及DEV_RAW_DP_CMD_CB的处理类似
*/
Free(obj_dps);
Free(raw_dps);
wecom-temp-a69e275c2df574ea39a4fa46afaa7888.png

我们这样写到的代码

wecom-temp-7b5abd8a99d5b8a5107bbf1f41e24f41.png

结果返回的dpid是20,很奇怪,拿不到正确的值,有什么原因?


Re: BK7231NL 低功耗传感器开发 DP下发收不到如何改

Posted: 2022年 Dec 16日 17:43
by 愚者千虑必有一得

log发一下,看这好像是没获取到数据。这个功能好像是要面板也要处理的。


Re: BK7231NL 低功耗传感器开发 DP下发收不到如何改

Posted: 2022年 Dec 26日 17:29
by 梁修道
愚者千虑必有一得 2022年 Dec 16日 17:43

log发一下,看这好像是没获取到数据。这个功能好像是要面板也要处理的。

log就是上面哪些,监听下发是这个函数吗?或者是有其他方法?
APP端需要如何配合呢


Re: BK7231NL 低功耗传感器开发 DP下发收不到如何改

Posted: 2023年 Jan 3日 11:11
by 愚者千虑必有一得
梁修道 2022年 Dec 26日 17:29
愚者千虑必有一得 2022年 Dec 16日 17:43

log发一下,看这好像是没获取到数据。这个功能好像是要面板也要处理的。

log就是上面哪些,监听下发是这个函数吗?或者是有其他方法?
APP端需要如何配合呢

默认情况下,DP下发是通过MQTT的;
低功耗情况下,面板上要把需要的DP,通过一个接口,缓存起来,然后设备上通过这个sf_dp_low_power_query去查询。

企业微信截图_16727160981716.png