问题描述
背景
-
应用通过 BLE 5.0 连接到设备以进行简单配置/获取设备的一些信息。 (作为服务工具使用)
-
之前没有某种注册是不允许与设备通信的。因此,您可以扫描设备的二维码并询问应用程序 ID 和 PIN 码(在设备启动期间或按下按钮时)
-
可以在蓝牙堆栈级别进行连接并查看所有服务和特征,只要服务实现在中心是“未知”的情况下不会做任何有用的事情,我对此有疑问将此锁定在应用程序级别。
-
这是我的第一个蓝牙/Ble/Gatt-Server/Dbus 和应用程序开发项目。
我的设置
外围
我已经在 RaspBerry Pi4 上使用 python3/DBus 和 Bluez 5.50(仅限 ControllerMode = le)实现了 Gatt-Server /p>
我从以下示例开始:
https://github.com/Douglas6/cputemp/blob/master/cputemp.py
我还从 Apple 的以下文档中得到了一些想法:
特征权限
- 只写(有响应)到 exec。一些命令
- 只通知接收数据
配对:
中央
我有一个 iOS 应用,使用 Swift5 和 CoreBluetooth
从中心角度来看,有点像 Apple 通知中心服务的文档中所示:
我的基本沟通过程(目前对我来说效果很好)
- 应用连接到 Pi(简单配对,无需 PIN 码)
- 应用读取所有服务、特征并使用通知标志启用特征通知
- 应用程序提供一个验证码(从扫描的二维码中提取)并接收一个应用程序 ID 和一个密码并存储以备下次使用
- 请求属性 x 并接收带有当前属性 x 值的通知
我的问题、想法和问题
当第二个中心激活该特定特征的通知时,它也会收到属性 x 的信息。 Central B 使用免费应用程序扫描所有可用的服务/特征..(我使用 LightBlue for Mac 或 Beacon Grabber for iPhone)。 Central B 只是与 RaspBerry Pi 配对,不需要提供其他东西..
- 到目前为止,我在我的服务和特性实现中没有关于连接设备的上下文。我知道,我可以通过读出来读取哪个设备写入特性
dbus.ObjectPath('/org/bluez/hci0....
-
我能记住这些信息并询问设备 X 是否有一个有效的 ID 和 pin,否则我不会做任何事情。
-
有没有办法只通知特定设备?
-
有没有更好的方法来处理这个问题?
-
我可以强制断开与未注册的中心的连接吗?
-
是否有更好的方法来实现此级别的某种安全性?
我对一些想法和意见感到高兴。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)