Earth Notes: 16WW Heat-pump Control

Updated 2025-02-21.
Settings and control of the heat pump at 16WW. #heatPump #controls #DHW #spaceHeat
Control and operation of the heating system at 16WW (heat pump, heat battery and diversion/boost), with a note of changes, and initial default settings.

Some current energy system settings are made available automatically.

I am 'tuning' (read: 'messing with') our heat pump to keep us warm while minimising our carbon footprint, and to understand better how heat pumps work for my interest and research.

Frequently Asked Questions

What is the heat-pump model number?

The heat pump is a Daikin Altherma 3 M EDLA04E2V3 (MCS certificate number 011-1W0527_1) nominally rated at 4kW maximum heat out.

Is it supplying space heat and hot water (DHW)?

Yes. The hot water is stored in a 180l well-insulated floor-standing cylinder.

What is the predicted performance?

In the handover pack, nominal values in the system performance estimate are: flow temperature 50°C, SCoP heating 3.43 (heat demand 10MWh/y), SCoP DHW 2.69 (heat demand 2MWh/y), total electricity demand 3.8MWh/y. SCoP is 4.37 at 35°C to 3.17 at 55°C. The home design day external temperature is -1.8°C with a predicted heat loss of 2.1kW.

When was the heat-pump installed?

Nominally it was commissioned . The final major installation defect was fixed . See the Octopus heat-pump installation journey.

What other components are there in the heating system?

There is a myenergi Eddi commandable grid boost and solar diverter managing 'smart' pasteurisation cycles with the DHW cylinder immersion. There is a Sunamp Thermino 150 ePV thermal store (due to be reconnected ) driven from the solar PV and Eddi to cover DHW for about half of the year. See 16WW Energy Systems Diagrams.

Current Heat-pump System Settings

The installation defaults of 2024-11-29, with changes:

Cheat Sheet if Something Goes Wrong

If for some reason the heat pump goes wrong and there is no hot water or heat, try these things in this order:

  1. Take a note of any alarm showing on the heat pump MMI display by the hot water tank.
  2. Turn the heat pump off for at least 10 minutes at the "main switch" in its separate panel by the front door, then back on.
  3. If necessary use a fan heater to keep one room warm.
  4. Ensure that the Eddi rocker switch is "on" and select "boost" for heater 1 on the Eddi front panel: one hour may be enough for a shower or two hours for a bath; feel exposed metal on pipes at the top of the tank to get an idea of water temperature.
  5. If the Eddi does not seem to be heating the tank (with blue light "1" on) then turn the Eddi rocker switch to "bypass" to try to force some hot water, but please put the switch back to "on" when done.

2024-11-29: Default Set-up from Daikin and Octopus

