Что я хочу сделать:Подключение к смарт/LE весовой шкале Bluetooth с Bluez/bluetoothctl/gatttool
Я хочу подключить Raspberry Pi 2 к Bluetooth Smart Weight Scale (Medisana BS440) и получить мои данные.
То, что я знаю:
Существует только один интересный Primary Service с 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-timestamp, но за год? 1975?)
после шага 4. есть первый индикатор (ручка 0x25), которые дают мне сохраненные персональные данные мне (мой рост, пол, возраст и т.д.)
после шага 5. Есть некоторые признаки (ручка 0x1b и ручку 0x1e), который должен передавать мои измеренные данные. (Не анализировать HEX-значения в это время)
Что я сделал:
Я установил 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-временной метки -в 1975 году .. не получилось)
После того, как я потратил несколько часов на работу, я начал работать над своим raspi (была проблема с dbus), и я попробовал то же самое с bluetoothctl. Я включил все показания и записал 0000000000 в hnd = 0x23. Переключился на управление 0x1a, и он сработал! Я получаю много шестнадцатеричных значений, которые должны быть данными, которые я ищу.
Так в чем проблема? Я хочу использовать gatttool для моей цели или, по крайней мере, я хочу понять, почему оно не работает с gatttool
Когда я использую bluetoothctl, я просто не могу выбрать и просмотреть один атрибут, и после получения данных, мой шкала автоматически отключается от моей малины. Поэтому, когда я выбираю характеристику 0x1a, я не могу видеть сообщения-индикаторы характеристики 0x01d и наоборот.
Есть ли еще одна связь между моим Pi и моей шкалой, когда я использую gatttool или когда я использую bluetoothctl?Или есть разница в том, как они сообщают мои масштабы?
Вы можете принять свой собственный ответ, вместо того, чтобы добавлять «РЕШЕНИЕ» в заголовок. https://blog.stackoverflow.com/2009/01/accept-your-own-answers/ – timss