HVAC Sizing with Beestat

Sizing Replacement HVAC Equipment Using Runtime Data

I’d like to offer a couple of methods for those who are interested in sizing a replacement furnace / heat pump using beestat / ecobee data. See the GBA article by Dana Dorsett “Replacing a Furnace or Boiler” for the technical background on these methods. I’ve used some example data from my ecobee for the illustrations.

Ecobee runtime data is equivalent to the fuel usage used in the article, assuming you know the Btu/hr rating of your equipment. Beestat already tracks the necessary HDD / CDD data. If you’re already using the NEEP Cold Climate Air Source Heat Pump List to select equipment, the 99% design temperature can be found through the “Advanced Search - Sizing for Heating and Cooling” tool.

Key Parameters

  1. Furnace Input Rating [75,000 Btu/hr] + AFUE [80% Efficiency]
    OR Furnace Output Rating [60,000 Btu/hr]
  2. Furnace Runtime [179h in Nov.] + Heating Degree Days [992.1 in Nov.]
    OR Runtime Per Degree Day Metric [11m]
  3. Design Temperature dT [68°F Indoor - 5°F 99% Temp = 63°F dT]

The Quick Method

The Runtime Per Degree Day metric on the beestat Compare tab and the design temperature give us an estimate of how often the equipment needs to run on the coldest days of the year.

First convert the runtime in minutes to a runtime in % per degree temperature difference:

11m/°F-day * 1d/24h * 1h/60m = 11m/1440m-°F = 0.7639% / °F

Multiplying by the design temperature dT gives us a % runtime at 5°F outside, 68°F inside:

0.7639% / °F * 63°F dT = 48.125%

The current equipment needs to run 50% of the time on the coldest days of the year, suggesting it may be twice as big as needed.

Using the Btu/hr input of the current equipment gives us an approximate heat load:

48.125% * 60,000 Btu/hr = 28,875 Btu/hr

The Custom Period Method

Selecting a bin from the Thermostat Summary table can provide the above runtime and degree day parameters, and you can find your runtime per degree day metric manually. You can use the Custom time period to select a specific date range if desired.

For November on my thermostat:

179h/992.1°F-day * 60m/h = 10.8m/°F-day

Using the math from the quick method section:

10.8m/°F-day = 47.362% = 28,417 Btu/hr

Sizing the Replacement

ASHRAE recommends a 1.4x sizing factor:

28,417 Btu/hr * 1.4 = 39,783 Btu/hr

The heat load above is the heat output needed from the furnace to keep the home warm. To find the input needed, we need to account for the efficiency of the furnace. Divide the heat load by the efficiency to get a Btu/hr rating you can shop with:

39,783 Btu/hr / 80% = 49,730 Btu/hr at 80% AFUE
39,783 Btu/hr / 95% = 41,878 Btu/hr at 95% AFUE

The Sniff Test

On a really cold day, listen for when your furnace cycles on and off. How long does it run? 50% of the time? 75% of the time? Equipment is usually most efficient and most comfortable when the runtime can be maximized, and short cycles are indicative of oversizing. When sizing for a modulating heat pump, it may be best to target 100% runtime at the 99% design temperature and rely on backup heat to cover the remaining 1% of the year to minimize low-load cycling at warmer temperatures.

Notes on Accuracy

Using the fuel-bill method in the GBA article, I get a heat load of 29,406 Btu/hr, within 5% of the ecobee data. The Manual J from a computer model was 47,100 Btu/hr, about 66% higher than the direct measurements. Variables like duct loss, home air leakage, and internal loads are directly accounted for in the runtime measurements.

Two stage equipment can still be processed using the above equations. I multiply the Stage 2 runtime by the turn-down ratio and add it to the Stage 1 runtime.

13.95h Stage 2 * (100kBtu/hr / 75kBtu/hr) = 18.6h Stage 1 Equivalent

Summary Equation

Btu/hr Input of Replacement = 1.4 * Runtime per Degree Day/1440 * (68°F - Design Temp) * Current Furnace Btu/hr Output / AFUE of Replacement

2 Likes

This is awesome! Thank you. :+1:

1 Like

This is very nicely written up. I’m actually doing some exploration into this type of analysis right now. I’m eager to sit down and try this with my own system to see what type of results I get. If everything checks out or if there’s a lot of positive feedback in this thread I’ll look at getting this information pinned somewhere.

Edit: Question for you…what type of additional data would you be looking for inside beestat to make this easier?

Good stuff!
I did the runtime method and Dana’s fuel method and they were within ~1000 BTU/h of each other. In my case I was sizing a heat pump so I selected a heat pump that matched my design heating load, but sized the backup heat at 140%.

I wonder if a % runtime line could be added to the temperature profiles graph (units min/hr or % of hr runtime). The equation could be added to the More Info box, and the heat load calculated from there. Or, visually, you could find the design temperature on the graph and get your runtime from there.

With easy access to runtime % vs. outdoor temp, you could calculate heat loads at different temperatures. I could see this information especially relevant for upgrades to heat pumps.

Nice! That makes sense to me. I’m glad you got good agreement, too.

If I’m understanding you right, you can kind of get this information from the Thermostat Summary chart. Make sure Smart Scale is on, and that will scale the chart so you can easily see what percentage of a given day/week/month your system ran.

In this example, I am grouping by day so my chart is showing everything maxed out at 24h. I can then look for days at certain temps or degree days and visually see what percentage of the day my system ran.

That’s definitely the idea - a quick visual check of how much of your furnace capacity you’re utilizing. My concern with that is the granularity of the data - averaging by day loses a lot of insights and accuracy you can get when looking at hour data.

I was thinking something like this mockup might be more intuitive. If you line up the x-axis at zero, the runtime % and the resist profile should intersect there, and you can scroll over to any temp and see the runtime % exactly. I realize this is adding a second axis, though, so maybe it isn’t so easy to implement.

1 Like

Agree with @tdykhuis that hourly data is key when trying to figure out BTU/h load. When I had my old single-stage furnace and a Nest thermostat, I double checked my heating load using the google home app’s hourly chart for the coldest days of the winter (at or below design temp), which were Feb 3 and Feb 4, 2023. I had a morning recovery from setback which spiked the runtime for a full hour in the morning, but other than that you can plainly see that my old furnace was oversized by 2x!

(Note: for multistage or variable equipment this calc would be difficult or impossible, and the fuel use or electricity use numbers would be the only method)

I’ve done both calculation methods, and got the following values:

  • Quick Method Calculation: 64,244 BTU - ASHRAE recommended input sizing (after 1.4X scaling factor)
  • Custom Period Method: 72,451 BTU - ASHRAE recommended input sizing (after 1.4X scaling factor)

Both methods were within 13%, which is pretty close.

However, I’d offer an easier, and imo likely more accurate, methodology that only requires your furnace info (BTU input and efficiency) and downloaded Ecobee data during the coldest part of the year. The more years of Ecobee data, the better, so you can grab the coldest period across multiple years.

Steps:

  1. Download Ecobee data for the month that contains the coldest days of the year.
  2. Add columns that create a running sum of the time that Heat is on for the following time periods: 24hrs, 12hrs, 6hrs, 4hrs.
  3. Find the max value of “Heat Running Time” for each time period. This will be in seconds.
  4. Use “Heat Running Time” to calculate the percent runtime of the furnace over the time period. For example, if the max Heat Running Time for a 12 hour period is 20,100 seconds, divide by 60 to get minutes, then divide by 60 to get hours, then divide by 12. This gives you a percent that the furnace ran over that period.
  5. Calculate the BTU Output Needed for each time period. (Furnace BTU input) * (Furnace efficiency) * (% Runtime for each time period).
  6. Calculate the BTU Input Needed with the new furnace efficiency for each time period. (BTU Output Needed) / (New Furnace Efficiency) = BTU Input Needed.

This tells you the BTU needed to maintain house temp over each of the coldest time periods of the year.

See screenshot. Blue cells can be obtained from Ecobee data. The only cells needed for the calculations are the “Max Heat-seconds per period” and your furnace input and efficiency data.

As you can see, the coldest 4hrs of the past year would require 78,458 input BTU to maintain temps during that period. This is 8% greater than the “Custom Period Method” calculation.

And when I use the coldest 4 hours of the past 3 years, I would need 113,313 input BTU to maintain temps during those coldest 4 hours.

The discrepancy is likely due to the fact that the methods mentioned in the OP are for 99% design temps, whereas mine account for the coldest times of the year or the past several years, effectively “100% design temps”.

I think the 2 methods outlined in the OP are good starting points, but if anyone has historical Ecobee data, I think you could get more accurate calculations than using DegreeDays and Design Temperature numbers.

Thanks for sharing this use case! Have you checked the sizing results against a fuel-based analysis method?

Plugging Nate Adams for releasing an easy to use calculator that does the degree day digging for you: Energy Use To Load Calc - NATE THE HOUSE WHISPERER

I’m a little concerned about the non-linear scaling of your inferred loads with outdoor temperature as the analysis window shortens. In my experience, longer analysis windows are often more resistant to transient effects in the analysis (thermal mass, thermostat setbacks and recovery) unless you are filtering for a window that has low indoor / outdoor temperature deviations. Picking the window with the max value of “Heat Running Time” likely biases the analysis toward setback recovery events rather than true steady-state periods.

I don’t trust my gas companies daily gas usage data, since the resolution is low (only to the nearest CCF) and the daily gas usage data does not match against my Ecobee runtime data. I suspect that either my gas company polls the meter at inconsistent times, or the day start/end times are off in some way.

But, I did do a comparison of the Monthly Gas Usage from my bill against the Ecobee Heat Time for the exact same time period (the bill from the left side of my image). My gas company listed 198 CCF (~19.8M BTU), and my heat ran for 158.8 hrs according to Ecobee. With 158.8 hours and a 140k BTU furnace at 80% efficiency (112k BTU theoretical output), that would be 17.8M BTU, or ~10% less than my gas company data would imply. My only use for gas is the furnace, so that rules out any other gas equipment that would explain the discrepancy.

So a Ecobee based estimate and a gas company fuel-based estimate differ by ~10% for gas usage. That’s fairly close, and I think lends credence that my methodology would be within 10% of real-world usage as well.

I agree that small window time periods are likely less reliable for sizing purposes. However, in this specific scenario (bill from the right side of my image), the temps were really consistent across a 24 hour period. The 24 hour average temp was -7F, and the coldest 4 hour window in that 24 hours was -11F. Only a 4 degree difference all day. So with that consistent cold in mind, I think it is reasonable to consider the 12 hour or 6 hour windows (so sizing would be ~87k and ~101k respectively).

Since that was the coldest period across 3.25 years (including 4 winters), that does mean that analysis is for covering 99.9% of all days, instead of 99%. If I wanted only 99% coverage instead, I do think that 78.5k BTU input would cover my use case. This is a 1.52X multiplier of my Custom Period Method (before the ASHRAE 1.4X scaling factor).

So for people that don’t have Ecobee data, I’d probably suggest doing the Quick Method Calculation, the Custom Period Method, and then taking the larger number and use a scaling factor of 1.5X instead of 1.4X.

At least in my use case, that would provide enough heating for 99% coverage.

Plugging Nate Adams for releasing an easy to use calculator that does the degree day digging for you: Energy Use To Load Calc - NATE THE HOUSE WHISPERER

That’s an amazing site. Using the website, and the Annual Usage of the from the largest usage period in the last 3 years, it gave me 41,265. Which is only slightly less than my Custom Period Method calculation, which gave me 41,400. Less than 1% different.

So I think my general recommendation would be to use that website, multiply by a 1.5X scaling factor (slightly higher than the ASHRAE recommendation of 1.4X), then divide by furnace efficiency to get your furnace rating. For me, that would give me 77,625 BTU input, which is pretty close to my 78.5k BTU estimate for the 99% coverage.