Stupid House

Подключение Xiaomi Mijia Bluetooth Thermometer в Home Assistant с помощью ESP32


Подключение 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 и другие устройства, но проблема в том, что эти шлюзы не позволяют пробрасывать подключенные устройства в альтернативные системы автоматизации.

Подключение Xiaomi Mijia Bluetooth Thermometer в Home Assistant с помощью ESP32

Подключить такое устройство в Home Assistant возможно через Bluetooth компьютера, на котором установлена система автоматизации (в случае Raspberry Pi), или сделать BLE шлюз на основе платы ESP32 стоимостью ~4$.

На всем известной китайской торговой площадке была заказана плата ESP32. Плата имеет Wi-Fi и Bluetooth интерфейсы, 4 мегабайта памяти, контроллер CP2102 и порт micro-ubs. Наличие контроллера CP2102 позволяет перепрашивать плату подключив ее к компьютеру кабелем micro-usb.

Подключение Xiaomi Mijia Bluetooth Hydrotermograph в Home Assistant с помощью ESP32

 

Прошивка платы 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://raspberry_ip_address:6052/

Создаем новый проект нажав + в правом нижнем углу. Последовательно заполняем необходимые поля:

  • Node Name - Уникальное имя node. Имя вводится латиницей в нижнем регистре, допускаются цифры и символ подчеркивания
  • Device Type - Тип устройства, для нашего проекта выбираем NodeMCU-32S
  • WiFi & Updates - В соответствующие поля последовательно вводим SSID точки WiFi, с которой будет происходить подключение, пароль для подключения к ней и пароль для OTA сервера обновлений. OTA в последствии позволит обновлять прошивки на устройстве, не подключая к компьютеру
  • Finish - Подтверждение создания нового проекта

Для первой прошивки подключаем устройство к малине micro-usb проводом, в выпадающем меню в правом верхнем углу выбираем наше устройство.

mijia bluetooth termometr esp32 firmware

Нажимаем кнопку 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://ble_esp32_ip_address

Узнать полученный адрес устройства в домашней сети можно на маршрутизаторе в разделе DHCP сервер.

 

Подключение BLE ESP32 шлюза в Home Assistant

В Home Assistant добавляем новую интеграцию Configure -> Integration -> +. В списке находим ESPHome, заполняем IP адрес нашего BLE шлюза, порт по умолчанию 6053, подтверждаем конфигурацию, в следующем окне вводим пароль, указанный в разделе api в конфигурационном файле устройства.

esphome integration with home assistant

После подключения заходим в устройства Configuration -> Devices, находим подключенный BLE ESP32 шлюз.

esp32 ble gateway home assistant

Помимо сенсоров самой платы в списке отображаются сенсоры bluetooth термометра Mijia Hygrothermograph. Теперь их можно добавить на панель Lovelace.

mijia hygrothermograph ble esp32 home assistant

 

Автоматизация

Следующая автоматизация будет управлять розеткой, к которой подключен увлажнитель воздуха. При падении влажности в помещении ниже 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_humidifier_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_humidifier_switch
    data: {}
  mode: single

Следующая автоматизация будет уведомлять о низком заряде батареи в устройстве.

- id: 'mijia_ble_term_low_batt'
  alias: Mijia BLE termometr low battery
  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 battery below 15 percent
  - service: telegram_bot.send_message
    data:
      message: Mijia BLE termometr battery below 15 percent
  mode: single

Подробнее о создании и настройке бота для Telegram описано в статье: Подключение Telegram bot к Home Assistant для доставки уведомлений и управления умным домом

 

Итог

Используя плату NodeMCU-32S и программное обеспечение проекта ESPHome, мы получили полноценный BLE шлюз, подключили к нему градусник Mijia Hygrothermograph, прокинули его в Home Assistant и задействовали его в домашних автоматизациях.

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

К плюсам относится, что плата может работать автономно, достаточно только питания 5V через micro-usb провод, последующие прошивки можно производить, не подключая устройство к компьютеру.

Пример кейса для платы.

Автор: muxa, 07.12.2020
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии