Найти в Дзене
Smart home Russia

Подключаем Bluetooth устройства к Linux

В данной публикации я расскажу о своем опыте подключения USB Bluetooth стика к серверу на Linux. Основная мысль "поспешишь-людей насмешишь". Работы было на 2 строки в терминале, но я ее превратил в незабываемый квест...

Translation to English is here. Также основной канал в telegram.

В первой части этой "трилогии" я рассказал про USB стик, ссылку на данную статью можно найти ниже:

Я думал, что смогу просто подключить стик в сервер и все чудесным образом заработает, но ничего не произошло. Причин этому было много, и неверная интеграция, и отсутствие необходимого ПО на сервере.

Во-первых, я установил стик в сервер. Далее я выполнил команду ls /dev/

Я не увидел ничего особенного в списке устройств, а также извлечение стика из сервера не давало никакой разницы. Ок, я начал свои поиски и набрел на команду lsusb. Результатом ее выполнения стал список устройств, среди которых был мой Bluetooth

-2

Второй волшебной командой стала usb-devices

-3

Результатом второй команды стала полная информация о стике. Ок, значит стик в системе, но что с этой информацией делать - непонятно...

Вначале я нарвался на 2 интеграции в Home Assistant: Bluetooth LE Tracker и Bluetooth Tracker. Но позже нашлось то, что мне было действительно нужно Xiaomi Mijia BLE Temperature and Humidity Sensor. Не смотря на то, что интеграция у меня не заработала и пользоваться ей я так и не стал, в ее описании есть важные слова, которые я сразу не заметил:

Preferred solution: Install the bluepy and btlewrap library (via pip). When using a virtual environment, make sure to use install the library in the right one.
Fallback solution: Install btlewrap library (via pip) and gatttool via your package manager. Depending on the distribution, the package name might be: bluez, bluetooth or bluez-deprecated.

Если бы я обратил внимание на это, то все бы заработало на пару часов раньше. Я же пошел ложным путем, перемотав страницы в самый конец - настроил конфиг в HA и ничего не заработало. Я начал читать с пункта Configuration.

Нужно выполнить команду sudo hcitool lescan или команду bluetoothctl в зависимости от конфигурации используемой ОС. В результате получим MAC адрес нашего термометра. Но я знал MAC адрес термометра и не выполнил эти пункты, зря...

Уже попозже, когда я немного подкрепился, я начал искать проблемы. Наконец я додумался почитать описание интеграции, но почему-то начать читать с первой строчки мне в голову не пришло. Я все же выполнил команды и получил отрицательный ответ на каждую:

-4

Наконец я начал думать, а как вообще работает bluetooth в Linux? Я в процессе чтения нашел сайт, где описано как происходит настройка bluetooth. Вот цитата:

Устройства Bluetooth встречаются довольно часто в наше время. Это простой и дешевый способ добавить поддержку беспроводных технологий для смартфона или любого другого гаджета. Система Linux может использовать различные протоколы: OBEX, A2DP, DUN, HID и другие для взаимодействия с различными устройствами.
Большинство Bluetooth адаптеров выполнены в виде USB и могут быть настроены с помощью утилит HCL. Некоторые устройства, такие как Atheros, требуют для своей работы установленных прошивок в системе.

Далее приводились команды:
sudo apt-get install bluetooth bluez bluez-tools rfkill rfcomm
и sudo service bluetooth start. Если бы я прочитал описание к интеграции, то сразу бы и установил все как следует. Т.к. на приставке я пока работаю из под root, то моя команда выгледела так: apt-get install bluetooth bluez bluez-tools. О пакетах rfkill и rfcomm мой сервер ничего не знал. Пакеты установились

-5

Затем выполняем запуск сервисов

-6

Теперь выполнив команду hcitool lescan мы увидим в режиме реального времени кучу устройств в сети

-7

Но я бы настоятельно рекомендовал использовать команду bluetoothctl и затем ввести scan on.

-8

Мы увидим все устройства и адреса. Теперь все работает и можно полноценно использовать Bluetooth в системе.

Кстати, в конце я решил рассказать приятную особенность работы Bluetooth. У меня Home Assistant установлен в докере, и если ZigBee стик требовалось прокидывать в контейнер, прописывая его в конфигурации, то в случае с синим зубом делать ничего не нужно. Все уже работает, нужно лишь установить необходимую интеграцию.

Подпишитесь, чтобы не пропускать следующий контент.
Нажмите лайк, если интересно, так я пойму какие публикации больше нужны моей публике.
Также публикации можно найти на других площадках: Instagram, telegram (RU, EN, DE), Medium, LiveJournal, YouTube.

Мой блог является некоммерческим, поэтому позитивный комментарий, лайк или репост поможет публикациям выходить чаще ☺.