Подсчет энергозатрат по устройствам Xiaomi/Aqara. Часть II (Update)

И так. С типами устройств умного дома мы определились. Например, если посмотреть в Инструмент Разработчика в HA, одно из наших устройств имеет атрибуты:

Как видим одно из них имеет атрибут load_power, что и показывает нам устройство которое нам нужно для анализа.

Теперь начнем настраивать для них нужные нам темплейты с сенсорами. Я выбрал 3 разных устройства с возможностью расчета потребления энергии, о которых писал в 1ой части статьи. Вот их и будем настраивать.

History:

Версия 1.3 (29/01/2019) текущая версия

  • добавил для разнообразия отчеты по устройству за прошедший день и месяц. использовать не обязательно – но кому как удобно. С сохранением данных за текущий периоды. Теперь удобно анализировать сколько то или иное устройство потребило за вчера или последний месяц (для детализации: добавлен топик state_topic: “power/plugX/yesterday и state_topic: “power/plugX/lastmonth)
  • работает на HA 0.86.3.

  • исправления и дополнения

Версия 1.2 (08/01/2019)

  • исправления и дополнения

Версия 1.1 (02/01/2019)

  • добавлена нотификация на telegram (по истечении месяца и года). Данные по концу года обнулялись за все месяца, поэтому сложно было понять каково было потребление за последний месяц
  • добавлена ежедневная нотификация на telegram по суточному затрату энергии по дому
  • добавлена  статистика потребления за год. Вкладка (группа) появилась :  friendly_name: Общая за год

sensors.yaml

# ------------------------------------------------------------------------------
# - Потребление
# ------------------------------------------------------------------------------
  - platform: template
    sensors:
      load_switch_plug_158d00010ada98:
        entity_id: switch.plug_158d00010ada98
        value_template: '{{ states.switch.plug_158d00010ada98.attributes.load_power }}'
        icon_template: mdi:power-plug
        unit_of_measurement: 'Вт'
      load_switch_wall_plug_158d000170f147:
        entity_id: switch.wall_plug_158d000170f147
        value_template: '{{ states.switch.wall_plug_158d000170f147.attributes.load_power }}'
        icon_template: mdi:power-plug
        unit_of_measurement: 'Вт'
      load_switch_wifi_room2:
        entity_id: switch.wifi_room2
        value_template: '{{ states.switch.wifi_room2.attributes.load_power }}'
        icon_template: mdi:power-plug
        unit_of_measurement: 'Вт'

#mqtt потребление за вчера
  - platform: mqtt
    state_topic: "power/plug1/yesterday"
    name: 'power mqtt yesterday plug 158d00010ada98'
    unit_of_measurement: 'кВт⋅ч'
#mqtt потребление сегодня
  - platform: mqtt
    state_topic: "power/plug1/today"
    name: 'power mqtt today plug 158d00010ada98'
    unit_of_measurement: 'кВт⋅ч'
#mqtt потребление за прошлый месяц
  - platform: mqtt
    state_topic: "power/plug1/lastmonth"
    name: 'power mqtt lastmonth plug 158d00010ada98'
    unit_of_measurement: 'кВт⋅ч'
#mqtt потребление за текущий месяц
  - platform: mqtt
    state_topic: "power/plug1/month"
    name: 'power mqtt month plug 158d00010ada98'
    unit_of_measurement: 'кВт⋅ч'
#mqtt потребление за год
  - platform: mqtt
    state_topic: "power/plug1/year"
    name: 'power mqtt year plug 158d00010ada98'
    unit_of_measurement: 'кВт⋅ч'

# аналогично создаются топики и для других устройств (plug5/plug8)
    state_topic: "power/plug5/today"
    name: 'power mqtt today plug 158d000170f147'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/plug5/yesterday"
    name: 'power mqtt yesterday plug 158d000170f147'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/plug5/month"
    name: 'power mqtt month plug 158d000170f147'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/plug5/lastmonth"
    name: 'power mqtt lastmonth plug 158d000170f147'
    unit_of_measurement: 'кВт⋅ч'
