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.
So, I bit the bullet and wrote my own SmartApp and device handler!
See here: https://github.com/codersaur/SmartThings
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:
- 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:
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:
- Issue one command with an explicit ‘until’ value, e,g, away(2) // sets away mode for 2 days.
- 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…