BTHome
Integrates BTHome BLE devices into Home Assistant.
Configuration
Adding BTHome to your Home Assistant instance can be done via the user interface, by using this My button:
If the above My button doesn’t work, you can also perform the following steps manually:
- Browse to your Home Assistant instance.
- Go to Settings > Devices & Services.
- In the bottom right corner, select the Add Integration button.
- From the list, select BTHome.
- Follow the instructions on screen to complete the setup.
The BTHome BLE integration will automatically discover devices once the Bluetooth integration is enabled and functional.
BTHome is an energy effective but flexible BLE format to broadcast data with Bluetooth and allows you to create your own DIY BLE sensors. More information about the BTHome BLE format and projects that use the format can be found on the BTHome website.
Bindkey
When using encryption for your BTHome sensor, you will prompted to enter your 32 character hexadecimal (16 bytes) encryption key. This key is called the bindkey. More information about the bindkey can be found in the specifications.
Help us to improve our documentation
The BTHome integration was introduced in Home Assistant 2022.9, and it’s used by 1.2% of the active installations. Its IoT class is Local Push.
Bluetooth шлюз для умного дома, за копейки и за 5 минут работы, на ESP32
Всем привет. Если помните в обзоре на часы Mijia я упоминал, что для подключения часов к Home Assistant можно воспользоваться проектом под названием bt-mqtt-broker. Практика показала, что данный сервис весьма и весьма нестабильный. Периодически Bluetooth на сервере намертво зависал, и приходилось дёргать службу. В общем после очередного зависания, решил поискать, что можно еще сделать, и нашел решение за 300 рублей, которое предельно просто реализовать, без паяльника и прочих прелестей.
Решение это — плата разработчика на ESP32 , а также проект под названием ESPHome .
Приезжает плата в обычном антистатическом пакете, и, к слову, в мягком почтовом пакете. Для защиты на ножки был нацеплен мягкий материал. Доехала к счастью платка целая и невредимая.
На плате указан производитель – Az-Delivery.
Внешне и по размерам она очень сильно напоминает Arduino Nano. Гребенки контактов, для экспериментов с макетными платами – сразу распаяны. Микроконтроллер тут установлен — от Espressif – ESP32-WROOM-32D.
Питание и подключение к компьютеру осуществляется при помощи MircoUSB порта. Обратите внимание, что при заказе данной платы возможно 2 варианта – со встроенной антенной и без неё, но с возможностью подключения внешней. Плата работает одновременно и с WiFi и c Bluetooth.
Перейдем, собственно, к созданию шлюза из этой платы.
Потребуется компьютер с Linux, в моём случае – Ubuntu 20.04.
Как всегда сперва лучше обновиться:
sudo apt update sudo apt upgrade
Если вдруг у вас не стоит Python или pip3 – установите их:
sudo apt install python3 python3-pip
Дальше ставим esphome при помощи pip:
sudo pip3 install esphome
А также пакеты для работы веб интерфейса (но можно и без него обойтись, используя только команды, подробности описаны на сайте esptool), скорее всего они установятся во время установки esphome, но на всякий случай
sudo pip3 install tornado esptool
sudo esphome config/ dashboard
config/ — это папка, относительно вашего текущего местоположения в терминале, куда будут складываться ваши конфиги.
Далее переходим по адресу – 127.0.0.1:6052 (или по адресу вашего компьютера, если заходите не с него), и создаем тут новый проект.
Задаём имя будущего шлюза
Выбираем из списка нашу плату, если такой нет в списке, то можно попробовать выбрать что-то с похожим названием, или generic. В моём случае при выборе Generic esp32 всё прекрасно заработало.
На следующем шаге вводим имя WiFi сети и пароль от нее, а также пароль для обновлений по воздуху и для доступа к шлюзу со стороны Home Assistant.
Жмем submit, и возвращаемся на главный экран.
Тут будет видно, что появился новый конфиг для нашей платы. Нужно его отредактировать, чтобы он научился обрабатывать данные с ваших устройств. Ниже пример куска конфига для подключения часов Xiaomi:
esp32_ble_tracker:
scan_parameters:
active: false
sensor:
— platform: xiaomi_lywsd02
mac_address: e7:2e:00:f1:4c:95
temperature:
name: «Xiaomi Clock Temperature»
humidity:
name: «Xiaomi Clock Humidity»
Обратите внимание на параметр active:false – есть подозрение, что если его не указывать, то он по умолчанию в состоянии true, и как следствие может негативно влиять на разряд батареи в устройствах, но в то же время, когда режим работы пассивный – некоторые функции могут работать не корректно. Также, к сожалению для моих часов не передаются данные о заряде батареек. Остальное, как мне кажется, в комментариях не нуждается.
Вообще на сайте ESPHome можно найти великое множество примеров для разных устройств. Так что можете там поискать для вашего.
Сохраняем конфиг, закрываем и жмем validate. Если проверка пройдена, то остается только залить прошивку в микроконтроллер.
Подключаем плату к USB и переводим её в режим прошивки, для этого жмем на ней на кнопку boot и не отпуская эту клавишу однократно нажимаем на cn, или en, в общем вторую кнопку =). В правом верхнем углу появится новый порт, выбираем его и жмем upload. Дожидаемся загрузки и когда пойдут логи связанные с обнаружением Bluetooth устройств можно жать на Stop всё отключать и уносить самодельный шлюз в нужное место.
В будущем, прошитые девайсы можно обновлять по воздуху (OTA), с данной платой я пробовал – всё замечательно работает. Но на форумах часто встречал жалобы, что с той или иной платой других производителей – данная функция нормально не работает.
Остается только добавить интеграцию ESPHome в Home Assistant, дальше всё подтянется автоматически. В смысле подтянется ваш ESP32 как устройство, с объектами которые были прописаны в конфиге (в моем случае температурой и влажностью). Занимательно, что имена объектов точно такие же, как были заданы в конфиге.
Пользуюсь этим самодельным шлюзом уже несколько недель, и ни одной проблемы с ним пока не возникло. Работает как часы. Правда стоит оговориться, что у меня к нему подключено только одно устройство, не исключено, что что-то может пойти не так, если добавить на одну еспишку великую гору устройств.
Блютуз прокси на ESP32 в ESPHome. Bluetooth proxy.
Не так давно появилась в ESPHome очень интересная функция, которая обошла меня стороной.
Дело в том, что у меня установлен Home Assistant На Raspberry pi 4 и блютуза встроенного в Raspberry pi 4 мне хватало. ПО этому я не обращал внимание на Bluetooth proxy от ESPHome.
Но беда пришла откуда не ждали. Я начал разбираться с датчиком движения LD2410B. И установить с ним Bluetooth соединение не получалось. Raspberry pi 4 с Home Assistant На борту его не находила. Хотя телефон вполне к нему подключался через приложение.
И вот поломав голову изменяя настройки датчика, решил попробовать Bluetooth proxy от ESPHome. Загрузив буквально несколько строчек кода, у меня тут-же датчик движения LD2410B нашелся и пробросился в Home Assistant.
По этому я и решил сделать эту статью, чтоб помочь людям, у которых такая же проблема возникнет. Или просто если на компьютере с Home Assistant нет Bluetooth модуля, то это очень удобный способ будет для добавления устройств Bluetooth в Home Assitant.
Bluetooth proxy ESPHome.
Bluetooth-прокси ESPHome предоставляет Home Assistant максимум 3 одновременных активных соединения. Устройства, которые поддерживают постоянное активное соединение, будут потреблять одно из них постоянно, в то время как устройства, которые периодически отключаются и снова подключаются , позволяют использовать более 3 из них (на статистической основе). Пассивно передаваемые данные датчиков (которые рекламируются определенными устройствами без активных подключений) принимаются отдельно от них и не ограничиваются определенным количеством.
Компонент веб-сервера следует отключить, так как в устройстве может не хватить памяти, и при одновременном включении обоих компонентов устройство может работать со сбоями.
Поддерживаются не все устройства, а ESPHome не декодирует и не ведет список. Чтобы узнать, поддерживается ли ваше устройство, найдите его в списке интеграций Home Assistant .
С предупреждением разобрались, идем далее.
По сути Bluetoot proxy включается двумя строчками кода:
bluetooth_proxy: active: true
- active ( Необязательный , логическое значение): Включает проксирование активных подключений. По умолчанию false . Требуется Home Assistant 2022.10 или новее.
Добавив этот параметр, у Вас включится Buetooth прокси, но есть еще некий параметр, который улучшит связт Bluetooth.
Улучшение качества приема
Используйте плату с Ethernet-подключением к сети, чтобы разгрузить радиомодуль ESP32 от трафика WiFi, это повышает производительность на стороне Bluetooth.
Но у меня и по Wi-fi отлично все работает. Правда я на модуль ничего больше не вешал кроме Bluetooth proxy функции.
Чтобы максимизировать шансы поймать рекламу датчиков, вы можете установить interval равным window в настройках параметров сканирования ESP32 Bluetooth Low Energy Tracker Hub :
esp32_ble_tracker: scan_parameters: interval: 1100ms window: 1100ms
Для прокси-серверов на основе WiFi изменение значений по умолчанию interval или window значений по умолчанию может привести к нестабильному соединению WiFi. Использование значений по умолчанию для interval и window обычно устраняет любую нестабильность.
Ну и собственно конечный результат у меня выглядит так:
esp32_ble_tracker: scan_parameters: interval: 1100ms window: 1100ms active: true bluetooth_proxy: active: true
Добавив эти несколько строчек кода и добавив получившееся устройство в Home Assistant, у Вас моментально начнут появляться новые устройства для добавления в Home Assistant по Bluetooth.
Вот как у меня это выглядело. Как работало на штатном bluetooth raspbery pi 4. Видно, что нашлось какое-то одно устройство Bluetooth:
Ну а как только я добавил Bluetooth proxy, картина тут-же изменилась:
И мой многострадальный датчик LD2410B сразу нашелся.
P.S. Bluetooth proxy поддерживается и ESP32-C3.