Temperature Profile logic/understanding

temperature_profile.php

My graph always had a pretty flat trend line for heating. Meaning that the graph suggested that my heating delta at cold outdoor temps was about the same as if it was considerably warmer outside. I was curious, so I dug into the code and
I ended up emailing Jon last year on this topic.

A bit of background at how Ecobee reports its data. Things are reported in 5 minute intervals: So in a 5 minute block it will tell you how many seconds your HVAC was running or not. This interval also has a section regarding indoor temperature. Since its a 5 minute interval, it reports the temperature at the beginning of the interval. So this means that if you heat was running for the full 5 minutes the indoor temperature would be at the start and the true “end” temperature is found in the in the next 5 minute interval.

My furnace uses forced gas and I know my system pretty well and how it perfoms the cycle. I have a modulating furnace with a variable speed fan blower. It slowly ramps up heat the first 5 minutes of runtime and then towards the end of reaching its setpoint it really kicks out the heat until it is satisfied. Meaning that the indoor temperature of the NEXT 5 minute block after a HVAC cycle completes is better representative of my indoor temperature

An example if those want to follow…

My starting zone_average_temperature is 70.0F when the heating cycle first starts.

The last heating cycle interval ends at 70.5F (last object in my snippet minus 1)

HEAT cycle as reported in beestat/ecobee:
22:25 to 22:45 = 20 mins to change 0.5F
vs
HEAT cycle in reality
22:25 to 22:50 = 25 mins to change 1.0F

This was a true runtime of 16.5 minutes

So the factors in determining delta varies based on how the calculation is done for temperature and as well as runtime.

Is this similar to other HVAC systems ? I wouldn’t want to suggest anything that wouldn’t fully apply to the rest of the community.
I know other concerns about the data were in regards to solar heat gain and if it was windy that day or not. I’m not sure if it will ever be perfect, but wanted to open the discussion to others.

Here’s my snippet of data :

