[RELEASE] Enhanced Z-Wave Plus Thermostat (CT30/CT50/CT80/CT100/CT101/CT110/ZTS110/ZTS500/GoControl/Honeywell/Universal) Device Handler with Battery, Humidity, Clock Set, Alarm, Swing/Temp, Deadband Configuration and Updated User Interface

dth_motionsensor
ct101
ct100
2gig
dth_hvac

(www.rboyapps.com - Make your home your butler!) #1

UPDATED:

This code was posted on this thread by me originally which I’m posting here for reference.

This customization of the standard Z-Wave thermostat device type include various additional features such as Battery status, Humidity, Up/down tiles instead of sliders, auto clock set and custom Icons. The base device type is constantly updated by ST hence to preserve the base functionality, these changes below are incremental changes for DIY community.

###The updated full ready to copy/paste device type code with additional features and bug fixes included is available on the RBoy premium apps server http://smartthings.rboyapps.com. Visit our website to get access to the server.

Additional bugfixes to the ST stock device and new features have been added to the fully functional and integrated code available on the RBoy server below.

###The RBoy Server version of the fully integrated code contains a few additional features:

  1. Bug fixes to the ST base code
  2. Battery saving feature (extend the battery life by over 400%)
  3. Updated User Interface and layout to be compliant with latest Multi Tile features/specifications
  4. Improved response to humidity, clock and battery commands
  5. Support for Rule Machine
  6. Support for CT30,CT-32,CT-50,CT-80,CT-100,CT-101,CT-110 to configure Temperature swing and Temperature Change Reporting threshold
  7. Support for the ZTS-110 to configure Temperature swing, Temperature Change Reporting threshold and Temperature Calibration

NOTE: The CT-XXX series thermostats have a bug, when manufactured, the factory settings for the Temperature Change Reporting threshold is often corrupted or disabled. A typical symptom is the thermostat doesn’t report the temperature change to ST. This can be fixed/corrected with this custom thermostat device handler that allows you to configure this parameter.

###If you like the customization’s and additional features consider supporting our development efforts. Visit our Facebook page http://www.facebook.com/RBoySTApps for updates and check out our website http://smartthings.rboyapps.com for a list of all of our premium apps

###INSTRUCTIONS FOR DIY CHANGES FOR HUMIDITY, BATTERY, CLOCK SET and UPDATED UI

  1. From the IDE page I select My Device Handlers -> Create New Device Handler
  2. Click from Template
  3. Scroll down and select Z-Wave Thermostat
  4. I make the following edits to the code:

First change the name and namespace line to the following (or your own) so it wont conflict:

definition (name: "Thermostat with Temperature and Auto Time setting", namespace: "rboy", author: "RBoy") { // CUSTOMIZATION

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] Then add the following lines to section Metadata:

    // CUSTOMIZATION
    capability "Refresh"
    capability "Battery"
    command "refresh"
    // END CUSTOMIZATION

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] The in the section tiles

standardTile("refresh", "device.thermostatMode", inactiveLabel: false, decoration: "flat") {
	state "default", action:"polling.poll", icon:"st.secondary.refresh"
}

main "temperature"
details(["temperature", "mode", "fanMode", "heatSliderControl", "heatingSetpoint", "coolSliderControl", "coolingSetpoint", "refresh", "configure"])

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] Replace the above lines with:

    // CUSTOMIZATION
    standardTile("refresh", "command.refresh", inactiveLabel: false, decoration: "flat") {
		state "default", action:"refresh.refresh", icon:"st.secondary.refresh"
	}
    valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") { 
		state "battery", label:'Battery ${currentValue}%', backgroundColor:"#ffffff" 
	}
    valueTile("humidity", "device.humidity", inactiveLabel: false, decoration: "flat") { 
		state "humidity", label:'Humidity ${currentValue}%', backgroundColor:"#ffffff"
	}
	main "temperature"
	details(["temperature", "mode", "fanMode", "heatSliderControl", "heatingSetpoint", "coolSliderControl", "coolingSetpoint", "battery", "humidity", "refresh", "configure"])
    // END CUSTOMIZATION

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] Then in the function

def poll() {
	delayBetween([
		zwave.sensorMultilevelV3.sensorMultilevelGet().format(), // current temperature
		zwave.thermostatSetpointV1.thermostatSetpointGet(setpointType: 1).format(),
		zwave.thermostatSetpointV1.thermostatSetpointGet(setpointType: 2).format(),
		zwave.thermostatModeV2.thermostatModeGet().format(),
		zwave.thermostatFanModeV3.thermostatFanModeGet().format(),
		zwave.thermostatOperatingStateV1.thermostatOperatingStateGet().format()
	], 2300)
}

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] Change it to:

def poll() {
	delayBetween([
		zwave.sensorMultilevelV3.sensorMultilevelGet().format(), // current temperature
		zwave.thermostatSetpointV1.thermostatSetpointGet(setpointType: 1).format(),
		zwave.thermostatSetpointV1.thermostatSetpointGet(setpointType: 2).format(),
		zwave.thermostatModeV2.thermostatModeGet().format(),
		zwave.thermostatFanModeV3.thermostatFanModeGet().format(),
		zwave.thermostatOperatingStateV1.thermostatOperatingStateGet().format(),
        getBattery(), // CUSTOMIZATION
        setClock(), // CUSTOMIZATION
        zwave.multiChannelV3.multiInstanceCmdEncap(instance: 2).encapsulate(zwave.sensorMultilevelV3.sensorMultilevelGet()).format() // CT-100/101 Customization for Humidity
	], 2300)
}

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] In the function

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv3.SensorMultilevelReport cmd)
{
	def map = [:]
	if (cmd.sensorType == 1) {
		map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmd.scale == 1 ? "F" : "C", cmd.precision)
		map.unit = getTemperatureScale()
		map.name = "temperature"
	} else if (cmd.sensorType == 5) {
		map.value = cmd.scaledSensorValue
		map.unit = "%"
		map.name = "humidity"
	}
	map
}

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] Change it to

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv3.SensorMultilevelReport cmd)
{
	def map = [:]
	map.displayed = true
    map.isStateChange = true
	if (cmd.sensorType == 1) {
		map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmd.scale == 1 ? "F" : "C", cmd.precision)
		map.unit = getTemperatureScale()
		map.name = "temperature"
	} else if (cmd.sensorType == 5) {
		map.value = cmd.scaledSensorValue
		map.unit = "%"
		map.name = "humidity"
	}
	map
}

[BATTERY/HUMIDITY/AUTO CLOCK CUSTOMIZATION] at the end of the code add the following functions

// CUSTOMIZATIONS
def zwaveEvent(physicalgraph.zwave.commands.multichannelv3.MultiInstanceCmdEncap cmd) {
    def encapsulatedCommand = cmd.encapsulatedCommand([0x31: 3])
    log.debug ("multiinstancev1.MultiInstanceCmdEncap: command from instance ${cmd.instance}: ${encapsulatedCommand}")
    if (encapsulatedCommand) {
        return zwaveEvent(encapsulatedCommand)
    }
}
def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) {
    def nowTime = new Date().time
    state.lastBatteryGet = nowTime
    def map = [ name: "battery", unit: "%" ]
    map.displayed = true
    map.isStateChange = true
    if (cmd.batteryLevel == 0xFF || cmd.batteryLevel == 0) {
        map.value = 1
        map.descriptionText = "battery is low!"
    } else {
        map.value = cmd.batteryLevel
    }
    map
}

private getBattery() {	//once every 24 hours
	def nowTime = new Date().time
	def ageInMinutes = state.lastBatteryGet ? (nowTime - state.lastBatteryGet)/60000 : 1440
    log.debug "Battery report age: ${ageInMinutes} minutes"
    if (ageInMinutes >= 1440) {
        log.debug "Fetching fresh battery value"
		zwave.batteryV1.batteryGet().format()
    } else "delay 87"
}

