Air source heat pump COP management with outdoor weather forecast

As temperatures drop, air source heat pumps lose efficiency and their COP (coefficient of performance/coefficient of power) decreases. In situations where the temperature drops below freezing overnight, the COP rapidly decreases from as high as 4 (meaning you get 4x the heat out of the power you put into it) to 1 (effectively equivalent to a resistance heater).

This means that for traditional wintertime HVAC scheduling, where your thermostat set temperature drops overnight during sleep and jumps back up in the morning, you are putting the greatest load on your heat pump when its efficiency is at the lowest of the day. The COP differential can swing from mildly less efficient in lows around 40Ā°F to significantly less efficient with lows well under freezing.

My initial thought process here is that it may make sense to create automations that factor in the forecast low, which usually occurs pre-sunrise. If the low is, for example, 40Ā°F or above, my HVAC would act similarly to a gas fired furnace - turn on an hour before we wake and the house will be plenty warm. However, if the temperature is forecast to be lower, I may have some changes. One might be to leave the heat set point much higher all night long, which would intuitively use more energy, but when plotted against the COP curve, might actually use less energy despite the homeā€™s heat loss. It also would mean waking up to a warm house instead of a home that is struggling to reach the set point.

All of this preface just to ask: has anyone else considered this? One thing I find myself doing a lot is creating something only to find out someone has already done it, and done it better than me. I recognize there are a lot of other factors to consider, like energy TOU prices, occupancy, etc., but Iā€™m just thinking about the base concept for now.

Thanks for reading.

3 Likes

I like your thought just like I presently precool my house before the electric rates go up. Youā€™re suggesting pre-warming the house before the Cop efficiency drops. What you/We would need is a curve that shows Cop efficiency vs outside air temperature. Overnight cost of heating would then be either the integral of Cop efficiency as a function of predicted temperature and time vs cost of turning the heat on now.
This approach could also be used to improve my precooling which currently just sets a target temperature and starts two hours before the rate increase.

2 Likes

Iā€™m glad I came across your post. I had a similar idea too and like you thought I would check first to see if it has been done already.

I have an air source heat pump and my house is well insulated. The majority of winter time in the South of England consists of mornings that are just above or just below freezing, i.e on the edge of where the efficiency of the heat pump can plummet.

I thought that factoring the weather forecast into the heating schedule could be used to reduce energy consumption in the following ways:

  • on an evening where the next morning is forecast to be below freezing, the heating could heat the house an extra couple of degrees so that the residual heat will reduce heating demand the next morning
  • on the morning of a day that is forecast to be warm, I would be happy for the heating to shut off a couple of degrees sooner than normal in the knowledge that the house will be naturally warmed as the sun comes up

So, has anyone had a go at this? :slight_smile:

I never found anything in place, so I did a very simple version of this, which was to look at the forecast low (using my Weather Underground data) to determine whether to pre-heat the space prior to the outside temperature dropping. My script checks the forecast at 9pm, and if itā€™s going to be below freezing, it runs the heat at a higher set point up until the time the temperature drops below a certain point. Then the set point is returned to ā€œcomfortableā€ levels. It certainly helps with the comfort in my living room when we wake in the morning.

I have an energy monitor on my HVAC circuit, so Iā€™m able to see the draw - but itā€™s difficult to compare days with different outside temperature curves. All I can tell you is that we draw down a lot of energy heating the space when itā€™s cold outā€¦ air source heat pumps are fantastic but they definitely start to chew electrons when itā€™s freezing out.

Good luck.

Hereā€™s my take on getting this working, Iā€™m very motivated to ensure our ASHP is as efficient as possible at the minute.

Iā€™ve just finished an automation to alert me whether or not the weather forecast suggests there will be a frost overnight or in the morning (So I can bring some plants indoors). The automation is dependent on a sensor that ascertains the lowest temps for the next 24 hours, and if there is anything less than 2, will trigger the notification.

Here is the YAML code to create the sensor in your config file, using OpenWeatherMap integration

sensor:
  - platform: template 
    sensors:
      24hrlowtemp:
        value_template: >
          {% set start = now().replace(hour=0,minute=0,second=0, microsecond=0) %}
          {% set end = (start + timedelta(days=1)) %}
          {% set start = start.strftime("%Y-%m-%dT%H:%M:%S+00:00") %}
          {% set end = end.strftime("%Y-%m-%dT%H:%M:%S+00:00") %}
          {{ state_attr('weather.openweathermap', 'forecast') | selectattr('datetime', '>=', start) | selectattr('datetime','<=', end) | map(attribute='templow') | list | max }}

