Show current cooling/heating temperature differential (gives insight into automatic staging)

First up - thank you for beestat! This is the majority of the reason I picked ecobee :slight_smile:

EDIT 2022-8-26: After further testing, I suspect the API responds with the last saved manual staging differential, even when using automatic staging. If so, this feature is not as useful, except perhaps as part of just showing all available equipment configuration details.

One way to check would be enabling this setting and seeing if the API ever shows a value not in a 0.5°F increment.

beestat should show the configured heat/cool differential

beestat should show the stage1CoolingDifferentialTemp and stage1HeatingDifferentialTemp values (in degrees, so divided by 10).

These details might fit in the Thermostat Info dialog.

This is in addition to the current alerts when the differential is set to 0.5°F

Rationale

beestat helpfully informs you when the cooling or heating differential is set to 0.5°F and should be raised to 1.0°F. However, this doesn’t take into account the more recent automatic staging setting which can pick a value between 0.5°F to 1.0°F.

According to an ecobee employee on Reddit, the automatic staging adjusts the differential from 0.5°F to 1.0°F, and as explained by another customer support interaction, this is impacted by the eco+ Savings Preference slider.

Now, I can manually configure staging to set the differentials to 1.0°F, but I’d like to explore what ecobee’s automatic differential algorithm is doing before I opt out of it entirely.

Context

When I first set up my thermostats (1× Premium, 1× Enhanced), beestat warned me about the differential. I initially configured manual staging and looked around at what the automatic staging even did.

Within half a day, curiosity struck, so I re-enabled automatic staging and moved the eco+ slider to Maximum. Now, beestat no longer warns me, so the differential no longer equals 0.5°F. But to find out the value itself, I think I’d need to create a developer account.

From looking at the beestat graphs during “someone is usually home” periods, it appears that the Enhanced thermostat has picked a 0.8°F differential, running the compressor about once an hour. The Premium thermostat doesn’t have enough data yet to check this. And neither thermostat has been online for more than a day, so there’s not a lot of data for ecobee or beestat to do anything with.

(I’ve noticed the thermostat’s own temperature sensor has been varying in readings from too cold to too hot, -3°F to 0°F on the Premium and -1°F to +2°F on the Enhanced, so they might not have finished calibrating their offset to the thermostat’s internal heat.)

This is a nice idea. I could toss it in the Thermostat Info modal but it feels more prudent to put it somewhere new that can just show all (or certain relevant) settings.

If you’d like to see what these values are, open up the developer console (press F12 in beestat) and paste this code:

var thermostat = beestat.cache.thermostat[beestat.setting('thermostat_id')];
var ecobee_thermostat = beestat.cache.ecobee_thermostat[thermostat.ecobee_thermostat_id];
console.log('stage1CoolingDifferentialTemp = ' + beestat.temperature({'temperature': ecobee_thermostat.settings.stage1CoolingDifferentialTemp/10, 'units': true}));
console.log('stage1HeatingDifferentialTemp = ' + beestat.temperature({'temperature': ecobee_thermostat.settings.stage1HeatingDifferentialTemp/10, 'units': true}));

An astute observer may realize that you can look at other settings this way. You can access all of the settings with this:

console.table(ecobee_thermostat.settings);

I have no issues adding a place to show these settings in beestat. To satisfy your curiosity you can change your thermostat to auto and see if those values ever change. I’m guessing the automatically chosen value is not exposed, though.

Timeline for adding this to beestat is likely at least a few months out. Been working on the new 3D visualization feature so other smaller features are taking a backseat. Let me know what you find out!

1 Like

Thank you for the detailed reply!

Automatic staging

Temperature differential in API

Unfortunately, as you suspect, the automatically chosen values are not exposed. Instead, it’s returning the last selected manual staging values:

stage1CoolingDifferentialTemp = 1.0°F
stage1HeatingDifferentialTemp = 1.0°F

Temperature differential from observation

By looking at the beestat charts, automatic staging with eco+ cranked up to Maximum (as that is supposed to impact automatic staging) appears to try to optimize the temperature differential to obtain somewhere between 1–3 cycles per hour, at or below Honeywell’s recommended maximum CPH of 3 for their WiFi thermostat.

