X-Git-Url: http://plrg.eecs.uci.edu/git/?p=smartthings-infrastructure.git;a=blobdiff_plain;f=Thermostat%2FThermostat.groovy;h=41a351cd2470043f10445ba3d10787c18649b8f4;hp=8bd5e9fbade8a25a7254946ea529628da8360242;hb=4e7b2f59da1e3cf4cf5462636de52d8cc7976782;hpb=099c82f83bc2f4b8bd060d1985cf4a9fed3bc695 diff --git a/Thermostat/Thermostat.groovy b/Thermostat/Thermostat.groovy index 8bd5e9f..41a351c 100644 --- a/Thermostat/Thermostat.groovy +++ b/Thermostat/Thermostat.groovy @@ -7,11 +7,15 @@ public class Thermostat { private String label private String displayName private int temperature + private int currentTemperature private int currentCoolingSetpoint private int currentHeatingSetpoint private int coolingSetpoint + private int latestCoolingSetPoint private int thermostatSetpoint + private int latestThermostatSetPoint private int heatingSetpoint + private int latestHeatingSetPoint private List coolingSetpointRange private List thermostatSetpointRange private List heatingSetpointRange @@ -20,17 +24,25 @@ public class Thermostat { private String thermostatOperatingState private String thermostatFanMode private String thermostatMode + private String currentThermostatMode + private String climateName + private String thermostatLatestMode + private String thermostatLatestOperatingState + private String thermostatLatestFanMode def sendEvent def timers Thermostat(Closure sendEvent, String id, String label, String displayName, int temperature, int currentCoolingSetpoint, int currentHeatingSetpoint, int coolingSetpoint, int thermostatSetpoint, int heatingSetpoint, List coolingSetpointRange, List thermostatSetpointRange, List heatingSetpointRange, - List supportedThermostatFanModes, List supportedThermostatModes, String thermostatOperatingState, String thermostatFanMode, String thermostatMode) { + List supportedThermostatFanModes, List supportedThermostatModes, String thermostatOperatingState, String thermostatFanMode, String thermostatMode, + String climateName, String thermostatLatestMode, String thermostatLatestOperatingState, String thermostatLatestFanMode, int latestCoolingSetPoint, + int latestThermostatSetPoint, int latestHeatingSetPoint) { this.id = id this.label = label this.sendEvent = sendEvent this.temperature = temperature + this.currentTemperature = currentTemperature this.currentCoolingSetpoint = currentCoolingSetpoint this.currentHeatingSetpoint = currentHeatingSetpoint this.coolingSetpoint = coolingSetpoint @@ -44,20 +56,46 @@ public class Thermostat { this.thermostatOperatingState = thermostatOperatingState this.thermostatFanMode = thermostatFanMode this.thermostatMode = thermostatMode + this.currentThermostatMode = thermostatMode + this.climateName = climateName + this.thermostatLatestMode = thermostatLatestMode + this.thermostatLatestOperatingState = thermostatLatestOperatingState + this.thermostatLatestFanMode = thermostatLatestFanMode + this.latestHeatingSetPoint = latestHeatingSetPoint + this.latestThermostatSetPoint = latestThermostatSetPoint + this.latestCoolingSetPoint = latestCoolingSetPoint } //By Apps def setCoolingSetpoint(int coolingSetpoint) { - this.coolingSetpoint = coolingSetpoint - this.currentCoolingSetpoint = currentCoolingSetpoint - println("Cooling set point for the thermostat with id:$id is changed to $coolingSetpoint!") + if (this.coolingSetpoint != coolingSetpoint) { + this.latestCoolingSetPoint = coolingSetpoint + this.coolingSetpoint = coolingSetpoint + this.currentCoolingSetpoint = coolingSetpoint + println("Cooling set point for the thermostat with id:$id is changed to $coolingSetpoint!") + sendEvent([name: "coolingSetpoint", value: "$coolingSetpoint", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + + def setCoolingSetpoint(String coolingSetpoint) { + setCoolingSetpoint(coolingSetpoint.toInteger()) } def setHeatingSetpoint(int heatingSetpoint) { - this.heatingSetpoint = heatingSetpoint - this.currentHeatingSetpoint = currentHeatingSetpoint - println("Heating set point for the thermostat with id:$id is changed to $heatingSetpoint!") + if (this.heatingSetpoint != heatingSetpoint) { + this.latestHeatingSetPoint = heatingSetpoint + this.heatingSetpoint = heatingSetpoint + this.currentHeatingSetpoint = heatingSetpoint + println("Heating set point for the thermostat with id:$id is changed to $heatingSetpoint!") + sendEvent([name: "heatingSetpoint", value: "$heatingSetpoint", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + + def setHeatingSetpoint(String heatingSetpoint) { + setHeatingSetpoint(heatingSetpoint.toInteger()) } def setSchedule() { @@ -65,21 +103,164 @@ public class Thermostat { } def setThermostatFanMode(String thermostatFanMode) { - this.thermostatFanMode = thermostatFanMode - println("Fan mode of the thermostat with id:$id is changed to $thermostatFanMode!") + if (this.thermostatFanMode != thermostatFanMode) { + this.thermostatLatestFanMode = thermostatFanMode + this.thermostatFanMode = thermostatFanMode + println("Fan mode of the thermostat with id:$id is changed to $thermostatFanMode!") + sendEvent([name: "thermostatFanMode", value: "$thermostatFanMode", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } } def setThermostatMode(String thermostatMode) { - this.thermostatMode = thermostatMode - println("Mode of the thermostat with id:$id is changed to $thermostatMode!") + if (this.thermostatMode != thermostatMode) { + this.thermostatLatestMode =thermostatMode + this.thermostatMode = thermostatMode + this.currentThermostatMode = thermostatMode + println("Mode of the thermostat with id:$id is changed to $thermostatMode!") + sendEvent([name: "thermostatMode", value: "$thermostatMode", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + + def cool() { + if (this.thermostatMode != "cool") { + this.thermostatLatestMode = "cool" + this.thermostatMode = "cool" + this.currentThermostatMode = "cool" + println("Mode of the thermostat with id:$id is changed to cool!") + sendEvent([name: "thermostatMode", value: "cool", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + + def heat() { + if (this.thermostatMode != "heat") { + this.thermostatLatestMode = "heat" + this.thermostatMode = "heat" + this.currentThermostatMode = "heat" + println("Mode of the thermostat with id:$id is changed to heat!") + sendEvent([name: "thermostatMode", value: "heat", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } } + def auto() { + if (this.thermostatMode != "auto") { + this.thermostatLatestMode = "auto" + this.thermostatMode = "auto" + this.currentThermostatMode = "auto" + println("Mode of the thermostat with id:$id is changed to auto!") + sendEvent([name: "thermostatMode", value: "auto", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + + def emergencyHeat() { + if (this.thermostatMode != "emergencyHeat") { + this.thermostatLatestMode = "emergencyHeat" + this.thermostatMode = "emergencyHeat" + this.currentThermostatMode = "emergencyHeat" + println("Mode of the thermostat with id:$id is changed to emergencyHeat!") + sendEvent([name: "thermostatMode", value: "emergencyHeat", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + + def off() { + if (this.thermostatMode != "off") { + this.thermostatLatestMode = "off" + this.thermostatMode = "off" + this.currentThermostatMode = "off" + println("Mode of the thermostat with id:$id is changed to off!") + sendEvent([name: "thermostatMode", value: "off", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + + def setClimate(String info, String givenClimateName) { + if (this.climateName != givenClimateName) { + this.climateName = givenClimateName + println("Climate name of the thermostat with id:$id is changed to $givenClimateName!") + } + } + + def setHold(String info1, int coolingSetpoint, int heatingSetpoint, String info2, String info3) { + if ((this.heatingSetpoint != heatingSetpoint) || (this.coolingSetpoint != coolingSetpoint)) { + this.coolingSetpoint = coolingSetpoint + this.currentCoolingSetpoint = currentCoolingSetpoint + println("Cooling set point for the thermostat with id:$id is changed to $coolingSetpoint!") + this.heatingSetpoint = heatingSetpoint + this.currentHeatingSetpoint = currentHeatingSetpoint + println("Heating set point for the thermostat with id:$id is changed to $heatingSetpoint!") + sendEvent([name: "heatingSetpoint", value: "$heatingSetpoint", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + sendEvent([name: "coolingSetpoint", value: "$coolingSetpoint", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } //By Model Checker - /*def setValue(String value) { - println("the door with id:$id is $value!") - this.lockLatestValue = this.lockState - this.lockState = value - this.currentLock = value - }*/ + def setValue(String value, String name) { + if ((name == "temperature") && (value.toInteger() != this.temperature)) { + println("the temperature is $value!") + this.temperature = value.toInteger() + this.currentTemperature = value.toInteger() + } else if ((name == "heatingSetpoint") && (value.toInteger() != this.heatingSetpoint)) { + println("the heating set point of the thermostat with id:$id is $value!") + this.latestHeatingSetPoint = value.toInteger() + this.heatingSetpoint = value.toInteger() + } else if ((name == "coolingSetpoint") && (value.toInteger() != this.coolingSetpoint)) { + println("the cooling set point of the thermostat with id:$id is $value!") + this.latestCoolingSetPoint = value.toInteger() + this.coolingSetpoint = value.toInteger() + } else if ((name == "thermostatSetpoint") && (value.toInteger() != this.thermostatSetpoint)) { + println("the set point of the thermostat with id:$id is $value!") + this.latestThermostatSetPoint = value.toInteger() + this.thermostatSetpoint = value.toInteger() + } else if ((name == "thermostatMode") && (value != this.thermostatMode)) { + println("the mode of the thermostat with id:$id is $value!") + this.thermostatLatestMode = value + this.thermostatMode = value + } else if ((name == "thermostatFanMode") && (value != this.thermostatFanMode)) { + println("the fan mode of the thermostat with id:$id is $value!") + this.thermostatLatestFanMode = value + this.thermostatFanMode = value + } else if ((name == "thermostatOperatingState") && (value != this.thermostatOperatingState)) { + println("the operating state of the thermostat with id:$id is $value!") + this.thermostatLatestOperatingState = value + this.thermostatOperatingState = value + } + } + + def currentValue(String deviceFeature) { + if (deviceFeature == "thermostatMode") + return thermostatMode + else if (deviceFeature == "thermostatOperatingState") + return thermostatOperatingState + else if (deviceFeature == "thermostatFanMode") + return thermostatFanMode + else if (deviceFeature == "heatingSetpoint") + return heatingSetpoint + else if (deviceFeature == "coolingSetpoint") + return coolingSetpoint + else if (deviceFeature == "thermostatSetpoint") + return thermostatSetpoint + } + + def latestValue(String deviceFeature) { + if (deviceFeature == "thermostatMode") + return thermostatLatestMode + else if (deviceFeature == "thermostatOperatingState") + return thermostatLatestOperatingState + else if (deviceFeature == "thermostatFanMode") + return thermostatLatestFanMode + else if (deviceFeature == "heatingSetpoint") + return latestHeatingSetPoint + else if (deviceFeature == "coolingSetpoint") + return latestCoolingSetPoint + else if (deviceFeature == "thermostatSetpoint") + return latestThermostatSetPoint + } + }