- platform: mqtt
    state_topic: "power/plug5/year"
    name: 'power mqtt year plug 158d000170f147'
    unit_of_measurement: 'кВт⋅ч'

  - platform: mqtt
    state_topic: "power/plug8/today"
    name: 'power mqtt today wifi room2'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/plug8/yesterday"
    name: 'power mqtt yesterday wifi room2'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/plug8/month"
    name: 'power mqtt month wifi room2'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/plug8/lastmonth"
    name: 'power mqtt lastmonth wifi room2'
    unit_of_measurement: 'кВт⋅ч'
 - platform: mqtt
    state_topic: "power/plug8/year"
    name: 'power mqtt year wifi room2'
    unit_of_measurement: 'кВт⋅ч'

# Ниже platform: mttt не редактировать. нужно нам для сбора статистики. месяцы.
  - platform: mqtt
    state_topic: "power/month_total/1"
    name: 'power mqtt total m1'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/2"
    name: 'power mqtt total m2'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/3"
    name: 'power mqtt total m3'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/4"
    name: 'power mqtt total m4'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/5"
    name: 'power mqtt total m5'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/6"
    name: 'power mqtt total m6'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/7"
    name: 'power mqtt total m7'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/8"
    name: 'power mqtt total m8'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/9"
    name: 'power mqtt total m9'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/10"
    name: 'power mqtt total m10'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/11"
    name: 'power mqtt total m11'
    unit_of_measurement: 'кВт⋅ч'
  - platform: mqtt
    state_topic: "power/month_total/12"
    name: 'power mqtt total m12'
    unit_of_measurement: 'кВт⋅ч'

# Здесь мы суммируем все наши потребления и создаем темплейты template power_load_total (суммарная текущая мощность), power_today_total (за день) и power_month_total (за месяц) 
  - platform: template
    sensors:
      power_load_total:
        value_template: '{{(states.sensor.load_switch_plug_158d00010ada98.state | float +
                            states.sensor.load_switch_wall_plug_158d000170f147.state | float + 
                            states.sensor.load_switch_wifi_room2.state | float)|round(5)}}'
        unit_of_measurement: 'Вт'

      power_today_total:
        value_template: '{{(states.sensor.power_mqtt_today_plug_158d00010ada98.state | float +
                            states.sensor.power_mqtt_today_plug_158d000170f147.state | float +
                            states.sensor.power_mqtt_today_wifi_room2.state | float)|round(5)}}'
        unit_of_measurement: 'кВт⋅ч'
        friendly_name_template: >-
          {% set d = now().isoweekday() | int %}
          {% if d == 1 %}
            Понедельник
          {% elif d == 2 %}
            Вторник
          {% elif d == 3 %}
            Среда
          {% elif d == 4 %}
            Четверг
          {% elif d == 5 %}
            Пятница
          {% elif d == 6 %}
            Суббота
          {% elif d == 7 %}
            Воскресенье
          {% endif %}

      power_month_total:
        entity_id:
          - sensor.power_mqtt_month_plug_158d00010ada98
          - sensor.power_mqtt_month_plug_158d000170f14
          - sensor.power_mqtt_month_wifi_room2
        value_template: '{{(states.sensor.power_mqtt_month_plug_158d00010ada98.state | float +
                            states.sensor.power_mqtt_month_plug_158d000170f147.state | float +
                            states.sensor.power_mqtt_month_wifi_room2.state | float)|round(5)}}'
        unit_of_measurement: 'кВт⋅ч'
        friendly_name_template: >-
          {% set m = now().month | int %}
          {% if m == 1 %}
            Январь
          {% elif m == 2 %}
            Февраль
          {% elif m == 3 %}
            Март
          {% elif m == 4 %}
            Апрель
          {% elif m == 5 %}
            Май
          {% elif m == 6 %}
            Июнь
          {% elif m == 7 %}
            Июль
          {% elif m == 8 %}
            Август
          {% elif m == 9 %}
            Сентябрь
          {% elif m == 10 %}
            Октябрь
          {% elif m == 11 %}
            Ноябрь
          {% elif m == 12 %}
            Декабрь
          {% endif %}

      power_year_total:
        entity_id:
          - sensor.power_mqtt_year_plug_158d00010ada98
          - sensor.power_mqtt_year_plug_158d000170f14
          - sensor.power_mqtt_year_wifi_room2
        value_template: '{{(states.sensor.power_mqtt_year_plug_158d00010ada98.state | float +
                            states.sensor.power_mqtt_year_plug_158d000170f147.state | float +
                            states.sensor.power_mqtt_year_wifi_room2.state | float)|round(5)}}'
        unit_of_measurement: 'кВт⋅ч'

# или можно собирать еще так :
#      power_year_total:
#       value_template: '{{(states.sensor.power_mqtt_total_m1.state | float +
#                            states.sensor.power_mqtt_total_m2.state | float +
#                            states.sensor.power_mqtt_total_m3.state | float +
#                            states.sensor.power_mqtt_total_m4.state | float +
#                            states.sensor.power_mqtt_total_m5.state | float +
#                            states.sensor.power_mqtt_total_m6.state | float +
#                            states.sensor.power_mqtt_total_m7.state | float +
#                            states.sensor.power_mqtt_total_m8.state | float +
#                            states.sensor.power_mqtt_total_m9.state | float +
#                            states.sensor.power_mqtt_total_m10.state | float +
#                            states.sensor.power_mqtt_total_m11.state | float +
#                            states.sensor.power_mqtt_total_m12.state | float)|round(5)}}'
#        unit_of_measurement: 'кВт⋅ч'

сustomize.yam

Расписываем устройства как мы хотим их видеть (они в конце файла)

sensor.power_load_total:
  friendly_name: Общая текущая
  icon: mdi:power-plug
sensor.power_today_total:
  friendly_name: Общая сегодня
  icon: mdi:counter
sensor.power_month_total:
  friendly_name: Общая за месяц
  icon: mdi:counter
sensor.power_year_total:
  friendly_name: Общая за год
  icon: mdi:power-plug

sensor.power_mqtt_total_m1:
  friendly_name: Январь
  icon: mdi:counter
sensor.power_mqtt_total_m2:
  friendly_name: Февраль
  icon: mdi:counter
sensor.power_mqtt_total_m3:
  friendly_name: Март
  icon: mdi:counter
sensor.power_mqtt_total_m4:
  friendly_name: Апрель
  icon: mdi:counter
sensor.power_mqtt_total_m5:
  friendly_name: Май
  icon: mdi:counter
sensor.power_mqtt_total_m6:
  friendly_name: Июнь
  icon: mdi:counter
sensor.power_mqtt_total_m7:
  friendly_name: Июль
  icon: mdi:counter
sensor.power_mqtt_total_m8:
  friendly_name: Август
  icon: mdi:counter
sensor.power_mqtt_total_m9:
  friendly_name: Сентябрь
  icon: mdi:counter
sensor.power_mqtt_total_m10:
  friendly_name: Октябрь
  icon: mdi:counter
sensor.power_mqtt_total_m11:
  friendly_name: Ноябрь
  icon: mdi:counter
sensor.power_mqtt_total_m12:
  friendly_name: Декабрь
  icon: mdi:counter

sensor.load_switch_plug_158d00010ada98:
  friendly_name: Газовый котел Buderus
sensor.power_mqtt_today_plug_158d00010ada98:
  friendly_name: Газовый котел Buderus (сегодня)
  icon: mdi:counter
sensor.power_mqtt_month_plug_158d00010ada98:
  friendly_name: Газовый котел Buderus (месяц)
  icon: mdi:counter
sensor.power_mqtt_year_plug_158d00010ada98:
  friendly_name: Газовый котел Buderus (год)
  icon: mdi:counter
sensor.power_mqtt_yesterday_plug_158d00010ada98:
  friendly_name: Газовый котел Buderus (вчера)
  icon: mdi:counter
sensor.power_mqtt_lastmonth_plug_158d00010ada98:
  friendly_name: Газовый котел Buderus (прошлый месяц)
  icon: mdi:counter

sensor.load_switch_wall_plug_158d000170f147:
  friendly_name: Серверная УД 
sensor.power_mqtt_today_plug_158d000170f147:
  friendly_name: Серверная УД (сегодня)
  icon: mdi:counter
sensor.power_mqtt_yesterday_plug_158d000170f147:
  friendly_name: Серверная УД (сегодня)
  icon: mdi:counter
sensor.power_mqtt_month_plug_158d000170f147:
  friendly_name: Серверная УД (месяц)
  icon: mdi:counter
sensor.power_mqtt_lastmonth_plug_158d000170f147:
  friendly_name: Серверная УД (месяц)
  icon: mdi:counter
sensor.power_mqtt_year_plug_158d000170f147:
  friendly_name: Серверная УД (год)
  icon: mdi:counter

sensor.load_switch_wifi_room2:
  friendly_name: Стиральная машина и прочее
sensor.power_mqtt_today_wifi_room2:
  friendly_name: Стиральная машина (сегодня) 
  icon: mdi:counter
sensor.power_mqtt_month_wifi_room2:
  friendly_name: Стиральная машина (месяц)
  icon: mdi:counter
sensor.power_mqtt_yesterday_wifi_room2:
  friendly_name: Стиральная машина (сегодня) 
  icon: mdi:counter
sensor.power_mqtt_lastmonth_wifi_room2:
  friendly_name: Стиральная машина (месяц)
  icon: mdi:counter
sensor.power_mqtt_year_wifi_room2:
  friendly_name: Стиральная машина (год)
  icon: mdi:counter

automation.yaml

# ------------------------------------------------------------------------------
# - Потребление сегодня, месяц
# ------------------------------------------------------------------------------
# Обновление данных на странице
- alias: power
  initial_state: 'on'
  trigger:
    - platform: time_pattern
      seconds: '/30'
  action:

# Потребление за день plug1
    - service: mqtt.publish
      data_template:
        topic: "power/plug1/today"
        payload: '{{(states.sensor.power_mqtt_today_plug_158d00010ada98.state | float +
                    (states.sensor.load_switch_plug_158d00010ada98.state | float /120000))|round(5)}}'
        retain: true
# Потребление за месяц plug1
    - service: mqtt.publish
      data_template:
        topic: "power/plug1/month"
        payload: '{{(states.sensor.power_mqtt_month_plug_158d00010ada98.state | float +
                    (states.sensor.load_switch_plug_158d00010ada98.state | float /120000))|round(5)}}'
        retain: true
# Потребление за год plug1
    - service: mqtt.publish
      data_template:
        topic: "power/plug1/year"
        payload: '{{(states.sensor.power_mqtt_year_plug_158d00010ada98.state | float +
                    (states.sensor.load_switch_plug_158d00010ada98.state | float /120000))|round(5)}}'
        retain: true

# Потребление за день - месяц - год plug5
    - service: mqtt.publish
      data_template:
        topic: "power/plug5/today"
        payload: '{{(states.sensor.power_mqtt_today_plug_158d000170f147.state | float +
                    (states.sensor.load_switch_wall_plug_158d000170f147.state | float /120000))|round(5)}}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug5/month"
        payload: '{{(states.sensor.power_mqtt_month_plug_158d000170f147.state | float +
                    (states.sensor.load_switch_wall_plug_158d000170f147.state | float /120000))|round(5)}}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug5/year"
        payload: '{{(states.sensor.power_mqtt_year_plug_158d000170f147.state | float +
                    (states.sensor.load_switch_wall_plug_158d000170f147.state | float /120000))|round(5)}}'
        retain: true

# Потребление за день - месяц - год plug8
    - service: mqtt.publish
      data_template:
        topic: "power/plug8/today"
        payload: '{{(states.sensor.power_mqtt_today_wifi_room2.state | float +
                    (states.sensor.load_switch_wifi_room2.state | float /120000))|round(5)}}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug8/month"
        payload: '{{(states.sensor.power_mqtt_month_wifi_room2.state | float +
                    (states.sensor.load_switch_wifi_room2.state | float /120000))|round(5)}}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug8/year"
        payload: '{{(states.sensor.power_mqtt_year_wifi_room2.state | float +
                    (states.sensor.load_switch_wifi_room2.state | float /120000))|round(5)}}'
        retain: true

# round(5) - кол-во числе после целого 120000 = 30 сек

# ------------------------------------------------------------------------------
# - Новый день, обнуление счетчиков в группе "Потребление сегодня"
# ------------------------------------------------------------------------------
- alias: power new day
  trigger:
    - platform: time
      at: '00:00:10'
