[RELEASE] Enhanced Z-Wave Plus Thermostat Device Handler - Honeywell, GoControl, CT, Linear, Trane, MCO, Remotec

Enhanced Z-Wave (Plus) Thermostat with Temperature, Humidity, Auto Time setting and advanced features Device Handler

This is an advanced DTH for Z-Wave and Z-Wave Plus thermostats. It fixes bugs in stock ST thermostat DTH, thermostat firmwares, enables advanced features to be accessed via SmartThings and adds additional functionality like battery saver modes, max/min setpoint limits, deadband synchronization, filters, differential, power source, enabling auto modes, recovery modes etc. (See below for a detailed list per model)

Classic App

Thermostat Models Tested

Key features of the Enhanced DTH:

  • Supports secure inclusion and encrypted communication for Z-Wave Plus thermostats
  • Battery saver option to extend battery life
  • Ignore low battery for C-Wire thermostats
  • Synchronizing SmartThings dead-band settings with thermostat (default is 1°)
  • Fix for ST Celsius scale bug
  • Patches for firmware bugs
    • CT-xxx incorrect date
    • CT-xxx auto switch over
    • CT-xxx state synchronization
    • CT-xxx non battery models
  • Customize thermostat settings (CT-xxx, ZTS-xxx, MCO-xxx, Trane, Honyewell, GoControl)
    • Humidity offset correction
    • Temperature reporting sensitivity
  • GoControl features
    • Dead band configuration
    • Min cool temperature
    • Max heat temperature
    • Temperature offset correction
    • Filter replacement hours/reset
    • Lock and unlock controls
  • Honeywell features
    • Humidity reporting
    • Min cool temperature
    • Max heat temperature
    • Temperature offset correction
    • Enable/disable auto (heat/cool) changeover
    • Auto changeover temperature threshold
  • CT-xxx features
    • Humidity reporting
    • Lock (partial/full) and unlock controls
    • Humidity reporting sensitivity
    • Emergency/Aux heat pump control
    • Recovery mode (fast/economy)
    • Recovery temperature differential
    • Temperature swing threshold
    • Power source reporting (C-Wire, Battery)
  • Remotec ZTS-xxx features
    • View, reset and set filter replacement timer
    • Dead band configuration
    • Temperature correction
    • Temperature swing threshold
    • Filter replacement hours/reset
  • Remotec ZXT-xxx features
    • Set air conditioner IR code (learning not supported, refer to manual)
    • Humidity reporting
    • Humidity offset correction
  • Trane configurable settings
    • Detect/enable multi stage heating
  • MCO configurable settings
    • Temperature reporting sensitivity
    • Detect/enable multi stage heating
  • Show fan state (running or off even when set to Auto mode)
  • Battery (option to disable if C-Wire is present or no batteries)
  • Fan state
    • Auto (Idle)
    • Auto (Running)
    • On
    • Circulate
  • Synchronize clock
  • Heat/Cool temperature settings
  • Auto detect supported thermostat modes
    • Off
    • Auto
    • Heat
    • Cool
    • Emergency heat
  • Auto detect supported fan modes
    • Off
    • On
    • Auto
    • Circulate

Installation Instructions

You can find the DTH installation/update instructions here.

Check out these complimentary SmartApps

[RELEASE] 5-2 Day Programmable Thermostat Scheduler (Weekday, Weekend) with Remote Temperature Sensor for each Schedule

[RELEASE] Motion Sensor Thermostat with Remote temperature sensors, Presence detection and Schedules

[RELEASE] Mode Based Thermostat - Control Multiple Thermostats Temperature / Remote Temperature Sensors when Changing Modes

[RELEASE] Door Chimes and Notifications for Doorbells and Sensors

[RELEASE] Security System: Intruder Alert with Actions

[RELEASE] Unlimited customizable thermostat


  • It will only show C-Wire if the thermostat was paired with the hub in repeater mode (i.e. with the C-Wire connected) otherwise it shows the battery level.
  • To enable repeater mode on CT-xxx/ZTS-500 thermostats, exclude the thermostat, connect the C-Wire and then pair the thermostat with the hub
  • The DTH automatically detects the available features on the thermostat and enables the appropriate tiles (otherwise it’ll show a blank).
  • To enable detection of Aux/Emergency/Multi stage heating for NON CT-xxx/ZTS-xxx thermostats (e.g. GoControl, Trane, MCO, Honeywell etc), enable the option in the device preferences page (disabled by default since most thermostats do not report it correctly)
  • If have a C-Wire with battery backup, enable the setting to report battery with C-Wire connected

How to soft reset CT-xxx thermostats (i.e. reconnect with the controller)

Open the thermostat top cover and there is a reset button. Press it for 1 seconds. Now open the ST app and click on the refresh tile to resync all the settings.

How to factory reset CT-xxx Thermostat & Z-Wave module

  1. Switch the thermostat to Off Mode
  2. Press and hold the lower left corner of touch screen for 5 seconds. The thermostat then resets itself, displays its current firmware version, and restarts in Off Mode.

How to factory reset CT-xxx Z-Wave module

  1. From the Menu screen, touch Mate icon. The Radio screen appears.
  2. Touch & hold Mate icon 10 seconds until you hear a beep. The thermostat will restore the Z-Wave module to the factory default settings.

How to factory reset CT-xxx Z-Wave module (alternative)

  1. Press the Mode button unless it’s in Off position
  2. Press the Menu button
  3. Press and hold the center of the screen for about 5 sec until the screen shows a number in the center of the screen and up/down arrows on the right side of the screen
  4. Press the Up arrow and wait for the onscreen count down to complete
  5. Press the Down arrow and wait for the onscreen count down to complete

This device handler is available on the RBoy Apps Server

Refer to our facebook page http://www.facebook.com/RBoySTApps to get the latest news and updates.

The latest version is available on the RBoy Apps server

Copyright © RBoy Apps


Can you put the finished device type on github?


Yes I can but the whole point of the posting the changes above is for 2 reasons:

  1. Users can pick and choose the customizations they want
  2. When ST updates the base code, you can always just readjust the changes

Posting the whole code will just make it increased work to maintain the code (which is what happened with the original thread).

I’ve tried to make it step by step details walk through of how to make the changes and categorized it so you can choose the ones you want/don’t want. If you feel I can make it simpler, let me know and I’ll update it.


First, thank you. This thread has been immensely helpful. I have the CT80 and don’t need the battery portion but the humidity and clock set are awesome. Two questions:

  1. The up/down arrows only allow a slow change, one degree at a time. Is this a ST thing or something that can be adjusted? I could go back to the slider I suppose but I like the arrows better.

  2. My current mode state isn’t functioning properly. I switch to heat, refresh and it goes back to “off”. Seems to be a problem with the base ST code. Plan to dig into it, but wondered if you guys knew how to correct.

I’m not a coder… just trying to learn…


  1. No unfortunately it can’t run faster, that’s the way it works. Slider works great for large changes, up/down for smaller changes.

  2. I think your thermostat may not be responding to all the modes correctly. Check this piece of code and check what your thermostat returns as supported modes:

standardTile("mode", "device.thermostatMode", inactiveLabel: false, decoration: "flat") {
		state "off", label:'${name}', action:"switchMode", nextState:"to_heat"
		state "heat", label:'${name}', action:"switchMode", nextState:"to_cool"
		state "cool", label:'${name}', action:"switchMode", nextState:"..."
		state "auto", label:'${name}', action:"switchMode", nextState:"..."
		state "emergencyHeat", label:'${name}', action:"switchMode", nextState:"..."
		state "to_heat", label: "heat", action:"switchMode", nextState:"to_cool"
		state "to_cool", label: "cool", action:"switchMode", nextState:"..."
		state "...", label: "...", action:"off", nextState:"off"

The reason it can’t run faster has nothing to do with this code, but to do with the underlying device type code. The device type does a set followed by a get with a 1 second delay between to let the device the commands. This delay is what you’re seeing. If you used a custom device code and removed the delay, this delay will dissappear.
It’ll be there irrespective of what type of inputs you use, slider or buttons

That’s what I assumed.

Thanks for posting! I followed RBOY’s steps and opted to leave the sliders in place instead of the up/down controls. I am able to display humidity and battery perfectly in the App for one of my ct100’s. Looks like it auto-sets the clock as well (looking at the activity log).

On my other ct100, the clock auto-sets but… the humidity and battery tiles were each displaying a pair of hyphens ("–"). The only difference I can see between the two ct100’s are in the Device List. One shows Status as INACTIVE and the other shows as ACTIVE. The one showing Status as INACTIVE displays the pair of hyphens for battery and humidity. After closing the App and terminating it a couple times, the Humidity started to display correctly on the device that had appeared as INACTIVE. Checking the Device LIst, again, both ct100’s now appear as ACTIVE.

Since I’m mainly interested in Humidity, its not a big issue getting Battery to display correctly for the 2nd ct100, but am curious if I’m missing something.

Any suggestions would be greatly appreciated, and thanks again for posting the improved code!

I think it takes upto 24 hours to populate. Just refresh and wait :smile:

Did this ever make it to GIT?

no I don’t think it can, this code refers to modifying the base code from ST and not the whole code in itself, so putting on GIT won’t help.

thank you for this, much better than the stock zwave controller by ST. such a simple code change, i wonder why they wont implement it themselves.

is there anyway to program these devices? i cannot find a program menu anywhere.

nevermind, looks like you have to use a smart app to manage program settings. this stuff is way too complicated for the average user lol.

Wow! Just a quick shout-out for this app and for the helpful thread too. (Quick side question, how often does it auto-set the thermostat clock, just once or every so often?)

Yesterday we installed my 2gig CT100 thermostat and successfully connected it to my ST ecosystem. This was thing #20, reaching a minor yet fun milestone - hooray! :wink:

The stock code seemed alright but I was curious about humidity and battery life, and so I went searching through the community to see what was out there. And here we are!

This morning I followed the directions posted above, worked my way through the code and made the changes (I chose to go all-in with the mods) and voila, it works like magic.

Just wanted to thank you again - this indeed is very helpful code, and the ability to see the battery life and the humidity is great (plus the better icons, and the up/down buttons).

Cheers and thanks,

Seasons greetings!

Cool - I’m now on day two with the custom app, and I have a question about a potential mod or enhancement to it (or maybe it does this and I’m not sure how to activate it).

What I’d like to do is visually see if the fan blower is active or idle; I see the status in the logs so I’m assuming it’s doable; perhaps a different color tile to indicate active vs. idle?

Any hints or suggestions? I’d love to roll up my sleeves and try coding the idea… just was looking for a nudge in the right direction and/or some guidance to get me started.

Thanks again!

I’ve been trying to get this working properly but I’m stuck. Everything seems to function properly other than the tiles updating. It may be a silly question but what’s the best way to confirm what my stat supports as far as modes? I’ve been trying to find it in documentation, no luck. Not sure if I’m just looking in the wrong place or there’s an easier way. Again, I have the Radio Thermostat CT80. Thanks.

Check the live logs and also the manual.

Fixed battery updates not working after new year on some thermostats

Just wanted to take a minute to thank all involved in this. I was struggling to find a thermostat without needing a C wire. I was excited once I found out I could use the Lowes brand. Would have been fine without humidity and battery levels but now realize how great it is.

Was easy to step thru the code, took me while since this was my first time, and it worked the first time.

Thanks for posting this idiot proof guide :smile:

1 Like

Mine seems to be working fine except if we manually set the desired temp on the thermostat itself…it does not reflect on the app. For example, if I set the temp to 72 on the app then later we bump it up to 73 from the thermostat…it still shows 72 on the app. It shows the correct current temp it’s just that one that does not always sync up. Setting the temp on the app does show the change on the thermostat.

Anything I can try?

That’s correct, the device app doesn’t poll the device to the use set temp, the app only displays the last configured temperature. Interesting point, will see if it can be done.