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

Is there a way that you can query the API to find when the zone is actually calling for heat from the boiler? I believe Honeywell don’t make this info readily available.

which is a similar question to:

… the answer is:

value_template: "{{ state_attr('climate.main_room', 'status').temperatureStatus.temperature }}"

Next release of official HA version of evhome will have zones & is to be included with v0.84.

HA v0.83 is about to be released: https://pypi.org/project/homeassistant/#history, and releases take about 2 weeks.

After that, I will add DHW, high-res temps, etc.

2 Likes

Thanks for your work :slight_smile:

thanks mate awesome work here!

Are there HA experts who could knock up an automation to do the following:

  • decrease target temps of all zones by 1C when some event is triggered

Sort of like an eco-lite mode. I know it’s possible, but I don’t have the time to make it happen…

FWIW, the long-term plans for the official HA component include adding a) high-precision temps, b) DHW, and c) schedules.

There is some functionality that cannot be included in the official component, but I plan to convert the custom_component to a ‘companion’ that fills the gap between what HA is willing to do, and what evohome can do (e.g. the ‘reset’ operation, or to set a temp for a period of time, then revert back to schedule).

I will be starting up again after 0.84 is released.

1 Like

Very much looking forward to 0.84 then, but it’s working quite well for me already… I plan to start working on some automations like you describe, but first I have to revamp my setup and move it to a new machine and get z-wave window sensors hooked up (I would like to override the not-so-great window detection built in with something that’ actually detecting open windows but without the cable required by evohome).

Also, I just ordered a HGI80 so happy to test if you get that up and running. Local solutions are always preferable.

If you have DHW with your evohome, I need some help please (I do not have DHW):

Question: What do you expect HA to allow you to have/do with respect to evohome’s DHW controller?

It would help if I show you the available data:

self._status = {
	'systemId': '999999',
	'dhw': {
		'dhwId': '2515873',
		'temperatureStatus': {
			'temperature': 44.0,
			'isAvailable': True
		},
		'stateStatus': {
			'state': 'Off',
			'mode': 'FollowSchedule'
		},
		'activeFaults': []
	},
	'activeFaults': [],
	'systemModeStatus': {
		'mode': 'Auto',
		'isPermanent': True
	}
}

Suggestions include (and are probably limited to):

  • track current temp over time
  • turn off/on/auto

Hi Dave,

First off, I just want to say thank you for working on this excellent component for HA, I really do appreciate all the effort you put in to this!

Regarding DHW, being able to track current temp and target will be useful, as well as what state and mode it is currently in.

On a very separate note, I’m curious to know if it may be possible to display your current heating schedule as a potential feature in the future, and perhaps save current settings into a profile that can then be applied at different times of the year using HA by any chance?

Regarding DHW, I am limited by the functionality of the underlying API, and the obligations of HA.

The v2 API provides for only these 3 things:

  1. report current temperature (not target temp) / state (on/off)
  2. report current mode (follow schedule, always on, always off)
  3. set current mode (permanently, or for a period of time)

The v1 API may allow to set target temp, but this is not clear (in fact, is doubtful) & will require testing (and R/W access to someone’s account as I don’t have DHW).

Regarding HA, this is more difficult than it should be - currently, water_heaters have no concept of current_temperature! Neither (strictly speaking) can it tell you if a water_heater is on, or not!

evohome devices have a property, device_state_attributes that extends the prescribed state_attributes. In it you’ll (currently) find the status of the devices as reported by the client API (i.e. from Honeywell’s website):

value_template: "{{ state_attr('climate.main_room', 'status').temperatureStatus.temperature }}"

To get an idea of what’s available, do the following:

cat home-assistant.log | grep homeassistant.core | grep "status="

Later, I will add the option to expose the schedules:

cat home-assistant.log | grep homeassistant.core | grep "schedule="

And long term, integration with something like Heaty.

Just upgraded to 0.84 and my climate panel has now disappeared from my overview.
In my groups.yaml I refer to entity climate.home, and in my configuration.yaml I have

evohome:
username: [email protected]
password: secretsquirrel
location_idx: 0

Pre-0.84 I did see the climate panel. I do see some errors in the log but nothing to do with climate, honeywell or evohome.

Any advice would be appreciated

Just found in my States screen that I do see all my zones - so it is just help on getting some kind of sensible, default display going that I need

So I added to my configuration.yaml:

history_graph:
gr1:
name: Bathroom Temperatures
entities:
- climate.bathroom
hours_to_show: 23
refresh: 60
etc

then to my groups.yaml:

heating:
view: true
name: heating
entities:
- history_graph.bath_room_temperatures
etc
and I do see a Heating page, but it is blank!

Hi. first of all many thanks @zxdavb for building and maintaining this!
I have been a happy user for a few months now.

Lately I have been having the following two related issues:

  1. every 7 minutes or so I get a sensor update error (in between, all zones seem to update fine). “_mb1” is the name of my controller in this case, but I did some tests and the error always seems to report the first sensor (alphabetically) that is queried.

  2. When I trigger an action (e.g. set a temperature, either through automation or the HA frontend) I get an “Error: task exception was never retrieved”. I get this error every time something is triggered, but sometimes the action will pass through to my evohome and sometimes not. in automations where I trigger multiple zones in one call this will often lead to only some of the zones being set.

Any ideas as to what might be causing this or how to resolve? Already tried factory-resetting the evohome…
Honeywell phone app seems to work fine btw.

Config:

evohome:
    username: <username>
    password: <password>
    high_precision: false
    use_heuristics: false
    use_schedules: false    
    scan_interval: 120
    location_idx: 0

Error log entries for issue 1

Update for climate._mb1 fails
2:35 PM deps/lib/python3.6/site-packages/evohomeclient2/location.py (ERROR)

Update for climate._mb1 fails
2:28 PM deps/lib/python3.6/site-packages/evohomeclient2/location.py (ERROR)

Content of the error message for issue 1

Sat Dec 15 2018 14:35:30 GMT+0100 (Central European Standard Time)

Update for climate._mb1 fails
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connection.py", line 171, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
  File "/usr/local/lib/python3.6/dist-packages/urllib3/util/connection.py", line 56, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/usr/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 343, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 849, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connection.py", line 314, in connect
    conn = self._new_conn()
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connection.py", line 180, in _new_conn
    self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x7fe9a421e5c0>: Failed to establish a new connection: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/local/lib/python3.6/dist-packages/urllib3/util/retry.py", line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='tccna.honeywell.com', port=443): Max retries exceeded with url: /WebAPI/emea/api/v1/location/3332155/status?includeTemperatureControlSystems=True (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fe9a421e5c0>: Failed to establish a new connection: [Errno -2] Name or service not known',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/homeassistant/helpers/entity.py", line 221, in async_update_ha_state
    await self.async_device_update()
  File "/usr/local/lib/python3.6/dist-packages/homeassistant/helpers/entity.py", line 349, in async_device_update
    await self.hass.async_add_executor_job(self.update)
  File "/usr/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/frenk/.homeassistant/custom_components/evohome.py", line 1079, in update
    self._update_state_data(evo_data)
  File "/home/frenk/.homeassistant/custom_components/evohome.py", line 947, in _update_state_data
    client.locations[loc_idx].status()[GWS][0][TCS][0])
  File "/home/frenk/.homeassistant/deps/lib/python3.6/site-packages/evohomeclient2/location.py", line 22, in status
    r = requests.get('https://tccna.honeywell.com/WebAPI/emea/api/v1/location/%s/status?includeTemperatureControlSystems=True' % self.locationId, headers=self.client.headers())
  File "/usr/local/lib/python3.6/dist-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='tccna.honeywell.com', port=443): Max retries exceeded with url: /WebAPI/emea/api/v1/location/3332155/status?includeTemperatureControlSystems=True (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fe9a421e5c0>: Failed to establish a new connection: [Errno -2] Name or service not known',))

Error log entry for issue 2