Assuming none of the other features intervene (min. compressor on/off time, max. temp, etc), this calculation could be automated by comparing the set point to when the thermostat engages cooling/heating. That’s a big assumption to make, though.

One ecobee thermostat has chosen a 0.5°F differential for a fairly large downstairs area (includes a finished basement), but the other thermostat jumped up to a 0.8°F differential then later shifted to a full 1.0°F swing for a small upstairs area (two bedrooms, one bathroom).

I wouldn’t be surprised if the downstairs thermostat raises the temperature differential above 0.5°F after more time operating. I initially repeatedly adjusted the temperature offset and wall insulation while trying to improve accuracy, which appeared to greatly confuse it as for part of one night it cycled on/off at a 0.1°F differential, which shouldn’t even be possible. Fortunately, the next day it sorted itself out, plus I emailed ecobee to have them reset the temperature learning database.

(If you want to look at the data, I’m happy to share.)

While manual staging will always be more predictable, it might be worthwhile noting in the beestat documentation that automatic staging can pick values in between 0.5°F and 1.0°F (as per the customer support response linked in my first post). This might be more comfortable in larger/better insulated spaces, or provide extra flexibility on the go (one can change the eco+ savings preference from the app, but changing the thermostat’s installation settings for manual staging requires being physically present).

NOTE: I am very new to ecobee and beestat, so I may be misreading details. I’ll recheck on what the thermostats are doing in a few weeks or so.

Viewing thermostat installation details

console.table is a handy developer console trick, thanks!

I agree with moving this to a new place, not just adding it all to the Thermostat Info modal. It might be a useful reference in case a thermostat is replaced (warranty/etc), upgraded, or factory reset.

Timeline estimate noted, no hurry from me!

And the 3D visualization tool looks sweet… I’m going to have to either find this house’s floor layout or do a lot of measuring (perhaps saving up for that laser measuring tool).

I have also experimented with automatic staging and have observed frequent 0.1 deadbands in cooling mode. However when it starts getting warm outside, it seems to switch to 0.5 deadband. My guess is that the thermostat knows how long it will take for your house to heat up. If the time that it takes is longer than a certain time, it knows that it can run a 0.1 deadband and the cooling will not start and stop ever 5 minutes. In other words, if the thermostat knows that it will take 1 hour for the temperature to increase by 1 degree, it can safely use 0.1 deadband because it knows when cooling stops, the temperature will overshoot by a certain amount. If it knows the temperature will be 0.2 below the setpoint when cooling stops and the temperature is increasing at 1 degree per hour, it knows cooling will be off around 18 minutes. Therefore it can use a differential of 0.1 degree and have about 3 cycles per hour which is somewhat the industry standard in cycle rate. That of course is just a guess. I also know that if the temperature stops rising in cooling mode or stops dropping in heating mode, automatic staging appears to change to a 1 degree differential. Maybe this is to keep heating and cooling off as long as possible to save energy? @digitalcircuit, have you made any more discoveries on this?

@Audi2013 Thank you for sharing your experience! That makes sense - it seems like the thermostat is aiming for around 3 CPH - perhaps closer to 2 CPH for me, but that might be due to setting my eco+ slider to Maximum.

I’ll keep exploring how the automatic staging works. I’ve been interrupted somewhat by contacting support about ceiling fans in adjacent rooms significantly impacting the measured temperature (2-3°F drop as compared to smart sensor, enough to make it feel uncomfortably warm, which is what prompted me to investigate it). I feel I’ve been pretty thorough in insulating the thermostat mounting on the wall, and I’m doing some tests for support.

Once that’s resolved (and I’m no longer throwing off the thermostat’s temperature algorithms), I’ll pay more attention to how automatic staging works.

@digitalcircuit I just saw this. For some reason your response ended up in my promotions folder which I never check. I’m not sure if you got an answer but I can answer your question about the ceiling fans as I have noticed that too. The thermostat makes some internal heat and ecobee has a patent out about compensating for that internal heat in order to read the correct temperature. I forgot how they do it. If you are blowing air past the thermostat, it removes some of that internal heat and the internal compensation does not account for airflow. As a result, it makes the thermostat read the temperature lower than it actually is. I have notice this occur with both my ecobee thermostats as both of them are located in rooms with ceiling fans.

Let me know if you make any more discoveries. The only recent discovery I have made with automatic staging is it also seems to know the slope at which the cooling or heating will change the temperature in degrees per hour. Similar to Beestat however my guess is that it is only maybe a short term average. It seemed to adjust over a few days when I relocated one of my thermostats. Anyway if the slope of cooling is greater than a certain rate, it assumes that it will overshoot the setpoint and therefore it changes the differential back to 0.5. Eventually if it is in the 50’s outside, it will change my differential to 1 degree because it must think the AC will cool the upstairs zone down so fast it will overshoot the setpoint and thus it increases the differential. So if it’s cold outside, differential in cooling will be 1 degree. Somewhat cold is 0.5 degrees. 70’s to 80’s outside seems to operate at 0.1 differential because it seems to know the zone wont warm up that fast. When the temperature is in the mid 80’s outside, the upstairs zone seems to change to 0.5 degrees because it knows the zone will heat up too fast and cause short cycling. That of course is just the one thermostat. The downstairs behaves somewhat the same but those thresholds are shifted because the downstairs cools faster and warms up slower . All that is without the “adjust temperature for humidty” turned on. If I turn that on, it becomes 5 minutes on and 7 minutes off and 5 minutes on…I can’t really use automatic staging with the “adjust temperature for humidity” feature.

Brian

1 Like

Are you still using automatic staging? I have Ecobee 4’s and have played around with this option. It seems to work well in heat but not in cool. In cool, I cant figure out what it is doing. It frequently seems to use a 0.1 differential which is not 0.5-1.0 as advertised. I can see the tight deadband in beestat. It runs a bunch of 5 minute cooling cycling (min run timer). I submitted a ticket but have gotten nowhere and no one appears to be looking into it. They claim it’s only my thermostats. You said that it is aiming for 2 cph? Is that averaged over 24 hrs? We tend to run a few degrees cooler at night for a cooling setpoint so between 6 AM and 12 PM, cooling may not run at all. If the thermostat is really counting cycle rate, maybe my 24hr cph is low so it runs a 0.1 differential? Have you observed 0.1 differentials?

Brian

I am still using automatic staging, and I have run into the occasional 0.1° differential 5 minute cooling cycles that I also do not understand why they happen.

At first, I noticed several on the Downstairs thermostat after changing some settings, so I asked ecobee support to reset the HVAC equipment data. That hasn’t happened again since.

Recently, I changed the Upstairs thermostat to cool down to 76°F instead of 77°F at night, and for the past three days I’ve had some 0.1° cooling cycles - twice the first two nights, and once tonight. I don’t think it did this until my recent schedule change. I’ll give this a week or so (for the learning algorithm to adapt), and if it keeps happening, I’ll try switching back to the old 77°F schedule.

That’s interesting and glad to know it’s not just my stats doing that. Feel free to create a support ticket on that issue because ecobee claims my thermostats are the only ones doing this behavior. They act like they have never seen this before. It’s probably just that no one has noticed and I wouldn’t have known either if it wasn’t for beestat! Are you using “adjust temperature for humidity”? When that is on, all I get is 0.1 differentials. When that is off, I’d say half of my cooling cycles are 0.1 differentials. I do not have this issue in heating mode.

Brian

I was thinking about this and you actually may be on to something. I created a spreadsheet to analyze my ecobee data and it will calculate average CPH. I’m only averaging around 1 cycle an hour in a 24 hour period due to my unit being oversized and it being fairly mild here. I wonder if it’s taking the rolling 24hr average CPH rate and if it’s less than X it decreases the differential and greater than X, it increases it. This could explain why sometimes mine randomly change to 0.5 diff and other times 0.1 diff. I never seem to see anything above 0.5. The weird thing is, this behavior doesn’t happen in heat. Can you correlate your 0.1’s to a decrease in average cycle rate before the 0.1’s occur?

I have kept Adjust temperature for humidity turned off to have accurate temperature in beestat graphs, and because the ceiling fan/moving air temperature inaccuracy problem results in the relative humidity readings swinging wildly (even when only using Smart Sensors, the thermostat’s temperature sensor is used for calculating the relative humidity from the internal humidity sensor).

