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

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
Post Reply
梁修道
Posts: 41

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

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

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

一线长天
Posts: 53

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

低功耗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;
}
梁修道
Posts: 41

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

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

梁修道
Posts: 41

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

一线长天 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,很奇怪,拿不到正确的值,有什么原因?

愚者千虑必有一得
Posts: 432

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

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

梁修道
Posts: 41

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

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

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

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

愚者千虑必有一得
Posts: 432

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

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

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

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

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

企业微信截图_16727160981716.png
Post Reply