Improve efficiency: Turn the heat pump off

Ooh…I have a bug in my code so the heat pump is not turning off.

I thought I’d share this because it finally means you can see my 14kW (!!!) Ecodan running at a steady state when it’s “a bit cold”. Of course this is England and it’s not really cold.

So we can see it’s averaging 2.13kW input and 6.63kW output for a rather gruesome CoP of 3.11 when it’s 5 °C outside (although it’s pretty stormy so the effective temp is 2 °C). The gold line on the Efficiency chart is the efficiency Mitsubishi expect, so I’m doing OK, but clearly not in the 4 to 5 range you folks are seeing.

Ironically, as I was writing that another part of the algorithm stepped-in and turned it off :slight_smile:

So I’d conclude you really don’t want an over-sized heat pump like mine running all the time unless you are independently wealthy or you own a power-generating company. It’s costing about 0.30GBP an hour to run.

Having said that, it is nice and warm in here - it looks like it just pushed the house up to 21 °C. That’s an extra one degree over the last hour.

The switch off it just did was because the radiators are shutting down because it’s warm and the overnight setback is kicking it. As a result there wasn’t enough heat transfer. The flow was rising up and up to keep the deltaT but eventually the algorithm just says “enough is enough” and stops trying to lift the flow temp. Without that it would have started becoming uncomfortably hot for sleeping.

Please ignore the odd spike at 22:00, that’s just a measuring artefact.

Now time to go work out why the algorithm is saying this:

The space heating efficiency is high, it’s 1000% which is higher than the universally accepted good efficiency of 400%

When it’s doing well it just keeps chugging along, but clearly it was misinformed about how well it was doing :slight_smile:



This method was engaged because it’s in a rare scenario and this stopped working in November when the firmware changed and those attributes always return 0.

def spaceHeatingEfficiency(deviceInfo: DeviceInfo) -> float:
    consumed = deviceInfo["HeatingEnergyConsumedRate1"]
    produced = deviceInfo["HeatingEnergyProducedRate1"]
    if consumed == 0:
        return 10
    return produced / consumed

On the bright side it’s working in EmonCMS because of all the hacking I’m doing to derive those values. I’ll have to bring that hacking deeper into the code.

1 Like

How are you “turning off” your heat pump? Is it via “power” button on MELCloud, or something more subtle? I’ve tried things like dropping the target flow temp, switching operation mode and sending “Prohibit” flags, but they don’t quite work as I’d expect.

Like this :slight_smile:

yield Action(
    "Turning off because " + reason,

But seriously…I’m just POSTing to MELCloud. The effective flag for Power is 1 so that’s nice. Just watch the browser traffic when you press the button on the site and it’ll become clear.

1 Like

Thanks for the pointer. I gather you’re prohibiting it from heating the water every time it turns on, instead sending “Heat Now” instructions on your own schedule.

1 Like

Yep, very much so. The default is to come on when it drops something like 5 °C below desired (I think) and you can stretch that to 15 °C below.

However, I still prefer to defer it until the outdoor temp warms up to get better DHW efficiency. It’s also heating it from a colder temp which puts it in it’s happy place, rather than starting with something that’s already tepid.

Additionally, it gives the solar diverter a chance to pitch in if it can help.

My experiment with pushing it higher during the cheaper Octopus Go window has been a disaster. It’s usually only doing a bit of work, it’s inefficient and no different as far as the users are concerned. Worse still, it still ended up doing the old heating cycle it was doing before after a shower because the tank looks like it needs some love due to me only having a heat sensor at the bottom of the tank.

1 Like

I thought I’d try again following @Timbones pointing out the Heat Geek link.

I’ve opened all the radiators fully and it’s a bit cold ( 7.0 °C ).

It’s going pretty badly. I started the experiment at 17:30.

You can see beforehand the efficiency was better. It was actually 373% with a flow temp of 37.0 °C.

With the system being wide-open it was 304% with a flow temp of 34 °C. We can see the cycling because the heat pump can’t modulate down far enough.

It averaged 1.54kW of input power over those three hours versus the 1.20kW input power yesterday when the conditions were similar. For those three hours:

Yesterday: Space Heating 327%, £0.52 (kWh: 3.6 => 11.8, kW: 1.20 => 3.93)
Today: Space Heating 304%, £0.67 (kWh: 4.6 => 14.0, kW: 1.54 => 4.67)

This re-confirms earlier observations that I use quite a bit more power (28% in this case) when I try to keep things running continuously.

The indoor temp has gone up from 21.5 °C to 23.5 °C. It really is too hot. Now, I’m not making the next bit up. After an hour we had supper and when the kids arrived they both said they were cold without prompting. It was insane. I think it’s because they were going round without socks for example, so the higher indoor temp was putting them in a “I don’t know how to handle this” situation.

I can’t keep doing this experiment, it’s too hot in here.

Did you do try dropping the flow temps even further? That might have been enough to convince the heat pump that it didn’t need to run. [Thought I noticed in the manual that there is a minimum flow temp setting that is defaulted to 30 to prevent cycling (?!) which can perhaps be overridden]

It could be that an oversized HP doesn’t quite work with the “ideal” setup, and needs something to turn it off when the house is hot enough, be it TRVs, room stat or a software switch? :man_shrugging:

I tickled it down a bit, but if it’s turning itself on and off then that’s pretty much going back to doing what I was doing with my algorithm, rather than the “continuous running” desire folks seem to have.

Now, the un-written thing is that I used to have a horrible timer controller. For example, the battery died and we couldn’t get a replacement, so each power-cut meant setting it back up from scratch. The new one that came with my ASHP was one of the horrible ones where you press buttons a lot of times to set it up.

I wanted something a lot “easier”. Now, I understand the irony in writing that given where I’ve got to!

To be honest, I wanted to just do this, which is at the heart of my system:

    def crontab() -> str:
        # Times in UTC
        return """
0 6 * * 1-5 On
30 8 * * 0,6 On

0 22 * * * Off

I wanted to just have that type of setup for managing the heating rather than a clunky timer controller.

Oh how naive I was :slight_smile:

Ah yes, this little nugget in my code:

if float(updateGram["SetHeatFlowTemperatureZone1"]) < 25:
   raise Exception("The flow temp can't be below 25 °C")

That’s certainly my conclusion.

Part of the problem is that life is variable. Telling people to buy “the right sized heat pump” is glossing over the fact that kids leave home or you build an extension. The lack of modularity in heat pumps means you are stuck with what you bought and there’s no second-hand market like there is for cars when you find they are no longer suitable.

1 Like

Someone had a shower at 22:00. When it had decided it had finished doing space heating the algorithm decided it’d heat the water because the bottom of the tank was below 27 °C which was it’s trigger threshold (which is very variable). I wouldn’t have minded it waiting until the morning, but I’m not very bothered it did this now. It was 272% efficient and the effective temp is 1.6 °C

That ran for 15 minutes and then the heat pump automatically switches itself over to space heating.

My algorithm jumped in and said this when the bottom of the hot water tank got warm enough:

2022-02-26T22:56:07.069 INFO The tank temperature is 38.0 °C which is at least as hot as the target of 37.0 °C so stopping forced hot water mode

2022-02-26T22:56:08.021 INFO Heat pump was previously turned off by a schedule so revert to being off

You can see it decided to switch the entire thing off and now that’s it until 06:00 tomorrow.

It looked like this:

BTW there are barriers in the update code for altering the tank temperature too:

if float(updateGram["SetTankWaterTemperature"]) < 10:
    raise Exception("The water tank temp can't be below 10 °C")

if float(updateGram["SetTankWaterTemperature"]) > 60:
    raise Exception("The water tank temp can't be above 60 °C")
1 Like

How were you expecting them to work and what did they do? As posted above, I switch mode to heat-thermostat with a target of 17 degrees as my “off” setting and it seems to work.

1 Like

I’ve being shutting off my heat pump for years. but I use a more simplistic method. I have buffer heat storage/DHW that heated by either heat pump, evacuated solar or diversion… the heat pump heats it to 45C which is about the minimum temp I can go for my climate… but when my buffer tank reaches 50C due to solar input it turns off the power to the heatpump and all it circulation pumps as well by disconnecting a main line to heat pump. if it sunny and mild in the winter time or early spring my heat pump might be disconnected for days, weeks or even months before it comes on again. until the buffer tanks drop to 45c again. rough estimate for me it save about 20 % in less energy costs then having the heat pump circulation pumps run all the time. another benefit to shutting it off. is my buffer tanks can get far hotter for add storage and the house over heats less because you are not constantly circulating hot fluid through the house so when it -10c outside it might heat up to 21-22 c instead of heating up to 25 - 28C during the day then when it cools down at night to - 20c outside the system will not come on till some times in the middle of the night to maintain the house temperature at 17c

1 Like

Your setup is wonderful @stephen , and your outdoor temps are very troubling. I’ve been around the canal in Ottawa when it was frozen over and it was a very strange sight compared to what we see in England.

Your buffer does sound useful. I’m using my radiators as a bit of a buffer because they sit gently radiating heat when the system is off. My solar diversion sadly can only go to DHW, but it’s not terribly impressive anyway, I’m sure your evacuated solar is more useful on sunny Winter days. On rare occasions I can run the heat pump from solar power, but it tends to be cloudy in the UK in the Winter.

During my experiment last week my house went up to 24 °C and it was unbearable. Going up to 28 °C would be crazy for me. :slight_smile:

if you found Ottawa weather strange as that place in warm compared to me , but very damp - come to where I live when its -20c to -40c day and night for weeks on end … I bet you would be surprised by a few things mainly that you feel so so much warmer then you do in the UK when it -10c there compared to my - 30c here … my gosh when I stayed in Germany a few times over the winter. I was dying as it felt colder then -30 where I live but it was only - 5C . but there a biological reason for that our bodies adjust to cold damp climate compared to a cold dry climate. your skin temperature is much colder then mine . so when I go to a damp cold climate I loose heat very very fast. ( would adapt but it takes a few years) and when you are here you will feel so warm ( but you have and increase risk of frost bite as on the surface of the skin because the skin temperature is cooler) … and secondly you do not get sick very often during the winter – and lastly that in March on a calm sunny day you can walk around in your tighty whities outside even though it -10c outside after your body condition itself over the winter and it feel like “room temperature”


This ^ is the reason I come here to chatter :slight_smile:

I tried dropping the target flow temp to, like, 20 degrees, which kinda works. The pumps turn on periodically whenever there’s a call for heat, but the compressor doesn’t start up.

I’ve since changed to using 'Room" mode as you suggest, and that seems to work better. Thanks.

1 Like

I tried that for a while, but found that whenever my code switched the heat pump to “Room” mode (i.e. “off”), it would trigger another heating cycle. I’ve since (today) changed to simply sending Power = false as David suggested. So far (12 hours) it seems to be working nicely.

As we’re entering the heating season, I’m experimenting with my heat pump control system. Current strategy is as follows:

  • Implement a “house thermostat” entirely in software, using aggregate of 5 room sensors
    (plus 0.1 degrees while heat pump is on, to add a little hysteresis)
  • Heat pump power is switched on or off depending on the house temperature vs. thermostat
    (though making sure to wait for the heat pump to finish it’s current cycle, not cutting it short)
  • Physical room stat set to manual so it always calls for heat (+2 degrees to avoid TPI)
  • Set-back temp over night which is gradually increased during the morning up to day temp
    (this gives a chance for the building to get warm naturally from solar gain)
  • Custom weather compensation formula that uses future outdoor temperatures
  • The heat pump system does its own thing regarding flow temps, power draw, cycling, etc.
  • Can be easily overridden by switching HP to built-in “curve” mode, and room stat to auto
    (e.g. for when the broadband connection suddenly stops working, as it did last week)

(blue = “thermostat” temperature, black = average temperature, orange = heating)

There’s probably some more tinkering to be done as the nights draw in and days get colder…

1 Like

I found mine would run and run, so that’s when I started comparing it’s actual efficiency with the expected and if it was getting rubbish I just turned it off anyway.

Mine is set that way too, but after a power cut (two yesterday!) it doesn’t come back “on” until a human presses a little button. Very boring.


I’ve also added this code to stop it kicking in, even on the dynamic weather comp curve, if it’s getting warmer outside at a fair rate. For some magic value of “fair”.

Nice, I wish I could get organized to add that :slight_smile:

This is really good to see. I found that letting the occupants take over during the early days helped because they could override the algorithm and feel like they had agency. It’s probably been a year since they last bothered.

Best of luck with your new setup, it’ll be interesting to see. I’d be really interested if you could untangle the impact of different changes. That’s why I wrote my dodgy app so I could look at slices of time where I had been experimenting. It’s good to see you using it. I don’t think it’s clever enough to do the equivalent of Fourier analysis and auto-de-tangle the impacts of various changes, especially as we’re not feeding those parameters into EmonCMS along with the observed outcomes.

At which point a lightbulb obviously goes off in my head.


(mumbles to self: must stop making it more and more complicated!)

1 Like

Off? Plunging you into darkness? :wink:


Background: I had previously determined that the TPI feature of the room stat (fitted by HP installer) was causing the HP to cycle unecessarily. So, by setting it to be 2 degrees higher than I need disables that feature. By taking it out of the equation I’m hoping to see if that really is the case or not.

Also, by replacing it with software allows me to setup a much more sophisticated heating program than the 4 time slots that the old one provided.

This is mostly just a refinement of what I had working last winter, with only big change being the thermostat. I’m hoping that this will result in longer running cycles, but it’s not quite cold enough yet to see this in action.

It’s great. I use it all the time now in preference to my own shonky dashboards that I used to use.

1 Like

Hi, I’m new here so sorry if this is in the wrong place.

I have a Ecodan heat pump and I’ve been trying to improve the COP by lowering the flow temps on the weather compensation curve, this worked great at colder temps but when it’s mild weather the unit is doing what I think is referred to as cycling, so it’s heating up and down every 15/20mins rather than maintaining a stead flow temp. I’ve noticed this makes the COP worse that it was before so it’s undesirable and I’d like to stop it.

I decided to try lifting the flow temp at the higher temps (36°C Flow @ 14°C outside) while leaving the rest the same, it seam like the wrong way of doing things but hopefully it will work.

The only other way I can think of doing it is to set the turn on temperature lower on the thermostat, so it stays turned off for longer, but I’m not sure if this is even possible on the Ecodan without altering the turn off temperature.

I see @MyForest has wrote his own script to turn it on and off when he requires but I think that will be beyond my knowledge.

Any help/ideas would be appreciated.

1 Like