Brokly / ESPHome-Thermostate-Moes-BHT-002

16 stars 6 forks source link

ESPHome-Thermostate-Moes-BHT-002

Большое распространение у любителей домашней автоматизации получили WIFI термостаты Moes-BHT-002.

1

Полное название BHT-002-GBLW. Это вай-фай термостат электрического теплого пола из экосистемы Tuya. Конечно его можно использовать в родной экосистеме. Можно подключить к другим системам с использованием различных плгагинов и стыков. Я использую Home Assistant и для подключения у меня были варианты:

Все эти способы рабочие, но имеют недостатки. Где то обязательно нужно наличие подключения к внешним серверам, где то вы не сможете использовать весь потенциал устройства, где то будут ошибки и непонятки. Да и ни один из этих способов не будет 100% под вашим контролем. Поизучав последний проект я пришел к выводу, что было бы не плохо написать компонент для ESPHome. Тем более, что за связь в этом устройстве отвечает модуль Tuwe3S, который оказался аналогом ESP-12. Термостат имеет процессор который обслуживает процесс нагрева и управления и по UART обменивается данными с модулем Tuwe3S. Естественно найти полное описание протокола не удалось, в проекте WThermostatBeca был описан лишь служебный обмен, остального нет. Пришлось расшифровывать протокол, помогло то, что он простой и выполнен в китайском стиле :))

На выходе получается прошивка, которая является родной для ESPHome. Как всегда основная проблема первоначально залить ее в Tuwe3S. Знаю, что есть проект, который позволяет ничего не паяя заменить прошивку в устройствах от Туя. Мне проше припаяться. Схема стандартная:

image

Конечно совсем правильная схема, примерно такая: image

Но "на пару раз прошить", я решил обойтись без резисторов. Вам советую все же использовать резисторы. Передняя панель отстегнута от термостата. Питание подается внешнее 3.3 вольта. Перед заливкой прошивки нужно кратковременно замкунть RESET на GND.

Сущности устройства:

image

Часы синхронизируются автоматически, если задан источник времени.

Пример конфигурирования

climate:
  - platform: tuya_termo
    name: devicename
    uart_id: id_uart_bus
    time_id: id_sync_time
    mcu_reset_pin: GPIOxx
    optimistic: true
    visual:
      min_temperature: 5
      max_temperature: 35
      eco_temperature: 20
      overheat_temperature: 45
      deadzone_temperature: 1
    internal_temperature:
      name: Internal Temperature
    external_temperature:
      name: External Temperature
    children_lock:
      name: Child Lock
    shedule:
      selector:
        name: Plan Day Selector
      hours:
        name: Plan Hours
      minutes:
        name: Plan Minutes
      temperature:
        name: Plan Temperatures
    product_id:   
      name: Product Identifier

UPD (20.09.23):

Появились версии с модулем CB3S, на базе BK7231N. В данный момент существует замечательный проект LibreTiny EspHome, надеюсь вы его легко найдете. С его помощью можно скомпилировать прошивку под новый модуль. Код дополнен и исправлен для коректной работы с новыми версиями термостатов с чипами на BK72xx. Новые термостаты не публикуют температуру выносного датчика, поэтому у некоторых пользователей он будет в статусе "Неизвестно", просто скройте его в конигурации.

Выражаю благодарность за помощь в отладке кода Михаил Mivlz.

Модули TUYA на чипе BK72xx шьются, практически, так же как и ESP8266, только тут в самом начале загрузки нужно посадить контакт CEN на землю, примерно на секунду. Конечно, не звбывайте, что вам нужна LibreTiny ESPHOME.

Подключение для прошивки:

image

Распайка чипа с сайта производителя:

image

Таблица назначения ног:

image

UPD (18.12.23):

Из-за медленной реакции термостатов на бекенах добавлена настройка

- platform: tuya_termo
  оptimistic: true # оr false

По умолчанию - true. При включеной опции публикация данных всегда соответствует установкам пользователя, не взирая на то применил ли установку термостат. В случае неприменимой настроки, она обновится в реальное состояние через некоторое время.

UPD (02.03.24):

Добавлена настройка

- platform: tuya_termo
  mode_restore: true # оr false

По умолчанию - false. Настройка включает автовосстановление режима работы термостата после выключения питания. Восстанавливает только режим работы - Mode. Теперь статус подключения к WIFI и серверу передаваемый термостату соответствует реальной ситуации. Ранее статус был фиктивный.

UPD (07.03.24):