Unfortunately, in the past few months when keeping the night time temperature at 77°F, I haven’t had the Upstairs AC turn on at all during the Sleep setting, beyond the initial cooling down from 81°F to 77°F. Otherwise, it has only run during the Away setting, with a 1.0°F differential + 1.0°F for the Away mode.

It’s possible I never ran into this until changing my Sleep temperature to 76°F because it hasn’t been warm enough at night to hit 77°F.

It seems to be the same for me - I’m still only getting 1-2 cycles per hour on average, even if some of those cycles are very close together.

(I have not yet opened a support ticket with ecobee, but I will keep paying attention to what happens.)

I’ve done some observing of automatic staging in cool mode this week and mine definitely seems to be looking at temperature overshoot from the setpoint. All I have witnessed is 0.1 differential and 0.5 differential and possibly 0.6 differential. If the temperature overshoots the setpoint by more than 0.3 degrees about 3 times in a row, it switches to 0.1 differential. If the temperature overshoots less than 0.2-0.1 for a couple times in a row, it changes to 0.5 differential. I’m guessing the thought behind this logic was if the temperature is overshooting the setpoint, make the differential more sensitive. If it’s not overshooting the setpoint, make the differential less sensitive. This can be verified as follows: when it is operating at 0.5 differential, make the minimum run time several minutes longer than the actual on cycle which will cause the temperature to overshoot the setpoint. After several cycles, it will switch to 0.1 differential. At least that’s how my ecobee 4’s work. I can’t speak to any of the other models. Apparently this logic was written before eco+ or someone at ecobee forgot about the “adjust temperature for humidity” feature. When you turn on “adjust temperature for humidity”, it causes the calculated temperature to jump all over the place making the thermostat think it’s overshooting the setpoint which causes it to operate at 0.1 differentials. This is why when I turn on the “adjust temp for humidity”, I get lots and lots of 5 minute on cycles and 0.1 differentials. Mine can’t be looking at CPH because I’m only averaging 1 to 2 CPH in a 24 hr period. Maybe 3 CPH at max during 1 or 2 hours of the day. My unit is a tad oversized in cooling (not heat) and then I added zones which made it even more oversized in cooling. I’m curious if you observe this same behavior. Let me know.

1 Like

Interesting discovery!

On my side, the Upstairs thermostat (where I’m observing this) only operates in “Away” and “Sleep” mode, and I don’t know if the added 1.0°F differential for the Away setting is impacting the learning algorithm, or if it’s decided to use a 0.1°F differential for all situations.

Unfortunately (but fortunately for comfort) with it not yet being very hot here, I don’t seem to be getting a consistent amount of (or lack of) overshoot to verify the differential switch. In some situations, it’s only overshooting by 0.1°F, other times it’s 0.2°F, or 0.3°F, and late at night sometimes even 0.5°F. It does appear to be averaging around 2 CPH, so still within the industry standard.

During the day (when “Away”), sometimes it appears to turn on with a 0.0°F + 1.0°F Away differential, e.g. 82.0°F with a set point of 81°F. However, given beestat.io only has 5 minute increments, it’s possible there is still a 0.1°F included. It used to wait until 82.9°F (0.9°F differential + 1.0°F Away differential), so it is adapting from something that it previously determined.

Based on an old vulnerability report I think the ecobee thermostats run Linux. I would love to just see what the algorithm is… but I highly doubt ecobee will share that :slight_smile:

Quick addendum:

Yesterday, I tried switching the Upstairs thermostat from Away for the day to Home during the day (with Smart Home/Away disabled), using the same 81°F temperature set point, and I initially thought this solved the 0.1°F differential problem as it waited for a 1.0°F differential after the initial cooldown to 76°F for sleep.

Unfortunately, it immediately returned to 0.1°F differentials after that. On the upside, I don’t think the use of only Away versus Home during the day matters in terms of misleading the automatic staging algorithm.

And the thermostat still isn’t running more than about 2 cycles per hour, so ecobee is staying within the industry standard. I may move to a fixed differential in the future, but for now, the experimenting shall continue!

