Введение
Для домашней автоматизации я использую HomeAssistant. Уже некоторое время для управления насосом отопления использовал отдельный датчик температуры и умную розетку от Xiaomi. На замену этой связке на просторах китайского магазина нашел устройство от Konlen, которое лучше подходило для решения этой задачи.
Описание устройства

2 канала для датчиков температуры с диапазоном температур от -35℃ до +140℃ (что подходит для измерения температуры на подаче и обратке)
2 канала управления 10A
Wi-Fi 2.4G
дисплей с одновременным отображением 2-х показателей
экосистема Tuya
Техническое задание
передавать показания в HomeAssistent
управлять устройством из HomeAssistent
ограничить передаваемые данные на сторонние сервера
Выбор варианта интеграции
использовать одну из интеграций Tuya
использовать Tasmota
использовать интеграцию ESPHome
Создав учетную запись Tuya dev и подробнее изучив данные, которые передает устройство на внешние сервера, я решил отказаться от облачной интеграции Tuya. Пример данных.
{ "result": { "active_time": 1667647112, "biz_type": 18, "category": "rs", "create_time": 1667415209, "icon": "smart/icon/123456/123456.jpg", "id": "01234567890123456789", "ip": "X.X.X.X", "lat": "X.X", "local_key": "0123456789012345", "lon": "X.X", "model": "WF72TT/WF96TT", "name": "WF72TT/WF96TT", "online": true, "owner_id": "12345678", "product_id": "1234567890123456", "product_name": "WF72TT/WF96TT", "status": [ { "code": "switch", "value": true }, { "code": "temp_set", "value": 380 }, { "code": "temp_current", "value": 817 } ], "sub": false, "time_zone": "+00:00", "uid": "01234567890123456789", "update_time": 1667647118, "uuid": "0123456789012345" }, "success": true, "t": 1667676862175, "tid": "123456789012345678901234567890123456" }
Добавив устройство с использованием интеграции Localtuya пришлось добавлять каждый сенсор по одному элементу при этом держать в голове или записывать уже добавленные элементы. Кроме того после сохранения уже не смог добавлять или изменять элементы.
Таким образом решил попытаться перепрошить устройство на одну из систем Tasmota или ESPHome.
Модификация
Подключение к сети Wi-Fi реализовано на базе модуля TYWE1S построенного на базе беспроводного радиочипа ESP8266.

Для данного модуля имеется подробная документация в том числе и на сайте Tuya dev, но я решил пойти по другому пути и заменить данный модуль на менее компактную плату WeMos D1 Мини. Для замены модуля накидал как это должно выглядеть. И заменил старый модуль на новый.

Далее стало необходимо подготовить прошивку для модуля и залить ее. Так как небольшой опыт использования ESPHome у меня уже был, для начала было решено попробовать Tasmota. В Web интерфейсе сенсоры легко добавлялись, но оказалось, что нельзя добавить 2 датчика температуры для режима Tuya. В результате от Tasmota также отказался.
Прошивка модуля
Прошить WeMos D1 можно через USB. Я для заливки прошивки использовал утилиту Nodemcu flasher. Интерфейс программы предельно простой, главное правильно выбрать параметры для прошивки (com port, путь до файла прошивки, baudrate, flash size).

Для начала в интерфейсе ESPHome создал базовую конфигурация прошивки для устройств Tuya, собрал прошивку и залил на устройство через USB. Далее для заливки прошивки использовал интерфейс ESPHome.
esphome: name: term platform: ESP8266 board: d1_mini logger: baud_rate: 0 ota: password: "12345678901234567890" wifi: ssid: !secret wifi_ssid password: !secret wifi_password manual_ip: static_ip: 192.168.1.100 gateway: 192.168.1.1 subnet: 255.255.255.0 ap: ssid: "Termostat Fallback Hotspot" password: "MMMMMMMMMMM" web_server: port: 88 uart: rx_pin: GPIO3 tx_pin: GPIO1 baud_rate: 9600 time: - platform: homeassistant id: ha_time tuya: time_id: ha_time
Для платформы Tuya каждый отдельный сенсор это так называемый DataPoint. Для взаимодействия с сенсорами необходимо их описать. В качестве опоры я использовал сохраненный ранее снимок экрана с оригинального приложения SmartLife и логи модуля в ESPHome.

