X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Thermostat%2FThermostats.groovy;h=2d0bc6c87558abc3c68db150e88e66fcd8761277;hb=fb6f6cdeaeba72a4d60cccd18ad1b9f8f5e8c2eb;hp=994506677a68aa31bb30c8b1227cce9aa22b4eb5;hpb=b4a0eb4ecf95103960505a8249c43586a24631e9;p=smartthings-infrastructure.git diff --git a/Thermostat/Thermostats.groovy b/Thermostat/Thermostats.groovy index 9945066..2d0bc6c 100644 --- a/Thermostat/Thermostats.groovy +++ b/Thermostat/Thermostats.groovy @@ -13,6 +13,7 @@ public class Thermostats{ private String label = "thermostat0" private String displayName = "thermostat0" private int temperature = 66 + private int currentTemperature = 66 private int currentCoolingSetpoint = 70 private int currentHeatingSetpoint = 50 private int coolingSetpoint = 70 @@ -28,17 +29,53 @@ public class Thermostats{ private String thermostatMode = "auto" private String currentThermostatMode = "auto" private String climateName = "" + private String thermostatLatestMode = "auto" + private String thermostatLatestOperatingState = "cooling" + private String thermostatLatestFanMode = "auto" + private int latestCoolingSetPoint = 70 + private int latestThermostatSetPoint = 60 + private int latestHeatingSetPoint = 50 - Thermostats(Closure sendEvent, int deviceNumbers) { + + Thermostats(Closure sendEvent, int deviceNumbers, boolean init) { this.sendEvent = sendEvent this.timers = new SimulatedTimer() this.deviceNumbers = deviceNumbers this.thermostats = [] + if (init) { + this.temperature = 60 + this.currentTemperature = 60 + this.currentCoolingSetpoint = 70 + this.coolingSetpoint = 70 + this.currentHeatingSetpoint = 35 + this.heatingSetpoint = 35 + this.thermostatSetpoint = 50 + this.thermostatFanMode = "auto" + this.thermostatLatestFanMode = "auto" + this.thermostatMode = "auto" + this.currentThermostatMode = "auto" + this.thermostatLatestMode = "auto" + } else { + this.temperature = 66 + this.currentTemperature = 66 + this.currentCoolingSetpoint = 80 + this.coolingSetpoint = 80 + this.currentHeatingSetpoint = 50 + this.heatingSetpoint = 50 + this.thermostatSetpoint = 60 + this.thermostatFanMode = "circulate" + this.thermostatLatestFanMode = "circulate" + this.thermostatMode = "off" + this.currentThermostatMode = "off" + this.thermostatLatestMode = "off" + } thermostats.add(new Thermostat(sendEvent, id, label, displayName, this.temperature, this.currentCoolingSetpoint, this.currentHeatingSetpoint, this.coolingSetpoint, this.thermostatSetpoint, this.heatingSetpoint, this.coolingSetpointRange, this.thermostatSetpointRange, this.heatingSetpointRange, this.supportedThermostatFanModes, this.supportedThermostatModes, - this.thermostatOperatingState, this.thermostatFanMode, this.thermostatMode, this.climateName)) + this.thermostatOperatingState, this.thermostatFanMode, this.thermostatMode, this.climateName, + this.thermostatLatestMode, this.thermostatLatestOperatingState, this.thermostatLatestFanMode, this.latestCoolingSetPoint, + this.latestThermostatSetPoint, this.latestHeatingSetPoint)) } //Methods for closures @@ -54,21 +91,38 @@ public class Thermostats{ def find(Closure Input) { thermostats.find(Input) } + def sort(Closure Input) { + thermostats.sort(Input) + } def collect(Closure Input) { thermostats.collect(Input) } //By Apps def setCoolingSetpoint(int coolingSetpoint) { - thermostats[0].setCoolingSetpoint(coolingSetpoint) - this.currentCoolingSetpoint = coolingSetpoint - this.coolingSetpoint = coolingSetpoint + if (coolingSetpoint != this.coolingSetpoint) { + this.latestCoolingSetPoint = coolingSetpoint + this.currentCoolingSetpoint = coolingSetpoint + this.coolingSetpoint = coolingSetpoint + thermostats[0].setCoolingSetpoint(coolingSetpoint) + } + } + + def setCoolingSetpoint(String coolingSetpoint) { + setCoolingSetpoint(coolingSetpoint.toInteger()) } def setHeatingSetpoint(int heatingSetpoint) { - thermostats[0].setHeatingSetpoint(heatingSetpoint) - this.currentHeatingSetpoint = heatingSetpoint - this.heatingSetpoint = heatingSetpoint + if (heatingSetpoint != this.heatingSetpoint) { + this.latestHeatingSetPoint = heatingSetpoint + this.currentHeatingSetpoint = heatingSetpoint + this.heatingSetpoint = heatingSetpoint + thermostats[0].setHeatingSetpoint(heatingSetpoint) + } + } + + def setHeatingSetpoint(String heatingSetpoint) { + setHeatingSetpoint(heatingSetpoint.toInteger()) } def setSchedule() { @@ -76,63 +130,149 @@ public class Thermostats{ } def setThermostatFanMode(String thermostatFanMode) { - thermostats[0].setThermostatFanMode(thermostatFanMode) - this.thermostatFanMode = thermostatFanMode + if (thermostatFanMode != this.thermostatFanMode) { + this.thermostatLatestFanMode = thermostatFanMode + this.thermostatFanMode = thermostatFanMode + thermostats[0].setThermostatFanMode(thermostatFanMode) + } } def setThermostatMode(String thermostatMode) { - thermostats[0].setThermostatMode(thermostatMode) - this.thermostatMode = thermostatMode - this.currentThermostatMode = currentThermostatMode + if (thermostatMode != this.thermostatMode) { + this.thermostatLatestMode = thermostatMode + this.thermostatMode = thermostatMode + this.currentThermostatMode = currentThermostatMode + thermostats[0].setThermostatMode(thermostatMode) + } } def cool() { - thermostats[0].cool() - this.thermostatMode = "cool" - this.currentThermostatMode = "cool" + if (thermostatMode != "cool") { + this.thermostatLatestMode = "cool" + this.thermostatMode = "cool" + this.currentThermostatMode = "cool" + thermostats[0].cool() + } } def heat() { - thermostats[0].heat() - this.thermostatMode = "heat" - this.currentThermostatMode = "heat" + if (thermostatMode != "heat") { + this.thermostatLatestMode = "heat" + this.thermostatMode = "heat" + this.currentThermostatMode = "heat" + thermostats[0].heat() + } } - + def auto() { - thermostats[0].auto() - this.thermostatMode = "auto" - this.currentThermostatMode = "auto" + if (thermostatMode != "auto") { + this.thermostatLatestMode = "auto" + this.thermostatMode = "auto" + this.currentThermostatMode = "auto" + thermostats[0].auto() + } + } + + def emergencyHeat() { + if (thermostatMode != "emergencyHeat") { + this.thermostatLatestMode = "emergencyHeat" + this.thermostatMode = "emergencyHeat" + this.currentThermostatMode = "emergencyHeat" + thermostats[0].emergencyHeat() + } } def off() { - thermostats[0].off() - this.thermostatMode = "off" - this.currentThermostatMode = "off" + if (thermostatMode != "off") { + this.thermostatLatestMode = "off" + this.thermostatMode = "off" + this.currentThermostatMode = "off" + thermostats[0].off() + } } def setClimate(String info, String givenClimateName) { - thermostats[0].setClimate(info, givenClimateName) - this.climateName = givenClimateName + if (givenClimateName != climateName) { + this.climateName = givenClimateName + thermostats[0].setClimate(info, givenClimateName) + } } def setHold(String info1, int coolingSetpoint, int heatingSetpoint, String info2, String info3) { - thermostats[0].setHold(info1, coolingSetpoint, heatingSetpoint, info2, info3) - this.currentCoolingSetpoint = coolingSetpoint - this.coolingSetpoint = coolingSetpoint - this.currentHeatingSetpoint = heatingSetpoint - this.heatingSetpoint = heatingSetpoint + if ((coolingSetpoint != this.coolingSetpoint) || (heatingSetpoint != this.heatingSetpoint)) { + this.currentCoolingSetpoint = coolingSetpoint + this.coolingSetpoint = coolingSetpoint + this.currentHeatingSetpoint = heatingSetpoint + this.heatingSetpoint = heatingSetpoint + this.latestCoolingSetPoint = coolingSetpoint + this.latestHeatingSetPoint = heatingSetpoint + thermostats[0].setHold(info1, coolingSetpoint, heatingSetpoint, info2, info3) + } } //By Model Checker def setValue(LinkedHashMap eventDataMap) { - if (eventDataMap["value"] != thermostats[0].thermostatMode) { - thermostats[0].setValue(eventDataMap["value"]) - this.thermostatMode = thermostats[0].thermostatMode - this.currentThermostatMode = thermostats[0].currentThermostatMode - sendEvent(eventDataMap) + if (eventDataMap["name"] == "temperature") { + if (eventDataMap["value"].toInteger() != thermostats[0].temperature) { + this.temperature = eventDataMap["value"].toInteger() + this.currentTemperature = eventDataMap["value"].toInteger() + thermostats[0].setValue(eventDataMap["value"], "temperature") + sendEvent(eventDataMap) + } + } else if (eventDataMap["name"] == "heatingSetpoint") { + if (eventDataMap["value"].toInteger() != thermostats[0].heatingSetpoint) { + this.latestHeatingSetPoint = eventDataMap["value"].toInteger() + this.heatingSetpoint = eventDataMap["value"].toInteger() + thermostats[0].setValue(eventDataMap["value"], "heatingSetpoint") + sendEvent(eventDataMap) + } + } else if (eventDataMap["name"] == "coolingSetpoint") { + if (eventDataMap["value"].toInteger() != thermostats[0].coolingSetpoint) { + this.latestCoolingSetPoint = eventDataMap["value"].toInteger() + this.coolingSetpoint = eventDataMap["value"].toInteger() + thermostats[0].setValue(eventDataMap["value"], "coolingSetpoint") + sendEvent(eventDataMap) + } + } else if (eventDataMap["name"] == "thermostatSetpoint") { + if (eventDataMap["value"].toInteger() != thermostats[0].thermostatSetpoint) { + this.latestThermostatSetPoint = eventDataMap["value"].toInteger() + this.thermostatSetpoint = eventDataMap["value"].toInteger() + thermostats[0].setValue(eventDataMap["value"], "thermostatSetpoint") + sendEvent(eventDataMap) + } + } else if (eventDataMap["name"] == "thermostatMode") { + if (eventDataMap["value"] != thermostats[0].thermostatMode) { + this.thermostatLatestMode = eventDataMap["value"] + this.thermostatMode = eventDataMap["value"] + this.currentThermostatMode = eventDataMap["value"] + thermostats[0].setValue(eventDataMap["value"], "thermostatMode") + sendEvent(eventDataMap) + } + } else if (eventDataMap["name"] == "thermostatFanMode") { + if (eventDataMap["value"] != thermostats[0].thermostatFanMode) { + this.thermostatLatestFanMode = eventDataMap["value"] + this.thermostatFanMode = eventDataMap["value"] + thermostats[0].setValue(eventDataMap["value"], "thermostatFanMode") + sendEvent(eventDataMap) + } + } else if (eventDataMap["name"] == "thermostatOperatingState") { + if (eventDataMap["value"] != thermostats[0].thermostatOperatingState) { + this.thermostatLatestOperatingState = eventDataMap["value"] + this.thermostatOperatingState = eventDataMap["value"] + thermostats[0].setValue(eventDataMap["value"], "thermostatOperatingState") + sendEvent(eventDataMap) + } } } + def currentValue(String deviceFeature) { + thermostats[0].currentValue(deviceFeature) + } + + def latestValue(String deviceFeature) { + thermostats[0].latestValue(deviceFeature) + } + def getAt(int ix) { thermostats[ix] }