# Копию данных высылаем оповещением
  action:
    - service: notify.telegram
      data_template:
        message: >-
          Отчет: потребление за день составило {{states.sensor.power_today_total.state}} кВт?ч
    - delay: 00:00:15

# Запись данных за прошедший день по устройству plug1
    - service: mqtt.publish
      data_template:
        topic: "power/plug1/yesterday"
        payload: '{{(states.sensor.power_mqtt_today_plug_158d00010ada98.state | float )|round(5)}}'
        retain: true
    - delay: 00:00:05

# Запись данных за прошедший день по устройству plug5
    - service: mqtt.publish
      data_template:
        topic: "power/plug5/yesterday"
        payload: '{{(states.sensor.power_mqtt_today_plug_158d000170f147.state | float )|round(5)}}'
        retain: true
    - delay: 00:00:05

# Запись данных за прошедший день по устройству plug8
    - service: mqtt.publish
      data_template:
        topic: "power/plug8/yesterday"
        payload: '{{(states.sensor.power_mqtt_today_wifi_room2.state | float )|round(5)}}'
        retain: true
    - delay: 00:00:05

# Обнуление данных за текущий день по всем устройствам
    - service: mqtt.publish
      data_template:
        topic: "power/plug1/today"
        payload: '{{ 0.0 }}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug5/today"
        payload: '{{ 0.0 }}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug8/today"
        payload: '{{ 0.0 }}'
        retain: true

# ---------------------------------------------------------------------------------------
# - Новый месяц. Обнуление счетчиков в группе "Потребление за месяц по дому" + оповещение
# ---------------------------------------------------------------------------------------

- alias: power new month
  initial_state: 'on'
  trigger:
    - platform: time
      at: '00:00:30'
  condition:
    - condition: template
      value_template: '{{ now().day == 1 }}'
  action:
    - service: notify.telegram
      data_template:
        message: >-
          Отчет: потребление за месяц составило {{states.sensor.power_month_total.state}} кВт⋅ч

# Запись данных за прошедший месяц plug1
    - service: mqtt.publish
      data_template:
        topic: "power/plug1/lastmonth"
        payload: '{{(states.sensor.power_mqtt_month_plug_158d00010ada98.state | float )|round(5)}}'
        retain: true 
    
# Запись данных за прошедший месяц plug 5
    - service: mqtt.publish
      data_template:
        topic: "power/plug5/lastmonth"
        payload: '{{(states.sensor.power_mqtt_today_plug_158d000170f147.state | float )|round(5)}}'
        retain: true 
    - delay: 00:00:05

# Запись данных за прошедший месяц plug 8
    - service: mqtt.publish
      data_template:
        topic: "power/plug8/lastmonth"
        payload: '{{(states.sensor.power_mqtt_today_wifi_room2.state | float )|round(5)}}'
        retain: true 
    - delay: 00:00:05

# Обнуление данных за текущий месяц по всем устройствам
    - service: mqtt.publish
      data_template:
        topic: "power/plug1/month"
        payload: '{{ 0.0 }}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug5/month"
        payload: '{{ 0.0 }}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/plug8/month"
        payload: '{{ 0.0 }}'
        retain: true

# ------------------------------------------------------------------------------
# - Общее потребление за месяц.
# ------------------------------------------------------------------------------
    - delay: 00:00:02
    - service: mqtt.publish
      data_template:
        topic: "power/month_total/{{now().month}}"
        payload: '{{(states.sensor.power_month_total.state | float) | round(5)}}'
        retain: true

# ------------------------------------------------------------------------------
# - Новый год, обнуление счетчиков в группе "Потребление за год"
# ------------------------------------------------------------------------------
- alias: power new year
  initial_state: 'on'
  trigger:
    - platform: time
      at: '00:00:20'
  condition:
    - condition: template
      value_template: '{{ now().month == 1 and now().day == 1 }}'
  action:
    - service: notify.telegram
      data_template:
        message: >-
          Отчет: потребление за год составило {{states.sensor.power_year_total.state}} кВт⋅ч
    - delay: 00:00:10
    - service: mqtt.publish
      data_template:
        topic: "power/month_total/1"
        payload: '{{ 0.0 }}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/month_total/5"
        payload: '{{ 0.0 }}'
        retain: true
    - service: mqtt.publish
      data_template:
        topic: "power/month_total/8"
        payload: '{{ 0.0 }}'
        retain: true

