需求

cassia 的蓝牙盒子,使用 curl 时,有些产品可以连接上,有些不行,报错: device can not scan. 但是使用 js 或者 cassia 的调试工具,是可以正常使用的。比较奇怪。

解决

经过使用 http://192.168.44.35/cassia/getlog?event=1 查看日志,才发现了问题。

curl -X POST -H "content-type: application/json" -d '{"timeout":"10000","type":"public"}' "http://192.168.44.35/gap/nodes/34:25:B4:23:64:B7/connection"

中间的 json 格式的数据,在 cassia 的后台日志中,发现变成了 -d '{timeout:10000,type:public}', 双引号丢失。这就造成了,如果蓝牙产品的 type 是 public 的,那么因为默认就是 public,所以正常连接没有问题,但是如果 type 是 random,那么就连接不上。

这个是在 windows 平台的 curl 出现的问题,在 linux 平台上面没有这个问题。经过网上查找之后,发现在 win 平台,需要专门改动参数才行,包括,json 中的 " 全部要转义,而且整个 json 外面的 ' 要改为 " 才行。 所以,在 win 平台,需要按照下面这样去写才行:

curl -X POST -H "content-type: application/json" -d "{\"timeout\":\"15000\",\"type\":\"random\"}" "http://192.168.44.35/gap/nodes/D3:E9:83:63:AD:09/connection?chip=0"

参考