Heating Curve Calculator

For those who are interested, I made my heating curve calculator public.

Here are a few facts:

Features

  • :thermometer: Dynamic Flow Temperature Calculation - Automatically calculates optimal flow temperature based on outdoor conditions
  • :bar_chart: Two Calculation Modes:
    • Classic mode (based on target room temperature)
    • Room temperature feedback mode (uses actual room temperature)
  • :level_slider: Fully Adjustable Parameters - All parameters can be adjusted via Number and Select entities
  • :arrows_counterclockwise: Hysteresis Support - Prevents frequent temperature changes and reduces wear on heating system
  • :control_knobs: Real-time Updates - Changes take effect immediately without restarting
  • :globe_with_meridians: Multi-language Support - English and German translations included

All heating parameters can be adjusted anytime via the created Number entities:

Entity Description Range Default Unit
Curve Slope Steepness of the heating curve 0.1 - 5.0 1.4 -
Curve Level Parallel shift of the heating curve -20.0 - 20.0 0.0 °C
Target Room Temperature Desired room temperature 15.0 - 25.0 20.0 °C
Min Flow Temperature Minimum flow temperature 15.0 - 50.0 20.0 °C
Max Flow Temperature Maximum flow temperature 40.0 - 90.0 75.0 °C
Hysteresis Temperature change threshold 0.0 - 5.0 1.0 °C

How It Works

Heating Curve Formula

Classic Mode:

T_flow = T_room_target + slope Ă— (T_room_target - T_outdoor) + level

With Room Temperature Mode:

T_flow = T_room_target + slope Ă— (T_room_actual - T_outdoor) + level

The result is clamped between min and max flow temperature.

Hysteresis

Hysteresis prevents the flow temperature from changing too frequently:

  • The calculated flow temperature only changes when the difference exceeds the hysteresis value
  • Example with 1.0°C hysteresis:
    • Current: 45.0°C, Calculated: 45.5°C → No change (< 1.0°C difference)
    • Current: 45.0°C, Calculated: 46.2°C → Change to 46.2°C (≥ 1.0°C difference)

Benefits:

  • Reduces heating system on/off cycles
  • Extends equipment lifetime
  • More stable heating behavior
  • Lower energy consumption

I would be thankful if someone would test it and give me feedback.

1 Like

This looks very interesting because I am currently installing sensors on my boiler to obtain DHW flow and return temperatures + CH flow and return temps. I’ve never been convinced that the heating curve I’ve manually selected matches the thermal characteristics of the house, nor am I convinced the boiler temperature compensation sensor is doing its job properly (no single curve + offset works summer and winter).

I think as a first step I’d like to try your integration and, whilst I cannot control the boiler characteristics programmatically, I can compare your calculated CH Flow Temperature with an averaged value from the boiler to see where the major departures lie.

Later:

OK, that was an effortless install and the names easy to rewrite in English. A calculated flow temperature is being issued which means I can now collect some stats.

I shall be interested to see what happens overnight because the boiler is set to revert to an “overnight” temperature. I imagine, as the outside and indoor temperatures fall, your calculated flow temperature will simply keep increasing. If so, perhaps a future release might incorporate a set-back temperature to accommodate this. (Would require three more parameters: 2 x time and 1 x set-back temp).

I’ll try it as well!

I also have an extra question, this one is for everyone :slightly_smiling_face:

Let’s say you have a large house where the rooms are roughly similar in size, but you have one big living room where the temperature is naturally cooler than in the other rooms. How would you set the heating curve slope in this case?

There is a thermostat in every room, but they are not connected directly to the boiler, only to Home Assistant. Each room is on a separate heating circuit.

Would it make sense to install individually controllable valves on each circuit?

I think the answer would be… it depends.

If the living room is representative of the temperature you want to achieve then that would satisfy the whole house. If the living room temperature is a constant fixed delta from the rest of the house then you could simply apply an offset to the living room temperature and that would also suffice.

If all the other rooms have minds of their own then you could either take a median value of the whole lot and use that as a simple and cheap approach or you could go down the road you suggest. However, the latter is an expensive route and has multiple points of failure including the extra plumbing, parts, maintenance and servicing costs.

It depends how geeky you want to be. In my experience doors are left open, windows open, stuff is warmed (and even dried) on radiators so the thermal characteristics of individual rooms can change at the drop of a hat. People really are the worst for living in houses!

I think the best approach (and winter is a good time to do this) is to open all the valves (including TRVs), lockshields, zone controls, etc., and let the boiler do its stuff. Internal doors must remain shut throughout. Then gradually wind down the lockshields until each room acquires the desired temperature in relation to the others. You are then modifying the thermal characteristics of the building at a granular room level. This still won’t account for open doors, windows and clothes drying later on but it’s as close as it gets because you’ll discover internal rooms are throttled down more than rooms with exposed external walls. It’s a bit like the blood supply adapting to the muscles you use through repetitive exercise. The coldest, most exposed room will have their lockshields fully open, others progressively less so. Rooms with undersized radiators will require greater flows than rooms where radiators are oversized. Importantly, this approach allows the least overall resistance to water flow because all lockshields and valves will be at their most open. Your boiler pump will thank you.

It can take days, weeks to achieve this…

Further control can then be achieved by TRVs (or smart TRVs) reducing the temperature for rooms that you want to throttle back further as they are used or not used (for example, turning down a radiator in a unoccupied spare bedroom, reducing bathroom temperature in periods of low occupancy). This is a lifestyle adjustment, not a thermal one.

During this time you can adjust the boiler’s built-in heating curve which will apply a single response to the whole building knowing that the individual radiators have been balanced. Installers don’t do this of course, unless you want to pay for them living in for a couple of weeks whilst adjustments are made. It’s a reiterative approach. The heating curve, with “weather” compensation, takes into account the outdoor temperature. If mos (or all) rooms are too cold when it’s cold outside, increase the curve, or the opposite. Repeating the entire exercise in spring/autumn will give you the level (offset) adjustments.

I haven’t answered your question “How would you set the heating curve slope in this case?” because there’s no single curve can do this. The heating curve can nly ever match the whole house thermal characteristics: a function of size, building materials, insulation, glazing, etc. These are the knowns.

Then there’s solar gain to consider, a function of location, south-north facing, windows, glass coatings and the vagaries of climate. Then there’s the weather to add to the mix, including wind speed, direction and humidity and how leaky the building is. These are all uncontrollable factors. Finally, on top of all that lies occupancy gain and lifestyle patterns. So many variables.

You’ll have got it right when a) lifestyle habits b) radiator balancing c) cost saving d) convenience and e) comfort levels all coalesce.

Hope it goes well for you.
Ric

Thank you for the detailed answer :slightly_smiling_face: