Why doesn't a low flow temp translate into a decent COP

I have a Vaillant Aerotherm Plus 10kW + 250L UniStor Cylinder with a designed flow of 40C @ -2.3C outside. The house is a modern 5 bed house, excellent insulation with UFH throughout over 3 floors. The system is an open loop system, weather compensated with no buffer. I’m able to monitor the system from the Vaillant App and the MyVaillant Integration with Home Assistant. I’ve had the heat pump installed for 4 months now. I’m able to keep the house warm at a constant 20C with a 0.35 Heating Curve which translates to a 35C flow temp at -2.5C (5C below the design temp).

What’s confusing me is that I’ve always assumed a low flow temp is king and naturally translates to a good COP. However, in my case even with a flow temp as low as some of the best on ‘Top of the SCOP’ (at the same outside temp) I’m getting an ‘Energy Efficiency’ from the myVailant app significantly lower than the COPs on HeatpumpMonitor.org

Take today (4th Jan) as an example, the average temp (in Southampton) was 1.2C and according to the MyVaillant App I’m getting a COP of 2.5 from an flow temp of 30C. My average COP for Dec was 3.4 and since I’ve had the system it’s never gone over 4.0. I’m beginning to question my premise that a low flow temp = good COP

One thing to note … I’ve read a lot about the Vaillant ‘Energy Efficiency’ in the App vrs COP, so I’m aware of the inconsistencies.

So my question is two fold:

  1. Is it incorrect to assume a low flow temp = Efficient COP? If so, then what should I look for that could be throwing the efficiency of my system off?

  2. Is there any sense in comparing Vailant ‘Energy Efficiency’ to other 10kW Vaillant system on HeatpumpMonitor.org running at a similar flow temp at similar outside temps?

Thanks in advance,

Ian

PS If you want some extra detail …

I collect metrics from the MyVaillant integration with Home Assistant and store that in a local emoncms. I’ve included a graph of Jan 4th from my local emoncms install. I don’t want to confuse people with the graph as only flow_temp, outside temp, room temp and electrical consumption are reliable. Ignore the COP value in the emoncms graph as the flow rate and return temp are extrapolated. When I refer to COP I’m referring the Electrical Efficiency value I’m getting from the myVailant app not the COP from this graph.

Hi Ian,

I’ve also got a 10 kW Vaillant. Can you post a link to your system on heatpumpmonitor.org?

One of the big culprits is Vaillant sensor accuracy which really screws with reported COP, see e.g. my posts & related here.

Once you post a link to your data I’ll have a look!

1 Like

Hi Ian - Welcome to the forum!

I’d be interested to see what your chart looks like when you enable the “Show simulated carnot heat output” - I suspect that poor temperature sensor accuracy is making the heat estimates to be way lower than they should be. Probably worth checking that the sensors are correctly fitted.

1 Like

hi Andre,

Thanks for the response, my data isn’t up on heatpumpmonitor.org, it’s on a local emoncms install running inside my Home Assistant. I didn’t want to post it as I’m extrapolating the flow_rate and return_temp as I can’t get those values from the HA MyVaillant integration. Only the electric power, flow temp, outdoor temp and indoor temp are accurate in my local emoncms.

Appreciate that doesn’t help, but I’ve never wanted to degrade the heatpumpmonitor.org data with my extrapolated data. I’ve read so many posts on getting data from the HA myVaillant integration, but I’ve always assumed anyone doing it that way, doesn’t post it to heatpumpmonitor.org. My comparisons are purely from the MyVaillant app to heatpumpmonitor.org

I must admit I don’t know what this graph is showing but here it is. I should say that there was a legionella cycle in this window

COP in window: 2.48 (33.9% of Carnot)

1 Like

Andre,

I did read your post beforehand, it’s a great post and I was going to look this week to see if the sensor is sitting correctly and not covered by insulation

Ian

How are you extrapolating these numbers?

There isn’t enough information here to calculate heat energy produced, and therefore COP. I monitor a Vaillant system this way and opted to use the Carnot COP equation to estimate how much heat is produced using only the reported temperatures.

Basics — OpenEnergyMonitor 0.0.1 documentation

Majority of heat pumps operate with a Carnot factor of 0.5 - your chart shows much lower at 0.33, which seems unlikely for a Vaillant.

I think if you’re running at 35°C you’re probably actually getting good performance.

1 Like

My apologies - I missed this point in your original post. No idea how myVailant calculates this, but I doubt it’s accurate.

Some useful background linked from the first post in the topic André mentioned above: Vaillant inbuilt monitoring vs MID meters

1 Like

Ignore reported COP in the vaillant app, it’s likely wildly incorrect - mine is. My reported COP is so low, impossibly so given the heatloss of my house. If you want real COP you need a monitoring system. My return temp sensor must be reading low, or else.

I also don’t see why people care about COP quote so much. You know you’re system is likely efficient, you’re flow temps are really low. Why not just look at input electric use as a metric of satisfaction of system working well. My input electric is reasonable, and so I’m happy.

Shit in, shit out. And your data (reported by vaillant) is shit. So the results are useless.

4 Likes

Ignore reported COP in the vaillant app, it’s likely wildly incorrect

To be fair, my Vaillant numbers are quite accurate compared to my heat meter…. perhaps I got lucky.

I’ve tracked it for 3 years now.

1 Like

Tim,

It was merely an experiment with emoncms, there’s definitely gaping holes in my assumptions. Here’s the code I used as template sensors in Home Assistant.

The flow_rate is just two constants that roughly got me to the values I was seeing in the myVailant app, I’m sure it can be improved by scaling it with electric output. Thermal output is reverse engineered from the MyVaillant COP value

