11.2kW monobloc R32 Ecodan showing COP2?

@Timbones - what does the ‘capacity’ refer to and what is Max, nominal etc down the side?

Capacity is heat output in kWh. Divide by COP to get approximate electric input (I’m guessing).

Max, Nomimal, etc is how hard the heat pump is working, which scales with capacity. Note that “Min” often has lower performance than “Mid”, which is not unusual for heat pumps.

2 Likes

Can you add more sensors to the Ecodan controller? Are they just standard 3 wire ds18b20?

And once added, do they just show on the thermistor display screen and subsequently come through on the emoncms via melcloud?

Please take this post with a grain of salt.

I’ll do a shameless plug for my mmsp heatpump app here just in case it helps.

Specifically it takes the interpolated_efficiencies and adds them to the graph.

I use it to guide me if I’m hitting the manufacturer’s suggested efficiency which is on the chart as the gold line:

The grey line is "what efficiency would you be getting with this weather if you had a 40 °C flow so is like having a “things could be this bad” display. Of course none of us run our water that hot :slight_smile:

You may find that setting up my app is more hassle than just working out the efficiency manually for some scenario you care about. Especially as you’d be looking to create a copy of the interpolated_efficiencies.json for an 11.2kW unit rather than my 14kW one.

2 Likes

I have set up MMSP app for this user, but I’ve not updated the interpolated_efficiences for it. Given that I already have them transposed into a spreadsheet for the 11.2 kW model, it wouldn’t take too much effort to do that…

1 Like

In that case I’ll dump this here for you:

{
    "25": {
        "nominal": {
            "-10": 2.59,
            "-7": 2.78,
            "2": 2.99,
            "7": 4.54,
            "12": 5.18,
            "15": 5.35,
            "20": 5.57
        }
    },
    "35": {
        "nominal": {
            "-20": 1.51,
            "-15": 1.96,
            "-10": 2.41,
            "-7": 2.68,
            "2": 3.11,
            "7": 4.26,
            "12": 4.51,
            "15": 4.66,
            "20": 4.91
        }
    },
    "40": {
        "nominal": {
            "-20": 1.37,
            "-15": 1.78,
            "-10": 2.19,
            "-7": 2.44,
            "2": 2.86,
            "7": 3.81,
            "12": 4.03,
            "15": 4.17,
            "20": 4.4
        },
        "mid": {
            "-20": 2.13,
            "-15": 2.23,
            "-10": 2.33,
            "-7": 2.39,
            "2": 3.01,
            "7": 3.75,
            "12": 4.11,
            "15": 4.33,
            "20": 4.7
        },
        "min": {
            "-20": 2.13,
            "-15": 2.23,
            "-10": 2.33,
            "-7": 2.02,
            "2": 2.46,
            "7": 3.41,
            "12": 3.89,
            "15": 4.17,
            "20": 4.65
        }
    },
    "45": {
        "nominal": {
            "-20": 1.23,
            "-15": 1.6,
            "-10": 1.97,
            "-7": 2.19,
            "2": 2.61,
            "7": 3.35,
            "12": 3.56,
            "15": 3.68,
            "20": 3.89
        }
    },
    "50": {
        "nominal": {
            "-15": 1.58,
            "-10": 1.84,
            "-7": 2,
            "2": 2.38,
            "7": 3.03,
            "12": 3.21,
            "15": 3.32,
            "20": 3.51
        }
    },
    "55": {
        "nominal": {
            "-15": 1.55,
            "-10": 1.71,
            "-7": 1.8,
            "2": 2.14,
            "7": 2.7,
            "12": 2.87,
            "15": 2.96,
            "20": 3.13
        }
    },
    "60": {
        "nominal": {
            "2": 2.05,
            "7": 2.46,
            "12": 2.57,
            "15": 2.63,
            "20": 2.74
        }
    }
}

and more interestingly…interpolate!

import json
import pprint

with open("device_efficiencies.json") as de:
    allEfficiencies = json.load(de)

    outcome = {}
    for flowTemp in allEfficiencies.keys():
        flowEfficiencies = allEfficiencies[flowTemp]
        interpolatedEfficienciesForTemp = outcome.setdefault(flowTemp, {})
        for series in flowEfficiencies.keys():
            interpolatedEfficienciesForSeries = interpolatedEfficienciesForTemp.setdefault(series, {})
            efficiencies = flowEfficiencies[series]
            temperatures = [int(t) for t in efficiencies.keys()]
            for i in range(0, len(efficiencies) - 1):
                currentTemp = temperatures[i]
                nextFlowTemp = temperatures[i + 1]
                domain = range(currentTemp, nextFlowTemp)

                currentEfficiency = efficiencies[str(currentTemp)]
                nextEfficiency = efficiencies[str(nextFlowTemp)]

                for temperature in domain:
                    efficiency = currentEfficiency + (temperature - currentTemp) * (nextEfficiency - currentEfficiency) / (nextFlowTemp - currentTemp)

                    interpolatedEfficienciesForSeries[temperature] = round(efficiency, 2)
            lastTemp = str(temperatures[-1])
            interpolatedEfficienciesForSeries[int(lastTemp)] = efficiencies[lastTemp]

    # Now interpolate across flows

    flowTemps = [str(t) for t in sorted([int(t) for t in outcome.keys()])]
    for i in range(0, len(flowTemps) - 1):
        localFlowTemp = flowTemps[i]
        nextFlowTemp = flowTemps[i + 1]
        localEfficiencies = outcome[localFlowTemp]
        nextEfficiencies = outcome[nextFlowTemp]

        for series in localEfficiencies.keys():
            if series in nextEfficiencies.keys():
                print("Interpolating between " + localFlowTemp + " and " + nextFlowTemp + " for " + series)

                localSeriesEfficiencies = localEfficiencies[series]
                nextSeriesEfficiencies = nextEfficiencies[series]
                for intFlowTemp in range(int(localFlowTemp) + 1, int(nextFlowTemp)):
                    proportion = (intFlowTemp - int(localFlowTemp)) / (int(nextFlowTemp) - int(localFlowTemp))
                    intFlowTempBucket = outcome.setdefault(str(intFlowTemp), {})
                    seriesBucket = intFlowTempBucket.setdefault(series, {})
                    for outdoorTemp in localSeriesEfficiencies:
                        if outdoorTemp in nextSeriesEfficiencies:
                            efficiencyRange = nextSeriesEfficiencies[outdoorTemp] - localSeriesEfficiencies[outdoorTemp]
                            seriesBucket[outdoorTemp] = round(localSeriesEfficiencies[outdoorTemp] + proportion * efficiencyRange, 2,)

    pprint.pprint(outcome)
    with open("interpolated_efficiencies.json", "w") as ie:
        json.dump(outcome, ie, indent=4, sort_keys=True)

