WiFi термостаты Beok вполне заслуженно ценятся "умнодомостроителями" и давно зарекомендовали себя как функциональные, отработанные и надежные устройства. Они имеют неплохой внешний вид и несколько дизайнов на любой вкус, удобный интерфейс и гибкую систему работы по расписанию в автоматическом режиме.
Штатное приложение умеет управлять термостатами в локальной сети (без выхода наружу) либо через пропиретарные облачные скревера. Но, к сожалению, к самому приложению Beok Home как раз есть претензии.
Кроме того рано или поздно возникает задача интегрировать термостат в локальную систему управления типа MajorDoMo или HomeAssistant. А поскольку WiFi часть этих термостатов построена на базе стандартного модуля Broadlink - эта задача решается с помощью установки соответствующей интеграции, например модуля Broadlink для MajorDoMo + SBeokThermostat). К сожалению, эти модули периодически опрашивают состояние всех зарегистрированных устройств, что создает дополнительную нагрузку на сервер и приводит к сушественным задержкам при отрабатывании сценариев "по событию". Особенно это заметно если часть термостатов по какой-то причине находится в офлайне.
Хотелось бы упростить интеграцию в локальные системы умного дома, обеспечив им прямой доступ к термостату по протоколу MQTT. Это позволит не только разгрузить сервер умного дома, отказавшись от модуля интеграции, но и реализовать независимые от сервера сценарии управления на уровне протокола MQTT.
Как было отмечено выше, удаленное управление термостаом реализовано на базе пропиретарного WiFi модуля Broadlink BL3335-P (описание можно найти в Docs), который взаимодействует с контроллером термостатоа через последовательный интерфейс (9600/None/1). К сожалению, BL335-P имеет закрытую прошивку и инструменты разработки. Однако анализ данных, передаваемых по uart показал, что для управления MCU используется тот же протокол, что уже реализован в модуле Broadlink для MajorDoMo. Поэтому оказалось достаточно просто заменить модуль BL335 на ESP8266 и превратить термостат в полноценное клиентское MQTT устройство. Еще одним бонусом при этом является и возможность встраивания в термостат дополнительных сенсоров (датчик влажности, освещенности или движения).
В каталоге BOT313Firmware находятся исходники вполне рабочей прошивки, которая тем не менее все еще находится в разработке. В основе прошивки лежит IoT Framework и поэтому (соответственно) поддерживает все основные команды управления устройством, реализованные в фреймворке.
Power: Состояние термостата. 1 - включен, 0 - выключен
RoomTemp: Текущая температура воздуха (точность 0.5°)
FloorTemp: Текущая температура внешнего датчика, если поддерживается и установлен
FloorTempMax: Максимальная температура разаргрева пола (при наличии датчика температуры пола)
TargetTemp: Текущая целевая температура
TargetTempMax..TargetTempMin: Диапазон допустимых значений целевой температуры
AutoMode: Включен автоматический (1) либо ручной (0) режим управления
Sensor: Конфигурация датчиков температуры (зависит от модели термостата, см. документацию)
Heating: Состояние реле управления обогревателем. 1 - обогреватель включен, 0 - выключен
Locked: Блокировка кнопок: 1 - включена, 0 - выключена
TargetSetManually: В режиме автоматического управления целевая температура была изменена кнопками (1/0)
LoopMode: Текущий способ выбора первого или второго расписания в автоматическом режиме: 0: 5+2 дня, 1: 6+1 день, 2: 7 дней (см. документацию к термостату)
Schedule, Schedule2: Первое и второе расписания в режиме автоматической работы. Указывает с какого времени требуется установить заданную температуру. В первом расписании определяется 5 временных интервалов, во втором расписании только 2 (см. документацию к термостату)
Hysteresis: Точность, с которой будет выдерживаться заданная температура
AdjTemp: Поправка к значению датчика температуры RoomTemp/FloorTemp уже учитывают эту поправку.
AutoAdjMode: Режим автоматического управления коррекцией датчика температуры AdjTemp. Доступен только при использовании дополнительного встроенного цифрового датчика температуры и влажности и управляет температурой воздуха (Sensor=0).\ Доступные режимы:\ 0: AdjTemp задается только вручную либо топиком SetAdjTemp в настройках термостата;\ 1: RoomTemp подгоняется под температуру цифрового датчика (топик Sensor/Temperature)\ 2: RoomTemp подгоняется под субъективно ощущаемую температуру ("индекс тепла", топик Sensor/HeatIndex)
AntiFroze: Режим защиты от замерзания включен (1) либо выключен (0)
PowerOnMemory: Восстанавливать (1) или не восстанавливать (0) состояние термостата после пропадения питания
Time, Weekday: Время (ЧЧ:ММ) и текущий день недели (1..7)
climate 'bedroom_thermostat':
unique_id: 'bedroom_thermostat'
name: 'bedroom_thermostat'
platform: mqtt
availability:
topic: 'Bedroom/Thermostat/Online'
payload_available: '1'
payload_not_available: '0'
temperature_unit: C
temp_step: 0.5
max_temp: 25
min_temp: 15
precision: 0.5
modes: ["off", "heat","auto"]
current_temperature_topic: 'Bedroom/Thermostat/RoomTemp'
temperature_state_topic: 'Bedroom/Thermostat/TargetTemp'
temperature_command_topic: 'Bedroom/Thermostat/SetTargetTemp'
action_topic: 'Bedroom/Thermostat/HAction'
mode_state_topic: 'Bedroom/Thermostat/HAMode'
mode_command_topic: 'Bedroom/Thermostat/SetHAMode'