我如何确定使用我的电脑通过蓝牙与我的智能体重秤进行通信所需的蓝牙命令?

逆向工程 安卓 linux 蓝牙 智能设备
2021-06-13 01:31:54

我有一个 Tanita-BC401 智能秤。该秤通过蓝牙与“My Tanita”应用程序配对。

我在我的 Android 手机中启用了“Bluetooth HCI Snoop Log”开发人员选项,并在应用程序中完成了配对程序。我先按秤上的“配对”,秤上的显示显示“配对”符号,然后我在应用程序中单击“配对”。使用 Wireshark,我看到配对时手机和秤之间的以下交互:

(1) Phone -> Scale: Sent Write request to Handle 0x0011, Value: 0100

(2) Scale -> Phone: Rcvd Write Response, Handle 0x0011

(3) Phone -> Scale: Sent Read Request, Handle 0x0011

(4) Scale -> Scale: Rcvd Read Response, Handle 0x0011

(5) Phone -> Scale: Sent Write Command, Handle 0x0013, Value: 0000000e000c00106a321f3b6a330031140b

(6) Scale -> Phone: Rcvd Handle Value Notification, Handle 0x0010

(7) Phone -> Scale: Sent Write Command, Handle 0x0013, Value 000000060004002000db

此时,显示屏上的刻度不再显示配对符号,而是显示“0.0 kg”。如果我站在它上面,它会通过句柄 0x0010 通知测量值。

我现在想使用我的计算机 (Arch Linux) 复制应用程序的操作,以便我能够在 Handle 0x0010 上收到通知。但我不确定如何复制配对步骤​​。当我尝试配对时,我无法去掉配对标志。

如果我通过“bluetoothctl”连接到秤,我可以看到以下特征:

[NEW] Primary Service (Handle 0x8ff1)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0008
        00001801-0000-1000-8000-00805f9b34fb
        Generic Attribute Profile
[NEW] Primary Service (Handle 0x8ff1)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009
        273e5100-6b90-4779-83b8-b8bf1dadac35
        Vendor specific
[NEW] Characteristic (Handle 0x5ece)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000a
        273e510f-6b90-4779-83b8-b8bf1dadac35
        Vendor specific
[NEW] Descriptor (Handle 0xa280)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000a/desc000c
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
[NEW] Characteristic (Handle 0x5ece)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000d
        273e5108-6b90-4779-83b8-b8bf1dadac35
        Vendor specific
[NEW] Characteristic (Handle 0x5ece)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000f
        273e510e-6b90-4779-83b8-b8bf1dadac35
        Vendor specific
[NEW] Descriptor (Handle 0xa320)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char000f/desc0011
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
[NEW] Characteristic (Handle 0x5ece)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char0012
        273e5107-6b90-4779-83b8-b8bf1dadac35
        Vendor specific
[NEW] Characteristic (Handle 0x5ece)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char0014
        273e510d-6b90-4779-83b8-b8bf1dadac35
        Vendor specific
[NEW] Descriptor (Handle 0x9e20)
        /org/bluez/hci0/dev_BC_82_5D_0D_7F_E0/service0009/char0014/desc0016
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration

这些特征都没有句柄 0x0011 或 0x0013。

相反,如果我使用 btgatt-client 连接到秤,我可以看到相同的服务和特征,但具有不同的句柄:

service - start: 0x0001, end: 0x0007, type: primary, uuid: 00001800-0000-1000-8000-00805f9b34fb
          charac - start: 0x0002, value: 0x0003, props: 0x02, ext_props: 0x0000, uuid: 00002a00-0000-1000-8000-00805f9b34fb
          charac - start: 0x0004, value: 0x0005, props: 0x02, ext_props: 0x0000, uuid: 00002a01-0000-1000-8000-00805f9b34fb
          charac - start: 0x0006, value: 0x0007, props: 0x02, ext_props: 0x0000, uuid: 00002a04-0000-1000-8000-00805f9b34fb

service - start: 0x0008, end: 0x0008, type: primary, uuid: 00001801-0000-1000-8000-00805f9b34fb

service - start: 0x0009, end: 0xffff, type: primary, uuid: 273e5100-6b90-4779-83b8-b8bf1dadac35
          charac - start: 0x000a, value: 0x000b, props: 0x10, ext_props: 0x0000, uuid: 273e510f-6b90-4779-83b8-b8bf1dadac35
                  descr - handle: 0x000c, uuid: 00002902-0000-1000-8000-00805f9b34fb
          charac - start: 0x000d, value: 0x000e, props: 0x04, ext_props: 0x0000, uuid: 273e5108-6b90-4779-83b8-b8bf1dadac35
          charac - start: 0x000f, value: 0x0010, props: 0x10, ext_props: 0x0000, uuid: 273e510e-6b90-4779-83b8-b8bf1dadac35
                  descr - handle: 0x0011, uuid: 00002902-0000-1000-8000-00805f9b34fb
          charac - start: 0x0012, value: 0x0013, props: 0x04, ext_props: 0x0000, uuid: 273e5107-6b90-4779-83b8-b8bf1dadac35
          charac - start: 0x0014, value: 0x0015, props: 0x10, ext_props: 0x0000, uuid: 273e510d-6b90-4779-83b8-b8bf1dadac35
                  descr - handle: 0x0016, uuid: 00002902-0000-1000-8000-00805f9b34fb

在这里我可以看到句柄 0x0011 是带有 uuid 的描述符的句柄。00002902-0000-1000-8000-00805f9b34fb

如果我写“write-value 0x0011 01 00”,然后“read-value 0x0011”,我可以看到我已经成功地将01 00写入0x0011(步骤1)。

在此之后,我试图通过发送一个值为“000000060004002000db”的写命令来处理 0x0013 来复制步骤 (5),但我无法做到这一点。如果我尝试发送写入命令,则会收到错误消息:

write-value -w 0x0013 000000060004002000db

Invalid value byte: 000000060004002000db

我不确定如何进行。此时,我还没有让体重秤做出反应,它继续显示“配对”标志。如何找出我必须使用的命令?

0个回答
没有发现任何回复~