Put the known efficiencies in to device_efficiencies.json and let Python do the legwork for you.

2 Likes

Chapter 4 of the FTC6 installation manual suggests there is a terminal for “DHW tank upper water temp.” (THW5A). Looks to be 2 wire connection, but I’m way out of my depth here. (I’m a software man, where there’s always Ctrl+Z)

No clue. I’d guess not. Could maybe cheat and use one of the other used sensors on the off chance they come through, but that could have unexpected consequences.

1 Like

Reading with interest! When I’ve got some time at the weekend I’ll have a good read through! I need to get myself more familiar with all the new data I’ve got access to!

I’m also still really interested in the potential benefits of replacing the ground floor central heating pipes. So I’ll pick up this as a new question once I’ve got a diagram of the system etc.

In terms of the app and some of the possible predictions - I’m happy to explore the data with some guidance but I’m not a software person so will rapidly be out of my depth if anything code wise is required! Sorry - will do my best to understand though!

I’m learning loads :slight_smile:

1 Like

Thanks, have done that and put it on my server. It’s handy that both Kevin and I have the same heat pump :smiley: Anyway, here’s how it looks over the past 6 hours using the nominal values…
(outdoor temperature around 1C for both locations)

Kevin’s Ecodan 11kW (ignore the cost figures, they’ve not been setup)

My Ecodan 11kW

[Edit: pictures were wrong, so have re-uploaded the proper ones. I think]

Sadly the pipes run through an unheated cellar / underfloor space on the ground floor. There is really mixed support and to be frank, the pipes are an absolute shambles! (at least in terms of support and layout).

1 Like

The new Ecodan tanks have a second temperature sensor near the top of the tank.

I’ve got two 11.2kW units must get my monitoring into Emoncms. Doing some basic COP in Home Assistant using the daily estimated energy consumed/energy generated from MELCloud api (no heat meter or power meter yet).

2 Likes

Here’s a plot of power and COP vs. difference between flow and outside temperatures at “Nominal” power level. Can clearly see how COP (green) falls as flow get hotter and outside gets colder.

1 Like

The thermistor for the tank is resistance type – I may order one of these, which I think is similar to the official Mitsi ones, from here 2 Pcs 15K NTC Thermistor Probe 15.7 Inch Copper Temp Sensor for Air Conditioner | eBay.

But I have a solar tank with the FTC thermistor in the upper pocket and with the thermistor for the solar controller in the lower pocket I don’t think I can squeeze another one in there.

What would the controller do with two inputs? I’ve not come across any references anywhere.

2 Likes

So it looks to me as though it’s hitting the gold line which means @KevinF 's system is doing OK in terms of expected performance, but that the flow of 45 °C means a low CoP is expected when it’s 1 °C outside.

Even yours is running surprisingly hot, your flow is going over 40 °C @Timbones.

My flow has averaged 34 °C and has only touched 40 °C a few times. Seeing as how we live so close, it’s mysterious that my mean external temp is 2 °C lower than yours today which I’ll attribute to me being in the middle of fields. Note that I’ve been messing about with mine today doing some experiments. I still find it odd that your internal temp is 2 °C below mine because it’s been borderline cool in here today (which is why I stopped experimenting!)

I started hypothesizing, but the rest of you are doing a wonderful job of chasing this and with you gathering more data I think you’re coming towards some ideas of what to change.

1 Like

I’m running hotter (averaged 36 °C), yet have better COP? :person_shrugging:

When mine was running at your pump speed (3) I actually remarkably got the same 2.99 CoP as you for that time window.

I haven’t quite managed to crop it correctly, but that’s me on the left (2.97) and you on the right (2.95):

So in that window we both used and produced much the same energy. My house was 1°C warmer inside and it was 2 °C colder outside at my house. Your flow averaged 3 °C more than mine and your max was 43.5 °C. Your dt is over 1 °C better than mine.

If I could cope with it being cooler in the house I could save a bunch of money, but when I surveyed the occupants today they indicated we were on the border of what they could tolerate. Admittedly they were wandering round in pyjamas though!

I should add that this is not a competition, just an observation.

I think you might be on to something with your slower flow which is why I’m trying the different pump speeds. The problem is that I feel guilty going back to top gear now because I strongly suspect it’s wasteful.

A word of warning, unless you are using the same sensors, comparison can be difficult.

Currently I have 3 temperature sensors sitting next to each other;

  • My old emonTH (DS18B20) 19.8°C
  • Govee BLE 20.5°C
  • Komfovent MVHR controller 21.8°C

For comparison, with offsets so they overlay.

4 Likes

That’s a nice plot of the reference data. Would be interesting to compare with max and min see how much it shifts?