# ------------------------------------------------------------------------------
# - Общее потребление за год.
# ------------------------------------------------------------------------------
     - service: mqtt.publish
      data_template:
        topic: "power/year_total/{{now().year}}"
        payload: '{{(states.sensor.power_year_total.state | float)|round(3)}}'
        retain: true

# ------------------------------------------------------------------------------
# - Настал конец года. В отдельный топик помещаем данные за пред. год. Далее можно использовать его в группах (power/year_total/2019,power/year_total/2020 и т.д.)
# ------------------------------------------------------------------------------
- alias: power old year
  initial_state: true
  trigger:
    - platform: time
      at: '23:59:40'
  condition:
    - condition: template
      value_template: "{{ now().month == 12 and now().day == 31 }}"
  action:
    - service: mqtt.publish
      data_template:
        topic: "power/year_total/{{ now().year }}"
        payload: "{{(states.sensor.power_year_total.state | float) | round(3) }}"
        retain: true

plug5, plug1, plug8 – именуйте как хотите. Они у меня просто пронумерованы в порядке устройств.

Теперь нам нужно все это красиво собрать в группу и сделать отдельную вкладку потребления.

groups.yaml

power:
  name: Электричество
  view: yes
  icon: mdi:flash
  entities:
    - group.power_room1
    - group.power_room2
    - group.power_room3
    - group.load_power
    - group.power_today
    - group.power_month
    - group.power_total
    - group.power_total_year
    - group.power_total_year_detail

load_power:
  name: Текущая мощность
  view: no
  entities:
    - sensor.power_load_total
    - sensor.load_switch_plug_158d00010ada98
    - sensor.load_switch_wall_plug_158d000170f147
    - sensor.load_switch_wifi_room2
    - group.load_power
    - group.power_today
    - group.power_month
    - group.power_total

power_room3:
  name: Спальня
  view: no
  entities:
    - sensor.load_switch_wifi_room2
    - sensor.power_mqtt_today_wifi_room2
    - sensor.power_mqtt_yesterday_wifi_room2
    - sensor.power_mqtt_month_wifi_room2
    - sensor.power_mqtt_lastmonth_wifi_room2

power_room2:
  name: Офис (система УД и техника)
  view: no
  entities:
     - sensor.load_switch_wall_plug_158d000170f147
     - sensor.power_mqtt_today_plug_158d000170f147
     - sensor.power_mqtt_yesterday_plug_158d000170f147
     - sensor.power_mqtt_month_plug_158d000170f147
     - sensor.power_mqtt_lastmonth_plug_158d000170f147

# полный пример всех сенсоров
power_room1:
  name: Ванная
  view: no
  entities:
    - sensor.load_switch_plug_158d00010ada98
    - sensor.power_mqtt_today_plug_158d00010ada98
    - sensor.power_mqtt_yesterday_plug_158d00010ada98
    - sensor.power_mqtt_month_plug_158d00010ada98
    - sensor.power_mqtt_lastmonth_plug_158d00010ada98

power_today:
  name: Потребление сегодня по дому
  view: no
  entities:
    - sensor.power_today_total
    - sensor.power_mqtt_today_plug_158d00010ada98
    - sensor.power_mqtt_today_plug_158d000170f147
    - sensor.power_mqtt_today_wifi_room2

power_month:
  name: Потребление за месяц по дому
  view: no
  entities:
    - sensor.power_month_total
    - sensor.power_mqtt_month_plug_158d00010ada98
    - sensor.power_mqtt_month_plug_158d000170f147
    - sensor.power_mqtt_month_wifi_room2

# Не редактировать
power_total:
  name: Потребление за год по дому (и месяцам)
  view: no
  entities:
    - sensor.power_year_total
    - sensor.power_mqtt_total_m1
    - sensor.power_mqtt_total_m2
    - sensor.power_mqtt_total_m3
    - sensor.power_mqtt_total_m4
    - sensor.power_mqtt_total_m5
    - sensor.power_mqtt_total_m6
    - sensor.power_mqtt_total_m7
    - sensor.power_mqtt_total_m8
    - sensor.power_mqtt_total_m9
    - sensor.power_mqtt_total_m10
    - sensor.power_mqtt_total_m11
    - sensor.power_mqtt_total_m12

