Несколько месяцев назад я опубликовал подробное руководство по сбор данных рекламы BLE с наружного термометра SwitchBot используя плату ESP32. Процесс включал сбор, декодирование и анализ данных на уровне байтов в ESPHome и преобразование их в функциональные датчики для Home Assistant.
Это подробная и довольно сложная процедура, во многом зависящая от наличия ключевой информации, необходимой для запуска процесса. Если вы хотите глубже погрузиться в технические особенности декодирования BLE, я настоятельно рекомендую прочитать эту статью. Он дает углубленный взгляд на мой мыслительный процесс и проблемы декодирования однобайтовых характеристик — общий подход, используемый SwitchBot и многими другими производителями.
В этой статье я не буду подробно рассматривать весь процесс. Вместо этого я выделю ключевые различия, с которыми я столкнулся при интеграции SwitchBot Meter Pro и SwitchBot Meter Pro (CO2) термометры.
Полный код см. пропустить до конца.
Зачем использовать ESP32 для сбора данных BLE?
В разделе комментариев к последней статье меня несколько раз спрашивали, зачем использовать плату ESP32 для анализа данных, а не просто использовать официальную интеграцию SwitchBot. Для справки: интеграция прекрасно работает, просто используя Bluetooth-модуль вашего сервера или даже ESP32 в качестве Bluetooth-прокси.
Я предпочитаю использовать ESP32 для всего, что связано с Bluetooth, поскольку они в той или иной форме есть повсюду в моем умном доме. Вот несколько ключевых отличий, которые я бы назвал преимуществами по сравнению с использованием встроенных радиомодулей Bluetooth:
- Расширенный диапазон и надежность: ESP32 можно стратегически разместить ближе к устройствам, обеспечивая более сильный прием сигнала BLE по сравнению с центральной системой со стационарным радиомодемом Bluetooth (например, RPi).
- Пользовательский анализ и контроль: ESPHome обеспечивает расширенную настройку и прямой анализ байтовых данных BLE, обеспечивая точную обработку неподдерживаемых или заблокированных функций устройства. Кроме того, вы можете настроить настраиваемые интервалы отчетов и окна сканирования Bluetooth, оптимизируя производительность и экономя время автономной работы.
- Активные и пассивные соединения: С ESP32 вы можете выбирать между активным и пассивным сканированием BLE, обеспечивая большую гибкость, позволяющую сбалансировать скорость реагирования в реальном времени с энергоэффективностью и уменьшать помехи другим устройствам Bluetooth.
- Централизованный BLE-концентратор: С помощью ESP32 вы можете управлять несколькими устройствами BLE из одного узла, консолидируя связь и уменьшая зависимость от интеграции Bluetooth Home Assistant для различных поставщиков. Например, я могу захватывать пакеты BLE с термометра SwitchBot, датчика температуры Xiaomi или HHCCJCY10 датчик установки на одном узле.
- Масштабируемость: Несколько устройств ESP32 могут быть развернуты по всему дому для покрытия больших площадей, обеспечивая стабильное покрытие BLE и уменьшая мертвые зоны сигнала. Я просто повторно использую другие устройства на базе ESP32, которые уже использую дома, для сбора данных со случайного устройства. Например, я использую AirGradient’s ONE датчик для сбора данных с датчика температуры в спальне.
Понимание байтов рекламы BLE для SwitchBot Meter Pro и Meter Pro (CO2)
При интеграции SwitchBot Meter Pro и Meter Pro (CO2) с ESPHome крайне важно понимать структуру их рекламных данных BLE. Каждая версия использует определенные байты в рекламном пакете для представления температуры, влажности, уровня заряда батареи и — в модели CO2 — уровня углекислого газа.
Байтовая структура SwitchBot Meter Pro
SwitchBot Meter Pro имеет следующую структуру байтов:
- Температура: Байты 8 и 9.
- Младшие 4 бита байта 8 (
0x0F
) представляют десятичную часть; - Старшие 7 бит 9-го байта (
0x7F
) представляют целую часть числа. - Старший бит 9-го байта (
0x80
) указывает знак (0 = положительный, 1 = отрицательный). - Пример: Байт 8 =
0x05
(0,5), Байт 9 =0x98
(24, положительный), Температура =24.5°C
.
- Младшие 7 бит (
0x7F
) представляют собой процент влажности. - Пример: Байт 10 =
0x64
Влажность =100%
.
- Младшие 7 бит (
0x7F
) представляют процент заряда батареи. - Пример: Байт 2 =
0x50
Батарея =80%
.
- Указывает тип устройства. Ценить:
0x34
(52).
Байтовая структура SwitchBot Meter Pro (CO2)
SwitchBot Meter Pro (CO2) имеет следующую структуру байтов:
- Температура: Байты 8 и 9.
- Младшие 4 бита байта 8 (
0x0F
) представляют десятичную часть; - Старшие 7 бит 9-го байта (
0x7F
) представляют целую часть числа. - Старший бит 9-го байта (
0x80
) указывает знак (0 = положительный, 1 = отрицательный). - Пример: Байт 8 =
0x05
(0,5), Байт 9 =0x98
(24, положительный), Температура =24.5°C
.
- Младшие 7 бит (
0x7F
) представляют собой процент влажности. - Пример: Байт 10 =
0x64
Влажность =100%
.
- Младшие 7 бит (
0x7F
) представляют процент заряда батареи. - Пример: Байт 2 =
0x50
Батарея =80%
.
- Комбинируется как 16-битное целое число с обратным порядком байтов. Байт 13 = старший байт, Байт 14 = младший байт.
- Пример: Байт 13 =
0x03
Байт 14 =0xE8
СО2 =(0x03 .
- Указывает тип устройства. Ценить:
0x35
(53).
Прошивка платы ESP32
Для сбора характеристик BLE от SwitchBot Meter Pro и Meter Pro (CO2) подойдет любой ESP32. Недавно я говорил о крошечная плата ESP, которую можно использовать в качестве прокси-сервера Bluetoothкоторый будет служить
esp32_ble_tracker
для этой цели.Мой базовый код для этой платы выглядит следующим образом:
esphome: name: esp32-c3-super-mini friendly_name: ESP32-C3 Super Mini esp32: board: esp32-c3-devkitm-1 framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "XXXXX" ota: - platform: esphome password: "XXXXX" wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Esp32-C3-Super-Mini" password: "XXXXX" captive_portal:
- Младшие 4 бита байта 8 (
- Младшие 4 бита байта 8 (