Official Honeywell evohome/Round Thermostat integration (EU-only)

Hi all, sorry if this is a basic question. I used to (pre 0.96) be able to set operation_mode = ‘manual’ if I wanted to do a permanent override, and then set it back to auto to go back to the controller’s schedule. How do I do this now it’s hvac_mode? Will this still work? Or do I have to do something with Permanent override? In which case how do you do this within the climate service calls? Thanks!

@freekeys Can you be more specific with your question?

For example, is your system multi-zone (evohome), or single zone (e.g. Round Thermostat)? Are you trying to override a zone, or the whole house?

Assuming you’re evohome, and trying to set the mode on a zone (from memory):

  • if a zone’s HVAC mode is set to Off, then it’s a PermanentOverrideto minimum temp
  • otherwise overrides are via PRESET and until the next setpoint (if one is available), TemporaryOverride

There is not support from HA fro supplying a time_until when setting modes/temps. This can be achieved with services calls, but this integration does not yet have any such implemented - I would be happy to review PRs.

Anyway, the code is:

    async def async_set_temperature(self, **kwargs) -> None:
        """Set a new target temperature."""
        temperature = kwargs["temperature"]

        if self._evo_device.setpointStatus["setpointMode"] == EVO_FOLLOW:
            await self._update_schedule()
            until = parse_datetime(str(self.setpoints.get("next_sp_from")))
        elif self._evo_device.setpointStatus["setpointMode"] == EVO_TEMPOVER:
            until = parse_datetime(self._evo_device.setpointStatus["until"])
        else:  # EVO_PERMOVER
            until = None

        await self._call_client_api(
            self._evo_device.set_temperature(temperature, until)
        )

    async def async_set_hvac_mode(self, hvac_mode: str) -> None:
        """Set a Zone to one of its native EVO_* operating modes.

        Zones inherit their _effective_ operating mode from their Controller.

        Usually, Zones are in 'FollowSchedule' mode, where their setpoints are a
        function of their own schedule and the Controller's operating mode, e.g.
        'AutoWithEco' mode means their setpoint is (by default) 3C less than scheduled.

        However, Zones can _override_ these setpoints, either indefinitely,
        'PermanentOverride' mode, or for a set period of time, 'TemporaryOverride' mode
        (after which they will revert back to 'FollowSchedule' mode).

        Finally, some of the Controller's operating modes are _forced_ upon the Zones,
        regardless of any override mode, e.g. 'HeatingOff', Zones to (by default) 5C,
        and 'Away', Zones to (by default) 12C.
        """
        if hvac_mode == HVAC_MODE_OFF:
            await self._call_client_api(
                self._evo_device.set_temperature(self.min_temp, until=None)
            )
        else:  # HVAC_MODE_HEAT
            await self._call_client_api(self._evo_device.cancel_temp_override())

    async def async_set_preset_mode(self, preset_mode: Optional[str]) -> None:
        """Set the preset mode; if None, then revert to following the schedule."""
        evo_preset_mode = HA_PRESET_TO_EVO.get(preset_mode, EVO_FOLLOW)

        if evo_preset_mode == EVO_FOLLOW:
            await self._call_client_api(self._evo_device.cancel_temp_override())
            return

        temperature = self._evo_device.setpointStatus["targetHeatTemperature"]

        if evo_preset_mode == EVO_TEMPOVER:
            await self._update_schedule()
            until = parse_datetime(str(self.setpoints.get("next_sp_from")))
        else:  # EVO_PERMOVER
            until = None

        await self._call_client_api(
            self._evo_device.set_temperature(temperature, until)
        )

Thanks for the quick response @zxdavb . So I have a few use cases, all of which are on one or more evohome zones:

  1. Guest mode on or off. Guest mode on should set the guest room radiator to follow schedule. If guest mode goes off then the radiator should be set to off (or a permanent override at say 15C)

  2. Occupied on/off. If I go out I want (most of) my rads to set to 15C. When I’m back it should follow schedule.

  3. If my TV is on then set living room to 22C, if it goes off the follow schedule.

How would you recommend I do this? Thanks!

Ah so I think I’ve mostly figured this out now… one bit I’m not clear on. Is it possible to set a permanent override to a specific temperature (i.e. not off / 5C but for example 22C)?

Set temp first (which will be until next scheduled setpoint), then switch to permanent override.

Got it, thanks!

I’ve been doing things like this - not sure if it’s a good approach:

When I’m at my other workplace, I’m not in my study at home, so:

 - service: climate.set_temperature
      data:
        entity_id: climate.study
        temperature: 12

When I come back, I want to go back the scheduled temperature:

    - service: climate.set_temperature
      data_template:
        entity_id: climate.study
        temperature: "{{ state_attr('climate.study', 'status').setpoints.current.temperature|float }}"
    - service: climate.set_preset_mode
      data:
        entity_id: climate.study
        preset_mode: "none"

I think this works - there may be a better way?

For those of yo with a HGI80 (or similar)…

… something’s coming!

Great news… Is this likely to land before Christmas ?

@GadgetUK, @scstraus, @xAPPO & others:

2 Likes

Here is an indication how inaccurate the shaded are is - it is very underestimated. The upper graph is evohome, the lower graph is from the new evohome_rf integration.

Notice the room getting hotter where the red ‘arrow’ is pointed.

I know why this data is inaccurate - the problem is fixing it. If I can’t come up with a reasonable solution, I will have to remove this feature.

People have asked me, so here’s teh answer:

The reason why evohome is inaccurate is because it doesn’t take into account the 0.5C dead band

  • when calling for heat, the zone continues to call for heat until it is 0.5C warmer than the setpoint and,
  • when losing temperature, the zone wont resume calling for heat until it is 0.5C cooler than the setpoint

The ‘when’ qualifiers are important! That is, it is not sufficient for the zone to be 0.1C cooler that its setpoint fro a call for heat to be made! For this specific reason, it may be difficult to modify evohome to make this information more accurate.

If you look at the following post, you see that evohome_rf indicates more than just wether the zones is calling for heat - it also indicates how strong that call is (0-100%):

Coming soon:

2 Likes

… and:

2 Likes
1 Like

I really like what I saw here and I would like to ask if you think that among other TRV options (Tado, EQ3 Max! Neatamo or some Fibaro stuff) Honeywell option is still the one you would go with when you would have an opportunity to start over? My scenario is 3 rooms - bathroom with one heater, bedroom with one and living room with two. I would like to have some simple day/night automation and possibly no cloud (which is not the case for Evohome I believe).

I think with the HGI-80 integration, it will be the near perfect solution, where you can run it cloud, local only with honeywell controller, or local only without honeywell controller. It will cover pretty much any scenario. Even without HGI-80 it works very well from cloud component (though honeywell does not have perfect uptime, it’s pretty good), I very much like having the controller at home in case I screw up something on the home assistant side… So yes, I would repeat this purchase. That’s largely thanks to @zxdavb

1 Like

That is great to hear. So I would need something like let’s say Honeywell HR92 and the HGI80 (or similar) to act as evohome controller? Hmm…I need to look at that closely, quick google gave me prices for the controller around twice as much as for one TRV.

Yes he’s working on HGI-80 integration now. Still early days but looks like it will work. Scroll up in the thread, he links to it.

I did look through the thread, just wondering about opinions of current users if they would switch to some different TRV (system in general) for their use case :slight_smile: I would prefer something local without cloud, that’s where evohome is a questionmark for me :slight_smile: