Honeywell Evohome - Introduction & Installation

Posted on
Thu Dec 31, 2015 6:29 pm
howartp offline
Posts: 4559
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Honeywell Evohome - Introduction & Installation

Introducing the Honeywell Evohome plugin

Having purchased an Evohome system for Christmas, I knew there wasn't a plugin available for it, but I also knew there was an API on github that another Evohome user had reverse-engineered and documented. The API is here for anyone interested.

As the API was so easy, it was begging to be turned into a plugin, so I thought I'd have a go; I've coded in various languages for 20 odd years, and I dabbled in the Indigo plugin world last year, so I thought I'd give it a go.

For those wanting to jump straight in, the latest download link is always at the bottom of this post.

What this isn't
This plugin is not for the Honeywell Wi-Fi Smart Thermostats. Nick Lagaros has written a plugin for those HERE.

Features
  • Thermostat device per zone in Evohome
  • Each device shows current temperature, target setpoint, and current mode (on schedule, overridden, economising...)
  • Controller device showing system mode and other system-wide data
  • Activate Evohome modes (ie 'Quick actions')
  • Increase/decrease or set temperature of a zone
  • Schedule when / how often you want data to refresh (using regular Indigo schedules)
  • All device states are designed to be usable in control pages and triggers
  • Backup and restore schedules - see update 1.0.7 below
  • Data dump (in case you have devices I don't have and I need to see how they're presented in the API)
  • Added basic support for Hot Water boilers linked to Evohome - see update 1.0.11 below
  • Added new log level "User actions only" - this only logs actual actions or changes (increase temp, change zone etc)
  • Fixed bug for 'Decrease zone temperature' action, which previously threw a 'key not found' error

Coming soon
  • Boiler relay (virtual state) - the actual relay state isn't available from the API, but I intend adding a virtual state if any zone is cooler than its target temperature.
  • Allow renaming the controller device

Not possible
There are some features of Evohome that would be nice to implement, but they simply aren't exposed by Honeywell and therefore we cannot access them via any API methods:
  • Outside weather temperature
  • Boiler relay state (this isn't available directly, but if you look at the icon for each zone, it turns 'on' if the temperature is cooler than the setpoint, which in theory means the boiler should be lit.

Installation notes
When you install the plugin, it will ask for your username and password for your Evohome system. It will then connect to Evohome's servers (the same as your phone does if you use their app) and pull down the data - this creates one controller device, and one device per thermostat.

You can rename the thermostat devices to whatever you'd like, but - for now - please don't rename the controller because it looks for it by name at the moment.

After the first data download, the plugin will never refresh the data unless/until you tell it to. There is an Action for this (which you can schedule to your needs), or it happens 5 seconds after you issue any zone or system command such as increase temperature or set 'away' mode, in order to show the correct data.

Download link - v1.0.11 BETA

Evohome.IndigoPlugin

A couple of Indigo users have been using earlier 'alpha' versions of this plugin as I've developed it, and not come across any major bugs (with the exception of the one noted above). However my coding isn't always as tight as it should be so I'm keeping it in 'beta' status until a few others have tried it out.

Those who have seen me around the forums will know I usually participate in the forums at least daily if not several times; however please be aware this is usually from my iPhone when I'm away from my desk. I will endeavour to support this plugin as quickly as possible, but (as with everyone) I have busy periods of the year when I'm simply not at my desk long enough to do all I'd like to, including fixing or updating plugin code, even if you see me actively responding to other threads.

Enjoy!

Peter

Posted on
Thu Dec 31, 2015 6:49 pm
jay (support) offline
Site Admin
User avatar
Posts: 18199
Joined: Mar 19, 2008
Location: Austin, Texas

Re: Honeywell Evohome - Introduction & Installation

Thanks for this excellent contribution! And just in time for the new year!

You might want to consider putting it into the File Library instead of hosting it in dropbox - it just makes it easier for people to find it/stumble across it.

Jay (Indigo Support)
Twitter | Facebook | LinkedIn

Posted on
Thu Dec 31, 2015 7:29 pm
durosity offline
User avatar
Posts: 4320
Joined: May 10, 2012
Location: Newcastle Upon Tyne, Ye Ol' England.

Re: Honeywell Evohome - Introduction & Installation

Awesome! I'm trying to convince the wife that we need proper zoned heating.. Perhaps this will help :D


Sent from my iPad using Tapatalk

Computer says no.

Posted on
Thu Dec 31, 2015 7:32 pm
howartp offline
Posts: 4559
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Re: Honeywell Evohome - Introduction & Installation

Thanks Jay - I've not found that yet (well, I know where it is but not explored it) - will move it.

Simon, my mum wants her money back because the house has been freezing all day. I did point out the dial on the top of the TRV which I fully explained last week, but that didn't seem to go down well. :-)


Sent from my iPhone using Tapatalk

Posted on
Fri Jan 01, 2016 2:09 am
petematheson offline
Posts: 847
Joined: Sep 14, 2014
Location: Southampton, UK

Re: Honeywell Evohome - Introduction & Installation

Nice work! Out of interest, is there a limitation to Api calls for refreshing the data? Can I refresh every 1 minute for example?

Posted on
Fri Jan 01, 2016 3:41 am
howartp offline
Posts: 4559
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Re: Honeywell Evohome - Introduction & Installation

petematheson wrote:
Nice work! Out of interest, is there a limitation to Api calls for refreshing the data? Can I refresh every 1 minute for example?

That's what I don't know... :-(

Mine is set to refresh every 15 minutes and I've not knowingly been locked out, but the problem is when you connect there's a 3 in 10 chance that Honeywell reports an unknown server error.

I've tweaked the API from GitHub to check for this and retry until the data is valid, otherwise it throws the JSON error we were seeing in alpha builds.

Folk who only use the plugin to interact with Evohome, rather than view live data, won't need any data refresh schedule, which is why I've left it to users to schedule to their needs.

Peter


Sent from my iPhone using Tapatalk

Posted on
Fri Jan 01, 2016 4:05 pm
howartp offline
Posts: 4559
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Re: Honeywell Evohome - Introduction & Installation

v1.0.6 now available

  • Fixed several buglets and a couple of errors that popped up in unplanned circumstances

Posted on
Sat Jan 02, 2016 12:56 pm
petematheson offline
Posts: 847
Joined: Sep 14, 2014
Location: Southampton, UK

Re: Honeywell Evohome - Introduction & Installation

I've had mine refreshing every minute since yesterday and so far no problems !

Posted on
Sun Jan 03, 2016 10:43 am
petematheson offline
Posts: 847
Joined: Sep 14, 2014
Location: Southampton, UK

Re: Honeywell Evohome - Introduction & Installation

Just to provide an update, still no issues with refreshing every 1 minute. Looking good!
ImageUploadedByTapatalk1451839371.417892.jpg
ImageUploadedByTapatalk1451839371.417892.jpg (64.78 KiB) Viewed 19241 times

Posted on
Sun Jan 03, 2016 11:49 am
howartp offline
Posts: 4559
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Re: Honeywell Evohome - Introduction & Installation

v1.0.7 now available

  • Added ability to Backup and Restore your schedule

How to use this feature

First you need to run a 'Backup' action, which will ask for a filename (defaults to "Backup"). This creates a JSON-formatted file in the plugin folder, called evoNAME.evoSchedule (where NAME is whatever you called it). Note this action will always overwrite any previous schedule of the same name.

You may copy and/or edit this schedule file if you wish, as long as it remains valid JSON. Partial schedules are valid, eg if you want different schedules for certain room(s) depending on your work pattern then just remove the data structure for the other rooms.

When you create a 'Restore' action, it asks you which file to restore, and gives you a list of all .evoSchedule files in the plugin folder. When you run the action, it verifies the JSON is valid (not necessarily that the schedule is valid) then uploads it to Evohome.

Enjoy!

Peter

Posted on
Tue Jan 05, 2016 5:58 pm
petematheson offline
Posts: 847
Joined: Sep 14, 2014
Location: Southampton, UK

Re: Honeywell Evohome - Introduction & Installation

Hey Peter, getting lots of logs appearing even when logging is set to normal - not sure if this is because I have just set my triggers up?

5 Jan 2016, 23:54:42
Trigger Turn on Heating in Living Room
Evohome Refreshing zone data
Trigger Turn on Heating in Living Room
Evohome Refreshing zone data... Done
Evohome Refreshing zone data
Evohome Refreshing zone data... Done
Trigger Turn on Heating in Living Room
Evohome Refreshing zone data
Evohome Refreshing zone data... Done
Trigger Turn on Heating in Living Room
Evohome Refreshing zone data
Trigger Turn on Heating in Living Room
Evohome Refreshing zone data... Done
Evohome Refreshing zone data
Evohome Refreshing zone data... Done

Posted on
Wed Jan 06, 2016 1:53 am
howartp offline
Posts: 4559
Joined: Jan 09, 2014
Location: West Yorkshire, UK

Re: Honeywell Evohome - Introduction & Installation

Refreshing data is purposely displayed in normal mode, not just in debug mode, so you know the plugin is doing something.

I added the 'done' bit as if the refresh fails or errors, you've no way of knowing unless you're in debug mode, until you notice the data isn't current.

I'll see about adding a 'hide refresh notices from log' checkbox in config.


Sent from my iPhone using Tapatalk

Posted on
Wed Jan 06, 2016 3:27 am
petematheson offline
Posts: 847
Joined: Sep 14, 2014
Location: Southampton, UK

Re: Honeywell Evohome - Introduction & Installation

I've had a weird one - for the last couple of days my scheduled data refresh has stopped at 2:50am.

Seems to be fixed by restarting the Plugin as even manual 'Execute Actions Now' didn't start the data refresh. (I wasn't seeing anything in the logs)

I've now changed to 10 minutes to see if this solves it

Posted on
Sat Jan 09, 2016 8:44 am
neilk offline
Posts: 714
Joined: Jul 13, 2015
Location: Reading, UK

Re: Honeywell Evohome - Introduction & Installation

Peter,
First of all thanks for putting this together, I had cobbled together some scripts using the same API but this looks much better. I am however getting the following error in the log, the Evohome Controller device is created as well as an "evohome" device but none of the zones.

Code: Select all
 
 Evohome Debug                   devName: Evohome
  Evohome Debug                   Updating device for zone
Evohome Error                   Error in plugin execution runConcurrentThread:

Traceback (most recent call last):
  File "plugin.py", line 66, in runConcurrentThread
  File "plugin.py", line 147, in refreshZones
<type 'exceptions.KeyError'>: 'setpointMode'

  Evohome Error                   plugin runConcurrentThread function returned or failed (will attempt again in 10 seconds)


When I run the dump evohome data to the log I get the following, so the API is connecting

Code: Select all
  Evohome                         Data dump called
  Script                          Evohome Update Done
  Evohome                         Found 1 locations for account xxxxxxxxxxxxxxxx:
  Evohome                           Location: Meadow Barn
  Evohome                         Found 1 gateways for location Meadow Barn:
  Evohome                           Mac address: xxxxxxxxxxxxxxxxxx
  Evohome                         Found 1 control_systems for gateway xxxxxxxxxxxxxxxx
  Evohome                           SystemID: xxxxxxxxxxxxx
  Evohome                         Found 11 zones for control_systemxxxxxxxxxxxx:
  Evohome                           Zone Name: Master Bed
  Evohome                           Zone Name: Emma Room
  Evohome                           Zone Name: Guest Room
  Evohome                           Zone Name: Sitting Room
  Evohome                           Zone Name: Study Temp
  Evohome                           Zone Name: Dining Room
  Evohome                           Zone Name: Master WC
  Evohome                           Zone Name: James Room
  Evohome                           Zone Name: Guest Ensuite
  Evohome                           Zone Name: Hall
  Evohome                           Zone Name: Kitchen
  Evohome                         Refreshing zone data
I removed the apostrophes from the kids room names and duplicate device names but that didn't make a difference.

Any ideas ?

Thanks,
Neil

Posted on
Sat Jan 09, 2016 12:55 pm
neilk offline
Posts: 714
Joined: Jul 13, 2015
Location: Reading, UK

Re: Honeywell Evohome - Introduction & Installation

Peter,
I tracked down the issue, I am guessing you do not control or have a thermostat on your domestic hot water. On my evohome system the following is returned with the first line for the hot water (and the API has a different set of actions for hot water).

Code: Select all
{'temp': 53.0, 'setpoint': '', 'thermostat': 'DOMESTIC_HOT_WATER', 'name': '', 'id': u'1026961'}
{'temp': 21.5, 'setpoint': 24.0, 'thermostat': 'EMEA_ZONE', 'name': u'Sitting Room', 'id': u'1026907'}
{'temp': 22.0, 'setpoint': 18.0, 'thermostat': 'EMEA_ZONE', 'name': u'Kitchen', 'id': u'1026950'}
{'temp': 21.5, 'setpoint': 16.0, 'thermostat': 'EMEA_ZONE', 'name': u'Hall', 'id': u'1026974'}
{'temp': 21.5, 'setpoint': 20.0, 'thermostat': 'EMEA_ZONE', 'name': u'Dining Room', 'id': u'1026975'}
{'temp': 19.5, 'setpoint': 19.0, 'thermostat': 'EMEA_ZONE', 'name': u'Guest Room', 'id': u'1026976'}
{'temp': 21.5, 'setpoint': 16.0, 'thermostat': 'EMEA_ZONE', 'name': u'Guest Ensuite', 'id': u'1026980'}
{'temp': 19.5, 'setpoint': 16.0, 'thermostat': 'EMEA_ZONE', 'name': u'Master Bed', 'id': u'1027044'}
{'temp': 17.5, 'setpoint': 16.0, 'thermostat': 'EMEA_ZONE', 'name': u'Master WC', 'id': u'1027050'}
{'temp': 20.0, 'setpoint': 16.0, 'thermostat': 'EMEA_ZONE', 'name': u'James Room', 'id': u'1027066'}
{'temp': 20.5, 'setpoint': 16.0, 'thermostat': 'EMEA_ZONE', 'name': u'Emma Room', 'id': u'1027071'}
{'temp': 17.0, 'setpoint': 17.0, 'thermostat': 'EMEA_ZONE', 'name': u'Study Temp', 'id': u'1044685'}


I bodged your code to check for the Hot Water id and then skip the updates that would otherwise be in error, and the other zones showed up. Happy to help figure this out properly but my python is really none existent, but this has got me going.

Thanks,
Neil

Who is online

Users browsing this forum: No registered users and 1 guest