# --------------------------------------------------------
# FLOW RATE (L/min)
# --------------------------------------------------------- 
- name: "heat_pump_flow_rate"  
  unit_of_measurement: "L/min"  
  state: >    
    {% set heating = states('sensor.heat_pump_controller_heating_state') | int(0) %}
    {% set dhw = states('sensor.heat_pump_controller_dhw_state') | int(0) %}    
    {% if dhw == 1 %}      
       13     {# DHW typical flow #}    
    {% elif heating == 1 %}      
       18     {# Heating typical flow #}    
    {% else %}      
       0    
    {% endif %}

# --------------------------------------------------------
# INSTANTANEOUS THERMAL OUTPUT (W)
# --------------------------------------------------------

- name: "heat_pump_unit_thermal_output"
  unit_of_measurement: "W"
  state: >
    {% set power_w = states('sensor.heat_pump_unit_electrical_power') | float(0) %}
    {% set cop = states('sensor.heat_pump_unit_current_cop') | float(0) %}
    {% set heating = states('sensor.heat_pump_controller_heating_state') | int(0) %}
    {% set dhw = states('sensor.heat_pump_controller_dhw_state') | int(0) %}

    {% if (heating == 1 or dhw == 1) and power_w > 0 and cop > 0 %}
      {{ (power_w * cop) | round(2) }}
    {% else %}
      0
    {% endif %}


# --------------------------------------------------------
# ESTIMATED RETURN TEMPERATURE (°C)
# Uses FLOW RATE (L/min), not mass flow
# --------------------------------------------------------

- name: "heat_pump_controller_return_temperature"
  unit_of_measurement: "°C"
  state: >
   {% set flow_temp = states('sensor.heat_pump_circuit_current_flow_temperature') | float(0) %}
   {% set thermal_w = states('sensor.heat_pump_unit_thermal_output') | float(0) %}
   {% set flow_rate_l_min = states('sensor.heat_pump_flow_rate') | float(0) %}
   {% set heating = states('sensor.heat_pump_controller_heating_state') | int(0) %}
   {% set dhw = states('sensor.heat_pump_controller_dhw_state') | int(0) %}

   {% set cp = 4186 %}
   {% set density = 1 %}
   {% set mass_flow_rate = (flow_rate_l_min * density) / 60 %}

   {% if thermal_w <= 100 or mass_flow_rate <= 0 or (heating == 0 and dhw == 0) %}
      {{ flow_temp | round(2) }}
   {% else %}
      {% set delta_t = thermal_w / (mass_flow_rate * cp) %}
      {{ (flow_temp - delta_t) | round(2) }}
    {% endif %}

1 Like

Mick, I’ve read your article so many times, thanks for putting that together it’s so helpful and insightful, to be fair, all your articles are quality and so well put together. It’s great that you go back and update them too.

Why I started questioning things actually came from your article, specifically the Vaillant charts in the section What’s a Good COP for a Vaillant Arotherm? Today its 1.7C outside, I have a flow temp of 32 and a COP of 3.44 but looking at the Vaillant charts it should be closer to 5, I’ve never actually got my system over 4 despite the crazy low flow temp I’m able to achieve and easily heat my house

I do agree with @JamesH here, everything points to the system is running very efficiently it’s just that something is a miss (maybe the temp sensor / lagging issue) and that’s throwing the COP off in the Vaillant app. One thing that goes in the favour of COP in general, is that in the complex world of heat pumps, it’s a single number to compare efficiency that hides a lot of complexity

1 Like

Your formulas look correct (assuming no glycol), but rely on sensor.heat_pump_unit_current_cop which as other posters have said can be wildly inaccurate.

Here’s the formula I use for estimating the heating power with Carnot (python, so you’ll need to translate it)

    # Carnot heat calculation
    condensing = data["flowT"] + 2 + 273 
    evaporating = data["outdoorT"] - 6 + 273
    carnot_cop = condensing / (condensing - evaporating) * 0.5
    carnot_heat = carnot_cop * max(0, data["elec"] - 60) # ignore standby and pump

Which looks something like this (for 7kW unit), and may be closer to reality:
(edit: does not account for defrosts, so may be over optimistic at times)

Ian, can you check your flow and return temperature on the device itself? I can access this data on the hydraulic station (indoor unit), I’m not sure where your controller is when you don’t have the indoor unit. In any case, if you see a difference between flow&return temperature when the compressor is off but the circulation pump is running, we can judge what the COP error is. My money is on exactly this sensor discrepancy, you wouldn’t be the first to suffer from it.

2 Likes

Side note: If I understand the myPyllant code correctly, the COP value shown in HA is for the current day rather than real-time. This doesn’t help explain why it’s so wrong, but worth keeping in mind.

Tim,

Thanks, I’ve now implemented this, it’s a much better way of doing it. Especially given your insight that the COP is the Daily average not instantaneous. In theory your approach will be much better.

Out of interest, how do you calc flow rate. I just used two constants, but that doesn’t sit right with me and looks like the biggest hole in my calcs

I don’t calculate flow rate at all for Vaillant, though on Mitsubishi systems I have used fixed flow rates with reasonable success which works as I know their pumps run at a constant speed. I don’t know if this holds true for Vaillant, but looking at a random sample on HPMorg it seems like it might.

That’s what I did after some reading, but looking at HPMorg I think I’ve got it too low

# --------------------------------------------------------
# FLOW RATE (L/min) — NOT mass flow
# --------------------------------------------------------

- name: "heat_pump_flow_rate"
  unit_of_measurement: "L/min"
  state: >
    {% set heating = states('sensor.heat_pump_controller_heating_state') | int(0) %}
    {% set dhw = states('sensor.heat_pump_controller_dhw_state') | int(0) %}

    {% if dhw == 1 %}
      13     {# DHW typical flow #}
    {% elif heating == 1 %}
      18     {# Heating typical flow #}
    {% else %}
      0
    {% endif %}

To be honest I just played around with these values until the COP got closer to the Vaillant COP. Now given the improvements you’ve suggested and the wrong assumption I made about the COP from MyVaillant being instantaneous, I’m thinking these are too low. I will check the values on the console. I do have a manual flow measure on the Return but I’m not sure if I read this from the Top 40L/Min or the bottom 25 L/min

You might be better off reading the flow rate from the controller directly. See if this video helps: https://www.youtube.com/watch?v=yAr6PYFCELM

More detail can be found on Zarch’s blog post: Vaillant aroTHERM | DT5 | Mass Flow Rate Triangle - can also find out the true return temperature to fine tune your formulas (with the caveat that one or both temps may be wrong).

FYI: This is what you would see if you let My Heat Pump app calculate the Carnot heat (dark red):


It’s not always an exact match, and you sometimes need to fiddle with the heatpump factor to get it to fit better. It can be a useful diagnostic tool to check if the heatpump (or metering) is within expected parameters.