[OBSOLETE] Honeywell Evohome Integration

Hi All,

Like many of you, I’ve been eagerly awaiting official SmartThings support for the Honeywell Evohome heating system. This was the key feature that swayed me to pick SmartThings over the likes of Fibaro, Vera, or Zipato. However, many many months later “Coming Soon” is still “Coming Soon”, the beta is clunky, unreliable and its development appears to have stalled… it’s almost as though SmartThings have invented a new meaning for the word ‘soon’ that I’ve not come across before. :wink:

So, I bit the bullet and wrote my own SmartApp and device handler! :sunglasses:

See here: GitHub - codersaur/SmartThings: Samsung SmartThings SmartApps and Device Handlers

Shout out to @pbrain, @TomM, @dthomp13, and @kohler130615 for helping with beta testing.

It fixes most of the issues I discovered with the official beta, plus adds some new functionality too!

If you want to test it, you’ll need to install both the Evohome (Connect) SmartApp and the Evohome Heating Zone device handler.

Note, when copying the groovy code from GitHub, don’t use the RAW view as this will corrupt the degree symbols in the code, copy from the standard view instead.

I’ll write some detailed documentation soon, but in the meantime here’s some basic info…

  • It works in pretty much the same way as the official Evohome Beta app, except that it stores your Evohome username and password. This means it can re-authenticate if the connection to Evohome is lost, which should make it much more reliable (during my testing over the last week it’s been rock-solid).

  • Evohome Heating Zone GUI enhancements:

  • Uses a multi-tile.

  • Boost’ and ‘Suppress’ buttons.

  • Indicates the thermostatSetpointMode, i.e. ‘Following Schedule’ or ‘Temporary until …’

  • It will also tell you when ‘optimisation’ and the ‘window function’ are active.

  • Note, the layout and icons are not final. If anyone can come up with a better layout, let me know!

Each heating zone device has the following attributes. You can see it has information about the scheduledSetpoint, nextScheduledSetpoint and nextSchdeuledTime too:

  • The following device settings are available for each heating zone device:
  • How long setpoint adjustments are applied for (e.g. ‘Next Switchpoint’, ‘Midday’, ‘Midnight’, for a specific duration, or permanently)
  • A pre-set ‘boost’ temperature.
  • A pre-set ‘suppress’ temperature.
  • Custom icon.

  • Additionally, the following commands are available for each heating zone (thermostat) device:
  • auto()
  • away()
  • dayOff()
  • custom()
  • economy()
  • resume()
  • off()
  • boost()
  • suppress()
  • setThermostatMode() - supports all the Evohome modes (‘away’, ‘economy’, ‘dayOff’, ‘custom’ etc).
  • setHeatingSetpoint() - supports a date, duration, or ‘Next Switchpoint’ string parameter to set how long the setpoint is applied for.

These make it easy to configure rules using Rule Machine::grinning:

You can use the ‘mode’ commands (i.e. auto(), away(), custom(), dayOff(), economy(), off()) without any parameters and the mode will be applied for however long you have specified in the SmartApp’s settings for Thermostat Mode Durations.

Alternatively, you can explicitly specify a date parameter, or a number, or the string ‘permanent’:

away(0)                         // Set away mode permanently.
custom('permanent')             // Set custom mode permanently.
dayOff(2)                       // Set dayOff mode for two days (i.e. ends tomorrow night).
economy(2)                      // Set economy mode for two hours.
economy('2016-04-04T16:30:00Z') // Set economy mode until 16:30 UTC on 4th April.

You can use the use the setThermostatMode() command in a similar way:

setThermostatMode('off', 0)         // Set off mode permanently.
setThermostatMode('away', 1)        // Set away mode for one day (i.e. until midnight tonight).
setThermostatMode('dayOff', 2)      // Set dayOff mode for two days (i.e. ends tomorrow night).
setThermostatMode('economy', 6)     // Set economy mode for six hours.
setThermostatMode('economy', '2016-04-04T16:30:00Z') // Set economy mode until 16:30 UTC on 4th April.

Note that auto and off modes can only ever be set permanently.