private setClock() {	// once a day
	def nowTime = new Date().time
	def ageInMinutes = state.lastClockSet ? (nowTime - state.lastClockSet)/60000 : 1440
    log.debug "Clock set age: ${ageInMinutes} minutes"
    if (ageInMinutes >= 1440) {
		state.lastClockSet = nowTime
        def nowCal = Calendar.getInstance(location.timeZone) // get current location timezone
		log.debug "Setting clock to ${nowCal.getTime().format("EEE MMM dd yyyy HH:mm:ss z", location.timeZone)}"
        sendEvent(name: "SetClock", value: "setting clock to ${nowCal.getTime().format("EEE MMM dd yyyy HH:mm:ss z", location.timeZone)}", displayed: true, isStateChange: true)
		zwave.clockV1.clockSet(hour: nowCal.get(Calendar.HOUR_OF_DAY), minute: nowCal.get(Calendar.MINUTE), weekday: nowCal.get(Calendar.DAY_OF_WEEK)).format()
    } else "delay 87"
}

def refresh() {
    // Force a refresh
    log.info "Requested a refresh"
    state.lastBatteryGet = (new Date().time) - (1440 * 60000)
    state.lastClockSet = (new Date().time) - (1440 * 60000)
    poll()
}

[UP/DOWN CUSTOMIZATION] If you want to use UP/DOWN button instead of the slider to change temperature do the following in the Tiles section:
Replace these 2 lines:

	controlTile("coolSliderControl", "device.coolingSetpoint", "slider", height: 1, width: 2, inactiveLabel: false) {
		state "setCoolingSetpoint", action:"quickSetCool", backgroundColor: "#1e9cbb"
	}

	controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 1, width: 2, inactiveLabel: false) {
		state "setHeatingSetpoint", action:"quickSetHeat", backgroundColor:"#d04e00"
	}

[UP/DOWN CUSTOMIZATION] With these lines:

     // CUSTOMIZATION
standardTile("heatLevelUp", "device.heatLevelUp", inactiveLabel: false, decoration: "flat") {
                    state "heatLevelUp", label:'  ', action:"heatLevelUp", icon:"st.thermostat.thermostat-up"
    }
    standardTile("heatLevelDown", "device.heatLevelDown", inactiveLabel: false, decoration: "flat") {
                    state "heatLevelDown", label:'  ', action:"heatLevelDown", icon:"st.thermostat.thermostat-down"
    }
    standardTile("coolLevelUp", "device.coolLevelUp", inactiveLabel: false, decoration: "flat") {
                    state "coolLevelUp", label:'  ', action:"coolLevelUp", icon:"st.thermostat.thermostat-up"
    }
    standardTile("coolLevelDown", "device.coolLevelDown", inactiveLabel: false, decoration: "flat") {
                    state "coolLevelDown", label:'  ', action:"coolLevelDown", icon:"st.thermostat.thermostat-down"
    }
    // END CUSTOMIZATION

[UP/DOWN CUSTOMIZATION] Now change this line:

    main "temperature"
    details(["temperature", "mode", "fanMode", "heatSliderControl", "heatingSetpoint", "coolSliderControl", "coolingSetpoint", "refresh", "configure"])

[UP/DOWN CUSTOMIZATION] to

    main "temperature"
    details(["temperature", "mode", "fanMode", "heatLevelDown", "heatingSetpoint", "heatLevelUp", "coolLevelDown", "coolingSetpoint", "coolLevelUp", "battery", "humidity", "refresh", "configure"]) // CUSTOMIZATION

[UP/DOWN CUSTOMIZATION] Then add the following lines to section Metadata:

    // CUSTOMIZATION
    command "heatLevelUp"
