How do I hack the Ecobee to control Home Assistant instead of the other way around?

I have been running HA for 3 years. The other day, I stumbled across this great idea for the Ecobee 3 lite on Linus Tech tips:

With the Ecobee 3 Lite, you can lie to it exactly like they say on the video. This is exactly what I need, a friendly front end to Home Assistant for our heating that isn’t physically connected to our heat/cooling at all. In fact, you can see LTT setting Home Assistant Developer State in the video here:

  • I have the Ecobee 3 Lite working with HA
  • They sync perfectly
  • I am lying to the Ecobee about devices being connected (there are no wires other than power)

The only problem I have is understanding how to do this in HA - that is - how exactly do I get the Ecobee to control HA through the Thermostat module to control all my other devices? There is not enough of a code snippet there for me to fully understand exactly how they are going about it. I am almost there, but I am missing the step where I get info from the thermostat (or the thermostat card in HA) and then pivot off of that to actually trigger my heat or mini-splits.

Can someone explain the last step, of using the Ecobee and the Thermostat card to be read in as input and output to my actual devices?

(And no, I cannot wire the Ecobee up to my devices - this is why I chose this method of integration in the first place, because the method described in the video does exactly what I need. My heating setup is nearly identical to Linus’s in the video)

I think you misunderstood the video.
The ecobee is not acting as a “frontend” to HA, here.

What LTT is doing is making the ecobee thinks it is connected to an AC. As such, the ecobee goes to cooling mode when it thinks it is needed.
Though (I assume) the ecobee integration, this is is captured in HA which allows them to actually turn on the AC, which is connected somehow to HA and not at all to the ecobee.

EDIT: Unless you consider the display of the ecobee as a thermostat frontend for HA. Then I guess it can be seen as a frontend, but probably a quite expensive one for the purpose.

They are reading the values from the device itself in the Developer console - I am able to do the same. I can make changes in the Ecobee, and those changes are reflected in HA for this entitity. So, if I say “Increase Temp” in the Ecobee, the developer console for the Ecobee shows a request for heat and the target temp.

I just need to go to the next step an have HA read in these values and then trigger my heating/cooling/fans as required. Thats the component I am currently unable to figure out:

Well, I guess through the ecobee integration, no?

Yep, I have the ecobee integration going. The whole things works.

It’s great in fact.

The problem is that the Ecobee thinks its wires are connected to the actual devices, but they are not. So, when the state changes in the Ecobee I need to have Home Assitant read the state change and trigger the call for heat for example.

So, that’s what I need to figure out, is how to read the Ecobee such that when it calls for heat/cooling, Home Assistant triggers the appropriate device to perform the function. Right now, I am just trying to get it to trigger the heat to go on with my Tasmota switches, which are connected to the boiler heat (very similar to the video).

According to the video, triggering on the hvac_action attribute is what you need.
You seem to know your way, so I’m not too sure what is blocking you, tbh

The part I am missing is getting the heat to turn on.

I need to figure out how to accept the value from the Ecobee to turn on the Tasmota Switch. It is probably via scripting, but I keep googling the wrong terms.

That, or perhaps an automation based off of each value, but that feels like a kludge.

Would a trigger of ‘heat’ and a trigger of ‘cooling’ with a choose statement on the action not solve the need for two automations?

I also noted that the video indicates they are using HomeKit so there is no cloud interface.

I also wonder it a temperature sensor and a tablet in each room using the generic thermostat would not be a cheaper alternative than an ecobee lite.

Something like

- id: My heater
  trigger:
  - entity_id: climate.my_ecobee
    platform: state
    attribute: hvac_action
  condition: []
  action:
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ trigger.to_state.attributes.hvac_action == "heat"}}'
      sequence:
      - service: switch.turn_on 
        entity_id: switch_my_tasmota_relay
    default:
    - service: switch.turn_off 
      entity_id: switch_my_tasmota_relay

Well yeah, my original point. Unless you want the display / voice control and wahtnot of the ecobee, you can do the same in pure HA with a couple sensors

Yeah, this will work perfectly.

