Refactored Honeywell evohome custom_component (EU-only)


#21

@PItax,

503 Server Error: Service Unavailable for url:” means the web server (or an intermediate device, such as a reverse proxy) is not behaving itself. See: https://httpstatuses.com/503

This is not caused by any deficiency in the custom component - the Honeywell servers are well-known to be relatively unreliable.

As an aside, this is such a common scenario (where the component code is blamed for an unreliable Honeywell web server) that I managed to convince the author of the client library (evohomeclient) to add the functionality to report HTML status error codes (i.e. anything other than 200, SUCCESS).

This custom component is using my fork of that (new) client library (FYI: the existing Honeywell component uses an ‘older’ version of evohomeclient, that does not report HTML status return codes - and v1 of the api only).

Failed to increase precision of temperatures via the v1 api. Continuing with v2 temps.” Almost certainly related to the above issue, but happy to investigate if not - come back to me when that error appears by itself.

Background: higher precision temps will be displayed as (say) 26.7 (PRECISION_TENTHS) instead of 26.5 (PRECISION_HALVES), although they are stored internally to the nearest 100th.

HTH, Dave


#22

Hi, why don’t you pull your improvements to the official component?


#23

If you mean why haven’t I improved the existing Honeywell component -

a) it is a real mess, because it has tried to abstract two distinct client apis (evohomeclient, EU/EMEA and somecomfort, US) into one component. This is a mistake because, in reality, they are two different systems (e.g. the US system can cool as well as heat) and they return completely different JSON! You wouldn’t expect Nest and Ecobee to be one component, would you?

b) it uses v1 of the evohomeclient api, missing out on some v2 features - I wanted to use v2

c) it exposes zones, and but not the controller (a temperature control system), and neither, IIRC, DHW

In short, I simply wasn’t brave (silly?) enough to even try!

If you mean why don’t I submit this custom_component to HA - I intend to! After, I also intend to create a PR to remove evohomeclient from the existing Honeywell component.

As an aside, my code is about 68K in size (approx 2,000 lines, but it will shrink by 1/3 when all the debugging code is removed), and the existing component is merely 15K (429 lines, and it consists of two distinct components stuck together, not merged, so approx 200 lines for EU, 200 for US).


#24

Yes, I was meaning to submit the component just to allow to newbie user to have the same solution without access to the forum.

I wasn’t aware of the differences between US and EU version. So many thank for you effort!

I just want to implement those valves into my centralized system ( we have a centralized system that push hot water to every radiator of the building) in order to close them (set away) if my device tracker’s state is not_home.

And with your custom component I can definitely achieve this!


#25

Yes you can!


#26

I would love any feedback on the latest component - looking to submit as a PR soon and needing to iron out bugs. Please report issues at: https://github.com/zxdavb/home-assistant

Directions

I am now working towards getting this component accepted into HA. Thus, the latest version of this component is at: https://github.com/zxdavb/home-assistant

You can clone that fork of HA, or just make the following changes to your exisiting installation of HA:

download this file into the corresponding folder (/components): https://raw.githubusercontent.com/zxdavb/home-assistant/dev/homeassistant/components/evohome.py
download this file into the corresponding folder (/components/climate): https://raw.githubusercontent.com/zxdavb/home-assistant/dev/homeassistant/components/climate/evohome.py
Change the REQUIREMENTS in /components/honeywell.py to be: ‘evohomeclient==0.2.7’ (instead of 0.2.5), and
Edit configuration.yaml as below. I recommend 60 seconds, and high precision, but YMMV with heuristics/schedules.


#27

you didn’t post configuration.yaml example?


#28

Sorry. The configuration.yaml hasn’t really changed.

# New Honeywell evohome component
evohome:
  username: !secret honeywell_username
  password: !secret honeywell_password
  scan_interval: 60
  high_precision: true
  use_heuristics: false
  use_schedules: false
  location_idx: 0

#29

Ok thanks testing now will post any bugs on github


#30
i tried this but get the below error when setting up

2018-08-18 23:03:01 ERROR (MainThread) [homeassistant.components.climate] Error while 
setting up platform evohome
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/homeassistant/helpers/entity_platform.py", line 129, in 
_async_setup_platform
SLOW_SETUP_MAX_WAIT, loop=hass.loop)
File "/usr/lib/python3.5/asyncio/tasks.py", line 405, in wait_for
return fut.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "/usr/local/lib/python3.5/dist-packages/homeassistant/components/climate/evohome.py", line 
58, in setup_platform
slaves.append(EvoZone(hass, client, zone_obj_ref))
File "/usr/local/lib/python3.5/dist-packages/homeassistant/components/evohome.py", line 1062, in 
__init__
super().__init__(hass, client, objRef)
File "/usr/local/lib/python3.5/dist-packages/homeassistant/components/evohome.py", line 487, in 
__init__
self._schedule['scheduleExpires'] = datetime_now
UnboundLocalError: local variable 'datetime_now' referenced before assignment

#31

I am stuck at a campsite in Cornwall, UK. Could you turn schedules off until I can get back to get back home. Have use_schedules = false in your configuration file, as per my example, above. it

TBH, I made a bunch of changes to how schedules are
handled and I haven’t tested it!


#32

New Home Assistant user here.

I had the custom component working. With Hassio how can I get the l latest version working? I dont seem to have a components folder. TIA


#33

I’m not very familiar with the hassio.

However I think if you just copy the two files from the git, I think you can continue to treat them as custom components.

Just don’t forget to make that change to honeywell.py.


#34

Getting the following when i tried the two new files in custom_components

2018-08-23 10:01:50 WARNING (SyncWorker_16) [custom_components.evohome] setup(): Calling API [4 request(s)]: client.init()…

2018-08-23 10:01:53 ERROR (MainThread) [homeassistant.loader] Error loading custom_components.climate.evohome. Make sure all dependencies are installed

Traceback (most recent call last):

File “/usr/local/lib/python3.6/site-packages/homeassistant/loader.py”, line 94, in get_component

module = importlib.import_module(path)

File “/usr/local/lib/python3.6/importlib/init.py”, line 126, in import_module

return _bootstrap._gcd_import(name[level:], package, level)

File “<frozen importlib._bootstrap>”, line 994, in _gcd_import

File “<frozen importlib._bootstrap>”, line 971, in _find_and_load

File “<frozen importlib._bootstrap>”, line 955, in _find_and_load_unlocked

File “<frozen importlib._bootstrap>”, line 665, in _load_unlocked

File “<frozen importlib._bootstrap_external>”, line 678, in exec_module

File “<frozen importlib._bootstrap>”, line 219, in _call_with_frames_removed

File “/config/custom_components/climate/evohome.py”, line 12, in <module>

from homeassistant.components.evohome import (

ModuleNotFoundError: No module named ‘homeassistant.components.evohome’

2018-08-23 10:01:53 ERROR (MainThread) [homeassistant.loader] Unable to find component climate.evohome

2018-08-23 10:01:53 ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform climate.evohome: Platform not found.


#35

I don’t use hass IO, but it might be pretty easy to fix: Changle line 12 of climate/evohome.py to read:

from homeassistant.custom_components.evohome import (

instead of:

from homeassistant.components.evohome import (

or something like that?


#36

Hi, I’ve followed the instructions re:installation of the evohome.py files under /config/custom_components, and I’m running hassio so currently unable to find the location of the components directory to make the change identified above. Any guidance?


#37

Sorry, I don’t use hassio!


#38

No worries, i’ve done some searching about and discovered that I need to ssh as root on port 22222 to access the docker container to get to the code. That said it turns out that if I can get a copy of the honeywell.py file I can put an edited version in the /custom_components directory to achieve the same thing. Now just need to find the source code for honeywell.py…

Btw I have a full Evohome (12 zones) with hot water running for the last 2 years so happy to help in testing if required. I’m moving from Vera to HA so keen to get a fully working environment.


#39

solved that element, by going back to the honewell component documentation and taking a copy from the source code definition, installed in custom_components/honeywell.py with the REQ updated. Have also updated the evohome.py code to point at the custom_components director per the instructions above.

Getting the following error;
Testing configuration at /config Failed config General Errors: - Component not found: evohome Successful config (partial)

14:18 components/hassio/init.py (ERROR)

Could not render template Hot Water Actual, the state is unknown.

14:10 components/sensor/template.py (WARNING)

Could not render template Heating Demand, the state is unknown.

14:10 components/sensor/template.py (WARNING)

Could not render template Heating Actual, the state is unknown.

14:10 components/sensor/template.py (WARNING)


#40

If you use mine, then the necessary change is already there (it will be part of the PR)…
https://raw.githubusercontent.com/zxdavb/home-assistant/dev/homeassistant/components/climate/honeywell.py

It shouldn’t affect honeywell.py to use the updated evohomeclient library (i.e. v0.2.7), as only v2 of the api has changed (which my component uses) and v1 has not changed at all.