Re: 【求助】涂鸦BLE配网成功率问题
整个log 是 很多次 配网测试的,不是一次测试log。只有 3600 行 的位置,是配网失败的log,
整个log 是 很多次 配网测试的,不是一次测试log。只有 3600 行 的位置,是配网失败的log,
3600只是一个蓝牙断开,原因可能要你们加一下协议栈错误码的打印。
另外,我看的日志,确实有多次配网,但是没有一次配网是成功的,我们的配网是以mqtt上线作为成功的标志,你这个log都没拿到云端服务的域名和ip,都没激活呢。
这个 蓝牙断开,已经用 sniffer抓包确认了,是App主动发起的 Terminate,也就是说 App 是等待超时后才断开的。
在App发送Terminate之前的十几秒,蓝牙通信是一直正常的,只是没有数据交互,都是空包而已。
而 IPC SDK这边,看起来是 一直等到打印 gethostbyname error 之后,才继续打印,后面发送了很多数据给APP。
是不是说 这个卡顿期间,实际上是被 gethostbyname 阻塞了无法运行,直到error,才能继续运行?
只要能成功拿到 ssid/pwd 就行, 后面连接云服务器,应该是和 路由器/防火墙 之类的有关。
dongyun 2022年 Nov 22日 17:08这个 蓝牙断开,已经用 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看,你的设备好像是可以一直配网。
app使用的是公版app: 涂鸦智能。不知道怎么获取app的log。
我又重新抓了2次log:一次成功(只看是否拿到ssid/pwd),一次超时。
成功的log分析,在419行 成功拿到 ssid/pwd:
============================================================================================
超时的log分析,204行 BLE断开连接,225行 IPC SDK才继续运行:
通过分析 成功 和 失败的log,基本能看出来,IPC SDK是被阻塞了,至于是不是被 gethostbyname 阻塞的,不确定。
另外 IPC SDK 一开机就开始 执行 gethostbyname 了,不管有没有配网,都会执行它。
log 和 抓包 原始文件
能够告诉我一下,你们是怎么连续配置蓝牙配网的吗?我们的配网每次失败要重置才能重新配网的。而且连接到云端激活之后才算配网成功的。
log我找内部同事看看,稍等给你回复。
dongyun 2022年 Nov 23日 16:47app使用的是公版app: 涂鸦智能。不知道怎么获取app的log。
我又重新抓了2次log:一次成功(只看是否拿到ssid/pwd),一次超时。
成功的log分析,在419行 成功拿到 ssid/pwd:============================================================================================
超时的log分析,204行 BLE断开连接,225行 IPC SDK才继续运行:通过分析 成功 和 失败的log,基本能看出来,IPC SDK是被阻塞了,至于是不是被 gethostbyname 阻塞的,不确定。
另外 IPC SDK 一开机就开始 执行 gethostbyname 了,不管有没有配网,都会执行它。log 和 抓包 原始文件
------从log里,设备端ble数据一直没有下发。等到断连之后才有数据打印。如果怀疑是阻塞,可以间隔2s打印下当前活跃的task。看下是哪个task在占用?
hearge 2022年 Nov 28日 15:57dongyun 2022年 Nov 23日 16:47app使用的是公版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? 如果调用了就一定会阻塞。因为此时 还没有配网,无法访问网络,只能被阻塞等待超时。
在配网之前 是不是 不应该 去访问网络?配网成功之后再去访问应该就没问题了。
可能是work queue阻塞了,我们结合代码看看。
现在我们怀疑问题的原因是:
1,ipc sdk支持了扫码配网功能,启动的时候会去访问云端,走系统dns查询对应的ip
2,你们的网络环境导致系统dns要很久才能失败
3,蓝牙和扫码配网都是要走高优先级的队列,所以蓝牙会受到这个网络访问的影响。
我们看看怎么给你们做个改进,验证一下。