И так продолжим) …
Сначала почему мой выбор - Tasmota ?
Она импонирует мне своей -децентрализацией. Даже если «ляжет» ПО верхнего уровня такие как допустим Homed), Home Assistant, MQTT Broker, Алиса и т.д , пока жива локальная сеть - всегда можно будет управлять устройством по вэб. А также использовать на момент восстановления функционала, встроенные сценарии, таймеры и т.д То есть, всё не превратится в один момент в тыкву , как минимум превратится в паттисон)
Начнем с настройки Тасмоты , установить последнее ПО можно на страничке https://tasmota.github.io/install/ выбираем в списке устройств свиток -Unofficial-Tasmota Thermostat. Почитать про возможности термостата и опции можно на странице https://tasmota.github.io/docs/Thermostat/
Далее настраиваем на странице “Configure Module”, GPIO контроллера к которым подключены реле, датчики и т.д Я использую датчик DS18B20 подключенный к устройству .

На странице “Configure MQTT” настраиваем подключение к брокеру ( у меня брокер с паролем )

Нажав на вкладку "Console" вводим команды, и подтверждаем Enter :
Timezone +3:00
- часовой пояс
TelePeriod 300
– через какой промежуток тасмота будет выдавать данные в брокер , в секундах.
SetOption26 1
- адресация реле (даже если на данный момент не используете , то лучше ввести эту команду чтобы потом не думать почему не работают реле))
Latitude
,Longitude
– координаты Вашей местности для сценариев (от заката до рассвета и т.д)
Далее , для инициализации программы термостат при загрузке устройства вводим в консоле , и подтверждаем Enter :
Rule1 ON Power1#boot DO Backlog sensorinputset 1;controllermodeset 2;thermostatmodeset 1;temptargetset %mem1% ENDON ON mqtt#connected DO Publish2 stat/TestTopic/targetTempValue {"Temp":%mem1%} ENDON ON mem1#state DO Backlog temptargetset %value%;Publish2 stat/TestTopic/targetTempValue {"Temp":%mem1%} ENDON
Rule1 1
-Активируем правило
HOMEd – Custom – добавляем устройство ( соответственно в этом устройстве надо будет поменять имя tasmota_xxxx на имя своего устройства ) и Вуаля.
Для отслеживания состояния устройства, добавляем в CUSTOM устройство в полях:
Availability topic: tele/ tasmota_xxxx /LWT
Availability pattern: {{ online if value == Online else offline }}
Вариант №1 : Штатный термостат , с возможностью управлением через Алису.

{
"exposes": [
"thermostat"
],
"real": true,
"options": {
"operationMode": {
"enum": [
"eco",
"comfort",
"away",
"none"
]
},
"runningStatus": true,
"systemMode": {
"enum": [
"off",
"heat"
]
},
"targetTemperature": {
"max": 26,
"min": 6,
"step": 0.5
}
},
"bindings": {
"operationMode": {
"inTopic": "climat/tasmota_8317DD/preset_mode/set",
"outTopic": "climat/tasmota_8317DD/preset_mode/set"
},
"running": {
"inPattern": "{{ true if value == ON else false }}",
"inTopic": "stat/tasmota_8317DD/POWER1"
},
"systemMode": {
"inPattern": "{{ heat if value == 1 else off }}",
"inTopic": "cmnd/tasmota_8317DD/THERMOSTATMODESET",
"outPattern": "{{1 if value == heat else off }}",
"outTopic": "cmnd/tasmota_8317DD/THERMOSTATMODESET"
},
"targetTemperature": {
"inPattern": "{{ json.Thermostat0.TempTargetSet }}",
"inTopic": "tele/tasmota_8317DD/SENSOR",
"outTopic": "cmnd/tasmota_8317DD/TempTargetSet"
},
"temperature": {
"inPattern": "{{ json.DS18B20.Temperature }}",
"inTopic": "tele/tasmota_8317DD/SENSOR"
}
}
}
Вариант №2 : Разбитый по свойствам , Алиса не понимает его ), но есть возможность сделать собственное отображение нужных параметров , в вэбе.

{
"exposes": [
"temperature",
"targetTemperature",
"switch_2",
"operationMode",
"switch_1"
],
"real": true,
"options": {
"operationMode": {
"enum": [
"eco",
"comfort",
"away",
"none"
]
},
"targetTemperature": {
"max": 26,
"min": 6,
"step": 0.5,
"type": "number",
"unit": "°C"
}
},
"bindings": {
"operationMode": {
"inTopic": "climat/tasmota_8317DD/preset_mode/set",
"outTopic": "climat/tasmota_8317DD/preset_mode/set"
},
"status_1": {
"inPattern": "{{ on if value == 1 else off }}",
"inTopic": "cmnd/tasmota_8317DD/THERMOSTATMODESET",
"outPattern": "{{1 if value == on else 0 }}",
"outTopic": "cmnd/tasmota_8317DD/THERMOSTATMODESET"
},
"status_2": {
"inPattern": "{{ on if value == ON else off }}",
"inTopic": "stat/tasmota_8317DD/POWER1"
},
"targetTemperature": {
"inPattern": "{{ json.Thermostat0.TempTargetSet }}",
"inTopic": "tele/tasmota_8317DD/SENSOR",
"outTopic": "cmnd/tasmota_8317DD/TempTargetSet"
},
"temperature": {
"inPattern": "{{ json.DS18B20.Temperature }}",
"inTopic": "tele/tasmota_8317DD/SENSOR"
}
}
}

Интеграция термостата с НА.
В файле configuration.yaml прописываем расположение файла с настройками MQTT:
mqtt: !include mqtt.yaml
.
Создаем этот файл в корне homeassistant, прописываем наши устройства.
climate:
- name: Холл
modes:
- "off"
- "heat"
preset_modes:
- "eco"
- "comfort"
- "away"
preset_mode_command_topic: "climat/tasmota_8317DD/preset_mode/set"
preset_mode_state_topic: "climat/tasmota_8317DD/preset_mode/set"
mode_command_topic: "cmnd/tasmota_8317DD/THERMOSTATMODESET"
mode_command_template: "{{'1' if value == 'heat' else '0'}}"
mode_state_topic: "tele/tasmota_8317DD/STATE"
mode_state_template: "{{'heat' if value_json.POWER1 == 'ON' else 'off'}}"
current_temperature_topic: "tele/tasmota_8317DD/SENSOR"
current_temperature_template: "{{ value_json['DS18B20'].Temperature }}"
temperature_state_topic: "tele/tasmota_8317DD/SENSOR"
temperature_state_template: "{{ value_json['Thermostat0'].TempTargetSet }}"
min_temp: 6
max_temp: 28
precision: 0.1
temp_step: 0.5
retain: true
temperature_command_topic: "cmnd/tasmota_8317DD/TempTargetSet"
availability_topic: tasmota_8317DD/LWT
payload_available: Online
payload_not_available: Offline