基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby ESP_XuLZ » Thu Dec 01, 2022 4:05 am

接上文, tu4
tu4.png
tu4.png (154.91 KiB) Viewed 8045 times
你目前需求是使用 S3 连接 Nuki 蓝牙设备, 连接是能正常连接的, 场景1 也是正常连接,但是 Nuki 蓝牙设备作为 client 有一定的应用层逻辑,每 5s 进行应用层主动断开一次,需要搞清楚为什么主动断开?

其实这个和 交换 MTU 的操作没有关系,不交换 MTU 大家都使用 默认 23 也可以进行通信

workhard10
Posts: 18
Joined: Tue Sep 17, 2019 11:38 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby workhard10 » Thu Dec 01, 2022 8:11 am

感谢你的回复。正如你所说的,第三种场景—— Nuki Lock(Gatt Server) 和 Nuki Fob(Client) 连接(Pairing), 所发生的确实有些"不合理",但是这种"不合理"又确实"正常"存在着。我暂时也没有得到厂家的回复,为什么如此。我会就此继续询问。

至于场景1中的每5s为什么会主动断开,我目前从三个场景的Wireshark观察,能得到的唯一比较结论就是:
-->1. 场景1缺失"MTU exchange"过程,
-->2. 从而导致Update connection params status = 15, 即: "ESP_BT_STATUS_PARAM_OUT_OF_RANGE" 发生
-->3. 从而导致Nuki Lock(Gatt Server) 和 Nuki Fob(Client) 连接(Pairing) 失败,
-->4 从而导致 disconnect reason 0x13, disconnect reason 0x13 即: Remote User Terminated Connection (见 ESP32S3 Gatt Server - Nuki Fob 日志.txt 截图1)
ESP32S3 Gatt Server - Nuki Fob 日志 截图1.JPG
ESP32S3 Gatt Server - Nuki Fob 日志 截图1.JPG (49.05 KiB) Viewed 8006 times
-->5 断开后,Nuki Fob 又重复尝试连接(Pairing),重复 上面 1到 4 的过程
直到我打开Nuki Fob电池盖结束这个无限循环的过程,从而发生了 0x08 Connection Timeout(见 ESP32S3 Gatt Server - Nuki Fob 日志.txt 截图2)
ESP32S3 Gatt Server - Nuki Fob 日志 截图2.JPG
ESP32S3 Gatt Server - Nuki Fob 日志 截图2.JPG (50.15 KiB) Viewed 8006 times
上面是我分析的思路,解决场景1缺失"MTU exchange"过程的关键,就是缺失"MTU exchange Request" 从 Server/Slave发出去。好了,我就停在这个点上了,这么些天就这苦想这个问题了。我也没有别的思路了。

我与Nuki的厂家也沟通过,也是上面的思路,得出的结果也是: 缺失"MTU exchange Request" 从 Server/Slave发出, 但是他们也没有过多解释,为什么那么不寻常,为什么"MTU exchange Request" 从 "Server/Slave" 发出给 "Client/Master".

上面这些就是我的分析思路了,接下来我不确定该向哪个方向分析了,或者该怎么解决这个问题了。
希望你们能给一些建议了。

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby ESP_XuLZ » Fri Dec 02, 2022 9:17 am

如果你要使用 slave 进行发 exchange MTU request 的包,可以参考下附件中这个示例
gattc_gatts_coex.zip
(11.84 KiB) Downloaded 574 times
使用方法是手机 APP 如BLE 调试助手搜索到 “ESP_GATTS_DEMO”广播进行连接,并进行抓包,从抓包中可以看到是由 slave 发出的 exchange MTU request 的包
企业微信截图_20221202170734.png
企业微信截图_20221202170734.png (84.3 KiB) Viewed 7992 times
你实际应用中可以参考这个进行更改,

workhard10
Posts: 18
Joined: Tue Sep 17, 2019 11:38 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby workhard10 » Fri Dec 02, 2022 11:02 am

好的,谢谢,我尝试一下。

workhard10
Posts: 18
Joined: Tue Sep 17, 2019 11:38 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby workhard10 » Mon Dec 05, 2022 7:48 am

ESP_XuLZ wrote:
Fri Dec 02, 2022 9:17 am
如果你要使用 slave 进行发 exchange MTU request 的包,可以参考下附件中这个示例gattc_gatts_coex.zip
使用方法是手机 APP 如BLE 调试助手搜索到 “ESP_GATTS_DEMO”广播进行连接,并进行抓包,从抓包中可以看到是由 slave 发出的 exchange MTU request 的包
企业微信截图_20221202170734.png
你实际应用中可以参考这个进行更改,
你好,我参考了你的例子做了修改,达到了我想要的目的,非常感谢你们的帮助!!