If you specify an integer number then it is interpreted as days for away/custom/dayOff modes, but as hours if the mode is economy. Days always finish at midnight in your local timezone.

Therefore, if you want to use Rule Machine to set Evohome to away mode (e.g. when you leave the house), and then back to auto at a later time, there are a couple of ways to do it:

  1. Issue one command with an explicit ‘until’ value, e,g, away(2) // sets away mode for 2 days.
  2. Issue an immediate command to set a mode permanently, e.g. away(0), and then follow that up with another rule at a later date when you want to change the mode again. e.g. auto()

Note that the command resume() does not change the thermostatMode. It removes any temperature setpoint overrides.

In general, I have put extensive comments in the code with usage examples for each command, but let me know if anything else is unclear or if you think of some cool new features to add.

One key thing at the moment which I haven’t implemented is support for hot water zones (as my own Evohome system doesn’t have a hot water zone for me to test with). Therefore, if any of you have a hot water zone in your Evohome system and and can spare a short amount of time to help me test please PM me!

That’s all for now. I look forward to some constructive feedback… :wink:



Very keen to have a play with this. And I have DHW so happy to add support for that, if you give me a couple of pointers of where to start (always easiest when diving into someone else’s code). Happy to move to PM for this, if you want.

I’m seeing this when I hit Done on the SmartApp…

What did I do wrong?


Fire up the Live Logging tab in the IDE and watch for events when you hit done. I expect it will report an error of some kind… copy and paste it…

Also, what country are you in?

Helps if you get your username and password right :wink:

Even from the start it’s so much better than the official version - All of the zones don’t all start Evohome: for example, so you can actually see which one is which!

Great work.

You can rename the devices without breaking anything too.

Got it installed and running. Only issue I see at the moment is the degree symbol on the temperatures shows as a ‘?’ In a hexagon.

UK and Celcius btw

Someone else had this issue, but they also had it with some other devices, which led me to believe it’s a more-general issue to do with how SmartThings displays the degree symbol, or even something general to your phone OS. Do you have problems with the degree symbol in other devices or other apps on your phone?

@dthomp13, did you you manage to find a fix for this?

Either way, a quick fix is just to edit the device handler code and replace all instances of the degree symbol with a “C” instead. :wink:

Not seen this anywhere else, the only other devices I have are Samsung movement and multis and they show the degree symbol fine.

Ok, that’s weird. I just compared the ASCII code of the ° in my heating zone device handler and it’s the same as the ° symbol in the SmartSense Multi device handler template. But perhaps it’s being mangled when it’s uploaded or downloaded from GitHub?

You could try opening the SmartSense Multi device handler template and copying the ° and pasting it into your copy of the heating zone device handler, that might fix it?

Update: See this post. - the problem seems to be when you copy from the RAW view in GitHub. Try copying from the Normal View instead.

I went through the code and replaced the symbol above with °.

Copying from normal view was a pain as it grabs the line numbers too. Search and replace did the trick for me.
Can the character be referred to by its ascii code to avoid this issue?

See my response at a similar post about the ? and how to fix it.

Has anyone tested using the Android app?

I’ve got it installed on Android just now. Not had anytime to do much testing though.

Despite a few teething niggles (for which David has been really helpful), I’m really loving this.

Just set up a routine using a SmartApp called Thermostat Auto Off, so that if someone opens the lounge doors to the garden for longer than a minute that particular heating zone is turned off. [EDIT: of course you can’t turn off just a single zone - the whole system is turned off. But that’s fine.]

It works like a charm.

I realise I could probably have done something using IFTTT, but it’s great to do the whole thing in ST.

Big thanks David!

Good to hear this is working for people.

FYI, this is what my development queue looks like at the moment:

  1. Add support for hot water zones.
  2. Clean up icons, including active/inactive states.
  3. Tidy up the SmartApp and device settings.
  4. Improve the installation process to catch auth errors and allow locations/controllers/zones to be (de)selected.
  5. Enable notifications if connection to Evohome cloud fails.
  6. Add Evohome controller devices for controller-wide commands.
  7. Add support for communicating via a Honeywell HGI80 (probably via Node.js bridge)

Any other suggestions welcome…