{
    "ecobee_thermostat_id": 3028,
    "timestamp": "2019-04-19 22:25:00",
    "compressor_heat_1": 0,
    "compressor_heat_2": 0,
    "auxiliary_heat_1": 75,
    "auxiliary_heat_2": 0,
    "auxiliary_heat_3": 0,
    "compressor_cool_1": 0,
    "compressor_cool_2": 0,
    "fan": 75,
    "dehumidifier": 0,
    "economizer": 0,
    "humidifier": 0,
    "ventilator": 0,
    "hvac_mode": "heat",
    "outdoor_temperature": "43.7",
    "zone_average_temperature": "70.0",
    "zone_heat_temperature": "71.0",
    "zone_cool_temperature": "80.0",
    "zone_humidity": 39,
    "outdoor_humidity": 38,
    "zone_calendar_event": null,
    "zone_climate": "Sleep"
},
{
    "ecobee_thermostat_id": 3028,
    "timestamp": "2019-04-19 22:30:00",
    "compressor_heat_1": 0,
    "compressor_heat_2": 0,
    "auxiliary_heat_1": 300,
    "auxiliary_heat_2": 0,
    "auxiliary_heat_3": 0,
    "compressor_cool_1": 0,
    "compressor_cool_2": 0,
    "fan": 300,
    "dehumidifier": 0,
    "economizer": 0,
    "humidifier": 0,
    "ventilator": 0,
    "hvac_mode": "heat",
    "outdoor_temperature": "43.1",
    "zone_average_temperature": "69.9",
    "zone_heat_temperature": "71.0",
    "zone_cool_temperature": "80.0",
    "zone_humidity": 39,
    "outdoor_humidity": 40,
    "zone_calendar_event": null,
    "zone_climate": "Sleep"
},
{
    "ecobee_thermostat_id": 3028,
    "timestamp": "2019-04-19 22:35:00",
    "compressor_heat_1": 0,
    "compressor_heat_2": 0,
    "auxiliary_heat_1": 300,
    "auxiliary_heat_2": 0,
    "auxiliary_heat_3": 0,
    "compressor_cool_1": 0,
    "compressor_cool_2": 0,
    "fan": 300,
    "dehumidifier": 0,
    "economizer": 0,
    "humidifier": 0,
    "ventilator": 0,
    "hvac_mode": "heat",
    "outdoor_temperature": "43.1",
    "zone_average_temperature": "69.9",
    "zone_heat_temperature": "71.0",
    "zone_cool_temperature": "80.0",
    "zone_humidity": 38,
    "outdoor_humidity": 40,
    "zone_calendar_event": null,
    "zone_climate": "Sleep"
},
{
    "ecobee_thermostat_id": 3028,
    "timestamp": "2019-04-19 22:40:00",
    "compressor_heat_1": 0,
    "compressor_heat_2": 0,
    "auxiliary_heat_1": 300,
    "auxiliary_heat_2": 0,
    "auxiliary_heat_3": 0,
    "compressor_cool_1": 0,
    "compressor_cool_2": 0,
    "fan": 300,
    "dehumidifier": 0,
    "economizer": 0,
    "humidifier": 0,
    "ventilator": 0,
    "hvac_mode": "heat",
    "outdoor_temperature": "43.1",
    "zone_average_temperature": "70.1",
    "zone_heat_temperature": "71.0",
    "zone_cool_temperature": "80.0",
    "zone_humidity": 39,
    "outdoor_humidity": 40,
    "zone_calendar_event": null,
    "zone_climate": "Sleep"
},
{
    "ecobee_thermostat_id": 3028,
    "timestamp": "2019-04-19 22:45:00",
    "compressor_heat_1": 0,
    "compressor_heat_2": 0,
    "auxiliary_heat_1": 15,
    "auxiliary_heat_2": 0,
    "auxiliary_heat_3": 0,
    "compressor_cool_1": 0,
    "compressor_cool_2": 0,
    "fan": 15,
    "dehumidifier": 0,
    "economizer": 0,
    "humidifier": 0,
    "ventilator": 0,
    "hvac_mode": "heat",
    "outdoor_temperature": "43.1",
    "zone_average_temperature": "70.5",
    "zone_heat_temperature": "71.0",
    "zone_cool_temperature": "80.0",
    "zone_humidity": 39,
    "outdoor_humidity": 40,
    "zone_calendar_event": null,
    "zone_climate": "Sleep"
},
{
    "ecobee_thermostat_id": 3028,
    "timestamp": "2019-04-19 22:50:00",
    "compressor_heat_1": 0,
    "compressor_heat_2": 0,
    "auxiliary_heat_1": 0,
    "auxiliary_heat_2": 0,
    "auxiliary_heat_3": 0,
    "compressor_cool_1": 0,
    "compressor_cool_2": 0,
    "fan": 0,
    "dehumidifier": 0,
    "economizer": 0,
    "humidifier": 0,
    "ventilator": 0,
    "hvac_mode": "heat",
    "outdoor_temperature": "43.1",
    "zone_average_temperature": "71.0",
    "zone_heat_temperature": "71.0",
    "zone_cool_temperature": "80.0",
    "zone_humidity": 39,
    "outdoor_humidity": 40,
    "zone_calendar_event": null,
    "zone_climate": "Sleep"
},

The $minimum_on_for variable is what controls part of what you’re talking about. If I increased this from 300 to 600 it would ignore that first five minute sample.

I don’t think that would be a terrible idea. It would help filter out noise from cold air in the ducts, system “warming up”, etc.

This could be handled. I am storing the total seconds the system was on, but I am using a rougher estimate when calculating the sample. I think this would make sense to tweak but I’d have to think through it more carefully.

That’s a good start. Also, my suggestion of retrieving the 5 minute interval directly after the end of the cycle will capture the zone_average_temperature to better reflect the HVAC system reaching its desired setpoint.

Any time spent on this will make it more accurate - as boring and tedious as it might be :grin: