И так … в 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 карточки
В следующей теме разберем все тоже самое только по электричеству 🙂