Введение

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

Комментарии (4)


  1. Stalker_RED
    00.00.0000 00:00

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

    Но в WeMos и так внутри ESP8266.
    Можно конечно на "чистой" ESP-шке запустить тот-же код. Но все равно потребуется минимальная обвязка - хотя-бы несколько резисторов для подтяжки. А чтобы сделать компактнее, чем ESP8266 ESP-01 придется сильно постараться.


    1. DrHaos Автор
      00.00.0000 00:00

      Действительно хочется сделать размеры более компактными, так как WeMos D1 находится очень близко другим компонентам. На ESP8266 ESP-01 ранее как-то внимания не обращал, думаю стоит рассмотреть именно этот модуль.


  1. Jack_Vo
    00.00.0000 00:00

    А куда нельзя добавить 2 датчика в tasmota, и что за режим tuya?


    1. DrHaos Автор
      00.00.0000 00:00

      Я имел ввиду модуль TuyaMCU. В данном модуле доступен только один датчик температуры в компонентах Tasmota (номер 71) для сопоставления с командой TuyaMCU. Для теста также использовал сенсор влажности (номер 73), но визуально мне не это понравилось.