Introducing the Unlimited Customizable Thermostat
Create as many or as few schedules as you choose for each day or multiple days of the week and for one or more thermostats.
There are two versions of this app, the free version and the premium version.
PREMIUM VERSION FEATURES
- Create up to 500 thermostat schedules with custom names
- Program one or more thermostats simultaneously or separately
- Support Z-Wave, ZigBee, WiFi and Cloud thermostats (C2C)
- Set hub operating mode restrictions
- Get Push and SMS (multiple numbers) notifications when schedules are activated
- Individual schedule configuration selection:
- active on single/multiple days of the week
- activation time
- heating and/or cooling setpoint
- fan mode
- operating mode
If you like the App consider supporting our development efforts. Visit our Facebook page to updates on new apps and to get Access to all our Premium Apps Server. http://www.facebook.com/RBoySTApps
The latest version of these apps with updates are available on the RBoy Apps server
You can also check out the following thermostat management apps
- The Ultimate Modes based thermostat which uses modes, remote temperature sensors to manage multiple thermostats
- Motion sensor based thermostat which uses motion sensors, operating schedules and remote temperature sensors to manage thermostats
- Temperature and Humidity Management - Manage temperature and humidity using HVACâs, Coolers, Fans, Heaters, Humidifiers, Dehumidifiers and more
- Weekday/Weekend Thermostat - The 5-2 Day Weekday/Weekend Thermostat with a Remote Temperature Sensor
FREE VERSION
This code below is for a basic Unlimited Customizable Thermostat
/* **DISCLAIMER**
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* Without limitation of the foregoing, Contributors/Regents expressly does not warrant that:
* 1. the software will meet your requirements or expectations;
* 2. the software or the software content will be free of bugs, errors, viruses or other defects;
* 3. any results, output, or data provided through or generated by the software will be accurate, up-to-date, complete or reliable;
* 4. the software will be compatible with third party software;
* 5. any errors in the software will be corrected.
* The user assumes all responsibility for selecting the software and for the results obtained from the use of the software. The user shall bear the entire risk as to the quality and the performance of the software.
*/
/**
* Individual Change Thermostat
* Allows you to set single/multiple thermostats to different temp during different days of the week unlimited number of times (one app instance for each change)
*
* Base Code from : Samer Theodossy, bugfixed and enhanced by RBoy
* Changes Copyright RBoy, redistribution of any changes or modified code is not allowed without permission
* Version 1.0.4
* 2016-5-15 - Notify use if timezone/location is missing in setup
* 2015-11-21 - Fixed issue with timezone, now takes timezone from hub
* 2015-6-17 - Fix for changes in ST Platform
* Update - 2014-11-25
*/
// Automatically generated. Make future change here.
definition(
name: "Individual Change Thermostat",
namespace: "rboy",
author: "RBoy",
description: "Setup unlimited adjustments to the thermostat(s), install this app once for each change you want to make",
category: "Green Living",
iconUrl: "https://s3.amazonaws.com/smartapp-icons/GreenLiving/Cat-GreenLiving.png",
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/GreenLiving/Cat-GreenLiving@2x.png",
iconX3Url: "https://s3.amazonaws.com/smartapp-icons/GreenLiving/Cat-GreenLiving@3x.png"
)
preferences {
section("Set these thermostats") {
input "thermostat", "capability.thermostat", title: "Which?", multiple:true
}
section("To these temperatures") {
input "heatingSetpoint", "decimal", title: "When Heating"
input "coolingSetpoint", "decimal", title: "When Cooling"
}
section("Configuration") {
input "dayOfWeek", "enum",
title: "Which day of the week?",
required: true,
multiple: true,
options: [
'All Week',
'Monday to Friday',
'Saturday & Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
],
defaultValue: 'All Week'
input "time", "time", title: "At this time"
}
section( "Notifications" ) {
input "sendPushMessage", "enum", title: "Send a push notification?", options:["Yes", "No"], required: false
input "phoneNumber", "phone", title: "Send a text message?", required: false
}
}
def installed() {
// subscribe to these events
log.debug "Installed called with $settings"
initialize()
}
def updated() {
// we have had an update
// remove everything and reinstall
log.debug "Updated called with $settings"
initialize()
}
def initialize() {
unschedule() // bug in ST platform, doesn't clear on running
TimeZone timeZone = location.timeZone
if (!timeZone) {
timeZone = TimeZone.getDefault()
log.error "Hub timeZone not set, using ${timeZone.getDisplayName()} timezone. Please set Hub location and timezone for the codes to work accurately"
sendPush "Hub timeZone not set, using ${timeZone.getDisplayName()} timezone. Please set Hub location and timezone for the codes to work accurately"
}
def scheduleTime = timeToday(time, timeZone)
def timeNow = now() + (2*1000) // ST platform has resolution of 1 minutes, so be safe and check for 2 minutes)
log.debug "Current time is ${(new Date(timeNow)).format("EEE MMM dd yyyy HH:mm z", timeZone)}, scheduled time is ${scheduleTime.format("EEE MMM dd yyyy HH:mm z", timeZone)}"
if (scheduleTime.time < timeNow) { // If we have passed current time we're scheduled for next day
log.debug "Current scheduling check time $scheduleTime has passed, scheduling check for tomorrow"
scheduleTime = scheduleTime + 1 // Next day schedule
}
log.debug "Scheduling Temp change for " + scheduleTime.format("EEE MMM dd yyyy HH:mm z", timeZone)
schedule(scheduleTime, setTheTemp)
}
def setTheTemp() {
def doChange = false
Calendar localCalendar = Calendar.getInstance()
localCalendar.setTimeZone(location.timeZone)
int currentDayOfWeek = localCalendar.get(Calendar.DAY_OF_WEEK)
// Check the condition under which we want this to run now
// This set allows the most flexibility.
if(dayOfWeek.contains('All Week')) {
doChange = true
}
else if((dayOfWeek.contains('Monday') || dayOfWeek.contains('Monday to Friday')) && currentDayOfWeek == Calendar.instance.MONDAY) {
doChange = true
}
else if((dayOfWeek.contains('Tuesday') || dayOfWeek.contains('Monday to Friday')) && currentDayOfWeek == Calendar.instance.TUESDAY) {
doChange = true
}
else if((dayOfWeek.contains('Wednesday') || dayOfWeek.contains('Monday to Friday')) && currentDayOfWeek == Calendar.instance.WEDNESDAY) {
doChange = true
}
else if((dayOfWeek.contains('Thursday') || dayOfWeek.contains('Monday to Friday')) && currentDayOfWeek == Calendar.instance.THURSDAY) {
doChange = true
}
else if((dayOfWeek.contains('Friday') || dayOfWeek.contains('Monday to Friday')) && currentDayOfWeek == Calendar.instance.FRIDAY) {
doChange = true
}
else if((dayOfWeek.contains('Saturday') || dayOfWeek.contains('Saturday & Sunday')) && currentDayOfWeek == Calendar.instance.SATURDAY) {
doChange = true
}
else if((dayOfWeek.contains('Sunday') || dayOfWeek.contains('Saturday & Sunday')) && currentDayOfWeek == Calendar.instance.SUNDAY) {
doChange = true
}
// some debugging in order to make sure things are working correclty
log.debug "Calendar DOW: " + currentDayOfWeek
log.debug "Configured DOW(s): " + dayOfWeek
// If we have hit the condition to schedule this then lets do it
if(doChange == true){
log.debug "setTheTemp, location.mode = $location.mode, newMode = $newMode, location.modes = $location.modes"
thermostat.setHeatingSetpoint(heatingSetpoint)
thermostat.setCoolingSetpoint(coolingSetpoint)
send "$thermostat heat set to '${heatingSetpoint}' and cool to '${coolingSetpoint}'"
}
else {
log.debug "Temp change not scheduled for today."
}
log.debug "Scheduling next check"
initialize() // Setup the next check schedule
}
private send(msg) {
if (sendPushMessage == "Yes") {
log.debug "sending push message"
sendPush(msg)
}
if (phoneNumber) {
log.debug "sending text message"
sendSms(phoneNumber, msg)
}
log.debug msg
}
You can also check out the following thermostat management apps
- The Ultimate Modes based thermostat which uses modes, remote temperature sensors to manage multiple thermostats
- The 5-2 Day Thermostat app for a 4 schedule per day, weekday/weekend thermostat scheduler with a remote temperature sensor and support for heating/cooling devices in addition to thermostats
- Motion sensor based thermostat which uses motion sensors, operating schedules and remote temperature sensors to manage thermostats
- Temperature and Humidity Management - Manage temperature and humidity using HVACâs, Coolers, Fans, Heaters, Humidifiers, Dehumidifiers and more
© RBoy Apps