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

У меня инвертное управление реле, возможно Ваш выбор Relay
На странице “Configure MQTT” настраиваем подключение к брокеру ( у меня брокер с паролем )

Нажав на вкладку "Console” вводим команды, и подтверждаем Enter :
Timezone +3:00
- часовой пояс
TelePeriod 300
– через какой промежуток тасмота будет выдавать данные в брокер , в секундах.
SetOption26 1
- адресация реле (даже если на данный момент не используете , то лучше ввести эту команду чтобы потом не думать почему не работают реле))
Latitude
, Longitude
– координаты Вашей местности для сценариев (от заката до рассвета и т.д)
Для сброса счетчика или внесения своих показателей:
EnergyToday 0
EnergyYesterday 0
EnergyTotal 0
Energyusage 0,0
например Energyusage 13141000,4161000
– где 13141 потребленные киловатты
Tariff1 23:00..07:00
– тариф ночь
Tariff2 07:00..23:00
– тариф день
Tariff9 0
– по выходным тоже считать по счетчикам
HOMEd – Custom – добавляем устройство ( соответственно в этом устройстве надо будет поменять имя tasmota_xxxx на имя своего устройства ) и Вуаля.
Для отслеживания состояния устройства, добавляем в CUSTOM устройство в полях:
Availability topic: tele/ tasmota_xxxx /LWT
Availability pattern: {{ online if value == Online else offline }}
{
"exposes": [
"switch_1",
"switch_2",
"switch_3",
"switch_4",
"voltage",
"current",
"frequency",
"energy_1",
"energy_2",
"energy_3",
"energy_4",
"energy_5",
"power",
"reactive_power",
"apparent_power",
"factor"
],
"real": true,
"options": {
"apparent_power": {
"unit": "VA"
},
"reactive_power": {
"unit": "VAr"
}
},
"bindings": {
"apparent_power": {
"inPattern": "{{ json.ENERGY.ApparentPower }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"current": {
"inPattern": "{{ json.ENERGY.Current }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"energy_1": {
"inPattern": "{{ json.ENERGY.Total }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"energy_2": {
"inPattern": "{{ json.ENERGY.TotalTariff[0] }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"energy_3": {
"inPattern": "{{ json.ENERGY.TotalTariff[1] }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"energy_4": {
"inPattern": "{{ json.ENERGY.Yesterday }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"energy_5": {
"inPattern": "{{ json.ENERGY.Today }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"factor": {
"inPattern": "{{ json.ENERGY.Factor }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"frequency": {
"inPattern": "{{ json.ENERGY.Frequency }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"power": {
"inPattern": "{{ json.ENERGY.Power }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"reactive_power": {
"inPattern": "{{ json.ENERGY.ReactivePower }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
},
"status_1": {
"inPattern": "{{ on if value == ON else off }}",
"inTopic": "stat/tasmota_215FE9/POWER1",
"outTopic": "cmnd/tasmota_215FE9/POWER1"
},
"status_2": {
"inPattern": "{{ on if value == ON else off }}",
"inTopic": "stat/tasmota_215FE9/POWER2",
"outTopic": "cmnd/tasmota_215FE9/POWER2"
},
"status_3": {
"inPattern": "{{ on if value == ON else off }}",
"inTopic": "stat/tasmota_215FE9/POWER3",
"outTopic": "cmnd/tasmota_215FE9/POWER3"
},
"status_4": {
"inPattern": "{{ on if value == ON else off }}",
"inTopic": "stat/tasmota_215FE9/POWER4",
"outTopic": "cmnd/tasmota_215FE9/POWER4"
},
"voltage": {
"inPattern": "{{ json.ENERGY.Voltage }}",
"inTopic": "tele/tasmota_215FE9/SENSOR"
}
}
}