command "heatLevelDown"
command "coolLevelUp"
command "coolLevelDown"
    // END CUSTOMIZATION

[UP/DOWN CUSTOMIZATION] Finally add the following lines at the end:

// CUSTOMIZATIONS
def coolLevelUp() {
    def locationScale = getTemperatureScale()
    def maxTemp
    def minTemp
    if (locationScale == "C") {
    	maxTemp = 37 // Max Temp in C
        minTemp = 1 // Min Temp in C
    	log.trace "Location is in Celsius, MaxTemp $maxTemp, MinTemp $minTemp"
    } else {
    	maxTemp = 99 // Max temp in F
    	minTemp = 35 // Max temp in F
    	log.trace "Location is in Farenheit, MaxTemp $maxTemp, MinTemp $minTemp"
    }

    int nextLevel = device.currentValue("coolingSetpoint") + 1
    
    if( nextLevel > maxTemp) {
    	nextLevel = maxTemp
    }
    log.debug "Setting cool set point up to: ${nextLevel}"
    quickSetCool(nextLevel)
}

def coolLevelDown() {
    def locationScale = getTemperatureScale()
    def maxTemp
    def minTemp
    if (locationScale == "C") {
    	maxTemp = 37 // Max Temp in C
        minTemp = 1 // Min Temp in C
    	log.trace "Location is in Celsius, MaxTemp $maxTemp, MinTemp $minTemp"
    } else {
    	maxTemp = 99 // Max temp in F
    	minTemp = 35 // Max temp in F
    	log.trace "Location is in Farenheit, MaxTemp $maxTemp, MinTemp $minTemp"
    }

	int nextLevel = device.currentValue("coolingSetpoint") - 1
    
    if( nextLevel < minTemp) {
    	nextLevel = minTemp
    }
    log.debug "Setting cool set point down to: ${nextLevel}"
    quickSetCool(nextLevel)
}

def heatLevelUp() {
    def locationScale = getTemperatureScale()
    def maxTemp
    def minTemp
    if (locationScale == "C") {
    	maxTemp = 37 // Max Temp in C
        minTemp = 1 // Min Temp in C
    	log.trace "Location is in Celsius, MaxTemp $maxTemp, MinTemp $minTemp"
    } else {
    	maxTemp = 99 // Max temp in F
    	minTemp = 35 // Max temp in F
    	log.trace "Location is in Farenheit, MaxTemp $maxTemp, MinTemp $minTemp"
    }

    int nextLevel = device.currentValue("heatingSetpoint") + 1
    
    if( nextLevel > maxTemp) {
    	nextLevel = maxTemp
    }
    log.debug "Setting heat set point up to: ${nextLevel}"
    quickSetHeat(nextLevel)
}

def heatLevelDown() {
    def locationScale = getTemperatureScale()
    def maxTemp
    def minTemp
    if (locationScale == "C") {
    	maxTemp = 37 // Max Temp in C
        minTemp = 1 // Min Temp in C
    	log.trace "Location is in Celsius, MaxTemp $maxTemp, MinTemp $minTemp"
    } else {
    	maxTemp = 99 // Max temp in F
    	minTemp = 35 // Max temp in F
    	log.trace "Location is in Farenheit, MaxTemp $maxTemp, MinTemp $minTemp"
    }

    int nextLevel = device.currentValue("heatingSetpoint") - 1
    
    if( nextLevel < minTemp) {
    	nextLevel = minTemp
    }
    log.debug "Setting heat set point down to: ${nextLevel}"
    quickSetHeat(nextLevel)
}

[ICONS CUSTOMIZATION] If you want nice Icon’s for the Thermostat Mode and Thermostat Fan, in the section Tiles:
Replace these lines:

	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"
	}
	standardTile("fanMode", "device.thermostatFanMode", inactiveLabel: false, decoration: "flat") {
		state "fanAuto", label:'${name}', action:"switchFanMode"
		state "fanOn", label:'${name}', action:"switchFanMode"
		state "fanCirculate", label:'${name}', action:"switchFanMode"
	}

