Отключение gatttool и bluepy, никаких проблем в bluetoothctl

В настоящее время используется на датчике сердечного ритма OH1 (tiny.cc/mom03y)

Я хочу подписаться на уведомление HR, используя bluepy. У меня работают уведомления, но устройство OH1 отключается примерно через 20-30 секунд как в bluepy, так и в gatttool (удаленный пользователь завершен), но не в bluetoothctl.

Ищите причину, по которой соединение остается активным в bluetoothctl, а не в bluepy или gatttool, код и hcidump ниже, используя bluez 5.50 и bluepy 1.30 на rasbian 4.14.

Блупи


#packet count
packets = 0

class hrCallback(btle.DefaultDelegate):
    def __init__(self):
        btle.DefaultDelegate.__init__(self)

    def handleNotification(self, cHandle, data):
        global packets 
        packets += 1
        print("packet: %s Handle: %s HR (bpm): %s " % (packets, cHandle, data[1]))

#connect to OH1
mac = "a0:9e:1a:4f:ef:8b"
oh1 = btle.Peripheral( mac )
oh1.setDelegate( hrCallback() )

#start hr notification
oh1.writeCharacteristic(38, b"\x01\x00", True)

#listen for notifications
while True:
    try:
        if oh1.waitForNotifications(1.0):
            continue
    except btle.BTLEDisconnectError:
            pass

hcidump

> HCI Event: Command Complete (0x0e) plen 4
    LE Set Scan Parameters (0x08|0x000b) ncmd 1
    status 0x00
> HCI Event: Command Complete (0x0e) plen 4
    LE Set Scan Enable (0x08|0x000c) ncmd 1
    status 0x00
> HCI Event: Command Complete (0x0e) plen 4
    LE Set Scan Enable (0x08|0x000c) ncmd 1
    status 0x00
> HCI Event: Command Status (0x0f) plen 4
    LE Create Connection (0x08|0x000d) status 0x00 ncmd 1
> HCI Event: Command Status (0x0f) plen 4
    LE Read Remote Used Features (0x08|0x0016) status 0x00 ncmd 1
> HCI Event: Disconn Complete (0x05) plen 4
    status 0x00 handle 64 reason 0x13
    Reason: Remote User Terminated Connection


person codem    schedule 12.03.2019    source источник
comment
используйте btmon вместо hcidump. есть ли разница между bluetoothctl и gattool ?   -  person Gal Ben-Haim    schedule 12.03.2019
comment
спасибо за предложение, btmon определенно предоставляет лучший инструмент для отладки, bluetoothctl ссылка и gatttool link отличаются. Похоже, что gatttool в текущей конфигурации имеет проблемы с пакетом ACL (строка: 113), нужно глубже исследовать, почему? У Вас есть какие-то предложения?   -  person codem    schedule 13.03.2019


Ответы (1)


Какую версию BlueZ вы используете? несколько инструментов (например, gatttool, hcitool, hciconfig) устарели и заменены bluetoothctl и btmgmt, а команда BlueZ рекомендует использовать вместо них новые инструменты. Пожалуйста, взгляните на следующую ссылку: -

Устаревшие инструменты BlueZ

Разница между новыми инструментами и старыми инструментами заключается в том, что старые инструменты могли напрямую взаимодействовать с ядром, тогда как новые инструменты вместо этого выполняют операции, взаимодействуя с D-Bus.

Поэтому рекомендуется всегда использовать bluetoothctl, поскольку старые инструменты не поддерживаются, и, вероятно, именно поэтому вы видите проблему.

person Youssif Saeed    schedule 15.03.2019