//Create a class for thermostat device package Thermostat import Timer.SimulatedTimer public class Thermostats{ int deviceNumbers List thermostats def sendEvent def timers //When we have only one device private String id = "thermostatID0" private String label = "thermostat0" private String displayName = "thermostat0" private int temperature = 66 private int currentCoolingSetpoint = 70 private int currentHeatingSetpoint = 50 private int coolingSetpoint = 70 private int thermostatSetpoint = 60 private int heatingSetpoint = 50 private coolingSetpointRange = [70, 90] private thermostatSetpointRange = [50, 70] private heatingSetpointRange = [20, 50] private supportedThermostatFanModes = ["auto", "fanCirculate", "circulate", "fanOn", "on"] private supportedThermostatModes = ["auto", "cool", "emergencyHeat", "heat", "off"] private String thermostatOperatingState = "cooling" private String thermostatFanMode = "auto" private String thermostatMode = "auto" private String currentThermostatMode = "auto" private String climateName = "" Thermostats(Closure sendEvent, int deviceNumbers) { this.sendEvent = sendEvent this.timers = new SimulatedTimer() this.deviceNumbers = deviceNumbers this.thermostats = [] 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)) } //Methods for closures def count(Closure Input) { thermostats.count(Input) } def size() { thermostats.size() } def each(Closure Input) { thermostats.each(Input) } def find(Closure Input) { thermostats.find(Input) } def collect(Closure Input) { thermostats.collect(Input) } //By Apps def setCoolingSetpoint(int coolingSetpoint) { thermostats[0].setCoolingSetpoint(coolingSetpoint) this.currentCoolingSetpoint = coolingSetpoint this.coolingSetpoint = coolingSetpoint } def setHeatingSetpoint(int heatingSetpoint) { thermostats[0].setHeatingSetpoint(heatingSetpoint) this.currentHeatingSetpoint = heatingSetpoint this.heatingSetpoint = heatingSetpoint } def setSchedule() { //Not implemented yet } def setThermostatFanMode(String thermostatFanMode) { thermostats[0].setThermostatFanMode(thermostatFanMode) this.thermostatFanMode = thermostatFanMode } def setThermostatMode(String thermostatMode) { thermostats[0].setThermostatMode(thermostatMode) this.thermostatMode = thermostatMode this.currentThermostatMode = currentThermostatMode } def cool() { thermostats[0].cool() this.thermostatMode = "cool" this.currentThermostatMode = "cool" } def heat() { thermostats[0].heat() this.thermostatMode = "heat" this.currentThermostatMode = "heat" } def auto() { thermostats[0].auto() this.thermostatMode = "auto" this.currentThermostatMode = "auto" } def off() { thermostats[0].off() this.thermostatMode = "off" this.currentThermostatMode = "off" } def setClimate(String info, String givenClimateName) { thermostats[0].setClimate(info, givenClimateName) this.climateName = 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 } //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) } } def getAt(int ix) { thermostats[ix] } }