Когда я начал автоматизировать свой умный дом, одной из целей было отслеживание потребления электроэнергии. Казалось бы, задача простая — в интернете хватает готовых решений. Многие из них легко интегрируются в Home Assistant и работают «из коробки». Но есть нюанс: учёт по нескольким тарифам (день, ночь, пик) найденные решения не полноценно поддерживают.
После тестирования нескольких конфигураций я пришёл к выводу — проще сделать своё решение, которое будет учитывать текущий тариф в статистике. Так появился этот проект: умный счётчик Tuya с Zigbee и интеграцией в Home Assistant с поддержкой многотарифного учёта электроэнергии.
В этой статье я расскажу, как всё настроил: от подключения счётчика до реализации логики учёта по тарифам. Потратил на это немало времени, но теперь система работает стабильно, и ею удобно пользоваться.
Основные задачи, которые я решал:
поддержка нескольких тарифов (пик, полупик, ночь);
возможность корректировки значений через интерфейс Home Assistant;
устойчивость к кратковременным сбоям (перезапуск сервера с Home Assistant, обрыв Zigbee-сети и т.д.);
защита от аномальных скачков значений — например, если счётчик внезапно вернёт некорректные данные.
Система была отлажена на Home Assistant версии 2025.7.

Оборудование
Для измерения потребления я выбрал однофазный счётчик Tuya с токовым трансформатором (около 1900 руб.). Он измеряет основные параметры — напряжение, ток и потреблённую энергию, передаёт данные по Zigbee и отлично интегрируется с Home Assistant.

Я специально отказался от модели с экраном — в щитке уже есть основной счётчик с дисплеем, а дублировать показания смысла не вижу.
Установка максимально простая: токовый трансформатор надевается на фазный провод сразу после основного счётчика — и начинает фиксировать общее потребление электроэнергии в доме. Само устройство тоже подключается к питанию. Хотя схема подключения несложная, для безопасности я всё же рекомендую доверить монтаж квалифицированному электрику.

После установки устройство просто добавляется в экосистему Tuya. Для работы по протоколу Zigbee потребуется соответствующий хаб.
У счётчиков с токовыми трансформаторами могут быть небольшие отклонения в измерениях. Но это не проблема — через приложение можно выполнить калибровку, чтобы данные стали точнее.

Home Assistant
Для добавления счетчика в Home Assistant, я использую интеграцию с Tuya (Настройки → Устройства и службы → Интеграции). Через неё в Home Assistant доступны данные большинства устройств, которые добавлены в систему Tuya.

После появления счетчика в системе необходимо добавить следующий код конфигурации. Для данного кода можно создать отдельный packages/energy.yaml
или добавить в основной configuration.yaml
input_number:
energy_t1:
name: "Energy T1"
unit_of_measurement: "kWh"
min: 0
max: 100000
step: 0.01
mode: box
energy_t2:
name: "Energy T2"
unit_of_measurement: "kWh"
min: 0
max: 100000
step: 0.01
mode: box
energy_t3:
name: "Energy T3"
unit_of_measurement: "kWh"
min: 0
max: 100000
step: 0.01
mode: box
energy_last_meter:
name: "Предыдущее значение энергии"
unit_of_measurement: "kWh"
min: 0
max: 100000
step: 0.01
В этом коде мы добавляем поля для ввода значений текущего значения энергии (t1, t2, t3) и плюс в energy_last_meter
будем хранить общее накопленное значение нашим счетчиком (это будет чисто технический параметр для работы конфигурации).

Далее создадим сенсоры (energy_t1_sensor
, energy_t2_sensor
, energy_t3_sensor
), из которых будет выводиться информация об энергии. Можно этот код не добавлять, а использовать input_number созданные выше, но тогда значения будут показываться не в виде текста, а как поле для ввода данных, что не всегда красиво выглядит в интерфейсе.
template:
- sensor:
- name: "Energy T1 sensor"
unique_id: "energy_t1_sensor"
unit_of_measurement: "kWh"
device_class: energy
availability: "{{ states('input_number.energy_t1') not in ['unknown', 'unavailable'] }}"
state: "{{ states('input_number.energy_t1') | float(0) }}"
- name: "Energy T2 sensor"
unique_id: "energy_t2_sensor"
unit_of_measurement: "kWh"
device_class: energy
availability: "{{ states('input_number.energy_t2') not in ['unknown', 'unavailable'] }}"
state: "{{ states('input_number.energy_t2') | float(0) }}"
- name: "Energy T3 sensor"
unique_id: "energy_t3_sensor"
unit_of_measurement: "kWh"
device_class: energy
availability: "{{ states('input_number.energy_t3') not in ['unknown', 'unavailable'] }}"
state: "{{ states('input_number.energy_t3') | float(0) }}"
Далее в файле automations.yaml
или в блоке automation: основного конфигурационного файла, задаём автоматизацию по переключению тарифов:
- alias: "Accumulation of consumption by tariffs"
trigger:
- platform: time_pattern
minutes: "/1"
variables:
current_energy: "{{ states('sensor.zigbee_dual_meter_total_energy') | float(0) }}"
last_energy: "{{ states('input_number.energy_last_meter') | float(0) }}"
energy_delta: "{{ current_energy - last_energy }}"
current_tariff: >
{% set hour = now().hour %}
{% if 7 <= hour < 10 or 17 <= hour < 21 %}
t1
{% elif 23 <= hour or hour < 7 %}
t2
{% else %}
t3
{% endif %}
input_number_entity: "input_number.energy_{{ current_tariff }}"
condition:
- condition: numeric_state
entity_id: sensor.zigbee_dual_meter_total_energy
above: 0
action:
- choose:
- conditions:
- condition: template
value_template: "{{ 0 < energy_delta < 1 }}"
sequence:
- service: input_number.set_value
target:
entity_id: "{{ input_number_entity }}"
data:
value: >
{{ (states(input_number_entity) | float(0)) + energy_delta }}
- service: input_number.set_value
target:
entity_id: input_number.energy_last_meter
data:
value: "{{ current_energy }}"
Представленный код запускается каждую минуту и сравнивает текущее накопленное значение счетчика current_energy
с предыдущим last_energy
. Если energy_delta
больше нуля, то в переменной current_tariff
определяется текущий тариф в зависимости от времени суток и на основе него, будет определено значение переменной input_number_entity
куда нужно прибавить полученную energy_delta
.
Данные о потребляемой мощности берутся с сенсора счётчика sensor.zigbee_dual_meter_total_energy
.
На основе текущего времени суток определяется активный тариф:
T1 — с 7:00 до 10:00 и с 17:00 до 21:00;
T2 — с 23:00 до 7:00;
T3 — во все остальные часы.
Также мы фильтруем данные, значение energy_delta
должно быть в диапазоне от 0 до 1 кВт/ч, если выше, то его отбрасываем. Иногда бывают выбросы показателей и не отфильтровав значение, мы испортим статистику, да и в квартире/доме потребление 1 кВт/ч за 1 минуту невозможно.
После этого мы присваиваем input_number_entity
полученное значение, а также в поле energy_last_meter
устанавливаем current_energy
, чтобы сравнивать при следующем изменении показателя счетчика.
Данная конфигурация позволяет устанавливать и корректировать текущие значения уже потребленной энергии через интерфейс Home Assistant, и задать временные интервалы переключения тарифов.
Дополнительно датчики можно вывести на дашборд Energy, где красиво отобразить потребляемую энергию.

Заключение
Созданная система работает надёжно даже при кратковременных сбоях связи или перезапуске Home Assistant. Она даёт точную картину потребления по каждому тарифу, а при необходимости значения можно вручную скорректировать через интерфейс.

Другие полезные конфигурации для умного дома и обзоры умных устройств, можно найти в моём Tg канале.