Improve efficiency: Heat the hot water when it's cold

Well, you’ve made me investigate what our system is doing @christian

The bottom of our hot water tank drops almost to the “incoming cold water temp” when someone has a shower. So in this case that’s about 14 °C:

How is your tank starting out at 44 °C? Is that the reading from the top of your tank?

In other news you can see how our Ecodan is getting very excited, even in Eco mode, and is pushing the flow up to 55 °C so that the tank gets to 45 °C. I wish it would just be a lot more relaxed.

That chart is showing the replenish after a single shower. It used 1.2kWh input and produced 2.8kWh output. An electric shower is about 10kW and the people here shower for about 10 minutes so that would be about 1.6kWh required output. So clearly we’re using a lot of power to re-heat the hot water tank which isn’t good - you’d hope it would be 1.6kWh or less output (and consequently less input too).

However, our four-person house is using way more power than you to heat water…the last month was 167kWh so even that month (at 24GBP) was almost as much as your annual cost. We’re pretty much only using hot water for bathing.

You are using 6 °C * 250L * 4kJ/L/°C = 6,000kJ = 1.67kWh of output per day. So that’s about half the output of a single shower here.

Bear in mind I removed the power shower (16L/min) and we’re on the mains pressure now which gives about 12L/min. We measured it with a jug so it’s empirically 12L/min, not just a number from a guide.

Seeing as you are having two showers a day that’s 0.8kWh output per shower. That would be 4.8 mins with an electric shower so I’m assuming you are taking sensible-length showers.

As another example, here’s a time when the tank went down from 44 °C to 9 °C using two showers and was then pushed back up by the heat pump. That shows we used 6.2kWh output for those two long showers which would be the equivalent of running an electric shower (10kW) for 37 minutes!

I just measured our shower (37 °C) and incoming water (7 °C). So, for instantaneous heating we would need a 30 °C uplift at 12L/min = 30 °C * 12L/min * 4kJ/L = 30 °C * 0.2L/s * 4kJ/L = 24kW. That would be 100A using 240V in the UK! Here in the UK most houses are supplied with between 60A and 100A.

It turns out an instantaneous electric shower would simply not be capable of doing this:

image

So, as @borpin says, you’d need to start with warm water. If we take the 10kW inline heater as an example, it would be able to raise a 12L/min flow by about 13 °C. So we’d need a store of water where we’d already come up from 7 °C mains up to 24 °C. That sounds like ideal heat pump territory.

Now the interesting bit. An inline heater would be 100% efficient. However our heat pump is over 200% efficient. Arguably it’s much, much more expensive to build though.

Here’s that “double shower” re-heat run from above viewed from the perspective of the heat pump heating up the DHW.

You can see it got down to around 200% efficient as it got to the end and the tank water got up to 44 °C.

I actually run the hot water at 42 °C most of the year but it gets boosted to 44 °C in the Winter to be prepared in case someone comes back chilled-to-the-bone and needs a boost. However, I just spoke to the primary need person and they are happy it’s plenty warm enough so I think I’ll drop the target temp and see if that helps.

Looking back at the Summer is so weird. For example, it looks a lot happier on this run which was only one of four in the entire week (versus three or four a day in the Winter). It has far less work to do and the air is so much warmer. Summer is nice :slight_smile:

When it’s cold all the “losses” from the hot water tank actually heat up the utility room where we chose not to have a radiator so they aren’t really “losses”. When it’s warm it doesn’t lose so much (smaller deltaT) and there’s much more heat available so I’m not so worried about those losses.

It’s actually the same with the pipe runs to the shower. I don’t mind that water being wasted in the pipes because it’s “poor person’s underfloor heating” and the heat is lost (mostly) into the lived-in spaces.

2 Likes

Altough I have a ground source heatpump with a custom heating control system, I have a recoreded sensor both at the bottom and at the top of my 300L tank. Results might be interesting here.
I was playing with the settings of water heating, because heat pump was starting too often.

Here is a graph of the last 24 hours.
Yellow is the temperature at the upper sensor.
Blue the temperature at the bottom sensor.
Red shows the time, when the heatpump was running to heat the tank.

The controller is now set to a minimum of 36°C and a maximum of 42°C, measured at the bottom sensor.
One of my changes was to lower the minimum temp from 39°C to 37°C some years ago.
That already resulted in less heatpump startup count. After installing the upper sensor last year, I lowered the lower setting to save some HP startups.
Then I set it up in the controller to not heat the tank, when the alarm system is armed (meaning nobody is at home). That is why the controller didn’t start to heat the tank yesterday afternoon.

As you can see, the temperatures at the upper half are moving much slower. That means, the water is hot enough for nearly everything even after some hours out and not reheating the tank.

The results would be similar also with a gas heated tank (difference between top and bottom sensor temperatures), although the temps much higher.

2 Likes

But accounting for the other losses (pipes, tank, heating unused water), the difference in efficiency is far less.

On my gas boiler, I have a mixing valve such that the flow from the boiler does not enter the tank until the output temp is 55 deg (IIRC). I’d found that the big slug of cold water that was sitting in the flow pipe killed the tank when the boiler started. There is very little dip as the heat cycle starts.

You must be hardy folk. a tank that cold would never satisfy me for a shower.

2 Likes

Thanks for sharing @bekesizl

Your ground source heat pump is allowing you to chose when to heat the water much more comfortably than our air source ones where we try to find a warm time of day. It’s nice to see you benefiting from that.

Haha yes.

Yes, top of the tank which has 3 pockets, top (153cm up from the floor), middleish (135cm from floor) and bottom (18cm from floor). The heat pump uses the middle which is just above the upper immersion.

I wanted to monitor the bottom too but I already have 6 DS18B20s off the emonPi (heatpump flow/return, tank top, cylinder flow and heating flow/return after the buffer). I may repurpose the cylinder flow now as I wanted to know when the heat pump is heating the tank.

Reading just the top of the tank I know if there’s more than 42c the shower’s going to be okay.

Oh, @MyForest , you caught me out; we shower every second day, but we don’t smell, honest! Shower is from unvented cylinder/mains pressure.

While I currently only heat water at night, I like this idea for the heating. Our heating is 19.5c from 08.00, 20c at 14.00 then 21c at 18.30. If we’re out it would be better to hold the current temperature rather than ramp it up.

On the subject of in-line heaters I agree, it’s what I thought I was getting some years ago with a boiling water tap in the kitchen and we were deeply disappointed to come home to find we effectively had a kettle under the sink! It was a nice thing to have though.
In my mind it it could be such a simple thing, but I guess it gets really complex to deal with different flow rates and deliver the right amount of heat without burning people.

1 Like

I’ve had some thoughts that may support the theories presented above, having been sat in draft for several weeks, and in no particular order:

  • A hot tank loses heat faster than a warm tank, so it seems wise to avoid heating the water for times or temperatures that aren’t required.
  • Air source heat pumps will be more efficient when the ambient temperature is higher.
  • Conversely, if one has access to a lower nighttime tariff, then there’s clearly a benefit to storing energy when it’s cheap.
  • There may be a considerable amount of “hot enough” water in the tank than a bottom sensor might indicate, and running the heat pump may not be always necessary.
  • A heat pump works hard to get up to temperature, so it seems logical to do this as infrequently as possible, and maximise how much water is heated each time.
  • If the tank temperature has dropped by (say) 5°C, then the flow/return temps may have a long climb to “catch up”, using the heat in the tank. Only once the flow temp exceeds tank temp does the heat pump actually start up (at least on my system). While the actual heat loss is probably minimal, it still seems a bit backward.

I’ve since changed my approach slightly:

  • Hot water heating is prohibited overnight until 10am, when it is heated up to the ideal temperature (45°C). There is always enough hot water from the previous day for a shower one is needed before then.
  • At noon, I consider how much solar energy has been stored in the battery, and how much more is forecast to be collected in the afternoon. If this exceeds the capacity of the battery, then I’ll heat the hot water again up to 50°C. This is, in effect, to emulate having a PV diverter, while taking advantage of the heat pump’s CoP.
    As we get in to the summer months I might combining both of these into a single heating cycle, and experimenting with higher temps.
