Сбой pygatt во время вызова char_read () при попытке подключить RPI3B + с лампой Philips Hue через BLE - PullRequest
0 голосов
/ 23 января 2020

Описание

Итак, я пытаюсь подключиться к лампе Philips Hue через BLE с моей Raspberry Pi Model 3B +. Поэтому я написал следующий скрипт python с использованием библиотеки pygatt.

Код

import pygatt

ADDRESS_TYPE = pygatt.BLEAddressType.random
CHARACTERISTIC = '932c32bd-0002-47a2-835a-a8d455b859dd'

adapter = pygatt.GATTToolBackend()

try:
    adapter.start()
    devices = adapter.scan(run_as_root=True, timeout=3)
    for entry in devices:
        if entry['name'] == 'Hue Lamp':
            try:
                device = adapter.connect(entry['address'], address_type=ADDRESS_TYPE)
                device.char_write(CHARACTERISTIC, bytearray([0x00]), wait_for_response=False)
                value = device.char_read(CHARACTERISTIC)
                device.disconnect()
            except pygatt.exceptions.NotConnectedError:
                print('Failed to connect to %s' % entry['address'])
finally:
    adapter.stop()

Поведение кода

Когда я запускаю скрипт, кажется, что соединение установлено успешно. Вызов char_write() должен выключить лампу, но ничего не происходит. Вызов char_read() вызывает исключение с отслеживанием, указанным ниже.

Отслеживание исключения

Traceback (most recent call last):
  File "main.py", line 21, in <module>
    value = device.char_read(CHARACTERISTIC)
  File "/usr/local/lib/python3.7/dist-packages/pygatt/backends/gatttool/device.py", line 17, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/pygatt/backends/gatttool/device.py", line 40, in char_read
    return self._backend.char_read(self, uuid, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/pygatt/backends/gatttool/gatttool.py", line 50, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/pygatt/backends/gatttool/gatttool.py", line 593, in char_read
    self.sendline('char-read-uuid %s' % uuid)
  File "/usr/lib/python3.7/contextlib.py", line 119, in __exit__
    next(self.gen)
  File "/usr/local/lib/python3.7/dist-packages/pygatt/backends/gatttool/gatttool.py", line 191, in event
    self.wait(event, timeout)
  File "/usr/local/lib/python3.7/dist-packages/pygatt/backends/gatttool/gatttool.py", line 157, in wait
    raise NotificationTimeout()
pygatt.exceptions.NotificationTimeout: None

Примечание

Я могу прочитать характеристики BLE лампы с pygatt. Также я могу управлять лампой через приложение NRF Connect Android. Когда я записываю в приложение вышеуказанные характеристики c значение 0x00, лампа выключается, как и ожидалось.

...