Подключение газового счетчика к HomeAssistant. Часть 2

И так … в HomeAssistant у нас появилась новая интеграция устройства и его сущности (на скрине это 6 объектов)

Хочу заметить, что при первичной настройки вам необходимо будет активировать устройство в HA затем только его использовать. Для активации используем значение строки API key в конфигурации модуля 

# Enable Home Assistant API
api:
  encryption:
    key: "XDe27ARR4uuwknd19Popko1LfBQC+19m6rIPctFgMwС="

Рассмотрим что это за сущности.

Ну как все и было задумано 🙂

sensor.gaz_uptime_z16 аптайм работы нашего датчика
number.gaz_z16 количество накрученных кубов газа
binary_sensor.gaz_z16_live_impuls наличие импульса на датчике (Вкл/Выкл)
button.gaz_z16_restart_device перезагрузка модуля ESP
sensor.gaz_connected_ssid подключение к SSID WIFI сети
sensor.gaz_ip_address IP адрес модуля ESP

можно наплодить кучу различных сущностей … все зависит от вашей фантазии.

Далее можно считать наши потребления газа. Есть два способа. Считать импульсы используя несложную автоматизацию в HomeAssistant и использовать подсчет импульсов уже в сущности number.gaz_z16 (т.е. тот самый сенсор который мы определили в конфигурации ESPHOME для подсчета этих импульсов). Вот этот код

package.xml


binary_sensor:
  - platform: gpio
    id: internal_pulse_counter_gas
    pin:
      number: ${pin_gas_counter}
      mode: INPUT_PULLUP
      inverted: true
    name: "${device_name} Live-Impuls"
    filters:
     - delayed_on: 100ms
    on_press:
      then:
        - number.increment: Z16_meter_number

собственно такой же сенсор у нас есть в конфигурации ESP модуля. Это так для самообразования. Можете его удалить. 🙂

Выбираем второй. Далее нам нужно использовать Utility Meter для сбора статистики по времени/периодам. Для этого я сделал отдельный package.xml и будем понемногу его разбирать. Тариф однодневный как пример 🙂

package.xml

# Utility meter
utility_meter:
  gas_um_yearly:
    source: number.gaz_z16
    cycle: yearly
    tariffs:
      - single

  gas_um_monthly:
    source: number.gaz_z16
    cycle: monthly
    tariffs:
      - single

  gas_um_daily:
    source: number.gaz_z16
    cycle: daily
    tariffs:
      - single

  gas_um_hourly:
    source: number.gaz_z16
    cycle: hourly
    tariffs:
      - single

Сами показания коммунальных счетчиков (за час / день / прошедший день / месяц / прошедший месяц / год / прошедший год). Этого должно нам хватить.

package.xml

# Показания счетчиков
sensor:

- platform: template
  sensors:
    gas_counter_hourly:
      friendly_name: "Показания счетчика газа - час"
      unit_of_measurement: "m³"
      value_template: "{{ (states('sensor.gas_um_hourly_single')| round(3)) }}"
      icon_template: mdi:counter

- platform: template
  sensors:
    gas_today:
      friendly_name: "Показания счетчика газа - день"
      unit_of_measurement: "m³"
      value_template: "{{ (states('sensor.gas_um_daily_single')| float | round(3)) }}"

      icon_template: mdi:counter

- platform: template
  sensors:
    gas_yesterday:
      friendly_name: "Показания счетчика газа - вчера"
      unit_of_measurement: "m³"
      value_template: "{{ (state_attr('sensor.gas_um_daily_single', 'last_period'))| round(3) }}"
      icon_template: mdi:counter

- platform: template
  sensors:
    gas_monthly:
      friendly_name: "Показания счетчика газа - месяц"
      unit_of_measurement: "m³"
      value_template: "{{ (states('sensor.gas_um_monthly_single')| float | round(3)) }}"
      icon_template: mdi:counter

- platform: template
  sensors:
    gas_monthly_last:
      friendly_name: "Показания счетчика газа - прошлый месяц"
      unit_of_measurement: "m³"
      value_template: "{{ (state_attr('sensor.gas_um_monthly_single', 'last_period'))| round(3) }}"
      icon_template: mdi:counter

- platform: template
  sensors:
    gas_yearly:
      friendly_name: "Показания счетчика газа - год"
      unit_of_measurement: "m³"
      value_template: "{{ (states('sensor.gas_um_yearly_single')| float | round(3)) }}"
      icon_template: mdi:counter

- platform: template
  sensors:
    gas_yearly_last:
      friendly_name: "Показания счетчика газа - прошлый год"
      unit_of_measurement: "m³"
      value_template: "{{ (state_attr('sensor.gas_um_yearly_single', 'last_period'))| round(3) }}"
      icon_template: mdi:counter

 отключаем историю датчику, чтобы не захламлять и не загружать систему постоянными данными от нашего ESP модуля

recorder.yaml

recorder:
  exclude:
    entities:
      - number.gaz_z16

Чтобы получить статистику за 2023г. потребления газа мне потребуются  дополнительные настройки. А именно нужно сложить показания за год старого счетчика (это должен быть какой-нибудь input_number с потребленными данными) и текущие накопленные показания от момента замены нового газового счетчика. Не буду вас утруждать этими настройками, но суть понятна. Эти настройки для моих потребностей. Заморачиваться не будем. Определим новый input_number для определения стоимости потребленного газа

input_number.energy_gas_unit – цена в нашем регионе за 1000 кубов газа (у нас это 7328руб)