And yes, I have other sensors that can do this - the Ecobee has one feature that relying on sensor state and node-red, ha GUI, or what not does not:

WAF.

The wife wants physical thermostats. Not to use her cell phone.

1 Like

So far, it seems to work - there is about a 2 min lag from when you adjust the thermostat before Home Assistant notices the state change to call for heat, but it seems to work just fine:

alias: Main Floor Ecobee Heat On
description: ''
trigger:
  - platform: state
    entity_id: climate.living_room
    to: heat
condition: []
action:
  - service: switch.turn_on
    target:
      entity_id: switch.heat_zone_3
mode: single

I am going to do this to control a swamp cooler. In the video they mention that using the Home Kit integration for ecobee avoids the cloud. How does that work? Also, is there any way to detect not just cooling but stage 1 and stage 2 cooling?

The Ecobee works with Homekit, and Home assistant works with homekit. So the Ecobee can talk directly to Home Assistant.

Basically, it just becomes a wall thermostat that tries to manipulate “virtual” AC or Heat.

It isn’t that it is able to detect how stuff is working, but rather, that you can lie to it by communicating directly from Home Assistant. So if you can get Stage 1 and Stage 2 from your swamp cooler, and control it, you can integrate that with the Ecobee.

Thanks for the reply. I would like stage 1 and stage 2 to control the swamp cooler’s low and high fan speeds respectively. I already have automations running based on when ecobee goes into sleep climate setting.

I see the Homekit integration, but I’ve never used it. I understand that it is working virtually, and that sounds way easier than what I was thinking I had to do. I’m not finding much on how to set it up, got a link to a good tutorial?

I went a round about route with the developer kit. You can just install the Ecobee Integration from:

Settings → Integrations → Add Integration → Ecobee

I went and followed this for the API key:

I am not sure if you actually need the API key or not, but I got it working.

With that done, you can go into Developer tools and States and see everything that the Ecobee sees - and what it is trying to do.

You have to go into the ecobee setup itself, and “turn on all the things”. That is, tell it you have all kinds of heaters and AC, then it will try to turn those things on with the wires in back, but they are not hooked up to anything. Instead, you read the values from the Ecobee directly for what it wants to do, then trigger Home Assistant to actually perform the action.

Ecobee senses heat, calls for AC —> Home Assistant sees call for cooling → Home Assistant script/automation starts cooling.

When you complete the Ecobee Integration you should see a new climate entity like this in Developer Tools:

I named mine Living Room, because that is where it is.

Once you have that, you can read all the states off of the object and use them for scripting and automations:

1 Like

Here are the two scripts I use (still working on my new Mini-Splits which just got installed) to call the boiler for heat on the same floor as the Ecobee:

alias: Main Floor Ecobee Heat On
description: ''
trigger:
  - platform: state
    entity_id: climate.living_room
    to: heat
condition: []
action:
  - service: switch.turn_on
    target:
      entity_id: switch.heat_zone_3
    data: {}
mode: single

And to turn off:

alias: Main Floor Ecobee Heat Off
description: ''
trigger:
  - platform: state
    entity_id: climate.living_room
    to: 'off'
    from: heat
condition: []
action:
  - service: switch.turn_off
    target:
      entity_id: switch.heat_zone_3
    data: {}
mode: single

I figured how to differentiate between Stage 1 and Stage 2 cooling. If you look at the equipment running attribute, it says compCool1,fan when running on Stage 1 and compCool2,fan when running in Stage 2. I made triggers with conditions for that attribute and it works like a charm. I even look for when it changes from stage 1 to stage 2.

Thanks for your help!

im trying to do the same thing but its not working are you still active on here?

I got it working with the above, LTT also posted an update where they finally put this into use IRL.

Took them long enough!

I have had to stop using my automation though, because something has gone south with my 2.4ghz network from unifi. My tasmota devices are non-functional for reasons I cannot fathom. So at the moment, I am not using the feature.

OK, I am able to get the automation to trigger based on a change of action, but how can I view that actual names of the states, for example “heat” vs. “heating”, or “idle” vs. “off”.