Improve efficiency: Turn the heat pump off

Continuing on this topic. If you equate the heat delivered into the house as the “distance traveled” and mpg as the equivalent of cop. Delivering the same amount of heat in shorter period of time likely requires higher flow temperatures.

It is more likely that “user experience” is more equivalent to the “distance traveled”, but the user experience is not easily measured.

The point here being, that we are likely not comparing apples with apples, when comparing heating always one, with heating that is scheduled.

1 Like

Luckily I have a magic solution for that.

I have users in my house that feed back their experience. When I push things too far they tell me.

For example, when the heating was running for four hours continuously they didn’t notice the difference to a normal day where the heating goes on and off.

I’m going to ruin your analogy by saying it’s like driving at 100mph and then coasting with the engine off. It transpires that in my old Ford Focus it was clever enough to shut off fuel to the engine if you were decelerating a certain amount.

However, silliness aside, it is difficult to get across the ideas and the behaviours. That’s why I built my app to run these experiments so I could see the changes.

For example, in the last few days I’ve been playing with the pump speed. It’s normally at 5 and is fine. I dropped it to 3 and it sorta seemed to be marginally better. I dropped it to 1 and things got bad pretty quickly.

Here is how bad it got at 1:

Specifically you can see the gold line which is what Mitsubishi think the efficiency should be.

Here we are when the pump speed is 3:

On the surface it looks worse because the efficiency is lower. However, the outdoor temperature changed so actually relative to the gold line we’re doing much better. It’s a bit like comparing mpg on the flat versus comparing mpg on a hill.

The last three years have left me in position where I’m shrugging because there are so many variables and my algorithm is now so complicated I can’t see how a manufacturer can ship something that’s “optimal”. For a simple example, mine knows to turn itself off when there will be solar gain because I’m seeing the sun come out using my solar panels. It’s just so very tangled I don’t see a good way out of this at the moment.


I too have been experimenting with pump speed recently. It was set to 3 in order to reduce the noise, but I’ve been wondering if it would perform better at a higher speed (from 14 ltr/min to 16 ltr/min). Results are inconclusive so far.
(5 is the default for all the pumps, so one presumes that’s what the manufacturer recommends)

I’m sure there’s some good theory (e.g. John heating simulator) on how to choose the best pump speed, but I can’t get my head around it.

I’d recommend checking the flow rate you’re getting by going into the “Running Information” screen and entering 5 4 0 to get litres/minute. Check this against the minimum spec for your model. (Ecodan_ATW_Databook_R32 says 17.9 to 40.1 for PUZ-HWM140VHA). Heat pump won’t be happy outside of this range.

1 Like

Tim, thanks for taking time to format that, it really helped make it clear what I needed to do when I got to that screen for the first time ever.

On my system pump speed 3 = 21L/min and pump speed 5 = 29L/min.

I thought we’d hit on something good when I lowered the pump speed, but I came to the system this morning to find this situation:

What’s happening is that it’s running smoothly and the limited amount of heat means it’s not getting up to my “it’s too hot for too long” threshold. Admittedly the house is a smidge toastier than normal, in fact it’s a bit too hot, but that might be the thermal gain just kicking in.

It’s produced the same amount of output as a normal day, but using on-and-off I would have used less input and seen about 340% efficiency. That 272% with constant-running is quite eye opening. Anything less than 300% makes me wonder what is broken.

So let’s say the “what’s broken” is that the external temp was below zero (which is not terribly common in the UK).

There is something interesting in the data. After 09:30 it managed to modulate down to 1.6kW, I think I’ve only ever seen it go down to 1.8kW before. However, more interestingly I should mention that I very rarely see power consumption gently drop like that so this maybe you all are able to run-continuously. At one point the output was down to 4.9kW which is very low compared to the typical “I’ve got to be like a volcano” you see from my system.

I panicked and moved the pump back to 5, but after reviewing this data I’m willing to keep trying the experiment with the pump speed at 3 ( = 21L/min) to see how it goes.

The defrosts are complicating things, we can see the power consumption rising just before they happen, but it’s good to see it sorting itself out.

1 Like

I don’t think it ruins it, just highlights the complexity of the variables (as you pointed out). I am trying to leverage this “coasting” by “charging” the 4.5 cubic meters of concrete making up part of the downstairs flooring.

If I happen to do a long run in the morning, the house is too warm for me until about lunch time, not so if I don’t [go for a run], so user experience has external factors that are difficult to control for.

I would like to find a simple set of metrics to target or a good model with those metrics to use to ascertain the differences between always on, vs on a cycle.

1 Like

I’m using the Ecodan Demand Management Input to do deal with solar gain - just turn the heat pump off if the room gets above 21C. But that can’t cope with the opposite problem I have on windy days!

I spent my first few working years doing, amongst other things, control systems for ICI (a big chemical company for those not old enough to remember :slight_smile: ). If I was faced with this problem I would use a cascade type controller.

It would take the weather compensation curve as the primary set point and modify it with a primarily integral action control signal from the target room temperature. The latter would have to be quite a slow loop given the ‘house intertia’. So if my Compensation curve is targeting a flow temperature of 35C, but the room temp is below setpoint, the cascade loop would be slowly integrating an increase in the flow temperature setpoint and vice versa.

The clever bit that OEMs should do is make that a self-learning algorithm so that normal mortal home-owners don’t have to fiddle endlessly! (maybe that’s what the Ecodan auto-optimising stuff is meant to do, but it doesn’t work for me.)



@Rachel you might enjoy this bit where we chatted about using an accumulator in a similar fashion.

I have a sort of magic solution for that which might help you, I use the effective temperature for my weather compensation so it takes into account the wind cooling my house down:

1 Like

@MyForest my issue at the moment is how to get into the Ecodan controls. The ‘all weather’ variable including wind speed is a nice thing, but i guess not easily replicable.

I could programme the cascade loop in NodeRed or maybe directly in an Arduino (which I’m already using for flow monitoring), but i dont have the time/skills to work out how to interface with the FPC unit or API. There is a NodeRed MelCloud interface, but its designed for air/air a/c units. I use it to read the ASHP temperatures, but haven’t worked out if/how i could write a target flow temperature.

I’ve never programmed in Python and don’t really have the time to learn, so i think going directly via modbus is not an option!


Hi @Rachel

You could use my existing script to do it, but the risk is that it would stop working one day for some reason and you wouldn’t be able to recover.

Here’s an example where it’s just using a command line with no programming. It put things in a temp directory to avoid it messing up your machine. However, it would involve installing new packages which might mess up your machine so be thoughtful about that (I just do everything in a container).

$ cd $(mktemp -d)
$ git clone
$ cd heatpump-act/act/
$ python -m pip install python-dotenv structlog typer urllib3
$ python --help
Usage: [OPTIONS]

  Instruct the heatpump to alter a setting.

  --name TEXT             Setting name  [default: SetTankWaterTemperature]
  --value TEXT            Setting value  [default: 48]
  --message TEXT          [default: Specified on command line]
  --source TEXT           [default: AlterSetting.main]
  --shoosh / --no-shoosh  [default: no-shoosh]
  --help                  Show this message and exit.
$ export DEVICE_ID=<your-device>
$ export MITS_CONTEXT_KEY=<your-key>
$ python --name SetHeatFlowTemperatureZone1 --value 35

Which gives all this output, specifically it shows your update worked:

2023-03-08 11:09:08 [info ] Sending update…
2023-03-08 11:09:08 [info ] b’{“EffectiveFlags”:281474976710656,“LocalIPAddress”:null,“SetTemperatureZone1”:26.0,“SetTemperatureZone2”:20.0,“RoomTemperatureZone1”:20.0,“RoomTemperatureZone2”:-39.0,“OperationMode”:2,“OperationModeZone1”:1,“OperationModeZone2”:2,“WeatherObservations”:,“ErrorMessage”:null,“ErrorCode”:8000,“SetHeatFlowTemperatureZone1”:35.0,“SetHeatFlowTemperatureZone2”:20.0,“SetCoolFlowTemperatureZone1”:20.0,“SetCoolFlowTemperatureZone2”:20.0,“HCControlType”:1,“TankWaterTemperature”:14.5,“SetTankWaterTemperature”:10.0,“ForcedHotWaterMode”:false,“UnitStatus”:0,“OutdoorTemperature”:3.0,“EcoHotWater”:true,“Zone1Name”:null,“Zone2Name”:null,“HolidayMode”:false,“ProhibitZone1”:false,“ProhibitZone2”:false,“ProhibitHotWater”:false,“TemperatureIncrementOverride”:0,“IdleZone1”:false,“IdleZone2”:true,“DemandPercentage”:100,“DeviceID”:,“DeviceType”:1,“LastCommunication”:“2023-03-08T11:08:49.214”,“NextCommunication”:“2023-03-08T11:09:49.214”,“Power”:true,“HasPendingCommand”:false,“Offline”:false,“Scene”:null,“SceneOwner”:null}’

2 posts were split to a new topic: eBus reader

@Timbones Are you tempted to turn off your heat pump at 19:41?

