Как стать автором
Обновить

Привет Siri, включи елочку

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.8K

В доме, где каждое устройство – от стиральной машины до лампочки – обладает умными функциями, новогодняя гирлянда, казалось бы, не могла остаться в стороне.

Заказав китайскую гирлянду на AliExpress, я ожидал получить устройство, совместимое с Tuya и работающее по Wi-Fi которое без проблем можно завести в Home Assistant, люблю управлять всем из одного приложения и не люблю умные устройства в облаках. Однако, я ошибся, и получил устройство с название Hello Fairy и управляемое своим приложением по протоколу Bluetooth Low Energy (BLE)

Приложение позволяет управлять цветом, режимом и скоростью переключения цветов гирлянды, все хорошо, но к сожаление c Home Assistant никак не совместимо и существующих интеграций найти не получилось. 

Не отчаиваемся! Давайте рассмотрим способ приручения этого устройства и управления им напрямую без привязки к проприетарным приложениям.

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

Аппаратный способ

Приобрести отладочную BLE плату с USB, почти все производители делают такие, к примеру Nordic Semiconductor nRF51822 или cc2541 от TI, но кроме того скорее всего будет нужен аппаратный дебаггер, чтобы прошить чип для работы в режиме сниффера. Выглядит немного дорого, к примеру только донгл от Nordic стоит порядка 100$, поэтому перейдем к следующему способу.

Перехват BLE трафика в Android

Инструменты разработки в Android позволяют перехватывать весь входящий и исходящий bluetooth трафик, собственно девайс на дроиде оказывается под рукой чаще чем отладочный донгл, поэтому и будем использовать этот способ. 

Для начала необходимо включить режим разработчика в Android для кликаем на номер билда в информации об устройстве, после чего будет доступно новое меню разработчика. Кроме того на компьютер устанавливаем ADB (Android Debug Bridge) это можно сделать по инструкции для вашей OS. А так же для просмотра трафика устанавливаем wireshark.

После того как все ПО установлено идем в меню разработчика и активируем пункт “Включить журнал HCI”:

Переключаемся в приложение трафик которого будем перехватывать и нажимаем на все интересующие кнопки. Каждый запрос Android записывает в лог файл, для того чтобы его прочитать нам понадобиться скачать его с девайса на компьютер через ADB, так как файл находиться в недоступной для пользователя области памяти. Подключаем Android девайс по USB и выполняем команду в консоле

adb devices

После чего разрешаем отладку по USB на экране девайса и выполняем еще одну команду

adb bugreport bugreport.zip

Формирование архива может занять 2-3 минуты. После распаковываем полученный архив и находим файл ..\bugreport\FS\data\log\bt\btsnoop_hci.log открываем его с помощью wireshark.

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

Тестируем полученные команды без приложения

Пробуем повторить команды средствами linux через gatttool для этого понадобиться выполнить команду в форме:

gatttool -b MAC-адрес гилядны --char-write-req -a UUID характеристики -n команда 

Итого опытным путем получаем следующие:

gatttool -b 48:53:52:01:55:2C --char-write-req -a 0x0021 -n aa020101ae # включить

gatttool -b 48:53:52:01:55:2C --char-write-req -a 0x0021 -n aa020100ad # выключить

gatttool -b 48:53:52:01:55:2C --char-write-req -a 0x0021 -n aa0304020103ca81 # режим переливания цветом

gatttool -b 48:53:52:01:55:2C --char-write-req -a 0x0021 -n aa03070100e3036a03e8f0 # синий цвет

gatttool -b 48:53:52:01:55:2C --char-write-req -a 0x0021 -n aa03070100e3036a03e8f0 # красный цвет

Интеграция в Home Assistant

И так далее для всех интересующих нас действий. Видим, что гирлянда отзывается, а следовательно из этого можно уже либо разработать свою собственную интеграцию для Home Assistant либо создать сommand line switch, если не хочется заморачиваться с программирование, я выбрал как раз второй способ.

Открываем configuration.yaml в Home Assistant и добавляем секцию:

command_line:

- switch: name: "ble_holiday_lights"

command_on: 'gatttool -b 48:53:52:01:55:2C --char-write-req -a 0x0021 -n aa020101ae'

command_off: 'gatttool -b 48:53:52:01:55:2C --char-write-req -a 0x0021 -n aa020100ad'

Получаем программный выключатель, который можно использовать в автоматизациях и даже интегрировать с голосовыми ассистентами:

Вот и всё! Теперь гирлянда вполне управляема из Home Assistant, без необходимости использовать проприетарные приложения. Спасибо за внимание, пусть ваш дом светится яркими красками и тоже будет умным!

Теги:
Хабы:
Всего голосов 18: ↑18 и ↓0+18
Комментарии6

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн