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

Thanks for reporting this.

This is a known issue & has already been fixed in the newest library. It is because the unused 8th bit is used to indicate DST (summer time).

It is not clear to me whether this issue was caused by the very latest evohome firmware, or only became apparent after DST started - I think the former, but it could have been the later.

Anyway, this error shouldn’t cause any issue with your system, as this payload is not used by HA.

hey all,
did something change in the attributes at all?
i had a load of templates for reporting the status based on “hvac_action” however i dont see this as an attirbute any more?

      radiator_status_bathroom:
        friendly_name: "Radiator Status: Bathroom"
        value_template: "{{ state_attr('climate.bathroom', 'hvac_action') }}"    

my bad, im an idiot

The hvac_action() property has been removed from Evohome zones as this data was inaccurate - the algorithm used to provide this data was not reliable, and there is no reasonable hope for a satisfactory alternative.

You will have no indication if a zone is actively calling for heat ( CURRENT_HVAC_* ), nor if the heat source is currently active. However, you will continue to have the hvac_mode() property, which will indicate if the heating is enabled, or not ( HVAC_MODE_* ).

This will be most obvious by the absence of this information in the UI.

There is no intervention required for this breaking change.

(@zxdavb - #38244) (evohome docs)

1 Like

its a shame this happened, i found that always worked well for me, to establish if a RAD was actually on or not. this was helpful to see what came on/off during the day or if a room was heating and a window was open (eg. close that window)

anyone got a workaround for if a rad is actually “on” on or not?

1 Like

I wrote the original code, and made the recent decision to remove it. You can see from the graphs above how inaccurate it is: see where the lightning strike is point - the room is clearly getting warming, but HA believes the zone is not calling for heat!

I should never have put this code into HA, sorry.

When I first wrote the hvac_action() code, I knew it was a bit ropey, but I thought I’d work out a way of making it accurate later on… This proved not to be the case.

The good news is that the upcoming evohome_rf integration will do this, flawlessly.

In the meantime, you can simply reproduce the original functionality in your automations (it will be just as accurate):

def hvac_action(self) -> Optional[str]:	
    """Return the current running hvac operation if supported."""	
    if self._evo_tcs.systemModeStatus["mode"] == EVO_HEATOFF:	
        return CURRENT_HVAC_OFF	
    if self.target_temperature <= self.min_temp:	
        return CURRENT_HVAC_OFF	
    if not self._evo_device.temperatureStatus["isAvailable"]:	
        return None	
    if self.target_temperature <= self.current_temperature:	
        return CURRENT_HVAC_IDLE	
    return CURRENT_HVAC_HEAT	

In short: the room is calling for heat if: a) the heating is on (and there’s a tweak for things like openwindow mode), and b) the target temp is lower than the current temp.

1 Like

Please see the new project here:
https://community.home-assistant.io/t/honeywell-evohome-via-rf-hgi80-hgs80

1 Like

Hi David,

I’m having a very strange problem which I don’t understand at all that I’m hoping you might be able to shed some light on. Every night at either 00:47 or 01:47, the heat in my daughter’s room is getting turned off, and as far as I can tell, there’s nothing in anything I’ve configured that is doing it. I have searched and none of my automations or schedules ever turn the heat off anywhere, they always turn it to minimum 12 degrees. Could you possibly take a look at the below snippet of when it happens and tell me any idea you may have what could be causing it?? Thanks.

2020-09-07 00:43:26 DEBUG (MainThread) [homeassistant.components.evohome] Status = {'locationId': '3184115', 'gateways': [{'gatewayId': '2937956', 'temperatureControlSystems': [{'systemId': '4187037', 'zones': [{'zoneId': '4187036', 'temperatureStatus': {'temperature': 24.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 25.0, 'setpointMode': 'FollowSchedule'}, 'name': 'Living Room'}, {'zoneId': '4217766', 'temperatureStatus': {'temperature': 21.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 19.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': 'Dining Room'}, {'zoneId': '4217767', 'temperatureStatus': {'temperature': 20.5, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 17.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': 'Entrance'}, {'zoneId': '4217768', 'temperatureStatus': {'temperature': 21.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 21.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': 'Laundry room'}, {'zoneId': '4217769', 'temperatureStatus': {'temperature': 22.5, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 21.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': "Sebastian's Room"}, {'zoneId': '4217770', 'temperatureStatus': {'temperature': 22.5, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 5.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': "Sophie's Room"}, {'zoneId': '4217771', 'temperatureStatus': {'temperature': 22.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 20.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': 'Guest Bedroom'}, {'zoneId': '4217772', 'temperatureStatus': {'temperature': 22.5, 'isAvailable': True}, 'activeFaults': [{'faultType': 'TempZoneActuatorLowBattery', 'since': '2020-08-26T04:39:38'}, {'faultType': 'TempZoneActuatorCommunicationLost', 'since': '2020-08-29T14:06:37'}], 'setpointStatus': {'targetHeatTemperature': 21.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': 'Master Closet'}, {'zoneId': '4217773', 'temperatureStatus': {'temperature': 22.5, 'isAvailable': True}, 'activeFaults': [{'faultType': 'TempZoneActuatorLowBattery', 'since': '2020-08-26T04:51:10'}], 'setpointStatus': {'targetHeatTemperature': 21.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-07T22:29:00Z'}, 'name': 'Master Bedroom'}, {'zoneId': '4217774', 'temperatureStatus': {'temperature': 19.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 17.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-08T00:29:00+02:00'}, 'name': 'Garage'}, {'zoneId': '4217775', 'temperatureStatus': {'temperature': 21.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 21.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-07T22:29:00Z'}, 'name': 'Office & Library'}, {'zoneId': '4217776', 'temperatureStatus': {'temperature': 23.0, 'isAvailable': True}, 'activeFaults': [{'faultType': 'TempZoneSensorCommunicationLost', 'since': '2020-08-25T19:45:28'}], 'setpointStatus': {'targetHeatTemperature': 21.0, 'setpointMode': 'TemporaryOverride', 'until': '2020-09-07T22:29:00Z'}, 'name': 'Master Bath'}], 'activeFaults': [], 'systemModeStatus': {'mode': 'DayOff', 'isPermanent': True}}], 'activeFaults': []}]}
2020-09-07 00:43:26 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=climate.sophie_s_room, old_state=<state climate.sophie_s_room=heat; hvac_modes=['off', 'heat'], min_temp=5.0, max_temp=25.0, preset_modes=['none', 'temporary', 'permanent'], current_temperature=23.0, temperature=21.0, hvac_action=idle, preset_mode=temporary, status=setpoints=this_sp_from=2020-09-06T21:30:00+02:00, this_sp_temp=21.5, next_sp_from=2020-09-07T06:30:00+02:00, next_sp_temp=23.0, zone_id=4217770, active_faults=[], setpoint_status=target_heat_temperature=21.0, setpoint_mode=TemporaryOverride, until=2020-09-08T00:29:00+02:00, temperature_status=temperature=22.5, is_available=True, friendly_name=Sophie's Room, icon=mdi:radiator, supported_features=17 @ 2020-09-07T00:30:02.310637+02:00>, new_state=<state climate.sophie_s_room=off; hvac_modes=['off', 'heat'], min_temp=5.0, max_temp=25.0, preset_modes=['none', 'temporary', 'permanent'], current_temperature=23.0, temperature=5.0, hvac_action=off, preset_mode=temporary, status=setpoints=this_sp_from=2020-09-06T21:30:00+02:00, this_sp_temp=21.5, next_sp_from=2020-09-07T06:30:00+02:00, next_sp_temp=23.0, zone_id=4217770, active_faults=[], setpoint_status=target_heat_temperature=5.0, setpoint_mode=TemporaryOverride, until=2020-09-08T00:29:00+02:00, temperature_status=temperature=22.5, is_available=True, friendly_name=Sophie's Room, icon=mdi:radiator, supported_features=17 @ 2020-09-07T00:43:26.838813+02:00>>

@scstraus Your best chance is to provide evohome_rf logs of the relevant time window (from before until after this strange event) the answer (if any) will be in there.

Okay, will PM them to you… I suspect it was a comms fault that appeared to be due to a low battery in a different zone. But time will tell.

EDIT: darn, looks like the HGI-80 wasn’t running because I unplugged it to plug something else into the USB port. I will have to get it going again in case I have the problem more, but about 8 hours after changing the battery in the room which was low, I stopped having this problem in this room… We will see.

I have just added my 10th zone which is a Honeywell round controlling 2x HR92. One other zone is controlled by the main unit and all other zones are just HR92’s. Adding all these zones was done over a couple of weeks and each new zone nicely popped up in HAss.Maybe after a restart was needed but they always would show up.

Now this last added zone (the one with the Honeywell Round) does NOT show up in HASS.

Any idea?

I think you mean you added a 10th zone, controlled by the evohome controller, with the TR87 as a sensor (a thermostat)?

Does it show up in the TCC website app as a 10th Zone? If so, I will need logs.

Yes correct. The TR87 is the sensor for that zone.

It all works fine in the connected home app and Evohome controller.

Happy to send you logs. Sorry for asking this but a) where can I find the logs for Evohome specific and b) how would you like to get them?

Look here: https://www.home-assistant.io/docs/configuration/troubleshooting/

Try something similar to:

grep evohome ~/home-assistant/.config/home-assistant.log | head -n 100

If you can’t see anything in the log, then try adding this to your configuration.yaml:

logger:
  logs:
    homeassistant.components.evohome: debug
    homeassistant.components.climate.evohome: debug
    homeassistant.components.water_heater.evohome: debug

Finally, submit an issue here: https://github.com/home-assistant/core/issues - select core.

hey!
not sure if i have done something wrong, however i cant seem to call the service for the hot water?

YAML

evohome:
  username: !secret EvoHomeUserName
  password: !secret EvoHomePassword

ive tried the following but neither seem to work.

water_heater.turn_on
water_heater.turn_on
entity_id: entity_id: water_heater.dhw_controller

image

i get this error too

AttributeError: ‘EvoDHW’ object has no attribute ‘async_turn_on’

2020-10-24 16:03:32 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection.548354343312] 'EvoDHW' object has no attribute 'async_turn_on'

image

If I tell you the answer - will you update the docs for me? :wink: Or at least submit an issue here

    async def async_set_operation_mode(self, operation_mode: str) -> None:
        """Set new operation mode for a DHW controller.

        Except for Auto, the mode is only until the next SetPoint.
        """
        if operation_mode == STATE_AUTO:
            await self._evo_broker.call_client_api(self._evo_device.set_dhw_auto())
        else:
            await self._update_schedule()
            until = dt_util.parse_datetime(self.setpoints.get("next_sp_from", ""))
            until = dt_util.as_utc(until) if until else None

            if operation_mode == STATE_ON:
                await self._evo_broker.call_client_api(
                    self._evo_device.set_dhw_on(until=until)
                )
            else:  # STATE_OFF
                await self._evo_broker.call_client_api(
                    self._evo_device.set_dhw_off(until=until)
                )

    async def async_turn_away_mode_on(self):
        """Turn away mode on."""
        await self._evo_broker.call_client_api(self._evo_device.set_dhw_off())

    async def async_turn_away_mode_off(self):
        """Turn away mode off."""
        await self._evo_broker.call_client_api(self._evo_device.set_dhw_auto())

sure, happy to open an issue, didnt want to do that if it wasnt a problem however :slight_smile:

Sorry - I should have been clear - the functionality is there, but it’s not clear in teh docs how to get what you want - the issue should be here to fix the docs

However, the service calls you use could equally be added…

Use:

water_heater.set_operation_mode

and

water_heater.set_away_mode

instead.

1 Like

Hi David,

I’m getting a new error any time I try to change the temperature of a zone in lovelace since .117.1. It is:

Unable to call service climate/set_temperature. Coroutine not allowed to be passed to HassJob

Here’s the traceback. Should I open an issue?

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 135, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1448, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1483, in _execute_service
    await handler.job.target(service_call)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 204, in handle_service
    await self.hass.helpers.service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 482, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 664, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 519, in _handle_entity_call
    await result
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 544, in async_service_temperature_set
    await entity.async_set_temperature(**kwargs)
  File "/usr/src/homeassistant/homeassistant/components/evohome/climate.py", line 241, in async_set_temperature
    await self._evo_broker.call_client_api(
  File "/usr/src/homeassistant/homeassistant/components/evohome/__init__.py", line 434, in call_client_api
    self.hass.helpers.event.async_call_later(1, self.async_update())
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 1160, in async_call_later
    return async_track_point_in_utc_time(
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 1134, in async_track_point_in_utc_time
    job = action if isinstance(action, HassJob) else HassJob(action)
  File "/usr/src/homeassistant/homeassistant/core.py", line 174, in __init__
    raise ValueError("Coroutine not allowed to be passed to HassJob")
ValueError: Coroutine not allowed to be passed to HassJob

This is the fix:

2 Likes