workhard10
Posts: 18
Joined: Tue Sep 17, 2019 11:38 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby workhard10 » Sat Dec 10, 2022 12:04 am

你好,基于gattc_gatts_coex的例子,我修改了自己的Project, 我在进行pairing的设置中开始一切都还顺利,ESP32S3 和 Nuki Fob 之间的 来回 pairing过程大概有20多个步骤,我在进行到step6, ESP32S3已经收到Nuki Fob返回数据时(红色标注),就发生了错误,就断开了,不在继续Pairing了,附件里完整的日志,这是怎么回事? 期待你们的回答。
Pairing断开.JPG
Pairing断开.JPG (169.35 KiB) Viewed 7874 times
Pairing 断开完整日志.txt
(10.85 KiB) Downloaded 398 times

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby ESP_XuLZ » Mon Dec 12, 2022 3:13 am

这个是对端Nuki Fob client 发给 S3 server 的数据,我们也不理对端行为和那些数据代表啥,需要你去研究下
那个断开是 0x08 超时断开,你抓下包看看是不是有一端在监督超时时间内没有回复包,抓包文件也可以发下

workhard10
Posts: 18
Joined: Tue Sep 17, 2019 11:38 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby workhard10 » Mon Dec 12, 2022 8:30 am

你好,谢谢回复!是我自己眼拙,没注意到,一个小问题引起的"0x08 超时断开", 已经解决了。

现在我有一个新的问题,在这个项目里,我们目前一直讨论都是围绕着pairing这个话题,作为 Server 端的ESP32S3(模拟Nuki Lock)自身要产生 一对 key(public key, privat key). 且各自都是32bytes长度的 key。 即:

Code: Select all

 public_key[32] = {....};  privat_key[32] = {.....}
这两个 Key 在后面的Pairing 过程中的各种加密算法要用到的。这里 加密 有用到如下 函数:

crypto_scalarmult_curve25519(s,sk,pk)
crypto_core_hsalsa20(k,_0,s,sigma)
HMAC-SHA256
crypto_secretbox_xsalsa20poly1305 (c,m,mlen,n,k)

我以为我用简单的 random 函数 , 比如 esp_fill_random(), 生成 public/privat Key, 就能解决此问题,事实并非如此,会导致后面的pairing 过程,加密pairing演算出错,对不上。

我看了一个Nuki 公司提供的一个 Nuki Lock 模拟程序,但是用 JS 写的,关于 public key 和 privat key 的生成处理 如下

Code: Select all

   var slKeys = new sodium.Key.ECDH();
    keys.slPk = slKeys.pk().get();
    keys.slSk = slKeys.sk().get();
   
他们似乎用到了一个 ECDH() 函数,我查了一下,是一种protocol ,基于此关系生成的 public key 和 privat key.

但是我似乎没有查到在ESP32方面有关于此的应用,我的问题就是,怎样在ESP32这边生成一对 相互关联的 key(public key, privat key)?

期待你的回答。

workhard10
Posts: 18
Joined: Tue Sep 17, 2019 11:38 am

Re: 基于Gatt Server ESP32S3 和 Nuki Fob 连接 出现 ESP_BT_STATUS_PARAM_OUT_OF_RANGE 问题

Postby workhard10 » Thu Jan 12, 2023 9:16 pm

我想更新一下我这个项目的状态,和提一个问题。

先前关于ECDH() 生成 生成 public key 和 privat Key 的问题,我找到了,用如下函数就可以了,而且必须用这个函数生成钥匙对,否则影响加密过程。
  1. #inlcude <crypto_box.h>
  2. //generate SL public key and SL secret key
  3. crypto_box_keypair(SLpublicKey, SLsecretKey);
这里我想再提一个问题,我已经基于 Nuki 的Authorize App例子(Nuki Smart Lock API V2.1 74页),完成了 Pairing过程,我以为,当我按下Nuki Fob 的按键,会有什么发生在 Terminal, 但是遗憾的是没有,什么都没有发生。附件里是 Log 文件 和 Nuki Smart Lock API V2.1
original.txt
(32.12 KiB) Downloaded 432 times
20200316NukiSmartLockAPI2_1 (1).pdf
(366.9 KiB) Downloaded 438 times
我想实现,当我按下Nuki Fob 按钮的时候,能够触发 一个GPIO Pin, 使其 HIGH 或者 LOW。

我不知道缺失了什么,应该如何继续下去了,期待你们的回复和专业提示。谢谢!!!

Who is online

Users browsing this forum: Google [Bot] and 25 guests