import Timer.SimulatedTimer
public class Thermostat {
- private int id
+ private String id
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
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, int id, String label, String displayName, int temperature, int currentCoolingSetpoint, int currentHeatingSetpoint, int coolingSetpoint,
+ 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
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() {
}
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
+ }
+
}