Интеграция термостата Konlen Tuya в HomeAssistent

от автора

Введение

Для домашней автоматизации я использую 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"

Заключение

В планах:

  1. Изменить элемент number на представление в виде числа с плавающей точкой.

  2. Заменить модуль WeMos D1 на ESP8266.

Надеюсь пройденный мной путь поможет другим участникам сообщества с модификацией устройств и интеграцией в HomeAssistent.


ссылка на оригинал статьи https://habr.com/ru/post/717422/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *