В системе Home Assistant есть специальный инструмент utility_meter.
В системе Home Assistant есть специальный инструмент utility_meter.
С помощью utility_meter Home Assistant может считать сколько набежало за период. Очень часто этот инструмент используется для того чтобы считать сколько кВт*ч было потрачено за день или месяц. Другое частое использование utility_meter — это подсчет сколько литров холодной/горячей воды было использовано за день/месяц.
Вода и электричество — это самые частые вещи которые считаются с помощью utility_meter, но с его помощью можно считать все что угодно.
У меня на ввод электричества в доме установлен датчик PZEM-004t (подробности).
Благодаря этому у меня в Home Assistant есть сенсор sensor.pzem_004t_v3_energy значение которого — это накопленная энергия в кВт*ч. Это то сколько было израсходовано кВт*ч с момента установки устройства. Это значение всегда увеличивается.
Значение сенсора sensor.pzem_004t_v3_energy это именно сколько набежало (кВт*ч), а не мгновенное потребление (кВт) (сенсор с мгновенным потреблением у меня тоже есть, но для utility_meter нужно не мгновенное потребление, а накопленное)
Этот сенсор нужно указать для utility_meter. Вот код configuration.yaml Home Assistant для подсчета сколько было потрачено за день:
utility_meter:
daily_energy_pzem:
source: sensor.pzem_004t_v3_energy
cycle: daily
Этот код создаст новый сенсор sensor.daily_energy_pzem, значение которого — сколько кВт*ч было израсходовано за сегодня:
Значение sensor.daily_energy_pzem растет в течении дня, а в 00:00:00 сбрасывается в ноль и начинает считаться заново.
У этого сенсора есть атрибут last_period, значение этого атрибута — сколько utility_meter насчитал за прошлый период. Это utility_meter считает за день, так что в значении last_period содержится то сколько было потрачено за вчера:
Вот пример кода configuration.yaml как создать два utility_meter, один который считает за день, второй — за месяц.
utility_meter:
daily_energy_pzem:
source: sensor.pzem_004t_v3_energy
cycle: daily
monthly_energy_pzem:
source: sensor.pzem_004t_v3_energy
cycle: monthly
В описании utility_meter обязательно нужно указать cycle — за какой период utility_meter будет считать. (то как часто он будет сбрасываться в ноль). Чаще всего используется daily и monthly, но есть много вариантов как часто utility_meter будет сбрасывать в ноль:
Сенсор созданный с помощью utility_meter считает сколько набежало, а в определенный момент сбрасывает в ноль и начинает считать заново. Например, при использовании cycle: daily сброс будет происходить каждый день в 00:00:00.
В том случае если в момент сброса Home Assistant не работает (например, сервер выключен или ровно в этот момент сервер перезагружается), то сброса уже не произойдет. HA продолжит дальше суммировать все в этот сенсор и сбросит в ноль только в следующий раз.
Сенсоры которые создает utility_meter хранит информацию только за текущий период (находится в state сенсора) и данные за прошлый период (находятся в атрибуте last_period). Встроенными средствами Home Assistant не очень удобно сделать хранение и отображение данных за много периодов. Например, показать сколько были израсходовано кВт*ч за каждый день месяца. Я пришел к тому что с помощью utility_meter считаю только данна по дням, а дальше сохраняю эти данные в табличку Google Sheets. (Подробности как это сделано).
В некоторых ситуациях нужно по разному считать в зависимости от времени. Например, если используется многотарифные счетчики электричества.
Вот что нужно написать в configuration.yaml для того чтобы считать два тарифа:
utility_meter:
daily_energy_pzem_tariff:
source: sensor.pzem_004t_v3_energy
cycle: daily
tariffs:
- day
- night
Этот код создает два сенсора:
Плюс создается сущность utility_meter.daily_energy_pzem_tariff
Если оставить только такой код, то данные все время будут записывать в первый сенсор, sensor.daily_energy_pzem_tariff_day.
Для того чтобы менять в какой сенсор будут накапливаться данные нужно еще написать автоматизацию. Вот пример который используется у меня С помощью time триггера происходит перещелкивание тарифа:
automation:
- alias: Set day tariff
trigger:
- platform: time
at: "07:00:00"
action:
- service: utility_meter.select_tariff
entity_id: utility_meter.daily_energy_pzem_tariff
data:
tariff: day
- alias: Set night tariff
trigger:
- platform: time
at: "23:00:00"
action:
- service: utility_meter.select_tariff
entity_id: utility_meter.daily_energy_pzem_tariff
data:
tariff: night