It could bump you up from 4.37 → 4.67 CoP.

(loving the deep-linking to a time window)

1 Like

Yeah, that’s tempting. The room temperature had just ticked up by half a degree, so I could have tweaked the thermostat down a touch at that point. I have code to do that, currently disabled to see how well the manufacturer’s “auto adapt” controls work out of the box.

I’ve just recently worked out the coefficients for my home and radiators, and found the numbers are such that I can’t get continuous running with this oversized heat pump, so I’m doomed to run it in bursts like a boiler. Keeping the room temperature within 0.5 C instead of the default 1 C will result in shorter cycles more often, with more time spent at the lower flow temperatures. This could give a little more performance, as you suggest.


More specifically: using heat loss coefficient (260 W/K + 880 W), output from my radiators (18 kW at ∆50) vs. the minimum output from my heat pump (4 kW), I can calculate the perfect weather compensation curve.

I’m pretty much stuck to a minimum flow temperature of 37°C, unless I’m willing to accept some moderate cycling (40 minutes on, 20 minutes off) which lets me drop to 33°C. So, another way of saying “improve performance by turning off the heat pump”.

(I set the thermostat higher during cheap Cosy periods, aiming to maximize heat production rather than efficiency, as this optimises the cost)

1 Like

BTW my lowest flow temp is 25. The API won’t let it be set at a lower target. I turn on the heating when the pipes get cool. Yours is getting will below that so your CoP benefits from starting really low. In fact your flow starts at my indoor temp :slight_smile:

1 Like

So while I can use formulas to come up with the perfect weather compensation curve, auto-adapt doesn’t use it, and instead raises the flow temperature to some stable temperature. If I want higher COP then I’ll need much tighter control of the heat pump, like I was doing. Which I was hoping to get away from.


Similar to you I think @Timbones, I’ve had to increase my w/c curve minimum flow temp to avoid excessive cycling at mild ambient temperatures. In your experience is auto-adapt good at getting the flow temperature close to the mimumum required to achieve target heat whilst avoiding cycling due to flow temperatures too low for the emitters?

I’m thinking ahead to the best (and simplest) control method for when I’ve consolidated my two ecodan systems into one with a single heat pump to control.

It seems to do a reasonable job of finding the flow temperature necessary to achieve the minimum emitter output, without cycling. For my oversized system with not enough radiators, it typically settles at a flow temp of 37 C, which happens to be what I calculated to be the lowest stable state. Unfortunately, this is usually way more than the rate of heat loss, so I run it in scheduled bursts by adjusting the room temperature setting programatically.

I might give “quiet mode” another try, in the hope that it’ll reduce the power used at the start of a cycle, slowing the rise of flow temperature.

I’m not sure auto-adapt is the “best” control method, but does seem to work well and is the simplest out-of-the-box. I think I was getting better COP when I use custom code to tightly control the temperatures, and turning the heat pump off between cycles.

Other anecdotal experiences of auto-adapt over here:

1 Like

I have a similar situation with a pair of oversized 11.2kW systems (hence the plan to consolidate to one).

However, I think I’ll always end up restricting the running time for the heat pumps as i) I’m on an off-peak electricity tariff so it’s more cost effective to ‘load the house with heat’ and run the house slightly hotter during cheap periods/cooler during expensive periods and ii) unless the average temperature is well below 10C the heat loss in the house is so low that even a single 11.2kW system won’t modulate low enough to be running 24x7.

I’m currently controlling through Melcloud but it’s far from ideal and occassionally goes down so I’m going to try controlling one of my systems directly over serial using GitHub - BartGijsbers/CN105Gateway: ESP32 based MQTT gateway for the CN105 protocol based Mitsubishi Heat Pumps (FTC5)

If this works as I expect then a direct serial control via Home Assistant with auto-adapt might be a good option for me once the systems are combined. It will shift some of the complexity of trying to manage the flow temperatures to the heatpump, so long as I can still control the set temperature through the serial interface. @Timbones do you control the auto-adapt target temperature programatically?

(I don’t have a Mitsubishi wireless room stat at the moment so will be an additional purchase)


Ooo… very interesting. Do let us know how you get on.

I do, by pushing values to SetTemperatureZone1 on Melcloud. Mostly time based to bias heating to cheap periods, with some tweaking that takes into account some other factors. Updates every 30 minutes.

A typical day of set temperature (blue) vs. room temperature (dark yellow) and heating (yellow)

If internet goes down, I can still poke the buttons on the wireless room stat.


A post was split to a new topic: Monitoring & Controlling Ecodan via CN105