Page 1 of 2

【已解决】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 16:30
by sandia

开发平台:tuyaOS;
芯片:BK7231N;
SDK版本:ty_iot_sdk_bk7231n_2.3.3-beta.277;
问题:在每次上电(配网后)第一次执行该上报操作时能正常执行上报,但是在第二次及之后执行该上报操作时报错,错误码为-3585,DPID没有发现;
附图:Image

附代码:Image

求大神解答!


Re: wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 16:31
by sandia

相关log与IOT平台的DPID定义:

726a7ba9e1b5fa22bddb838326e1268.jpg

Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 16:34
by sandia

每次上电后第一次执行成功的log:

a7adc95f6ab5db7d61462feea1c96a1.jpg

Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 16:44
by sandia

有没有可能跟面板有关?我在IOT平台没有选择面板,配网的时候自动给了一个

6e39b8b796a286a51a9ae495b5f1e73.jpg

Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 16:50
by bamy

第一次上报成功,但是后面重复上报了相同内容的dp,导致被重复过滤,组装的报文为空,所以报了这个找不到要上报dp错误码。


Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 17:01
by sandia
bamy 2022年 Oct 14日 16:50

第一次上报成功,但是后面重复上报了相同内容的dp,导致被重复过滤,组装的报文为空,所以报了这个找不到要上报dp错误码。

我该条执行的是:如果收到DPID为5,value为真的情况下,执行上报该DPID为假;
如果我收到并执行此段代码,则说明DPID的值被改了,此时我再改回去,也会被判定重复吗?


Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 17:06
by sandia
sandia 2022年 Oct 14日 17:01
bamy 2022年 Oct 14日 16:50

第一次上报成功,但是后面重复上报了相同内容的dp,导致被重复过滤,组装的报文为空,所以报了这个找不到要上报dp错误码。

我该条执行的是:如果收到DPID为5,value为真的情况下,执行上报该DPID为假;
如果我收到并执行此段代码,则说明DPID的值被改了,此时我再改回去,也会被判定重复吗?

还是说我要把收到的DPID值原封上报回去,才能上报该DPID改变之后的值?


Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 17:17
by bamy

上报重复的值会被过滤。如果dp定义中定义了强制上报,那么不会被过滤,也会上报上去。


Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 17:20
by 愚者千虑必有一得
  • objDP 上报的时候,会对上报的数值进行过滤,相同则不予上报;
  • 如果想上报相同的 objDP,可以通过带 force 的接口上报,或者将 DP 点定义为统计类型(stat)

另外从你的逻辑上看:
1,你是上电报了flase,tuyaos会将这个flase缓存;
2,然后app发了个true,你的代码逻辑会再上报个false,此时上报的flase和tuyaos缓存的false是一致的,导致dp被过滤。
3,如果你上报true就不会过滤。

可以理解为:开关默认是关的(false)app想把开关打开(dp=6,设置为true),设备打开成功之后,给云端/app返回了开关已经打开(dp=6的值上报true)。


Re: 【求助】wifi&ble产品DPID上报失败

Posted: 2022年 Oct 14日 17:37
by sandia
愚者千虑必有一得 2022年 Oct 14日 17:20
  • objDP 上报的时候,会对上报的数值进行过滤,相同则不予上报;
  • 如果想上报相同的 objDP,可以通过带 force 的接口上报,或者将 DP 点定义为统计类型(stat)

另外从你的逻辑上看:
1,你是上电报了flase,tuyaos会将这个flase缓存;
2,然后app发了个true,你的代码逻辑会再上报个false,此时上报的flase和tuyaos缓存的false是一致的,导致dp被过滤。
3,如果你上报true就不会过滤。

可以理解为:开关默认是关的(false)app想把开关打开(dp=6,设置为true),设备打开成功之后,给云端/app返回了开关已经打开(dp=6的值上报true)。

1、app下发给我的数据是不会刷新tuyaOS缓存的,tuyaos中缓存的只是我的上报,所以会重复导致被过滤;
2、带force的接口我找到了,如何将‘DP’点定义为统计类型(‘stat’)?

感谢回复 :D