[ICONS CUSTOMIZATION] with these lines:

            // CUSTOMIZATION
	standardTile("mode", "device.thermostatMode", inactiveLabel: false, canChangeIcon: true) {
		state "off", label:'${name}', action:"switchMode", nextState:"to_heat", icon: "st.Outdoor.outdoor19"
		state "heat", label:'${name}', action:"switchMode", nextState:"to_cool", icon: "st.Weather.weather14", backgroundColor: '#E14902'
		state "cool", label:'${name}', action:"switchMode", nextState:"...", icon: "st.Weather.weather7", backgroundColor: '#003CEC'
		state "auto", label:'${name}', action:"switchMode", nextState:"...", icon: "st.Home.home1"
		state "emergencyHeat", label:'${name}', action:"switchMode", nextState:"...", icon: "st.Weather.weather2", backgroundColor: '#E11102'
		state "to_heat", label: "heat", action:"switchMode", nextState:"to_cool"
		state "to_cool", label: "cool", action:"switchMode", nextState:"..."
		state "...", label: "...", action:"off", nextState:"off"
	}
	standardTile("fanMode", "device.thermostatFanMode", inactiveLabel: false, canChangeIcon: true) {
		state "fanAuto", label:'${name}', action:"switchFanMode", icon: "st.Appliances.appliances11"
		state "fanOn", label:'${name}', action:"switchFanMode", icon: "st.Appliances.appliances11", backgroundColor: '#02E181'
		state "fanCirculate", label:'${name}', action:"switchFanMode", icon: "st.Appliances.appliances11", backgroundColor: '#02D2E1'
	}
            // END CUSTOMIZATION

To use this custom device type do the following:

  1. Click Create, Save and then Publish
  2. Click on My Devices on the top row, Click on your configured Thermostat under Display Name
  3. Click on Edit at the bottom of the page, under Type select Thermostat with Temperature and Auto Time setting
  4. It’ll take up a few refreshes for the battery to populate

@minollo thanks for this. @duncan thanks for the Humidity multiinstance code for CT-100/101


Help with CT100 Thermostat
Help with Polling Battery for Thermostat (Custom Device Type)
Thermostat SmartApps that uses Virtual Switches to control Mode/Fan/SetPoints
Go Control battery thermostat partially works
Thermostat SmartApps that uses Virtual Switches to control Mode/Fan/SetPoints
2Gig CT100 Thermostat
GoControl 7 Day Thermostat - $17.00 Lowes (shipping avail)
Thermostat app like NEST or Ecobee
CT30 Radio Thermostat: Weak interface?
Temperature Control
Radio thermostat ct101
(Tony Gutierrez) #2

Can you put the finished device type on github?


(www.rboyapps.com - Make your home your butler!) #3

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.


(F5snopro) #4

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...

Thanks!


(www.rboyapps.com - Make your home your butler!) #5
  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"
	}


(www.rboyapps.com - Make your home your butler!) #6

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


(F5snopro) #7

That's what I assumed.


(Lew) #8

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!


Quick CT100 thermostat question
(www.rboyapps.com - Make your home your butler!) #9

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


Feedback When AC is Running?
(Tony Gutierrez) #10

Did this ever make it to GIT?


(www.rboyapps.com - Make your home your butler!) #11

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.


(Isriam) #12

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.


(Steve Baker) #13

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,
Steve


(Steve Baker) #14

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!


(F5snopro) #15

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.


(www.rboyapps.com - Make your home your butler!) #16

Check the live logs and also the manual.


(www.rboyapps.com - Make your home your butler!) #17

Fixed battery updates not working after new year on some thermostats


(Scott Windmiller) #18

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
Scott


(Scott Windmiller) #19

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?


(www.rboyapps.com - Make your home your butler!) #20

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.