【已解决】涂鸦BLE配网成功率问题

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
dongyun
Posts: 17

整个log 是 很多次 配网测试的,不是一次测试log。只有 3600 行 的位置,是配网失败的log,

愚者千虑必有一得
Posts: 501

Re: 【求助】涂鸦BLE配网成功率问题

dongyun 2022年 Nov 22日 16:00

整个log 是 很多次 配网测试的,不是一次测试log。只有 3600 行 的位置,是配网失败的log,

3600只是一个蓝牙断开,原因可能要你们加一下协议栈错误码的打印。
另外,我看的日志,确实有多次配网,但是没有一次配网是成功的,我们的配网是以mqtt上线作为成功的标志,你这个log都没拿到云端服务的域名和ip,都没激活呢。

企业微信截图_16691077646855.png
dongyun
Posts: 17

Re: 【求助】涂鸦BLE配网成功率问题

愚者千虑必有一得 2022年 Nov 22日 16:50
dongyun 2022年 Nov 22日 16:00

整个log 是 很多次 配网测试的,不是一次测试log。只有 3600 行 的位置,是配网失败的log,

3600只是一个蓝牙断开,原因可能要你们加一下协议栈错误码的打印。
另外,我看的日志,确实有多次配网,但是没有一次配网是成功的,我们的配网是以mqtt上线作为成功的标志,你这个log都没拿到云端服务的域名和ip,都没激活呢。

这个 蓝牙断开,已经用 sniffer抓包确认了,是App主动发起的 Terminate,也就是说 App 是等待超时后才断开的。
在App发送Terminate之前的十几秒,蓝牙通信是一直正常的,只是没有数据交互,都是空包而已。

而 IPC SDK这边,看起来是 一直等到打印 gethostbyname error 之后,才继续打印,后面发送了很多数据给APP。
是不是说 这个卡顿期间,实际上是被 gethostbyname 阻塞了无法运行,直到error,才能继续运行?

只要能成功拿到 ssid/pwd 就行, 后面连接云服务器,应该是和 路由器/防火墙 之类的有关。

愚者千虑必有一得
Posts: 501

Re: 【求助】涂鸦BLE配网成功率问题

dongyun 2022年 Nov 22日 17:08
愚者千虑必有一得 2022年 Nov 22日 16:50
dongyun 2022年 Nov 22日 16:00

整个log 是 很多次 配网测试的,不是一次测试log。只有 3600 行 的位置,是配网失败的log,

3600只是一个蓝牙断开,原因可能要你们加一下协议栈错误码的打印。
另外,我看的日志,确实有多次配网,但是没有一次配网是成功的,我们的配网是以mqtt上线作为成功的标志,你这个log都没拿到云端服务的域名和ip,都没激活呢。

这个 蓝牙断开,已经用 sniffer抓包确认了,是App主动发起的 Terminate,也就是说 App 是等待超时后才断开的。
在App发送Terminate之前的十几秒,蓝牙通信是一直正常的,只是没有数据交互,都是空包而已。

而 IPC SDK这边,看起来是 一直等到打印 gethostbyname error 之后,才继续打印,后面发送了很多数据给APP。
是不是说 这个卡顿期间,实际上是被 gethostbyname 阻塞了无法运行,直到error,才能继续运行?

只要能成功拿到 ssid/pwd 就行, 后面连接云服务器,应该是和 路由器/防火墙 之类的有关。

蓝牙断开的问题,你再遇到的时候,把app日志上传一下,我找app的人帮你看看。

另外,gethostbyname实际是在拿到ssid passwd才会调用,是系统函数,去h2.iot-dns.com去获取atop、mqtt的域名,然后再去激活。而且我理解应该不会阻塞的,蓝牙协议、tcp&ip是独立的体系。

BTW:你们用的是tuya ipc的sdk,适配的自己的芯片?是linux系统?还有一个点我比较奇怪,我们的设备配网之后,蓝牙配网这样的是会退出的,需要设备重置才能再次配网,我从你那log看,你的设备好像是可以一直配网。

dongyun
Posts: 17

Re: 【求助】涂鸦BLE配网成功率问题

app使用的是公版app: 涂鸦智能。不知道怎么获取app的log。

我又重新抓了2次log:一次成功(只看是否拿到ssid/pwd),一次超时。
成功的log分析,在419行 成功拿到 ssid/pwd:

配网成功sniffer分析1.jpg
配网成功sniffer分析2.jpg
配网成功log分析.jpg

============================================================================================
超时的log分析,204行 BLE断开连接,225行 IPC SDK才继续运行:

配网超时sniffer分析1.jpg
配网超时sniffer分析2.jpg
配网超时log分析.jpg