That is good information. I’ve never seen mine change to a 1 deg differential in automatic staging. I’m still experimenting myself over here. I put mine in automatic staging with “adjust temperature for humidity” turned on and ive had nothing but 0.1 differentials. On, off, on, off up to 5 cycles per hour (6 min on and 6 minutes off). Eventually it changed to 0.5 differential but not for long. What I’m finding is that, when there isn’t much load, cooling starts at setpoint+0.1 and runs for the minimum time (which i made for 6 min because 5 was too short for me). At the end of 6 minutes, the temp may have dropped 0.4 degrees but with the humidity compensation, ecobee says it dropped by maybe 0.6 degrees from the setpoint. Then it takes 30 minutes for the temp to reach setpoint+0.1 and cooling start again. This means the equipment is on for 6 min and off for 30 which is fine. However, as the load approaches 50% of the equipment capacity, off times get shorter but on times do not. See the image below:

My theory is eventually the stat sees the lack of overshoot which makes it change to 0.5 differential but that only lasted a couple cycles and then it was back to 0.1 differential. If it was looking at CPH, it would have stayed at a 0.5 differential for awhile because of all the cycles that occurred prior to the switch. I contacted Ecobee support again to follow up on my ticket and asked them if this was a bug or intentional. No one will give me an answer. They just tell me that they are sorry that I’m having this issue and that someone will look into it. I think it was intentionally programed like this and they don’t want to admit it. I wouldn’t have known if it wasn’t for beestat! Try turning on the “adjust temperature for humidity” and see if your CPH doubles!

1 Like

Thank you for continuing to look into this! That does seem… not great.

With your remark in mind, I’ve been experimenting with a different path… My goal is that the thermostat should never call for heat/cool unless it’s going to run for 10+ minutes, so that’s exactly what I did - I set the Compressor Minimum On Time on my ecobee stats to 10 minutes (from the default of 5 minutes).

I haven’t yet seen it switch to a 0.5°F differential as a result, but it’s only been a week or so.

Statistics aside, I’m avoiding the Adjust temperature for humidity feature due to my issue with adjacent ceiling fans throwing off the thermostat’s temperature (and thus relative humidity) reading - I don’t think I’d be able to get consistent results.

Thanks for the update. I like hearing about what discoveries you are making. What differential are you seeing with 10 minute run times? 0.1’s? I’ve come up with a theory on this. There is a COOL_SETPOINT variable which represents the temperature where cooling should terminate and a COOL_STAGE_ON variable which represents the temperature at which cooling should be enabled. The logic should look something like this:

If OVERSHOOT>=0.25, COOL_STAGE_ON = MIN(COOL_STAGE_ON +0.1, COOL_SETPOINT +1.0).
This says that if the temperature drops below the setpoint by 0.25 (this is where the 0.1 differentials appear to start), then raise the cooling stage on temperature by 0.1 degrees but not more than the cooling setpoint+1 degree. However instead someone wrote this:

If OVERSHOOT >=0.25, COOL_STAGE_ON = MIN(COOL_SETPOINT +0.1, COOL_SETPOINT +1.0). With this version, if the overshoot drops below 0.25, the stage on setpoint becomes the setpoint + 0.1. This seems to be what is happening. If the overshoot is more than 0.25 below the setpoint, the thermostat switches to 0.1 differential mode and does lots and lots of 5 minute cycles because it is only operating on a 0.1 differential. Someone used the wrong variable in the cooling control logic and it needs to be corrected. What are your thoughts?

As far as the ceiling fan issue, I’m having the same exact issue here too. Just as you described, when the ceiling fan is on, the humidity reads around 5-7% higher than it really is. This factors into the “adjust temperature for humidity” logic and causes the 10 day average to be higher than it really is forcing cooling to operate with a higher offset and making me feel warm. Using a remote sensor may solve the ceiling fan temperature control issue but it causes issues with humidity control. If I have the AC overcool max turned on and the stat is looking at a remote sensor, I turn on the ceiling fan and the house temperature drops because its trying to lower the humidity that was just fine before the ceiling fan turned on. Definitely and issue as you have described.

1 Like