A summary of the basic 'defaults' for the EDLA04E2V3 system as produced by the Daikin MMI (Man Machine Interface) and the Octopus installation team, subject to my requests, as of today:

  • No Madoka (wired remote control) fitted.
  • Space heating activated by external call for heat from Radbots via OpenTRV unit; no schedule is nominally possible in conjunction with this unlike the old combi heating clock adjusted (with a LWT setback schedule).
  • Radiator system pressure 1 to 1.5 bar on the mechanical gauge (the digital MMI value is lower, eg 0.9 in MMI vs 1.0 shown on the gauge).
  • Does not have the Thermino heat battery connected up.
  • The DHW cylinder immersion heater is driven from Eddi output 1 rather than the heat pump system, with a scheduled early Sunday morning boost ( (UTC) for 3h30) for pasteurisation, with the immersion heat thermostat set hot enough (5) for pasteurisation adjusted.
  • DHW on (with DHW priority): to .
  • Weather compensation for LWT/flow set to 50°C at -2°C external (design temp), 25°C at 12°C external (Daikin recommends defaults of external -7°C and 20°C end-points).
  • Space heat: space heating OFF temperature (breadcrumb 4.3): 22°C adjusted.
  • Space heat: pump operation mode (breadcrumb 4.5): request.
  • Tank: schedule (breadcrumb 5.5): to eco temperature daily as above adjusted.
  • Tank: disinfection (breadcrumb 5.7): no (because handled via Eddi).
  • Tank: maximum (breadcrumb 5.8): 60°C.
  • Tank: setpoint mode (breadcrumb 5.8): fixed.
  • Tank: heat up mode (breadcrumb 5.6): schedule and reheat.
  • Tank: comfort set-point (breadcrumb 5.2): 48°C.
  • Tank: eco set-point (breadcrumb 5.3): 45°C.
  • Tank: reheat set-point (breadcrumb 5.4): 43°C (minimum temperature: reheats from this when not otherwise covered by a schedule) adjusted.
  • Tank: hysteresis (breadcrumb 5.5): 8°C.
  • Sensors: external sensor (breadcrumb 9.8.1): outdoor.
  • Balancing: space heating priority (breadcrumb 5-02): disabled.
  • Balancing: anti-recycle timer (breadcrumb 8-02): 1h.
  • Balancing: maximum DHW running timer (breadcrumb 8-01): 45m.
  • DHW: pump installed (breadcrumb 9.2.2): no.
  • System: number of zones (breadcrumb 4.4): 1.
  • Main zone: emitter type (breadcrumb 2.9): fancoil (5°C delta T, rather than radiators).
  • Main zone: control (breadcrumb 2.9): external room thermostat (OpenTRV/Radbot, per-TRV call for heat, nominal maximum 6°C setback in vacant/dark rooms).
  • Main zone: WD curve type (breadcrumb 2.5): 2-point.
  • Main zone: 2-point curve (breadcrumb 2.5): Y2=50°C, Y1=25°C, X1=-2°C (design temp), X2=12°C as above adjusted.
  • Setpoint range: heating minimum (breadcrumb 2.8): 25°C.
  • Setpoint range: heating maximum (breadcrumb 2.8): 55°C.
  • Setpoint range: thermostat type (breadcrumb 2.A): 1 contact.
  • Space heat: increase around 0°C: increase 2°C, span 4°C.
  • Space heat: overshoot: 4°C.
  • Space heat: antifrost: yes.
  • Main zone: delta T: 5°C.

2024-11-30: Proposed Updates

  • Tank: schedule (breadcrumb 5.5): daily to eco, to comfort, to eco, reheat outside those times (default to eco temperature daily). However, times are in multiples of 10 minutes, and I could not set more than four actions per day, so daily eco, stop, eco, stop is used for now.
  • Space heat: space heating OFF temperature (breadcrumb 4.3): 15°C (default 22°C; to trim the nominal heating season closer to our usual).
  • Tank: reheat set-point (breadcrumb 5.4): 42°C (minimum temperature: reheats from this when not otherwise covered by a schedule) (default 43°C; lowered to reduce standing losses ~5%).

2024-12-09: Pasteurised

20241209 pasteurisation cycle

The grid-aware pasteurisation cycle kicked in this morning, during 'super-green' and 'L' time, lasting a little under 2h and consuming 2.7kWh, 8 days since the last time the cylinder reached maximum temperature.

The Daikin MMI was reporting the DHW to be 60°C at ~.

(The next cycle ran and drew 2.3kWh. It ran out of 'super-green' time before completing, though the tank was reported to be at 57°C a little before 9am. The cycle re-ran the next day to complete, at 3.2kWh and with 28 low-frequency responses.)

Heat battery log sample:

