Реверсивный инжиниринг управления 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 :)

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

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

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

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