Не нашел похожей статьи в одном источнике, провел изыскания и вот результат

Общая концепция снимания показаний с счетчика коммунальных услуг:

  • исходит из того, что физический счетчик коммунальной услуги имеет возможность подать импульс на определённый объем поданной услуги, например на каждые 10 литров природного газа 1 импульс, далее в статье будет использован этот случай для примеров.

  • этот импульс преобразуется в виде сообщения в брокер mqtt как нажатие на кнопку, т.е. для каждого импульса сначала "Включено", затем "Выключено"

  • "Счётчик mqtt" в HA из брокера mqtt считает количество импульсов

  • сенсор HA из "Счетчика mqtt" получает объем потребленный услуги (важным является размерность, например для объема газа это m³) и необходимые параметры

  • полученный сенсор указывается в HA в разделе Энергия\Конфигурация энергии как Источник

  • далее HA своим стандартным образом собирает статистику и визуализирует в виде графиков и отчетов.

    Ранее (несколько лет) подсчет коммунальных услуг был настроен по статье Cчетчик газа в Home Assistant без паяльника Однако в очередной раз запутавшись в ручной постройке диаграмм решил перевести всё на стандартные рельсы из коробки. Вроде получилось.

К деталям

  • часть по получению импульса на оборот с физического счетчика и отправки в брокер оставлю за рамками этой статьи. У меня это выполнено на tasmota и эмуляции нажатия на кнопку через gpio с подтяжкой резистором. Нашел фабричный датчик без гальванического подключения именно для моего газового счетчика - внутри датчика геркон.

  • Создаем бинарный сенсор в HA для получения импульсов от механического счетчика:
    mqtt:
    binary_sensor:
    - name: "gas_meter_pulse"
    unique_id: "gas_meter_pulse"
    state_topic: "stat/IoT-O142-/GAS_METER_PULSE"
    off_delay: 1
    payload_on: "ON"
    payload_off: "OFF"

  • Создаем счётчик для подсчета импульсов от счетчика коммунальной услуги (в моём случае газа)

     Настройки\Устройства и службы\Вспомогательные\Создать вспомогательный объект
    Настройки\Устройства и службы\Вспомогательные\Создать вспомогательный объект

    В этом счетчике будем хранить все цифры которые показывает счетчик. Задаём название (у меня это "Счетчик газа О142 (все цифры без разделения)"), начальное значение счетчика - текущие показания счетчик. Для примера мой счетчик имеет на циферблате точность 3 знака, но импульс подает только при полном обороте последнего колеса - т.е. получается, чтобы ввести начальный остаток (то что сейчас на счетчике) например 123,451 м3 в поле "Начальное значение счетчика" надо указать 123450 и "Шаг" указать равный 10. Тогда при провороте последнего колеса (и соответственно подачи импульса) значение счетчика увеличится на 10 и получится 123460. Задаем "Идентификатор объекта" (в примерах это schetchik_gaza_o142_vse_tsifry_bez_razdeleniia).

  • Создаём автоматизацию для подсчета импульсов - объема поданной услуги
    Добавляем триггер

    Настройки\Автоматизации и сцены\Автоматизации+Создать автоматизацию\Создать новую автоматизацию
    Настройки\Автоматизации и сцены\Автоматизации+Создать автоматизацию\Создать новую автоматизацию

    Добавляем действие

    Автоматизация увеличит значение счетчика при получении импульса от физического счетчика на инкремент.

    • Создаем сенсор для использования в разделе "Энергия" HA. Для сенсора необходимы указать параметры device_class: gas и total_increasing, что не получилось сделать через веб-интерфес HA и получилось только через современый формат. Без этих параметров невозможно выбрать сенсор для подсчета коммунальной услуги и правило пересчета из количества импульсов в m³. Ниже пример для газового счетчика.

      В основном файле конфигурации HA configuration.yaml добавляем строку

      template: !include template.yaml

      Создаём файл ./template.yaml следующего содержимого

      - sensor:     - name: "Счетчик газа О142(m³)"       unique_id: gas_meter_sensor       unit_of_measurement: m³       state: "{{ (states('counter.schetchik_gaza_o142_vse_tsifry_bez_razdeleniia') | float) / 1000 }}"       device_class: gas       state_class: total_increasing

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

Настройки\Устройства и службы\ Вспомогательные+Создать вспомогательный объект \ Число.
Настройки\Устройства и службы\ Вспомогательные+Создать вспомогательный объект \ Число.

В дополнительных настройках выбираем "Поле ввода", единица измерения обязательна должна быть из совместимых, например для природного газа одна из следующих.

В примере это m³.
В примере это m³.


Заполняем Название, Минимальное и Максимальные значения, в Дополнительных настройках Режим отображения "Поле ввода", Шаг слайдера 0.0001 - т.к. газ указывают за 1000м3, счетчик показывает в m³ - точность до 4 знака и надо делить на 1000. Для газа Единица измерения должна быть RUB/m³. Получится должно примерно так:

  • в разделе "Энергия"\вертикальное троеточие\Конфигурация энергии идем в Природный газ\+Добавить последний созданный сенсор и "Использовать объект с текущей ценой"

  • получится примерно следующее

Подсчет стоимости за указанный период.
Подсчет стоимости за указанный период.

Послесловие:

  • стоит выделить все составные элементы подсчета коммунальной услуги в одну категорию - в последующем проще восстанавливать логическую цепочку при доработках.

  • стоит проводить периодическую корректировку значений счетчика газа в HA и показаний физического счетчика, т.к. неизбежны пропуски импульсов и соответственно занижение показаний счетчика в HA. Для этого идём в Панель разработчика\Действия, ищем Установить значение (counter.set_value), выбираем объект (тот который отражает все цифры счетчика без запятой), вводим новое значение счетчика не забывая что инкремент 10 и это означает, что последняя цифра должна быть нулем.

  • не понятен момент как при увеличении тарифа (повышение стоимости коммунальных услуг) кроме как в тот же день поменять и тариф в HA. Может стоит разработчикам HA ввести регистр "в такой-то период считай по такому тарифу, далее по такому".

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