Что я хочу делать:
Я хочу подключить свой Raspberry Pi 2 к Bluetooth Smart Weight Scale (Medisana BS440) и получить свои данные.
Что я знаю:
Есть только одна интересная первичная услуга с 5 характеристиками:
- handle: 0x001a
- properties: 0x20 (Indication), char value handle: 0x1b uuid:00008a21-0000-1000-8000-00805f9b34fb
- handle: 0x001d
- properties: 0x20 (Indication), char value handle: 0x1e uuid:00008a22-0000-1000-8000-00805f9b34fb
- handle: 0x0020
- properties: 0x02 (Read-Only), char value handle: 0x21 uuid:00008a20-00..
- handle: 0x0022
- properties: 0x08 (Write-Only), char value handle: 0x23 uuid:00008a81-00..
- handle: 0x0024
- properties: 0x20 (Indication), char value handle: 0x25 uuid:00008a82-00..
Я использовал HCI-Snoop-Developer-Funktion своего Android-телефона, чтобы увидеть, как соответствующее приложение взаимодействует с моими весами.
- Записать 0200 -> 0x1f (включить индикацию 0x1d)
- читать 0x21 -> 0x21 (значение: 37fb)
- написать 0200 -> 0x1c (включить индикацию 0x1a)
- написать 0200 -> 0x26 (включить индикацию 0x24)
- напишите 02a31e2c0b -> 0x23 (я не совсем понимаю это здесь, но я знаю, если вы берете байты после 02 (a3 1e 2c 0b -> 0b 2c 1e a3 -> это текущая временная метка Unix, но для года? 1975?)
после шага 4. появляется первая индикация (дескриптор 0x25), которая дает мне сохраненные личные данные обо мне (мой рост, пол, возраст и т. д.)
после шага 5. есть некоторые индикации (дескриптор 0x1b и дескриптор 0x1e), которые должны передавать мои измеренные данные. (В это время не анализировал шестнадцатеричные значения)
Что я сделал:
Я установил bluez.5.32 на свой raspi (ядро 4.1.13) и выполнил шаги 1–5 с помощью gatttool, и все работает нормально до шага 5. Я не получаю любые сообщения-индикации от дескриптора 0x1b и 0x1e) После шага 5 ничего не происходит.
gatttool -t random -b DE:70:4A:XX:XX:XX -I
char-write-cmd 0x1f 0200
char-read-hnd 0x21 (37fb)
char-write-cmd 0x1c 0200
char-write-cmd 0x26 0200
char-write-cmd 0x23 0000000000
(Я даже делаю то же самое с unix-timestamp-for 1975 .. не получилось)
Спустя миллиарды часов у меня на распи работал bluetoothctl (возникла проблема с dbus), и я попробовал то же самое с bluetoothctl. Я включил все индикации и записал 0000000000 в hnd = 0x23. Переключился на дескриптор 0x1a, и все заработало! Я получаю много шестнадцатеричных значений, которые должны быть данными, которые я ищу.
Так в чем проблема? Я хочу использовать gatttool для своих целей или, по крайней мере, я хочу понять, почему это не сработало с gatttool
Когда я использую bluetoothctl, я просто могу выбрать и посмотреть один атрибут, и после получения данных мои весы автоматически отключаются от моей малины. Поэтому, когда я выбираю характеристику 0x1a, я не могу видеть сообщения индикации характеристики 0x01d и наоборот.
Есть ли другое соединение между моим Pi и моей шкалой, когда я использую gatttool или когда я использую bluetoothctl? Или есть разница в том, как они взаимодействуют с моей шкалой?