Таким способом были выявлены следующие сопоставления.
[19:25:55][C][tuya:048]: Datapoint 1: switch (value: OFF) 1 Rele [19:25:55][C][tuya:050]: Datapoint 2: int value (value: 295) 1 Temperature stop [19:25:55][C][tuya:050]: Datapoint 3: int value (value: 239) 1 Temperature [19:25:55][C][tuya:050]: Datapoint 101: int value (value: 300) 1 Temperature start [19:25:55][C][tuya:050]: Datapoint 102: int value (value: 263) 2 Temperature [19:25:55][C][tuya:050]: Datapoint 103: int value (value: 330) 2 Temperature start [19:25:55][C][tuya:050]: Datapoint 104: int value (value: 300) 2 Temperature stop [19:25:55][C][tuya:048]: Datapoint 105: switch (value: OFF) 2 Rele [19:25:55][C][tuya:050]: Datapoint 106: int value (value: 300) [19:25:55][C][tuya:050]: Datapoint 107: int value (value: 250) [19:25:55][C][tuya:048]: Datapoint 108: switch (value: OFF) [19:25:55][C][tuya:054]: Datapoint 109: enum (value: 0) 1 Status sensor [19:25:55][C][tuya:054]: Datapoint 110: enum (value: 0) 2 Status sensor [19:25:55][C][tuya:054]: Datapoint 111: enum (value: 1) 2 Regim rele [19:25:55][C][tuya:054]: Datapoint 112: enum (value: 1) Alarm [19:25:55][C][tuya:050]: Datapoint 113: int value (value: -20) 1 Temperature callibrate [19:25:55][C][tuya:050]: Datapoint 114: int value (value: 5) 2 Temperature callibrate [19:25:55][C][tuya:050]: Datapoint 115: int value (value: 24) Diff Temperature [19:25:55][C][tuya:050]: Datapoint 116: int value (value: 239) 1 Temperature double [19:25:55][C][tuya:050]: Datapoint 117: int value (value: 263) 2 Temperature double
Далее я сформировал итоговый конфигурационный файл.
esphome: name: term platform: ESP8266 board: d1_mini logger: baud_rate: 0 ota: password: "12345678901234567890" wifi: ssid: !secret wifi_ssid password: !secret wifi_password manual_ip: static_ip: 192.168.1.100 gateway: 192.168.1.1 subnet: 255.255.255.0 ap: ssid: "Termostat Fallback Hotspot" password: "MMMMMMMMMMM" web_server: port: 88 uart: rx_pin: GPIO3 tx_pin: GPIO1 baud_rate: 9600 time: - platform: homeassistant id: ha_time tuya: time_id: ha_time # Create a sensor sensor: - platform: "tuya" name: "1 Temperature" id: temperature_1 sensor_datapoint: 3 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 1 filters: - multiply: 0.1 - platform: "tuya" name: "2 Temperature" id: temperature_2 sensor_datapoint: 102 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 1 filters: - multiply: 0.1 - platform: "tuya" name: "Diff Temperature" id: diff_t2_t1 sensor_datapoint: 115 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 1 filters: - multiply: 0.1 - platform: "tuya" name: "1 Temperature a" id: temperature_1_1 sensor_datapoint: 116 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 1 filters: - multiply: 0.1 - platform: "tuya" name: "2 Temperature a" id: temperature_2_2 sensor_datapoint: 117 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 1 filters: - multiply: 0.1 switch: - platform: "tuya" name: "1 Rele" id: rele_1 switch_datapoint: 1 - platform: "tuya" name: "2 Rele" id: rele_2 switch_datapoint: 105 number: - platform: "tuya" name: "1 Temperature start" id: ch_start_temp1 number_datapoint: 101 min_value: -400.0 max_value: 1400.0 step: 1 unit_of_measurement: "°C" - platform: "tuya" name: "1 Temperature stop" id: ch_stop_temp1 number_datapoint: 2 min_value: -400.0 max_value: 1400.0 step: 1 unit_of_measurement: "°C" - platform: "tuya" name: "2 Temperature start" id: ch_start_temp2 number_datapoint: 103 min_value: -400.0 max_value: 1400.0 step: 1 unit_of_measurement: "°C" - platform: "tuya" name: "2 Temperature stop" id: ch_stop_temp2 number_datapoint: 104 min_value: -400.0 max_value: 1400.0 step: 1 unit_of_measurement: "°C" - platform: "tuya" name: "1 Temperature callibrate" id: ch_test_calibrate1 number_datapoint: 113 min_value: -150.0 max_value: 150.0 step: 1 unit_of_measurement: "°C" - platform: "tuya" name: "2 Temperature callibrate" id: ch_test_calibrate2 number_datapoint: 114 min_value: -150.0 max_value: 150.0 step: 1 unit_of_measurement: "°C" - platform: "tuya" name: "test 106" id: test_106 number_datapoint: 106 min_value: -400.0 max_value: 1400.0 step: 1 unit_of_measurement: "°C" - platform: "tuya" name: "test 107" id: test_107 number_datapoint: 107 min_value: -400.0 max_value: 1400.0 step: 1 unit_of_measurement: "°C" select: - platform: "tuya" id: ch_sensor_1 name: "1 Status sensor" enum_datapoint: 109 optimistic: true options: 0: "Нормально" 1: "Неисправно" - platform: "tuya" id: ch_sensor_2 name: "2 Status sensor" enum_datapoint: 110 optimistic: true options: 0: "Нормально" 1: "Неисправно" - platform: "tuya" id: ch_mode2 name: "2 Regim rele" enum_datapoint: 111 optimistic: true options: 0: Нагрев 1: Охлаждение 2: Сигнализация 3: Разница температур - platform: "tuya" id: alarm name: "Alarm" enum_datapoint: 112 optimistic: true options: 0: "Выключено" 1: "Включено" 2: "f" 3: "d"
Заключение
В планах:
Изменить элемент number на представление в виде числа с плавающей точкой.
Заменить модуль WeMos D1 на ESP8266.
Надеюсь пройденный мной путь поможет другим участникам сообщества с модификацией устройств и интеграцией в HomeAssistent.