2 Likes

Thanks for sharing @Timbones

It seems we’re coming around to something like the same way of doing things.

Here’s my current setup:

def tankTemperatureToTriggerHotWater(calculationMoment: datetime.datetime, deviceInfos: DeviceInfos) -> float:
    """Only turn on the water if it goes below this temp"""

    desiredWaterTemperature = TargetWaterTemperature.targetTankTemperature(calculationMoment, deviceInfos)

    deviceInfo = deviceInfos[-1]
    flowTemp = float(deviceInfo["FlowTemperature"])
    tankTemp = float(deviceInfo["TankWaterTemperature"])
    powerIsOn = deviceInfo["Power"]

    # Go just because the flow is really hot
    if flowTemp >= desiredWaterTemperature:
        # Don't just keep coming on all the time, we'll keep doing 2 minutes of water heating
        # Let the tank drop a bit below the target
        return desiredWaterTemperature - 10

    midpoint_temp = MidPointTemp.midpoint_temp_for_month(calculationMoment, deviceInfos)

    if midpoint_temp > TemperatureThresholds.quiteColdOutdoorTemp() and midpoint_temp < TemperatureThresholds.noHeatingRequired(calculationMoment, deviceInfos):
        # Always warm straight back up when someone has a shower
        # It's not likely to be heated by the space heating or solar diverter
        # When it's hotter than this we usually have some solar diverter action
        return desiredWaterTemperature - 15

    if powerIsOn and TimeBasedCriteria.warmPartOfDay(calculationMoment):
        return desiredWaterTemperature - 10

    if OctopusGo.powerWillBeCheapForNextFifteenMinutes(calculationMoment, deviceInfos):
        return desiredWaterTemperature - 10

    # Flow is colder than the desired water temp
    # If the flow is quite a bit warmer than the tank then still plough ahead
    # If the flow is cold, don't do anything even if the tank is way colder than we'd like
    # Eventually some space heating will lift the flow and then we'll do the hot water

    return flowTemp - 20

It’s having that fight with itself about whether to come on when the power is cheap / low CO2 or to wait until the ambient temp is warmer.

I turned off the forced heating at 00:30 because it was dreadfully inefficient.

Weirdly though it did turn itself on during the night on 2022-03-25 because the water was cold due to a late shower and the drop in price looked encouraging. That brought the cost of the shower down to just under 0.05GBP but the CoP was a lousy 2.

Log 00:31: We’re going to heat the tank to 39 °C because it’s at 20.5 °C which is lower than the trigger temperature of 29 °C and the flow is at 24.0 °C (ForcedHotWaterMode → true from ManageSpaceHeatingPower.manage)

It was incredibly close to coming on when the space heating finished at 22:42 but the tank wasn’t quite cold enough to trigger it by half a degree:

Log 22:42: The trigger is 18.0 °C, the tank is 18.5 °C and the desired hot water temp is 39 °C

So it seems we’re getting very close to edge with the types of approach we’re taking. Trying to balance the ambient temp / cost / CO2 / unpredictable demand and other things is clearly very tricky. In fact I don’t think I could train some ML to do this because the utility function is so shaky. I thought I’d be using my ML stuff from a couple of years ago to do this but I don’t think it’s worth the effort seeing as my DHW for the year is about 200GBP.

Having your battery in the mix must make it even more interesting, especially if you’re also trying to mix and electric car into it at some point!

1 Like

I tried another experiment where I try to heat the water as late as possible in my “cheap electricity” window. It runs from 00:30 to 04:30 at the moment.

Here is the behaviour when I start heating the DHW as soon as the electricity is cheap at 00:30. The yellow line is the temperature at the bottom of the 300L tank:

and here is what happens if I leave it as late as possible - it just about finishes heating the water at 04:30:

So at 08:00 when the residents come to have a shower the bottom of the tank is at 49.5 °C instead of 46 °C.

That’s not really much difference at all.

There is also the magic of deciding when to start heating the water having imperfect information about the amount of heating required and what we will be able to deliver.

As you can imagine, I’m building up to trying to use the power more flexibly when we can move back to Octopus Agile when the current price madness is over (if ever).

1 Like

I have belatedly come to that same conclusion. I’d previously thought long boiler runs would be better, but I think shorter runs more often to a lower temp are better.

A hardy soul. I like my showers hot :rofl:

Yes and only the Mk1 Brain can do that!

2 Likes

there are some (ie bradford white → kwick shot) or you can use my adruinio sketch ( posted on OEm some time ago ) that make and any one of those instant water heaters into one
that will work with warm input - I made it for my solar water heater and heatpump that all connected to the DHW – it monitors the tank the instant water heater and the out put if the DHW is above 50C in the tank the instant water heater does not come on if below it will heat the water to 50C.

it also make the hp more effecient as i only heat the DWH to 44 c which is in the range of high COP if 50 or above the COP dropps significantly . and I just use the IWH to top it up… it saves you more energy because the tanks temperature is lower so the heat loss is lower and the cycling is lower as well it saves you about 1/3 of energy usage over all I would estimate for DHW

2 Likes

Wrong side of The Pond :frowning:

I made a chart showing the effect of the starting temperature of the tank on the COP of the DHW cycle. (Posting in this old thread as it seems directly relevant)

dhw-cop-vs-start-temp

5 Likes

As it’s been a bit chilly in the UK recently I’ve entered a new situation where space heating just runs continuously. My old hack to do DHW when there’s a quiet moment is no longer working.

The Ecodan FTC has an option which says to heat the water if the tank temperature drops by a certain delta (between 5 and 15). With that limited control I’d end up heating the water when someone had a shower in the morning. I’d prefer to wait until later in the day when it’s warmer. Of course I could schedule this in the FTC but I have an aversion to trying to set up timers on the user interfaces that have very few buttons.

So I added some code to my algorithm that now interrupts space heating if the hot water is too cold and the DHW schedule says it has priority (via a new crontab).

Consequently, today it:

  • did not heat in the morning after the shower at 06:45 when it was -1 outside
  • did interrupt space heating at 12:00 when it was +2 outside

As a result the CoP for the DHW was 2.5 versus 1.8 that I see when it’s colder. Still not as good as we’d like, but an improvement caused by delaying heating the DHW until the environmental conditions were better.

2 Likes

The problem I have is spotting the difference between someone having the last shower of the morning and there being someone else wanting a shower (and not a cold one!). Not unreasonably, the inhabitants are of the opinion that the tech is there to fit in with us, not the reverse. So I mess with the probability of a reheat by changing the target temperature through the day, but I just accept that sometimes we’re going to reheat water in worse conditions than needed. We’re still so far ahead of the stock performance that it doesn’t matter.

I’ve programmed far worse. At least this one has a decent display and doesn’t require me to lie on the floor! The benefit of programming a basic schedule into the FTC is that it keeps working even when Melcloud can’t get through. It might matter less if you have a cn105 connection, or at least that melcloud injection proxy.

2 Likes

You’re quite right.

Fortunately we’re down to three occupants and the tank can do two showers so I just lose out if my tech fails :slight_smile:

1 Like

My current strategy is to heat the tank at 1pm each day (start of Cosy cheap tariff), but only if the tank has dropped below 25°. My chart above shows that I get better COP below this temperature. Practically I find that if temperature (measured at the bottom) is above 25° then there’s still plenty of hot water for a shower or two, so a reheat isn’t needed.

(I’d really like to measure the temperature in the top pocket as well to refine this further, but that’s for the future)

This isn’t working so great in cold weather though, as there’s an extended period of non-heating: 12-til-1 is waiting for the cheaper electricity, and 1-til-2 is doing DHW. I either need to keep heating on until 1pm, or push DHW to 2pm. Maybe some smarts that decide when it’s best? Or just move it to early morning when it heating is less important for comfort (cos everyone’s in their bed) even though ambient conditions are less good.

1 Like

I solved your problem by switching to DHW at the moment the algorithm was about to stop space heating. If you recall I changed from “Force” to “set a higher target tank temp” approach which has been meh.

The Ecodan itself will switch to space heating when it’s done with DHW or my algorithm steps in and sets the tank target temp back to 10 Celsius.

