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
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