2024-12-09T00:01Z MT 0 GI 62 IT 76 F WLGQbvxN ES -
2024-12-09T00:11Z MT 0 GI 62 IT 76 F WLGQbvxsN ES 1
2024-12-09T00:21Z MT 0 GI 62 IT 76 F WLGQbvxsN ES 4
2024-12-09T00:31Z MT 0 GI 62 IT 76 F WLGQbvxsN ES 4
2024-12-09T00:41Z MT 0 GI 62 IT 76 F WLGQbvxsN ES 4
2024-12-09T00:51Z MT 0 GI 62 IT 76 F WLGQbvxsN ES 4
2024-12-09T01:01Z MT 0 GI 63 IT 76 F WLGQbvxsN ES 4
2024-12-09T01:11Z MT 0 GI 65 IT 76 F WLGQbvxsN ES 4
2024-12-09T01:21Z MT 0 GI 65 IT 76 F WLGQbvxsN ES 4
2024-12-09T01:31Z MT 0 GI 65 IT 76 F WLGQbvxsN ES 4
2024-12-09T01:41Z MT 0 GI 65 IT 76 F WLGQbvxsN ES 4
2024-12-09T01:51Z MT 0 GI 65 IT 76 F WLGQbvxsN ES 4
2024-12-09T02:01Z MT 0 GI 65 IT 76 F WLGQbvxsN ES 4
2024-12-09T02:11Z MT 0 GI 67 IT 76 F WLGQbvxsN ES 4
2024-12-09T02:21Z MT 0 GI 67 IT 76 F WLGQbvxsN ES 4
2024-12-09T02:31Z MT 0 GI 65 IT 76 F WLGQbvxsN ES 5
2024-12-09T02:41Z MT 0 GI 66 IT 76 F WLGQbvxN ES 5
2024-12-09T02:51Z MT 0 GI 66 IT 76 F WLGQbvxN ES 1
20241209 heatBatTarget

2024-12-17

20241217 pasteurisation cycle

The next cycle ran and drew 2.3kWh. It ran out of 'super-green' time before completing, though the tank was reported to be at 57°C a little before 9am. The cycle will probably re-run tomorrow to complete.

There were 14 interruptions for frequency response while the cycle was running, and the super-green status was intermittent, from intermittent grid storage draw-down. Thus relatively turbulent and unusual conditions.

20241217 heatBatTarget

2024-12-18

The cycle did indeed complete today, taking 3.2kWh and ~3h. There were 28 interruptions for frequency response. The dishwasher was timed to run after the estimated pasteurisation finish.

20241218 pasteurisation cycle
Completed pasteurisation cycle consumption shown in green.
202412 pasteurisation cycles in green
Pasteurisation cycles in shown in green: (on Eddi boost schedule), , completed , .

: when I am able to dynamically force DHW generation via the heat pump, to 'comfort' level or above, I should possibly do so in any supergreen time. If that competes with and reduces any heating done by immersion (because the Eddi limits total grid imports that it is responsible for) then all the better. I may wish to defer in the small hours of the morning if noise is an issue, eg for neighbours.

: pasteurisation cycle ran for 2h / 2.8kWh.

20250123 pasteurisation cycle incomplete

: an incomplete pasteurisation cycle ran this morning, consuming ~3.2kWh mainly over ~2h with 34 minutes' low-frequency interruptions mainly after the initial 2h heating burst. Grid intensity was 200–~250gCO2/kWh by my calculation, so worse than gas!

I suspect that the failure to complete was because of the length of time that the Eddi takes to decide that the target really really is full. I currently have the setting Boost -> Hot Cancel Delay: 45m which is tuned for the Thermino, up from 30 minutes. I have reverted to 30 minutes again, but will keep an eye the Thermino. The interval between 'top up' blips this morning was each 2x45m, so maybe the Eddi probing both heaters for ability to accept more, though I was specifically boosting heater 1. The interleaving with the dishwasher demand spikes is interesting!

I have switched to an alternate mechanism to detect when a cycle is done: with a pending pasteurisation cycle (hpri is 1) and the Eddi is on divert or boost (sta 3 or 4) (not state 'stopped' for example) to heater 1 (hno 1) and the DHW cylinder stops accepting energy (div 0). See sample Eddi log lines below:

{"eddi":[{"deviceClass":"EDDI","sno":0,"dat":"23-01-2025","tim":"01:37:55","ectp
1":1784,"ectp2":2021,"ectp3":16,"ectt1":"Internal Load","ectt2":"Grid","ectt3":"
Monitor","bsm":1,"bst":0,"div":1784,"frq":50.02,"gen":0,"grd":2025,"pha":1,"pri"
:1,"sta":4,"tz":0,"vol":2415,"che":0,"isVHubEnabled":false,"hpri":1,"hno":1,"ht1
":"Tank 1","ht2":"Tank 2","r1a":0,"r2a":0,"rbc":0,"rbt":423,"tp1":127,"tp2":127,
"batteryDischargeEnabled":false,"g100LockoutState":"NONE","cmt":254,"fwv":"3200S
3.048","newAppAvailable":false,"newBootloaderAvailable":false,"productCode":"320
0"}]}
{"eddi":[{"deviceClass":"EDDI","sno":0,"dat":"23-01-2025","tim":"01:47:55","ectp
1":0,"ectp2":119,"ectp3":16,"ectt1":"Internal Load","ectt2":"Grid","ectt3":"Moni
tor","bsm":1,"bst":0,"div":0,"frq":50.02,"gen":0,"grd":118,"pha":1,"pri":1,"sta"
:4,"tz":0,"vol":2415,"che":0,"isVHubEnabled":false,"hpri":1,"hno":1,"ht1":"Tank
1","ht2":"Tank 2","r1a":0,"r2a":0,"rbc":0,"rbt":551,"tp1":127,"tp2":127,"battery
DischargeEnabled":false,"g100LockoutState":"NONE","cmt":254,"fwv":"3200S3.048","
newAppAvailable":false,"newBootloaderAvailable":false,"productCode":"3200"}]}

: pasteurisation cycle ran for ~2.5h / 2.9kWh. Eddi did not reach state 5 (max temperature); new mechanism stopped before. There were 14 minutes' frequency response.

: pasteurisation cycle ran for ~2h / 2.8kWh. There were 5 minutes' frequency response. There was a little PV diversion in the afternoon.

2024-12-20: Load Profile

A quick check if our electricity load profile has significantly changed since , given the new heat pump, using data for the first 19 full days in December, with extended scripts.

bucketed
Load profile over to inclusive, gross and net/imported. DHW consumption spikes starting at and are clearly visible, demonstrating an ability to load shift. Data and other views are available.

All of December's data for electricity for heat reveals a similar picture.

bucketed
Hourly eheat heat pump consumption plus diversion/boost (boost is pasteurisation) for the whole of was made with sh script/storesim/load_profile.sh -eheat 202412.

I will delay the DHW evening period start 10 minutes to , pushing it a little further down the slope from peak grid demand time. Still not at a half hour (HH) boundary. No one in the house will likely ever notice.

As of no one seems to notice nor mind the DHW and space heat setbacks, and they are shifting some load away from grid evening peak. From watching various temperature graphs, the current -3°C LWT/flow setback during that peak seems reasonable, though it could go back a bit further with possibly a rise just ahead, given that the old gas CH was simply off for this time.

As of after more observation of room temperatures, I have eased the peak-time LWT setback down to -4°C to lower electricity demand a little, by aiming to allow temperatures of unoccupied rooms to drop slowly.

2024-12-27: Alternate Heating Mode

While the bypass remains apparently non-functional I have had the living room (3l) and kitchen (6k) valves turned up to max. This provides flow but keeps the system (at least the circulation pump) running constantly.

In the interim, early this afternoon I switched to a LWT-and-schedule mode, ignoring the OpenTRV call for heat. TRVs other than 3l and 6k can remain regulating local temperatures as normal. To do this:

  1. Under "main zone" change "control" from "external room thermostat" to "leaving water".
  2. Under "space heating/cooling" change "pump operation mode" from "continuous" to "sample" (to reduce pump running energy and noise).
  3. Under "space heating/cooling" change "pump limitation" from "80% during sampling" to "60% during sampling" (to reduce pump running energy and noise).
  4. Under "main zone" change "schedule" from "no" to "yes".
  5. Under "main zone" set "heating schedule" "user defined 1" to 'on' 06:10 to 15:50 and 19:10 to 21:20 (0°C adjustment) and -3°C 15:50 to 19:10 every day, otherwise adjust LWT by -6°C ie set back enough to probably be off; this should avoid most heating overnight and at peak (4pm to 7pm) grid demand.
  6. Under "main zone" set "heating schedule" select "user defined 1".

(The -3°C and -6°C setback values were almost plucked from the air. The start is well before GB peak heat-demand ramp I think, and before any Radbot has typically been coming on (predictively) each morning, and to avoid a half-hour boundary. The end times are to avoid direct clashes with DHW off times, slightly before.)

By mid-afternoon I was too hot in the kitchen so turned its TRV down from max. Only 3l is now permanently open and circulation seems to be a bit noisier.

It would be useful to be able to leave the LWT adjustment schedule in place once the system reverts to OpenTRV "external" control to moderate demand, especially at grid peak.

I looked at the Daikin Altherma 3M reference guide [daikin2022altherma3M].

2024-12-28: reverting, almost

20241228 4kWh space heat before 10am

This mode seems to use more than double previous consumption (eg 3.8kWh on space heat only by 09:45Z today, spikes of ~1kW before 06:00Z).

I am reverting to the previous configuration except that I took the 3l TRV head off the valve base and placed it nearby to allow that radiator to continue to act as the bypass. I shall set it back to a reasonable target temperature, eg 20°C, to resume being a functional call for heat.

At ~ I started undoing settings above as needed:

  1. Under "main zone" change "control" to "external room thermostat".

The other alternatives vanish with "external room thermostat", except "pump limitation" which can be left at "60% during sampling" which probably does nothing much now but is unlikely to hurt.

It seems that the LWT setback schedule still applies, even though invisible, which is helpful, especially to reduce demand in the 4pm to 7pm peak time slot. This is surely a bug, though useful.

20250107T1900Z flow and return temperatures off overnight and 4pm to 7pm setback with axes
All flow (LWT) and return temperatures of radiators in 16WW for 24h to ~. A setback in flow temperature (LWT) is visible 4pm to 7pm, and larger overnight though in fact there is no call for heat then. The lowest trace is the nominal outside temperature (actually Heathrow airport). Approximately hourly cycling of LWT can be seen even with a constant call for heat.

If I rebuild the OpenTRV "external room thermostat" controller box then I may wish to adjust some things:

  • Double or more the minimum on and off (and thus cycle) time from the current ~4 mins.
  • Possibly accept a 'defer' peak-time signal, eg for grid 'red' and/or 4pm to 7pm peak.
  • Defer for a while coming on when only one TRV calling for heat at <9X%, especially if in receipt of a 'defer' signal; aim to bunch requests to make better use of the heat source.

2025-01-25: on overnight a little warm

Last night 3l (on 4, target 21°C) continued to call for heat. External temperature was ~6°C; LWT seems to have been ~28°C. The living room reached an equilibrium temperature of just over 18°C. This implies that the overnight LWT setback could be deeper. Though the floor of ~25°C LWT would likely have already kicked in last night and prevented a bigger setback taking effect.

Against a deeper setback is that the system seems to struggle (and pushes through huge noisy flows >16l/min) when the nominal adjusted LWT is at/below 25°C. As of I have made both peak and overnight -5°C. For example ~ outside 8°C adjusted LWT is 27°C. Darn: at ~ after ~1.5h at -5C°C setback the system pushed the flow to ~17l/min for no apparent reason, making significant noise; temperatures have not changed. This is an acceptability issue I think: there is no gain for this noise.

In desperation I raised the bottom end of the "Main Zone" : "Setpoint Range" from 25°C to 30°C to see if that reduces flow rates and run times. Yes, CoP will take a small knock. (This seemed to help the next day ... monitoring will continue until morale improves...)

(As of , having found a possibly-better noise fix with slackening off the bypass threshold a little, I reverted this to factory 25°C setting. I do not want differences from factory defaults for the sake of it!) (As of I discovered that the top end of the WC curve was set at 15°C/37°C somehow; I reverted it to 15°C/25°C.)

Also, heat pump electricity demand coming up to is at or a little bit above the daytime mean, so it might be worth pushing down the setback then by another degree to suppress power draw during grid peak.

Note that an overnight setback of -2–5°C is typical for UK domestic heat pumps [terry2023heat].

A dynamic version of this might adjust any overnight setback depending on the current grid carbon intensity. A smaller setback (eg -5°C) might be used during 'supergreen' grid times to store some extra low carbon heat in the building fabric.

2025-01-02: Curve Adjustment

Although having the cold end of the weather compensation curve at 50°C internal / -2°C external matches the Octopus design calculations, I suspect that the curve is higher (and thus less efficient) than it need be.

So I am testing the cold end back at the Daikin/Octopus 50/-7 default tonight, with outside temperatures due to be ~2°C early tomorrow morning.

At ~ with outside ~-2°C, the 50/-7 seemed to allow room temperatures (including the living room) to rise fast enough, so I will keep this setting for now.

The following day, with temperatures around or a little above freezing, there was a continuous call for heat from ~6am to ~9pm. Again, there is something like an hourly cycle in flow/LWT. This suggests that the weather compensation curve is something close to right. hph4 was ~13kWh, including DHW for a bath.

2025-01-05: Eddi Heater Priority

This thought is for when the Thermino is reintegrated.

The new DHW cylinder leaks heat far faster than then the Thermino, so I plan to make the Thermino (Eddi heater 2) the higher priority unless a pasteurisation is pending, in which case priority should revert to the tank (Eddi heater 1).

This should get pasteurisation done as needed by diversion or boost, but otherwise store heat where it will be retained longest.

2025-02-10: Flow Noise

The noise in the living room (3l) radiator valves at both ends can be quite intense when the heat pump is trying to force 17l/min through the system, which is most likely to happen when there is no call for heat, and the water pipe freeze protection is running because external temperature is ≤6°C.

The house can be and is heated entirely adequately at 8l/min.

This is an acceptability bug. It seems to be entirely unnecessary. I shall report it as a fault to Octopus and/or Daikin. And I am not taking any "run the system fully open" nonsense. There is simply no need to run the pump that hard (already capped at 60% of maximum, and non-continuous) to prevent freezing in these conditions. And we do not want to overheat random unoccupied parts of the house just to appease an erratic algorithm.

As of this evening I have taken the Radbot off 3l as mitigation.

2025-02-11: bypass adjustment

Even without the TRV head, and with the lockshield pretty open, the noise has not gone away. (A fully open lockshield makes the TRV valve base more noisy.)

As of late morning I have put the TRV head back but opened up the bypass valve somewhat to try to divert the excess flow. I assume that this hurts CoP, but the noise in the living room and hallway hurts serenity! Flow is reported as up to ~22l/min though should be capped at 60% ie ~16l/min! Significantly quieter after 'rebalancing' 3l. Flow seems to be dropping through ~16l/min to ~7l/min... (I suspect that the pump is automatically slowing to try to increase delta-T, and there is a big jump in delta-T when the bypass stops bypassing...)

Pressure was reported as 0.8 bar on the MMI (I have been bleeding radiators intermittently) so I topped up to 1.5 bar as shown on the MMI.

References

(Count: 3)