Подключение Xiaomi Mijia Bluetooth Thermometer в Home Assistant с помощью ESP32
В экосистеме компании Xiaomi есть датчик температуры и влажности Mijia Hygrothermograph с дисплеем, подключаемый по Bluetooth. Подключить этот датчик в приложение Mi Home можно непосредственно с телефона, либо через BLE шлюз. В качестве BLE шлюзов выступают ночные светильники Mijia Bed Side Lamp первого поколения, камера видеонаблюдения Mijia Smart Home Camera, умная колонка Yeelight Voice Assistant и другие устройства, но проблема в том, что эти шлюзы не позволяют пробрасывать подключенные устройства в альтернативные системы автоматизации.
Подключить такое устройство в Home Assistant возможно через Bluetooth компьютера, на котором установлена система автоматизации (в случае Raspberry Pi), или сделать BLE шлюз на основе платы ESP32 стоимостью ~4$.
На всем известной китайской торговой площадке была заказана плата ESP32. Плата имеет Wi-Fi и Bluetooth интерфейсы, 4 мегабайта памяти, контроллер CP2102 и порт micro-ubs. Наличие контроллера CP2102 позволяет перепрашивать плату подключив ее к компьютеру кабелем micro-usb.
Прошивка платы ESP32
На плату будет залита прошивка, созданная в ESPHome, после чего она будет работать как полноценный BLE шлюз. Программная часть будет установлена на Raspberry Pi, а плата для первоначальной прошивки подключена к малинке кабелем micro-usb.
Для установки программной части подключаемся к Raspberry Pi по SSH. Устанавливаем Python3 т.к. поддержку Python2 обещают в скором времени вырезать.
$ sudo apt install python3-pip $ sudo pip3 install setuptools $ sudo pip3 install esphome $ sudo pip3 install tornado esptool
Т.к. Raspberry Pi оснащена bluetooth модулем, запустим сканер для определения MAC адресов необходимых нам устройств:
$ sudo hcitool lescan LE Scan ... 4C:65:A8:DA:02:B1 MJ_HT_V1
После нахождения всех необходимых устройств прерываем работу сканера комбинацией клавиш:
Ctrl+C
Запускаем программное обеспечение ESPHome:
$ esphome config/ dashboard
В браузере открываем страницу:
http://<strong>raspberry_ip_address</strong>:6052/
Создаем новый проект нажав + в правом нижнем углу. Последовательно заполняем необходимые поля:
- Node Name - Уникальное имя node. Имя вводится латиницей в нижнем регистре, допускаются цифры и символ подчеркивания
- Device Type - Тип устройства, для нашего проекта выбираем NodeMCU-32S
- WiFi & Updates - В соответствующие поля последовательно вводим
SSID
точки WiFi, с которой будет происходить подключение, пароль для подключения к ней и пароль дляOTA
сервера обновлений. OTA в последствии позволит обновлять прошивки на устройстве, не подключая к компьютеру - Finish - Подтверждение создания нового проекта
Для первой прошивки подключаем устройство к малине micro-usb проводом, в выпадающем меню в правом верхнем углу выбираем наше устройство.
Нажимаем кнопку Edit
. Первая часть конфигурационного файла будет заполнена информацией, которую мы ввели при создании проекта, далее мы включили BLE tracker
для определения Bluetooth устройств, внесли данные о нашем датчике температуры Mijia Hygrothermograph
, последние 3 сенсора это Uptime
устройства, уровень сигнала Wi-Fi и кнопка перезапуска будущего BLE шлюза. Строчки с WEB сервером на устройстве закомментированы, т.к. он нужен только для отладки и показывает текущие показания сенсоров и Debug log, но для первоначальной настройки его желательно включить, убрав комментарий с двух соответствующих строчек.
Подробнее почитать о поддерживаемых Bluetooth устройствах компании Xiaomi можно на сайте проекта ESPHome.
esphome: name: ble_esp32 platform: ESP32 board: nodemcu-32s wifi: ssid: "MySweetSmartHome" password: "P@$$w.rd" captive_portal: # Enable logging logger: # Enable Home Assistant API api: password: "P@$$w.rd" ota: password: "P@$$w.rd" #web_server: # port: 80 esp32_ble_tracker: sensor: # Mijia bluetooth temperature & humidity sensor - platform: xiaomi_lywsdcgq mac_address: 4C:65:A8:DA:02:B1 temperature: name: mijia_bt_temperature humidity: name: mijia_bt_humidity battery_level: name: mijia_bt_battery_level # Uptime - platform: uptime name: ble_esp32_uptime # Wi-fi signal strength - platform: wifi_signal name: ble_esp32_wifi update_interval: 60s # Restart button switch: - platform: restart name: ble_esp32_Restart
Сохраняем Save
и закрываем конфигурацию Close
. Проверяем созданный проект Validate
, запускаем сборку прошивки и отправку ее на устройство Upload
. При прошивке через USB провод, возможно, устройство необходимо будет перевести в режим обслуживания зажав кнопку Boot
и не отпуская ее нажать один раз кнопку Reset (En)
.
После окончания прошивки устройство подключится к Wi-Fi сети, если был включен Web сервер, то проверить его работу можно открыв в браузере страницу:
http://<strong>ble_esp32_ip_address</strong>
Узнать полученный адрес устройства в домашней сети можно на маршрутизаторе в разделе DHCP сервер.
Подключение BLE ESP32 шлюза в Home Assistant
В Home Assistant добавляем новую интеграцию Configure -> Integration -> +
. В списке находим ESPHome
, заполняем IP адрес
нашего BLE шлюза, порт по умолчанию 6053
, подтверждаем конфигурацию, в следующем окне вводим пароль, указанный в разделе api
в конфигурационном файле устройства.
После подключения заходим в устройства Configuration -> Devices
, находим подключенный BLE ESP32 шлюз.
Помимо сенсоров самой платы в списке отображаются сенсоры bluetooth термометра Mijia Hygrothermograph. Теперь их можно добавить на панель Lovelace
.
Автоматизация
Следующая автоматизация будет управлять розеткой, к которой подключен увлажнитель воздуха. При падении влажности в помещении ниже 35% розетка будет включаться и при превышении 55% отключаться. В Configuration -> Automation
или в automation.yaml
добавляем:
- id: 'room_humidity_below_35_percent' alias: Room humidity below 35 percent trigger: - platform: numeric_state entity_id: sensor.mijia_bt_humidity below: '35' condition: [] action: - service: switch.turn_on entity_id: switch.xiaomi_socket_room_<span class="tlid-translation translation" lang="en"><span title="">humidifier</span></span>_switch data: {} mode: single - id: 'room_humidity_above_55_percent' alias: Room humidity above 55 percent trigger: - platform: numeric_state entity_id: sensor.mijia_bt_humidity above: '55' condition: [] action: - service: switch.turn_off entity_id: switch.xiaomi_socket_room_<span class="tlid-translation translation" lang="en"><span title="">humidifier</span></span>_switch data: {} mode: single
Следующая автоматизация будет уведомлять о низком заряде батареи в устройстве.
- id: 'mijia_ble_term_low_batt' alias: Mijia BLE termometr low <span class="tlid-translation translation" lang="en"><span title="">battery</span></span> trigger: - platform: numeric_state entity_id: sensor.mijia_bt_battery_level below: '15' condition: [] action: - service: notify.persistent_notification data: title: ⚠ - Battery low message: Mijia BLE termometr <span class="tlid-translation translation" lang="en"><span title="">battery</span></span> below 15 percent - service: telegram_bot.send_message data: message: Mijia BLE termometr <span class="tlid-translation translation" lang="en"><span title="">battery </span></span>below 15 percent mode: single
Подробнее о создании и настройке бота для Telegram описано в статье: Подключение Telegram bot к Home Assistant для доставки уведомлений и управления умным домом
Итог
Используя плату NodeMCU-32S и программное обеспечение проекта ESPHome, мы получили полноценный BLE шлюз, подключили к нему градусник Mijia Hygrothermograph, прокинули его в Home Assistant и задействовали его в домашних автоматизациях.
К минусам данного решения можно отнести только то, что при подключении нового Bluetooth устройства необходимо добавлять его в конфигурационный файл и заново прошивать устройство.
К плюсам относится, что плата может работать автономно, достаточно только питания 5V через micro-usb провод, последующие прошивки можно производить, не подключая устройство к компьютеру.