Теперь при восстановлении режим работы после пропадания питания (mode_restore: true), восстанавливаются все оперативные параметры термостата (режим работы, пресет, целевая температура).

Добавлен выход для ресета MCU термостата. При долгом отсутствии ответа от MCU термостата, на выходе формируется инверсный импульс сброса (замыкание на GND). В нормальном состоянии выход в режиме HI-IMPEDANCE. Для использования функции перезагрузки термостата требуеются аппаратные доработки. Нужно прокинуть провод от управления модудем DC12->DC5, на выходную ножку термостата.

image

Моя версия термостата использует преобразователь LP6498A

Точка подключения для управления режимом работы dc/dc преобразователя imageimage

- platform: tuya_termo
  mcu_reset_pin: GPIOXX

Изменено конфигурирование контролов расписания

- platform: tuya_termo
  shedule:
    selector:
      name: "Shedule Day Selector"
    hours:
      name: "Shedule Hours"
    minutes:
      name: "Sheduule Minutes"
    temperature:
      name: "Shedule Temperatures"

UPD (12.03.24):

Добавлен счетчик перезагрузок. Счетчик считает количество перезагрузок, при прошивке по OTA сбрасывается в ноль. Попытка перезагрузки происходит при долгом отсутствии ответа от MCU термостата. Если три попытки восстановить связь безуспешны, производится полная перезагрузка модуля связи.

- platform: tuya_termo
  mcu_reload_counter:
    name: MCU Reset Counter

Добавлена настройка позволяющая включить/выключить пакеты синхронизации времени. Некоторым термостатам, для правильной работы часов, требуются ежесекундные пакеты, которые позволяют часам идти, в противном случае, часы стоят. По умолчанию настрока выключена (false), ежесекундные пакеты не отправляются. Ниже пример конфигурации со включенной отправкой ежесекундных пакетов

- platform: tuya_termo
  time_id: sync_time_id
  time_sync_packets: true

Добавлены настройки дополнительных выходов. Некоторые устройства требуют управление через пины. Это вход ресета протокола reset_pin, получив на этом пине изменение уровня сигнала модуль управления проводит реинициализацию, с передачей всех настроек так, как будто устройство только что включили. Так же выход status_pin, преположительно, к этому пину должен быть подключен светодиод устройства, индицирующий режим работы сети. Эти пины могут быть добавлены в конфигурацию:

- platform: tuya_termo
  status_pin: Pxx
  reset_pin: Pxx

Но как правило, эти пины нужно конфигурировать по требованию MCU термостата. Если термостату требуется такая конфиигурация, то в лог будут выданы сообщения уровня ERROR и/или WARNING, в которых будут указаны нужные пины.

Примерная полная конфигурация (не все что есть в ней нужно Вам):

climate:
  - platform: tuya_termo
    name: ${upper_devicename}
    uart_id: uart_bus # uart шина для управления MCU термостата
    time_id: sync_time # источник синхронизации времени
    time_sync_packets: false # пакеты синхронизациии времени, для некоторых версий устройств (по умолчанию false)
    optimistic: true 
    mode_restore: true # настройка восстановления режима работы после перезагрузки (по умолчанию true)
    mcu_reset_pin: P9  # выходной пин принудительного сброса MCU термостата (только для доработанных термостатов)
    reset_pin: P14 # входной пин для реинициализации протокола обмена с MCU, требуется для некоторых термостатов
    status_pin: P15 # выходной пин индикации сетевого статуса, требуется для некоторых термостатов, но можно установить светодиод
    mcu_reload_counter: # счетчик принудительных перезагрузок MCU термостата
      name: ${upper_devicename} MCU Reset Counter
    visual: # настройки для правильного отображения виджета, в большинстве случаев используются по умолчанию
      min_temperature: 5
      max_temperature: 35 
      eco_temperature: 20
      overheat_temperature: 45
      deadzone_temperature: 1
    internal_temperature: # сенсор температуры воздуха в помещении
      name: ${upper_devicename} Internal Temperature  
    external_temperature: # внешний сенсор температуры пола
      name: ${upper_devicename} External Temperature
    children_lock:
      name: ${upper_devicename} Child Lock
    shedule: # набор контролов для управления расписанием автономной работы термостата
      selector:
        name: ${upper_devicename} Plan Day Selector
      hours:
        name: ${upper_devicename} Plan Hours
      minutes:
        name: ${upper_devicename} Plan Minutes
      temperature:
        name: ${upper_devicename} Plan Temperatures
    product_id:   
      name: ${upper_devicename} Product Identifier