Sat Dec 15 2018 14:21:44 GMT+0100 (Central European Standard Time)

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connection.py", line 171, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
  File "/usr/local/lib/python3.6/dist-packages/urllib3/util/connection.py", line 56, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/usr/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 343, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 849, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connection.py", line 314, in connect
    conn = self._new_conn()
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connection.py", line 180, in _new_conn
    self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x7fe9a42fa898>: Failed to establish a new connection: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/local/lib/python3.6/dist-packages/urllib3/util/retry.py", line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='tccna.honeywell.com', port=443): Max retries exceeded with url: /WebAPI/emea/api/v1/temperatureZone/3263859/heatSetpoint (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fe9a42fa898>: Failed to establish a new connection: [Errno -2] Name or service not known',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/homeassistant/helpers/service.py", line 279, in _handle_service_platform_call
    await func(entity, data)
  File "/usr/local/lib/python3.6/dist-packages/homeassistant/components/climate/__init__.py", line 574, in async_service_temperature_set
    await entity.async_set_temperature(**kwargs)
  File "/usr/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/frenk/.homeassistant/custom_components/evohome.py", line 1504, in set_temperature
    self._set_temperature(temperature, until)
  File "/home/frenk/.homeassistant/custom_components/evohome.py", line 1464, in _set_temperature
    self._obj.set_temperature(temperature)
  File "/home/frenk/.homeassistant/deps/lib/python3.6/site-packages/evohomeclient2/zone.py", line 64, in set_temperature
    self._set_heat_setpoint(data)
  File "/home/frenk/.homeassistant/deps/lib/python3.6/site-packages/evohomeclient2/zone.py", line 70, in _set_heat_setpoint
    r = requests.put(url, json.dumps(data), headers=headers)
  File "/usr/local/lib/python3.6/dist-packages/requests/api.py", line 131, in put
    return request('put', url, data=data, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='tccna.honeywell.com', port=443): Max retries exceeded with url: /WebAPI/emea/api/v1/temperatureZone/3263859/heatSetpoint (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fe9a42fa898>: Failed to establish a new connection: [Errno -2] Name or service not known',))

Hmmm…

There seems to be a few bugs with v0.84… The forums are full of chatter about it…

Is it a Lovelave issue? You could try turning Lovelace off (from web UI, hamburger menu, info icon (i inside a circle), and scroll down. It’s there somewhere…

TBH, I am not 100% sure, but it seems to me there’s a (temporary/intermittent) issue surrounding establishing a HTTPS connection [ see: getaddrinfo() ]? In fact, strictly speaking, I think it’s the step before a socket is created…

_socket.getaddrinfo(host, port, family, type, proto, flags)

The host name is pretty static (and is set by evohome-client), so… Is it DNS related?

You’re not using DNSSEC / hosts files / etc. are you?

After the latest minor upgrade to o.84.2 my heating graphs sprang into life!

Is there a way to make them wrap in the available space? They currently just appear in a list of centered vertical blocks no matter how wide the browser window is.

NB NOT using Lovelace

Sorry, I am not the person to answer that question, I just don’t know.

@scstraus How did you get those tmp graphs to wrap the screen as per your screenshot earlier in this thread?

Could you share a snippet from your groups.yaml that achieved this view? I have all my graphs just showing in a single, centered column from the config below in my groups.yaml:

heating:
view: true
name: heating
entities:
- history_graph.hall_temperatures
- history_graph.lounge_temperatures
- history_graph.front_room_temperatures
- history_graph.kitchen_temperatures
- history_graph.conservatory_temperatures
- history_graph.shower_room_temperatures
- history_graph.bath_room_temperatures
- history_graph.master_bed_room_temperatures
- history_graph.blue_room_temperatures
- history_graph.gold_room_temperatures
- history_graph.nursery_temperatures

Never mind - I figured it out - I just needed to nest the groups:

e.g.
heating:
view: true
name: heating
entities:
- group.heat_hall
etc
heat_hall:
name: Hall temperatures
entities:
- history_graph.hall_temperatures
etc

Can anyone tell me why the graphs for different zones contain gaps in different places? Does this represent comms loss or is it just a graphics glitch?