【已解决】中控获取传感器数据异常

网关设备, 语音中控设备等
Post Reply
chenql
Posts: 15

SDK版本:ty_integrated_sdk-TuyaOS2.3.5_ty_integrated_sdk_3.4.4_linux_rockchip_rk3308_release_0.0.8
问题现象:中控出现概率性获取不到传感器数据的问题,dp获取的接口调用并没有出现报错,这个操作在测试时是在open拿到节点后直接获取电量的dp
获取动作并没有报错,但是返回的结果都是0,实际上传感器的电量数据并不是0
log:见附件,附件里有上电后,同步之后获取传感器电量的调用,在open后就去获取该传感器的电量
中控ID:6c4d72e64f05c9bc07ffko 中控
传感器ID:6ce3a3b1f3e52bd1faz3ov 人体红外传感器 账号下并不止一个传感器,其他传感器都是拿不到的

Attachments
sensor_log.txt
(1.97 MiB) Downloaded 114 times
lightthgil
Posts: 41

Re: 中控获取传感器数据异常

错误原因:在设备同步推送前提前open,导致未获取到人体传感器的特性数据。
注意事项:tuya_home_ctrl_dev_open需要在获取到数据后调用,即tuya_home_init_ex注册进来的cbs.all_info_sync_cb之后调用。
问题分析:
16606行推送了设备同步完成。但是6ce3a3b1f3e52bd1faz3ov最早在11412行就open了,之后一直没有close。
然后在27372行和27816行进行了第二次和第三次open。并在第三次打印了人体传感器的数据
错误原理:
由于tuya_home_ctrl_dev_open支持同时open多个设备,为了防止内存的无限扩张,实际多次open指向了同一块内存,即第一次open的内存。第一次由于在同步数据之前获取,导致设备的基础数据,包括指令集没有没有获取到。后续即使收到了dp更新,由于没有指令集,所以数据也不会更新
解决方法:

  1. 方案一:统一在cbs.all_info_sync_cb之后再open
  2. 方案二:在收到cbs.all_info_sync_cb之后,把之前open的全部close掉,再重新open
    推荐使用方案一
chenql
Posts: 15

Re: 中控获取传感器数据异常

代码的逻辑里面是会在收到同步后在调用close之后再open一次的,这里应该是符合步骤二的流程

chenql
Posts: 15

Re: 中控获取传感器数据异常

你上面提到的第三次open之后能拿到数据,这里虽然能拿到数据,但是数据是不对的,我这里是获取了电量百分比的数据
这个设备正常的时候是有正确的电量值的,而这里在不报错的前提下,拿到的电量值都是0

lightthgil
Posts: 41

Re: 中控获取传感器数据异常

第三次open之后拿到的数据是错的原因见“错误原理”
使用列出的“解决方法”解决

Post Reply