Improve efficiency: Turn the heat pump off

@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.