The problem
@CFenner
First: too all contributors - many thanks for this great piece of work!
Thanks to the ViCare integration, I could easily and successfully integrate our newly installed Viessmann Vitocal 252-A heat pump (Vitocal 252-A AWOT-E-AC-AF 251.A10 400 V, to be exact) into HA. Everything is working as expected (or at least "as designed") with the following exception:
"I cannot find a simple way to unambiguously distinguish the modes "heat pump is loading the 190 L warm-water buffer" from "heat pump is actually heating the floor heating / loading the 200 L external heating-water buffer)"
Hint: the state of "water_heater.e3_vitocal_warmwasser" does not do the trick! It is 'off' in both cases.
Hint: the state of "climate.e3_vitocal_heizung" does not do the trick either. It is 'heating' in both cases.
The state of water_heater.e3_vitocal_warmwasser seems to be related to the instantaneous water heater (aka "Durchlauferhitzer") inside the indoor-unit, that is operated up to 9kW electrical power, either as an emergency backup heating device when the heat pump is faulty, or in bi-valence mode, when the outdoor unit cannot generate enough heat, due to cold outside temperatures.
Being a physicist, I have a tendency to not simply believe in measurements taken by others, in this case the Viessmann API or ViCare App, but wanting to perform an independent measurement, e.g. of the true Coefficient of Performance (COP). For this purpose I have installed a Fronius SmartMeter TS 65A-3 not only for the mains supply of the house, but also a second TS 65A-3 SmartMeter for the complete heat pump installation, thus indoor unit, outdoor unit, circulation pump and heating circuit pump are included in my measurement of "total heat pump installation power consumption".
The total heat generated is calculated from the "Volumenstrom [m³/h]" (sensor.e3_vitocal_volumenstrom) and the difference dT between the forward and return water temperatures (aka Vorlauf- and Rücklauftemperatur) as measured by two DS18B20 sensors via ESP home. The rest is just a simple formula including the constants 'density of water' = 998 kg/m³ and 'thermal capacity of water' = 4.18 kJ/(kg K).
COP = thermal power / electrical power - provides an end-to-end measure for the performace of the complete installation.
This works remarkably well and can be nicely visualized.

What can be seen from this plot, is the differently shaped patterns of heating vs. making warm water:
- actual heating runs at Volumenstrom ~1.5m³/h and small dT ~ 2°C, resulting in a COP of up to 5 (grey line in second diagram, right-hand scale)
- heating up warm water in ECO mode runs at Volumenstrom ~0.8m³/h, dT of 3-4°C, resulting in a COP of 4 dropping to even below 1, as the water temperature reaches 55°C or higher.

