Water flow energy sensor / heat meter DIY (not just water flow)

Yes! It was pretty easy after all.

My solution consists of four key entities, two generated by my microcontroller in ESPHome, two derived inside Home Assistant.

Entities:

  • Absolute increasing water volume (in L) - ESPHome
  • Absolute increasing energy consumption/production (in kWh) - ESPHome
  • Relative water flow (in L/min) - in Home Assistant
  • Relative average power (kW average over a moving window) - in Home Assistant

image

ESPHome

(Beware that I have everything twice. Could certainly be templated)

Home Assistant

Intermediary step:

sensor:
  - platform: derivative
    name: Heizungsregelung Heizkreis Volumenstrom ZWISCHENSCHRITT
    source: sensor.heizungsregelung_heizkreis_volumen
    unit_time: min
    time_window:
      seconds: 30
    round: 1

  - platform: derivative
    name: Heizungsregelung Heizkreis Leistung ZWISCHENSCHRITT
    source: sensor.heizungsregelung_heizkreis_energie
    unit_time: h
    unit: kW
    time_window:
      seconds: 60
    round: 2

The interesting entities for water flow and power

template:
  - sensor:
      - name: Heizungsregelung Heizkreis Volumenstrom
        unique_id: uniqueid__heizungsregelung_heizkreis_volumenstrom_l_min
        unit_of_measurement: "L/min"
        icon: mdi:waves-arrow-right
        state_class: measurement
        #device_class: water_rate  # doesn't exist
        state: >
          {{ states('sensor.heizungsregelung_heizkreis_volumenstrom_zwischenschritt') | float(0) }}
        availability: >
          {{ states('sensor.heizungsregelung_heizkreis_volumenstrom_zwischenschritt') not in [ 'unavailable', 'none', 'unknown' ] }}

      - name: Heizungsregelung Heizkreis Leistung
        unique_id: uniqueid__heizungsregelung_heizkreis_leistung
        unit_of_measurement: kW
        state_class: measurement
        device_class: power
        state: >
          {{ states('sensor.heizungsregelung_heizkreis_leistung_zwischenschritt') | float(0) }}
        availability: >
          {{ states('sensor.heizungsregelung_heizkreis_leistung_zwischenschritt') not in [ 'unavailable', 'none', 'unknown' ] }}

Daily energy consumption:

utility_meter:
  heizungsregelung_heizkreis_energie_daily:
    name: Heizungsregelung Heizkreis Energie täglich
    unique_id: uniqueid__heizungsregelung_heizkreis_energie_daily
    source: sensor.heizungsregelung_heizkreis_energie
    cycle: daily

Hope this helps! Let me know in case you need more details

1 Like