Реверсивный инжиниринг управления Bluetooth контроллером светодиодной ленты

Друзья, совсем недавно я перевёл все девайсы моего умного дома на управление через Home Assistant, а также привязал к нему голосовое управление через две Яндекс Станции Макс, одну Sonos One и Amazon Echo Dot 3. На прошлой неделе я сделал для своей супруги вот такой мини-кабинет на нашей лоджии, а на монитор я установил RGB подсветку с контроллером, который управляется как по Bluetooth, так и через дистанционный ИК-пульт управления.

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

Что вам понадобится

Шаг 1 : Установка приложения Triones и включение записи Bluetooth пакетов

Включаем Bluetooth на смартфоне, устанавливаем приложение Triones, находим наш контроллер светодиодной ленты и пробуем к нему подключиться.

Затем, используя серую кнопку включения в приложении пробуем включить и выключить нашу светодиодную ленту.

Если все работает, то в нашем смартфоне идём в настройки разработчика и активируем строку Enable Bluetooth HCI snoop log.

После этого выключаем и снова включаем Bluetooth на смартфоне. Возвращаемся в приложение Triones и раз пять пробуем включить и выключить светодиодную ленту.

Далее, возвращаемся в настройки разработчика, деактивируем строку Enable Bluetooth HCI snoop log, а также активируем строку USB debugging.

Шаг 2 : Копирование файла Bluetooth пакетов и их анализ в WireShark

Подключаем телефон к компьютеру с помощью data-кабеля. В моем случае это операционная система на Linux. Открываем терминал и вводим команду

adb bugreport bugreportfolder

Команда скопирует файл bugreportfolder.zip в домашнюю директорию /home/username/.

Распаковываем файл и в папке /home/username/bugreportfolder/FS/data/misc/bluetooth/logs находим файл с расширением .cfa.

Устанавливаем программу WireShark на компьютер и открываем с помощью нее указанный выше файл.

Находим строку с соединением от нашего смартфона к Bluetooth контроллеру.

Внизу окна программы открываем выпадающее меню Bluetooth Attribute Protocol и видим, что значение поля value равно cc2433. Далее находим подобную строку с соединением от нашего смартфона к Bluetooth контроллеру и видим, что значение поля value сменилось на cc2333.

Это 3 байта на выключение (cc2433) и включение контроллера (cc2333) светодиодной ленты! У вас эти значения будут другими. Также в столбце info видим следующую информацию Handle: 0x0014. Данное значение нам потребуется для управления контроллером из терминала.

Шаг 3 : Включение контроллера светодиодной ленты из терминала

Открываем терминал устройства (в моем случае это Raspberry Pi 3b), на котором расположен Bluetooth адаптер и вводим следующие команды:

bluetoothctl
scan on
pair XX:XX:XX:XX:XX:XX

Где XX:XX:XX:XX:XX:XX – MAC-адрес контроллера светодиодной ленты.

Вам будет предложено ввести ключ (passkey) для сопряжения, введите 0000.

После сопряжения выходим из bluetoothctl:

scan off
exit

Далее, вводим команду на включение контроллера светодиодной ленты:

gatttool -i hci0 -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x0014 -n cc2333

где hci0 имя bluetooth адаптера.

XX:XX:XX:XX:XX:XX – MAC-адрес контроллера светодиодной ленты.

0x0014 – значение Handle.

cc2333 – 3 байта записываемые в Bluetooth характеристику на включение светодиодной ленты.

Светодиодная лента должна включиться.

Команда на выключение будет, соответственно, следующей:

gatttool -i hci0 -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x0014 -n cc2433

Шаг 4 : Включение контроллера светодиодной в Home Assistant

Заходим в файл конфигурации /config/configuration.yaml и создаём виртуальный выключатель:

switch:
  - platform: command_line
    switches:
      laptop_monitor_backlight:
        command_on: gatttool -i hci0 -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x0014 -n cc2333
        command_off: gatttool -i hci0 -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x0014 -n cc2433
        friendly_name: 'Laptop Monitor Backlight'

Перезагружаем Home Assistant и создаём Lovelace карточку с виртуальным выключателем, которым можно управлять из админки Home Assistant.

Из минусов можно отметить то, что из данной Bluetooth характеристики нельзя прочитать записанное значение и использовать его в Home Asssistant для определения текущего состояния светодиодной ленты (т.е. либо включена, либо выключена). Если вы знаете как это сделать, напишите в комментариях.

Если у вас также настроена интеграция Yandex Smart Home,

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

Profit :)

Понравилась инструкция? Тогда поделитесь ей со своими друзьями или попробуйте написать свою собственную!

Регистрация на сайте

Дайте свою оценку данной инструкции


Поделитесь этой инструкцией со своими друзьями

Оставьте свой отзыв

Вы должны Войти, чтобы оставлять отзывы.