power_total_year:
  name: Потребление за год по устройствам (детализация по каждому устройству)
  view: no
  entities:
    - sensor.power_year_total
    - sensor.power_mqtt_year_plug_158d00010ada98
    - sensor.power_mqtt_year_plug_158d000170f147
    - sensor.power_mqtt_year_wifi_room2

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

Мощность в кВт по которой рассчитываем :

мощность (Вт) × t (ч) / 1000 

1кВт*час = 3600000Вт*сек, 120000 = 30сек, 360000 = 10сек и т.д.

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
13 комментариев
Популярные
Новые Старые
Межтекстовые Отзывы
Посмотреть все комментарии
tiberi
tiberi
29.12.2018 18:00

Добрый день,
спасибо за ваш код, но мне кажется, что не хватает кода для записи данных помесячно на сенсоры sensor.power_mqtt_total_m1
и так далее. В общем, у меня все месяца с пометкой “неизвестно”
может я что-то упустил, но что именно – не нахожу.
И еще, power_month_total и power_today_total ведут себя очень странно – не собирают данные со всех прописанных им датчиков, а как то выбирают один из них (причем каждый раз другой при перезагрузке), а то и вовсе остаются с 0,0. Но стоит закоментировать friendly_name_template, эта проблема исчезает.

tiberi
tiberi
30.12.2018 21:48
Ответить на  admin

Спасибо за ответ, как раз завтра заканчивается месяц – посмотрю, добавятся ли данные. А как на счет второй проблемки с friendly_name_template? Есть какие-нибудь мысли? Я всю голову сломал, почему у вас работает, а у меня – нет. На сколько я могу судить код просто входит в цикл, где постоянно проверяет какой это месяц или день и просто не освобождается на плюсование данных с датчиков. Но вот почему тогда у вас нет этих проблем?..

Александр
Александр
25.02.2019 01:30

Добрый день. power_today_total не обновляется автоматически, только после перезагрузки. В логах пишет –
Template sensor power_today_total has no entity ids configured to track nor were we able to extract the entities to track from the friendly_name template(s). This entity will only be able to be updated manually. Можете подправить этот момент? Спасибо

Александр
Александр
06.03.2019 15:23
Ответить на  admin

В (# Запись данных за прошедший день по устройству plug5) и (# Запись данных за прошедший месяц plug 5) есть строка – states.power_mqtt_today_plug_158d000170f147.state, не пропущен ли sensor ? по логике должно быть – states.sensor.power_mqtt_today_plug_158d000170f147.state

Александр
Александр
07.03.2019 16:09
Ответить на  admin

power_today_total не обновлялся автоматически, потому что не было entity_id в сенсоре power_today_total, так же добавил entity_id в сенсор power_load_total и все заработало.

Андрей
Андрей
08.07.2019 12:47

Добрый день, спасибо за статью, настроил по ней сбор данных со счетчика.
Не понял и не получился у меня один момент.
Автоматизация power new month срабатывает первого числа каждого месяца. В конце кода этой автоматизации:
topic: “power/month_total/{{now().month}}”
payload: ‘{{(states.sensor.power_month_total.state | float) | round(5)}}’
т.е. если наступил июль, то topic будет иметь вид power/month_total/7 и в него запишутся данные power_month_total, которые = 0, т.к. 1 июля в 00:00:30 power_month_total еще равен 0

Как записать данные за июнь?

dummylabs
17.09.2019 15:55

Работа проделана колоссальная. Тем, кто только собирается автоматизировать подсчёт затраченной энергии, воды, газа и пр., советую обратить внимание на стандартный компонент Utility Meter, который появился в следующей версии HA (0.87) и предназначнен для сбора показателей за различные периоды и по разным тарифам. Если устройство передаёт только мгновенную мощность в ваттах, примерно посчитать энергию в киловатт-часах поможет Integration Sensor.

13
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x