Improve efficiency: Turn the heat pump off

If you checked, you’d see that I’m a Chartered Electrical Engineer. I spent most of my career in the Controls & Automation field of electrical & electronic engineering.

Sorry for not searching on your name. But still a different industry to both my education and my work, so I think it’s understandable we don’t have completely common jargon, but I thought latching relays were a thing, but maybe they have a different official name to what non-specialists call them.

Nonetheless, I apologise for any confusion.

They are, and that’s exactly why I suggested the correct description for the action of a bi-metallic thermostat, and for that matter a microswitch, is hysteresis. In a latching relay, in one type, there will be “operating” coil, with a mechanical latch to retain the mechanism in the ‘operated’ position, and a second coil to release the latch and allow the mechanism to return to the non-operated state. In another type, the latching mechanism is magnetic, and then there are either two coils, or the coil is energised in the opposite polarity to release the relay (the “remanent” relay). The latching action requires a separate action to release, hysteresis is a property of one action - albeit in the opposite direction. Hence “degrees of hysteresis” because the thermostat is calibrated in degrees of temperature, in a microswitch the hysteresis is defined in mm of operator travel.

I don’t believe that is an accurate description of mathematical hysteresis (link to this site’s preferred dictionary), while the bimetallic thermostats I remember growing up decades ago simply used the pull of the rod bending caused by temperature change to overcome the (fairly weak) magnetism, but I’ll avoid both terms after this experience!

Now, back to heatpumps:

I’ve added the device.state == ‘defrost’ as a blocker to my routines alongside holiday mode. I’m not sure whether I need to add offline and missing device infos because I’m fairly sure my control program will die in a flaming traceback in those situations… :laughing:

I’ve also restructured the code so it changes mode based on whether roomtemp is in a target [min,max) range that is calculated by time of day, current and melcloud-forecast temperatures, and whether the system is in heat-water state, and added a blocker if we’ve already changed mode in the last hour as a basic protection against short-running. I won’t really know if this works well enough and saves any power until more cold weather next week.

I wonder about moving the logic to node-red and rewriting the melcloud commander-gatherer just to take commands from mqtt, or whether I should set up homeassistant, but homeassistant’s automations look less comprehensible to me than python code, I’m likely to be the only user and both seem like a lot of work reinventing this wheel I’ve just crafted. :wink: Maybe I’ll let it run for a month or two first.

1 Like

If, as a mathematician, you have a different definition to the engineering world, that’s fine - so long as you remember that you’ll only confuse everybody including yourself while you’re dealing with the engineering world.

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