I guess this doesn’t help because you’re trying to do it on-board in the FTC to keep life simple.

If you set the scheduled timer for DHW (say at 14:00) and the “only heat when it’s dropped 15 Celsius below target” does that allow space heating to run under Cosy from 1-> 2 and then (optionally) do DHW or just keep space heating?

even though ambient conditions are less good

Your problem is the second daytime Cosy which is encouraging you to DHW in the day. As I’m on Intelligent I don’t have that luxury so I do a cheap but inefficient DHW during the night.

Do you think Octopus want heat pump folks doing DHW in the way you are doing it? It sounds like you should. However, if you have 1 hour DHW in that 3 hour window then you only have 2 hours of heat input to make it through to the next morning. Unless you are a smarty like Timbones and you have a battery :slight_smile:

1 Like

But if the heating never stops…

I am actually sending “Force” command from a cron job, with some simple logic to decide if it wants to or not. Worst case, if internet happens to be out at that exact time, I can to force it on manually via internal controls.

Prohibiting the hot water during the other 23 hours with a large “DHW max. temp. drop” setting would in theory achieve the same effect. However, I found that the Ecodan would heat the water whenever it wasn’t prohibited, regardless of the tank temperature. [@mjr noted the same here]

I do have a little rule that boosts the heating by 0.5° at noon if there’s sufficient battery left, knowing that it’ll be replenished an hour later.

My overall heat pump strategy now is to be mostly using manufacturer’s out-of-the-box controls, with some optimisation tweaks and nudges over the top. If my hacks fail for some reason, the basic operation continues to function.

2 Likes

this is a fascinating one. I have probes top, upper middle, lower middle and bottom so I was able to clearly see the terrible effect of a reheat on a not-very-cold tank. This does seem to be default behaviour in a lot of setups - I rather suspect that the 99% of heat pump installs that don’t have monitoring systems like ours with geeks watching over them must suffer from this.

I’m now optimising for least monetary spend in the following way

  • Intelligent Octopus. house battery (40kwh) charges overnight along with 2 cars.
  • heat hot water to 55C during early part of cheap overnight period on timer. This takes 1 to 1.5hrs. space heating off in this period is fine, we’re asleep.

although the hot water is heating during the least efficient time for the HP : an example of a really bad one, COP of 1.8 for the HW on 2nd december, -2C, 2 defrosts during the reheat - its also the least cost time. on a warmer day like today (7C) the HW COP was 3, the CH COP was 4. (thanks timbones for the separation code!).
regardless, the factor of low electricity price at night far outweighs the factor of higher efficiency during daytime warmth, and just doing it on timer every night keeps it really simple.

this is done almost entirely using the mfr’s timer controls. the extra tweak I’ve done is a blocking relay (controlled by an ESP from HomeAssistant) on the 3-way valve. By default samsung will move the 3 way valve towards the cylinder if space heating is not running and it has decided the water in the outdoor unit and/or the outside temp has got too cold. And thus steal a load of heat from your HW cylinder to warm the outdoor unit up. I force the 3-way to stay on heating outside of the times specifically allocated to HW, so if this kind of anti-freezing measure kicks in, it takes it from the lower grade heat left in the rads (which is more than enough), and protects the hard won higher grade heat in the HW cylinder.

By not needing to do another HW reheat for the entire day then I can use all the house battery capacity to drive space heating, lighting, washing machine, cooking etc. result is that on days above approx 3C , I do not pull any peak rate electricity.

our usage varies depending on a variety of family circumstances but using the whole 300L is not unusual which is why I go to 55. Avoiding a 2nd reheat during the 0530-2330 peak time (which would have to be served from the battery) is key to allowing the battery to serve everything else for the whole day.

If I was on a different tariff with a 2nd off-peak, I’d probably set it up differently, but IO as a tariff is such a no brainer with 2 cars and a substantial battery.

However : the crappy COP from my DHW reheat to 55 at night is pushing me down the heatpumpmonitor COP league table :slight_smile:

4 Likes

(Interestingly, the Mitsubishi does the opposite, switching to CH to do the defrost, then back to DHW to continue heating the tank.)

3 Likes