By adding this sensor as a condition in to our ā€˜night time / turn the heating downā€™ automations we should be able to achieve the desired functionality. Here it is in my ā€˜Is frost forecastā€™ automation:

alias: Frost Forecast
description: >-
  Checks the low temps for the next 24 hours and notifies to bring in plants and
  open outdoor tap
trigger:
  - platform: time
    at: '18:30:00'
condition:
  - condition: numeric_state
    entity_id: sensor.24hrlowtemp
    below: '2'
action:
  - service: notify.mobile_app_nick
    data:
      title: Frost is forecast!
      message: >-
        Bring in the outdoor plants and consider opening the outdoor tap fully
        (after turning it off, under the kitchen sink)
mode: single

And here is my ā€˜night time / turn the heating downā€™ automation:

alias: Nibe Set Value Temps Overnight
description: ''
trigger:
  - platform: time
    at: '20:00:00'
condition:
  - condition: device
    domain: alarm_control_panel
    entity_id: alarm_control_panel.abode_alarm
    type: is_disarmed
action:
  - service: climate.set_temperature
    data:
      temperature: 17
      hvac_mode: heat_cool
    target:
      entity_id:
        - climate.study_2
        - climate.downstairs_bathroom_2
        - climate.kitchen_2
        - climate.living_room_2
        - climate.nursery_2
        - climate.hallway
        - climate.upstairs_landing
        - climate.master_bedroom_2
mode: single

Within the actions we can also use a condition, so our action block becomes:

action:
  - service: climate.set_temperature
    data:
      temperature: 17
      hvac_mode: heat_cool
    target: &ref_0
      entity_id:
        - climate.study_2
        - climate.downstairs_bathroom_2
        - climate.kitchen_2
        - climate.living_room_2
        - climate.nursery_2
        - climate.hallway
        - climate.upstairs_landing
        - climate.master_bedroom_2
  - condition: numeric_state
    entity_id: sensor.24hrlowtemp
    below: '2'
  - service: climate.set_temperature
    data:
      temperature: 19.5
      hvac_mode: heat_cool
    target: *ref_0

Whereby, if there is a temperature <2 degrees in the next 24 hours, reduce the heating to 19.5 instead, otherwise reduce it to 17ā€¦

Now, just got to see if it works!

Any thoughts or feedback?

Cheers,
Nick

2 Likes

Iā€™ve done it the other way around.

Trigger:

when my outside temp is between 4 and 12 degrees.

2 conditions:

After 15:40 & forecasting the night will be 3 degrees and less

Then the heat pump is set to 23 degrees Celsius until the outdoor temp drops below 4, after that itā€™s back in automode (thatā€™s around 22 degrees)

I have an air/water heatpump with underfloor heating, so the heating kinda releases when the sun goes down and temperatures drop quickly.

With this automation the heatpump has no work during a large part of the cold night, improving efficiency.

It strikes me that anyone with a heat pump isnā€™t more interested in these automations, I think this can be a real moneysaver. Even more when you a have digital metering for netcosts and solar panels.

2 Likes

Actually, I am very interested in something like this (I know the post is a bit older).

The trouble is, that ASHP systems tend to be rather hard to control. They like to ā€œdo their thingā€ purely based on outdoor temps which is a bit unfortunate since that means they will be working hardest when it is cold outside, and thatā€™s when they are least efficient. During the milder hours they will either by cycling on/off which isnā€™t great, or running on lowest setting and not doing much.

Setting up a simple algorithm that raises the target temp a bit during warmer hours and lowers it when it is cold is a start, doing so in a more proactive manner, accounting for upcoming weather and so on gets even more complex. And of course you will want to make sure your room temps donā€™t fluctuate too much.
An additional worry is, that any algorithm we create wonā€™t know what the heat pump is currently doing, so lowering the target temp might choke off the heat pump when it has just reached itā€™s required flow temp which would be counter productive.

Heat Pump manufacturers would surely be able to implement something like this easily, but sadly I donā€™t think any of them have, and third party companies like Tado and Ngenic have solutions for this, but judging their effectiveness is quite hard and they also tend to make mistakesā€¦

Itā€™s a complex matter, made worse by the fact that most heat pumps arenā€™t directly controllable by Home Assistantā€¦and playing around with the room thermostats isnā€™t at all the same as controlling the heat pump itself.

1 Like