package.xml

input_number:

# Цена газа за 1000 кубов
  energy_gas_unit:
    name: Gas unit price (RUB/m³)
    min: 0
    max: 999999
    step: 0.01
    unit_of_measurement: p
    mode: box

в системе это выглядит так :

меняйте здесь значения Цена газа и будет вам счастье. 🙂 На остальные значения не обращаем внимания они для другой цели 🙂

теперь соот-но конвертации в рубли по потреблению газа

package.xml

- platform: template
  sensors:
# Расход газа в РУБ.

- platform: template
  sensors:
    gas_this_yearly_cash:
      friendly_name: "Стоимость газа (год)"
      unit_of_measurement: '₽'
      value_template: "{{ ((states('sensor.gas_um_yearly_single') | float) / 1000 * (states('input_number.energy_gas_unit') | float)) | round(2) }}"
      icon_template: mdi:cash-100
      device_class: monetary

- platform: template
  sensors:
    gas_last_month_cash:
      friendly_name: "Стоимость газа (прошлый месяц)"
      unit_of_measurement: '₽'
      value_template: "{{ ((state_attr('sensor.gas_um_monthly_single', 'last_period') | float) / 1000 * (states('input_number.energy_gas_unit') | float)) | round(2) }}"
      icon_template: mdi:cash-100
      device_class: monetary

- platform: template
  sensors:
    gas_this_month_cash:
      friendly_name: "Стоимость газа (этот месяц)"
      unit_of_measurement: '₽'
      value_template: "{{ ((states('sensor.gas_um_monthly_single') | float) / 1000 * (states('input_number.energy_gas_unit') | float)) | round(2) }}"
      icon_template: mdi:cash-100
      device_class: monetary

- platform: template
  sensors:
    gas_today_cash:
      friendly_name: "Стоимость газа (сегодня)"
      unit_of_measurement: '₽'
      value_template: "{{ ((states('sensor.gas_um_daily_single') | float) / 1000 * (states('input_number.energy_gas_unit') | float)) | round(2) }}"
      icon_template: mdi:cash-100
      device_class: monetary

- platform: template
  sensors:
    gas_yesterday_cash:
      friendly_name: "Стоимость газа (вчера)"
      unit_of_measurement: '₽'
      value_template: "{{ ((state_attr('sensor.gas_um_daily_single', 'last_period') | float) / 1000 * (states('input_number.energy_gas_unit') | float)) | round(2) }}"
      icon_template: mdi:cash-100
      device_class: monetary

Напоминаю что шкала газового счетчика : 99999.9

Чтобы скорректировать Utility Meter годичные показания по новому счетчику (если требуется это конечно) можно произвести калибровку и выставить нужные вам значения. Наполнение будет работать с момента изменения новых показаний. Калибровать можно только Коммунадьные счетчики (в Utility meter)

lovelace.yaml отображаем на странице HomeAssistant

## ПОТРЕБЛЕНИЕ ГАЗА

  - type: vertical-stack
    cards:
      - type: markdown
        style: |
            ha-card {
              font-size: 18px;
            }          
        content: >
           **Потребление газа**

  - type: vertical-stack
#    title: Потребление газа
    cards:
      - entity: sensor.gas_today
        type: custom:multiple-entity-row
        state_color: true
        show_state: true
        name: Текущий день
        secondary_info: last-changed
        state_header: Сегодня
        unit: 'm³'
        entities:
          - entity: binary_sensor.gas_z16_live_impuls
            name: Статус
          - entity: sensor.gas_yesterday_cash
            name: Вчера
            unit: '₽'
          - entity: sensor.gas_today_cash
            name: Стоимость
            unit: '₽'

      - entity: sensor.gas_monthly
        type: custom:multiple-entity-row
        state_color: true
        show_state: true
        name: МЕСЯЦ
        secondary_info: last-changed
        state_header: Месяц
        unit: 'm³'
        entities:
          - entity: sensor.gas_monthly_last
            name: Прошлый месяц
            unit: 'm³'
          - entity: sensor.gas_this_month_cash
            name: Стоимость
            unit: '₽'

      - entity: sensor.gas_yearly
        type: custom:multiple-entity-row
        state_color: true
        show_state: true
        name: ГОД
        secondary_info: last-changed
        state_header: Год
        unit: 'm³'
        entities:
          - entity: sensor.gas_yearly_last
            name: Прошлый год
            unit: 'm³'
          - entity: sensor.gas_this_yearly_cash
            name: Стоимость
            unit: '₽'
  - type: custom:apexcharts-card
    apex_config:
      chart:
        height: 155%
      dataLabels:
        background:
          enabled: false
        style:
          colors:
            - var(--primary-text-color)
    graph_span: 1w
    span:
      end: day
    header:
      show: true
      title: Потребление ГАЗА по дням
    experimental:
      color_threshold: true
    yaxis:
      - id: left
        min: ~0
        apex_config:
          forceNiceScale: true
    series:
      - entity: sensor.gas_um_daily_single
        type: column
        yaxis_id: left
        float_precision: 2
        show:
          datalabels: true
        group_by:
          func: last
          duration: 1d
        color_threshold:
          - color: '#e45e65'
            value: 20
          - color: '#e0b400'
            value: 15
          - color: '#0da035'
            value: 10
          - color: '#039BE5'
            value: 0
    card_mod:
      class: top-level-chart

потребуется установить из HACS apexcharts-card и multiple-entity-row карточки

В следующей теме разберем все тоже самое только по электричеству 🙂

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x