In both cases, the status of climate.e3_vitocal_heizung = 'heating' and water_heater.e3_vitocal_warmwasser = 'off'
Clearly, the Viessmann back-end knows what the heat pump is doing when, since in the Analyse' section of the App they break down the split into "Heizen, Warmwasser und Kühlen" of electrical power and heat generated.
But the 'flag' to break this down is possibly not exposed through the Viessmann API? And if is exposed, then how would this be mapped to an HA entity? Maybe I'm totally missing a trick or I'm overlooking something obvious. Maybe not...
Hint: the energy counters provided in the App are a) stuck and through the API and b) way off the reality, from what I can see after just a couple of days, comparing my "bottom-up" measurements with the displayed values.
Any input is welcome. I hope it is acceptable to raise this as an 'issue' - no offence meant.
Meanwhile I intend to implement a work-around, to set a binary template sensor based on Volumenstrom < or > 1 m³/h and monitor if this work-around holds for all weather conditions over the year.
Guido
What version of Home Assistant Core has the issue?
2025.5.1
What was the last working version of Home Assistant Core?
No response
What type of installation are you running?
Home Assistant OS
Integration causing the issue
Viessmann ViCare
Link to integration documentation on our website
https://www.home-assistant.io/integrations/vicare#action-vicareset_vicare_mode
Diagnostics information
No response
Example YAML snippet
# Vorzeichen Leistungswert invertieren -> Richtung des Stromflusses in Fronius 'negativ'
wp_elektrische_leistung:
friendly_name: "WP Elektrische Leistung"
unique_id: "myuuid_1500"
unit_of_measurement: W
device_class: power
value_template: >
{% set Leistung = states('sensor.smart_meter_ts_65a_3_warmepumpe_wirkleistung') | float(0) %}
{{ ( Leistung * -1 ) | round(3) }}
# Thermische Leistung P_th = Cp * m * dT
# Cp: Wärmekapazität von Heizwasser: 4,18 kJ/(kg K) bzw. 4180 J/(kg K)
# m: Massenstrom Heizwasser kg/s (berechnet sich aus: Volumenstrom/3600 * Dichte)
# volumenstrom: Volumenstrom Heizwasser der Wärmepumpe m³/h
# D: Dichte Heizwasser 998 kg/m3
# VL: Vorlauftemperatur WP gemessen am Übergabepunkt im Haus °C
# RL: Rücklauftemperatur WP gemessen am Übergabepunkt im Haus °C
# dT: Temperaturdifferenz zw. VL - RL °C
wp_thermische_leistung:
friendly_name: "WP Thermische Leistung"
unique_id: "myuuid_1510"
unit_of_measurement: W
device_class: power
value_template: >
{% set volumenstrom = states('sensor.e3_vitocal_volumenstrom') | float(0) %}
{% set Cp = 4180 %}
{% set D = 998 %}
{% set m = volumenstrom / 3600 * D | float(0) %}
{% set VL = states('sensor.wp_wp_vorlauf') | float(0) %}
{% set RL = states('sensor.wp_wp_ruecklauf') | float(0) %}
{% set dT = VL - RL | float(0) %}
{% set P_th = Cp * m * dT | float(0) %}
{{ ( P_th ) | round(3) }}
Anything in the logs that might be useful for us?
Additional information
No response
The problem
@CFenner
First: too all contributors - many thanks for this great piece of work!
Thanks to the ViCare integration, I could easily and successfully integrate our newly installed Viessmann Vitocal 252-A heat pump (Vitocal 252-A AWOT-E-AC-AF 251.A10 400 V, to be exact) into HA. Everything is working as expected (or at least "as designed") with the following exception:
"I cannot find a simple way to unambiguously distinguish the modes "heat pump is loading the 190 L warm-water buffer" from "heat pump is actually heating the floor heating / loading the 200 L external heating-water buffer)"
Hint: the state of "water_heater.e3_vitocal_warmwasser" does not do the trick! It is 'off' in both cases.
Hint: the state of "climate.e3_vitocal_heizung" does not do the trick either. It is 'heating' in both cases.
The state of water_heater.e3_vitocal_warmwasser seems to be related to the instantaneous water heater (aka "Durchlauferhitzer") inside the indoor-unit, that is operated up to 9kW electrical power, either as an emergency backup heating device when the heat pump is faulty, or in bi-valence mode, when the outdoor unit cannot generate enough heat, due to cold outside temperatures.
Being a physicist, I have a tendency to not simply believe in measurements taken by others, in this case the Viessmann API or ViCare App, but wanting to perform an independent measurement, e.g. of the true Coefficient of Performance (COP). For this purpose I have installed a Fronius SmartMeter TS 65A-3 not only for the mains supply of the house, but also a second TS 65A-3 SmartMeter for the complete heat pump installation, thus indoor unit, outdoor unit, circulation pump and heating circuit pump are included in my measurement of "total heat pump installation power consumption".
The total heat generated is calculated from the "Volumenstrom [m³/h]" (sensor.e3_vitocal_volumenstrom) and the difference dT between the forward and return water temperatures (aka Vorlauf- and Rücklauftemperatur) as measured by two DS18B20 sensors via ESP home. The rest is just a simple formula including the constants 'density of water' = 998 kg/m³ and 'thermal capacity of water' = 4.18 kJ/(kg K).
COP = thermal power / electrical power - provides an end-to-end measure for the performace of the complete installation.
This works remarkably well and can be nicely visualized.
What can be seen from this plot, is the differently shaped patterns of heating vs. making warm water:
In both cases, the status of climate.e3_vitocal_heizung = 'heating' and water_heater.e3_vitocal_warmwasser = 'off'
Clearly, the Viessmann back-end knows what the heat pump is doing when, since in the Analyse' section of the App they break down the split into "Heizen, Warmwasser und Kühlen" of electrical power and heat generated.
But the 'flag' to break this down is possibly not exposed through the Viessmann API? And if is exposed, then how would this be mapped to an HA entity? Maybe I'm totally missing a trick or I'm overlooking something obvious. Maybe not...
Hint: the energy counters provided in the App are a) stuck and through the API and b) way off the reality, from what I can see after just a couple of days, comparing my "bottom-up" measurements with the displayed values.
Any input is welcome. I hope it is acceptable to raise this as an 'issue' - no offence meant.
Meanwhile I intend to implement a work-around, to set a binary template sensor based on Volumenstrom < or > 1 m³/h and monitor if this work-around holds for all weather conditions over the year.
Guido
What version of Home Assistant Core has the issue?
2025.5.1
What was the last working version of Home Assistant Core?
No response
What type of installation are you running?
Home Assistant OS
Integration causing the issue
Viessmann ViCare
Link to integration documentation on our website
https://www.home-assistant.io/integrations/vicare#action-vicareset_vicare_mode
Diagnostics information
No response
Example YAML snippet
Anything in the logs that might be useful for us?
Additional information
No response