Ecobee over Homekit does not expose thermostat temperature properly

I am trying to control a few Ecobee 3 Lite thermostats with remote room sensors using the Homekit Controller integration. I was previously using the Ecobee integration, but it would frequently stop working.

The homekit controller integration exposes a “climate” device for the thermostat, as well as a temperature sensor and a binary sensor for each of the remote Ecobee room sensors. However, it does not provide a sensor that shows the temperature of the room the thermostat itself is in.

The “climate” device does have a “current_temperature” attribute, however, on ecobees, this is an average temperature that includes the remote sensors. There’s no way to get a temperature reading at the thermostat itself. (i.e., the room itself was 65, one remote sensor was 75, the thermostat says 70)

The native Ecobee integration (using the Ecobee cloud API) does expose a separate temperature sensor for the thermostat which reads the actual temperature of the room.

I don’t know if this is an issue with “Homekit Controller” not exposing the homekit data properly, or with the Ecobees not publishing the right data.

This is on core-2021.1.5

4 Likes

Just getting everything set up and discovered this exact issue. Hope something can be figured out to expose the temperature in the main thermostat room, as I much prefer the local integration of homekit rather than relying on the cloud for this data.

1 Like

If you add the thermostat directly to a HomeKit network, skipping the HA bridge, it does the same thing. You’ll get a temperature sensor that matches the average temperature of the sensors. There’s no sensor showing the temperature at the thermostat itself. It’s something on the Ecobee/HomeKit end…

1 Like

Ahh, that sucks. I figured that since it exposed all the remote temperatures it’d expose the main one as well. I guess I just have to stick to using that one point from the ecobee integration.

1 Like

Yeah it’s unfortunate. It also doesn’t create a humidity entity but it’s available as an attribute of the climate entity so I’ve always made a template sensor from that attribute. I was using the Ecobee integration for that one temp sensor but started using it’s weather forecast data as well, NWS requests were failing too often.

1 Like

If current_temperature is an average of all the remote sensors and you have all the remote sensors showing up in homekit… can’t you just deduce the remaining temperature using that? i.e. if there’s 1 thermostat and 2 remotes, the average is just

T_avg = (T + R_1 + R_2) / 3

So you should be able to just template out a sensor that’s

T = (T_avg * 3) - R_1 - R_2

I’m curious if that will work, since I’ve got an ecobee3lite integrated via homekit and am thinking about getting remote sensors for it.

I haven’t verified, but I suspect the average temperature sensor is the value that would show on the thermostat. This value isn’t just a simple average of every sensor, it’s only including the ones that are participating in the current mode. If follow me is turned on, it’ll be only the ones that are participating and occupied. This means you can’t be sure if it’s including the main thermostat temp at all, or how many and which sensors are being averaged together at any given time.

I’m experiencing the same issue, has anyone found a workaround for this?

  • 1 just finding this out… 3 years later and it’s still an issue? I’m assuming it just doesn’t expose this sensor via Homekit. Which is very odd, given it’s a temperature sensor on a thermostat!
    I’ve had Ecobee integrated for years through the cloud API. Wanting to eliminate cloud dependencies, but now I’ll have to keep both integrations around for things like this… Was hoping to drop the Ecobee integration after some testing, but this simply won’t do. I need to know the actual temperature at the thermostat.

Yep. Totally silly. I use the homekit integration for most things, but still the cloud one to get the temperature from the main thermostat.

Is this what we would be able to get, only because ecobee reporting as such via HomeKit? Or does the thermostat actually report the temperature at the thermostat via HomeKit also (, on top of the average temp), and somehow HA’s HomeKit integration not picking both up?

I mean, if we want something to change, should we be asking some developer at ecobee? Or should we be asking HA?

Maybe a test would be to connect the ecobee back to Apple’s Home app, and see what kind of temperature the Home app would be picking up.

My understanding is that ecobee doesn’t expose the themostat temperature at all to homekit, so nothing to be done on HA side. I’m not 100% sure though, and I don’t know if it’s consistent across all ecobee models.

I haven’t checked to see if the current_temperature is an average, but I know I don’t see a target_temperature — just temperature, target_temp_high, target_temp_low, min_temp, and max_temp.

I was hoping to try to configure/trigger the Ecobee modes using some the thermal_comfort integration’s values.

Looking over the attributes, I think that when heating (and perhaps cooling), the temperature attribute gets set to what I would expect for the target_temperature in the Climate integration. The target_temp_high and target_temp_low attributes are both set to null. I don’t think that the temperature attribute appears when there is no hvac_action in progress.

I haven’t used the Ecobee integration in several years, so I don’t know what that integration offers/exposes in terms of attributes. (For reference, I have an Ecobee4 with firmware 4.8.7.130 and use it via HomeKit.)

I toggled off the heating mode, and my Ecobee4 did switch the temperature attribute back to the standard target temperature for the thermostat’s programmed schedule.

I am not sure how I missed it when looking at the thermostat state in the Developer tools.

Here is my template sensor for computing the thermostat temperature. I only have a single remote sensor (“upstairs”). This can be adapted for multiple remote sensors.

- sensor:
  - name: "Ecobee main floor temperature"
    unique_id: ecobee_main_floor_temperature_xyzzy
    device_class: temperature
    unit_of_measurement: "°C"
    state: >
      {% set upstairs = states('sensor.ecobee_temperature_t6xz') | float(999) %}
      {% set current =  states('sensor.ecobee_current_temperature') | float(999) %}
      {{ iif(upstairs != 999 and current != 999, '%0.1f' | format(current*2 - upstairs), 'unavailable') }}

This only works if you always have both sensors participating though, right? In the event you have comfort settings with different sensors participating, or ‘follow me’ turned on, this doesn’t work anymore.

It would work if only including the participating sensors. I’m have not tested with follow me, and suspect it would not work if you’re using that feature.

Right. I just meant it doesn’t work if your participating sensors change throughout the day, either from follow me, or from having comfort settings which use different sensors. Your solution is a good idea though if you always use the same sensors throughout the day.