Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / Thermostat / Thermostats.groovy
1 //Create a class for thermostat device
2 package Thermostat
3 import Timer.SimulatedTimer
4
5 public class Thermostats{
6         int deviceNumbers       
7         List thermostats        
8         def sendEvent   
9         def timers
10
11         //When we have only one device
12         private String id = "thermostatID0"
13         private String label = "thermostat0"
14         private String displayName = "thermostat0"
15         private int temperature = 66
16         private int currentCoolingSetpoint = 70
17         private int currentHeatingSetpoint = 50
18         private int coolingSetpoint = 70
19         private int thermostatSetpoint = 60
20         private int heatingSetpoint = 50
21         private coolingSetpointRange = [70, 90]
22         private thermostatSetpointRange = [50, 70]
23         private heatingSetpointRange = [20, 50]
24         private supportedThermostatFanModes = ["auto", "fanCirculate", "circulate", "fanOn", "on"]
25         private supportedThermostatModes = ["auto", "cool", "emergencyHeat", "heat", "off"]
26         private String thermostatOperatingState = "cooling"
27         private String thermostatFanMode = "auto"
28         private String thermostatMode = "auto"
29         private String currentThermostatMode = "auto"
30         private String climateName = ""
31
32         Thermostats(Closure sendEvent, int deviceNumbers) {
33                 this.sendEvent = sendEvent
34                 this.timers = new SimulatedTimer()
35                 this.deviceNumbers = deviceNumbers
36                 this.thermostats = []
37
38                 thermostats.add(new Thermostat(sendEvent, id, label, displayName, this.temperature, this.currentCoolingSetpoint, 
39                                                this.currentHeatingSetpoint, this.coolingSetpoint, this.thermostatSetpoint, this.heatingSetpoint, this.coolingSetpointRange,
40                                                this.thermostatSetpointRange, this.heatingSetpointRange, this.supportedThermostatFanModes, this.supportedThermostatModes,
41                                                this.thermostatOperatingState, this.thermostatFanMode,  this.thermostatMode, this.climateName))
42         }
43
44         //Methods for closures
45         def count(Closure Input) {
46                 thermostats.count(Input)
47         }
48         def size() {
49                 thermostats.size()
50         }
51         def each(Closure Input) {
52                 thermostats.each(Input)
53         }
54         def find(Closure Input) {
55                 thermostats.find(Input)
56         }
57         def collect(Closure Input) {
58                 thermostats.collect(Input)
59         }
60
61         //By Apps
62         def setCoolingSetpoint(int coolingSetpoint) {
63                 thermostats[0].setCoolingSetpoint(coolingSetpoint)
64                 this.currentCoolingSetpoint = coolingSetpoint
65                 this.coolingSetpoint = coolingSetpoint
66         }
67
68         def setHeatingSetpoint(int heatingSetpoint) {
69                 thermostats[0].setHeatingSetpoint(heatingSetpoint)
70                 this.currentHeatingSetpoint = heatingSetpoint
71                 this.heatingSetpoint = heatingSetpoint
72         }
73
74         def setSchedule() {
75                 //Not implemented yet
76         }
77
78         def setThermostatFanMode(String thermostatFanMode) {
79                 thermostats[0].setThermostatFanMode(thermostatFanMode)
80                 this.thermostatFanMode = thermostatFanMode
81         }
82
83         def setThermostatMode(String thermostatMode) {
84                 thermostats[0].setThermostatMode(thermostatMode)
85                 this.thermostatMode = thermostatMode
86                 this.currentThermostatMode = currentThermostatMode
87         }
88
89         def cool() {
90                 thermostats[0].cool()
91                 this.thermostatMode = "cool"
92                 this.currentThermostatMode = "cool"
93         }
94
95         def heat() {
96                 thermostats[0].heat()
97                 this.thermostatMode = "heat"
98                 this.currentThermostatMode = "heat"
99         }
100
101         def auto() {
102                 thermostats[0].auto()
103                 this.thermostatMode = "auto"
104                 this.currentThermostatMode = "auto"
105         }
106
107         def off() {
108                 thermostats[0].off()
109                 this.thermostatMode = "off"
110                 this.currentThermostatMode = "off"
111         }
112
113         def setClimate(String info, String givenClimateName) {
114                 thermostats[0].setClimate(info, givenClimateName)
115                 this.climateName = givenClimateName
116         }
117
118         def setHold(String info1, int coolingSetpoint, int heatingSetpoint, String info2, String info3) {
119                 thermostats[0].setHold(info1, coolingSetpoint, heatingSetpoint, info2, info3)
120                 this.currentCoolingSetpoint = coolingSetpoint
121                 this.coolingSetpoint = coolingSetpoint
122                 this.currentHeatingSetpoint = heatingSetpoint
123                 this.heatingSetpoint = heatingSetpoint
124         }
125
126         //By Model Checker
127         def setValue(LinkedHashMap eventDataMap) {
128                 if (eventDataMap["value"] != thermostats[0].thermostatMode) {
129                         thermostats[0].setValue(eventDataMap["value"])
130                         this.thermostatMode = thermostats[0].thermostatMode
131                         this.currentThermostatMode = thermostats[0].currentThermostatMode
132                         sendEvent(eventDataMap)
133                 }
134         }
135
136         def getAt(int ix) {
137                 thermostats[ix]
138         }
139 }
140