通过分析 成功 和 失败的log,基本能看出来,IPC SDK是被阻塞了,至于是不是被 gethostbyname 阻塞的,不确定。
另外 IPC SDK 一开机就开始 执行 gethostbyname 了,不管有没有配网,都会执行它。

log 和 抓包 原始文件

tuya BLE配网成功#1.log
(45.41 KiB) Downloaded 168 times
tuya BLE配网超时#1.log
(19.96 KiB) Downloaded 170 times
tuya BLE配网抓包.zip
(104.31 KiB) Downloaded 192 times
愚者千虑必有一得
Posts: 501

Re: 【求助】涂鸦BLE配网成功率问题

能够告诉我一下,你们是怎么连续配置蓝牙配网的吗?我们的配网每次失败要重置才能重新配网的。而且连接到云端激活之后才算配网成功的。

log我找内部同事看看,稍等给你回复。

hearge
Posts: 39

Re: 【求助】涂鸦BLE配网成功率问题

dongyun 2022年 Nov 23日 16:47

app使用的是公版app: 涂鸦智能。不知道怎么获取app的log。

我又重新抓了2次log:一次成功(只看是否拿到ssid/pwd),一次超时。
成功的log分析,在419行 成功拿到 ssid/pwd:

配网成功sniffer分析1.jpg
配网成功sniffer分析2.jpg
配网成功log分析.jpg

============================================================================================
超时的log分析,204行 BLE断开连接,225行 IPC SDK才继续运行:

配网超时sniffer分析1.jpg
配网超时sniffer分析2.jpg
配网超时log分析.jpg

通过分析 成功 和 失败的log,基本能看出来,IPC SDK是被阻塞了,至于是不是被 gethostbyname 阻塞的,不确定。
另外 IPC SDK 一开机就开始 执行 gethostbyname 了,不管有没有配网,都会执行它。

log 和 抓包 原始文件

tuya BLE配网成功#1.log
tuya BLE配网超时#1.log
tuya BLE配网抓包.zip

------从log里,设备端ble数据一直没有下发。等到断连之后才有数据打印。如果怀疑是阻塞,可以间隔2s打印下当前活跃的task。看下是哪个task在占用?

dongyun
Posts: 17

Re: 【求助】涂鸦BLE配网成功率问题

hearge 2022年 Nov 28日 15:57
dongyun 2022年 Nov 23日 16:47

app使用的是公版app: 涂鸦智能。不知道怎么获取app的log。

我又重新抓了2次log:一次成功(只看是否拿到ssid/pwd),一次超时。
成功的log分析,在419行 成功拿到 ssid/pwd:
配网成功sniffer分析1.jpg
配网成功sniffer分析2.jpg
配网成功log分析.jpg

============================================================================================
超时的log分析,204行 BLE断开连接,225行 IPC SDK才继续运行:
配网超时sniffer分析1.jpg
配网超时sniffer分析2.jpg
配网超时log分析.jpg

通过分析 成功 和 失败的log,基本能看出来,IPC SDK是被阻塞了,至于是不是被 gethostbyname 阻塞的,不确定。
另外 IPC SDK 一开机就开始 执行 gethostbyname 了,不管有没有配网,都会执行它。

log 和 抓包 原始文件
tuya BLE配网成功#1.log
tuya BLE配网超时#1.log
tuya BLE配网抓包.zip

------从log里,设备端ble数据一直没有下发。等到断连之后才有数据打印。如果怀疑是阻塞,可以间隔2s打印下当前活跃的task。看下是哪个task在占用?

阻塞的话,看task没什么用的。比如 gethostbyname API , 它本身就是阻塞式调用,会阻塞挂起当前进程,这种情况去看top 没有用的。
从目前的log来看,怀疑点最大的就是被gethostbyname 阻塞了。
涂鸦SDK是否调用了 gethostbyname? 如果调用了就一定会阻塞。因为此时 还没有配网,无法访问网络,只能被阻塞等待超时。
在配网之前 是不是 不应该 去访问网络?配网成功之后再去访问应该就没问题了。

愚者千虑必有一得
Posts: 501

Re: 【求助】涂鸦BLE配网成功率问题

可能是work queue阻塞了,我们结合代码看看。

愚者千虑必有一得
Posts: 501

Re: 【求助】涂鸦BLE配网成功率问题

现在我们怀疑问题的原因是:
1,ipc sdk支持了扫码配网功能,启动的时候会去访问云端,走系统dns查询对应的ip
2,你们的网络环境导致系统dns要很久才能失败
3,蓝牙和扫码配网都是要走高优先级的队列,所以蓝牙会受到这个网络访问的影响。

我们看看怎么给你们做个改进,验证一下。

Post Reply