如何在Linux中保持与蓝牙LE浴室秤的连接

3
我刚刚获得了一台蓝牙LE/智能体脂秤(型号Sanitas SBF 70)。我可以使用以下命令读取它的数据:
gatttool --device=(btaddr) -I connect
当我站在上面时,会收到多个通知消息,例如:"Notification handle = 0x002e value: e7 58 01 05 e9",其中最后两个字节是50g的重量。
我想将其集成到几个应用程序中,使用TCP或UDP套接字服务向任何正在侦听的客户端广播这些消息。但是,在研究了一些后,我不知道保持连接始终处于连接状态的最佳方法(连接会在几分钟后超时);或者当使用体脂秤时重新建立连接的方式(每当有人站在秤上时,我都会从'hcitool lescan'看到很多活动)。我不关心使用哪种语言/库。如果我可以将其推送到TCP/UDP套接字上,其他应用程序就可以轻松地消费信息。

这是一个非常广泛的问题。在担心长时间保持连接之前,您应该首先让您的基本连接和数据读取代码正常工作。如果你真正想要了解如何连接到设备、读取数据并将其推送到IP套接字的基本代码,那么或许可以直接询问相关内容。 - kaylum
1个回答

1
答案很简单:你不需要。 你的秤很可能是电池供电的。因此,蓝牙通信只在测量完体重后的短时间内启用。你的应用程序只需要一遍又一遍地尝试连接秤(捕捉任何“无法连接超时”),直到你站上去为止。当连接成功后,在BLE再次关闭之前获取数据。伪代码如下:
while true:
  while not_connected:
    try to connect
  receive notifications
  disconnect

使用Python模块 pygatt封装的gatttool可完美解决此挑战。在我的情况下,启用3个不同特征的指示后,传输了30个先前的重量比例数据。

你可能想要查看这个问题 - Keptenkurk
我对这种方法的担忧是它会在短时间内耗尽电池。每当我尝试连接时,它都会成功。但是当我被动地查看蓝牙流量(不传输或与秤交互)时,我发现当我站在上面时,秤会发送大量数据包。所以我想到了这样的方法:被动监视蓝牙接口是否有来自秤MAC地址的数据包。如果检测到,则(仅在此情况下)尝试连接。 - jdesbonnet
这与我的BS440秤的工作方式完全不同。pygatt模块还包装了hcitool lescan。因此,像这样的代码:adapter = pygatt.backends.GATTToolBackend() // adapter.start() // adapter.scan()并且只有在秤出现活动时才连接。很有趣知道当踩在秤上时,您看到的hcitool lescan的活动是什么。 - Keptenkurk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接