Adding event for Power as variation is needed in power values.
[smartthings-infrastructure.git] / Runner.py
1 import os
2
3 #Create directory for files to append in the main file
4
5 #Extract information from preferences and subscribe method to create required objects
6 os.system("python Extractor/ExtractorScript.py")
7
8 #Files for both Apps
9 Out = open("main.groovy", "w+")
10 GlobalVariablesBothApps = open("GlobalVariables/"+"GlobalVariablesBothApps.groovy", "r")
11 eventSimulator = open("eventSimulator/"+"eventSimulator.groovy", "r")
12
13 #For App1
14 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
15 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
16 subscribe = open("Methods/"+"subscribe.groovy", "r")
17 runIn = open("Methods/"+"runIn.groovy", "r")
18 unschedule = open("Methods/"+"unschedule.groovy", "r")
19 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
20 sendSms = open("Methods/"+"sendSms.groovy", "r")
21 sendPush = open("Methods/"+"sendPush.groovy", "r")
22 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
23 schedule = open("Methods/"+"schedule.groovy", "r")
24 httpPostJson = open("Methods/"+"httpPostJson.groovy", "r")
25 now = open("Methods/"+"now.groovy", "r")
26 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
27 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
28 runEvery15Minutes = open("Methods/"+"runEvery15Minutes.groovy", "r")
29 timeToday = open("Methods/"+"timeToday.groovy", "r")
30 sendNotification = open("Methods/"+"sendNotification.groovy", "r")
31 canSchedule = open("Methods/"+"canSchedule.groovy", "r")
32 createAccessToken = open("Methods/"+"createAccessToken.groovy", "r")
33 runOnce = open("Methods/"+"runOnce.groovy", "r")
34 parseJson = open("Methods/"+"parseJson.groovy", "r")
35 unsubscribe = open("Methods/"+"unsubscribe.groovy", "r")
36 App1 = open("Extractor/"+"App1/App1.groovy", "r")
37 extractedObjectsApp1 = open("Extractor/"+"App1/extractedObjectsApp1.groovy", "r")
38 extractedObjectsConstructorApp1 = open("Extractor/"+"App1/extractedObjectsConstructorApp1.groovy", "r")
39 extractedFunctionsApp1 = open("Extractor/"+"App1/extractedFunctionsApp1.groovy", "r")
40
41
42
43
44 Out.write("//Infrastructure for SmartThings Application\n")
45 Out.write("//Importing Libraries\n")
46 Out.write("import groovy.transform.Field\n")
47 Out.write("import groovy.json.JsonSlurper\n")
48 Out.write("\n")
49 Out.write("//Importing Classes\n")
50 Out.write("import ContactSensor.ContactSensor\n")
51 Out.write("import ContactSensor.ContactSensors\n")
52 Out.write("import DoorControl.DoorControl\n")
53 Out.write("import DoorControl.DoorControls\n")
54 Out.write("import Lock.Lock\n")
55 Out.write("import Lock.Locks\n")
56 Out.write("import Thermostat.Thermostat\n")
57 Out.write("import Thermostat.Thermostats\n")
58 Out.write("import Switch.Switch\n")
59 Out.write("import Switch.Switches\n")
60 Out.write("import PresenceSensor.PresenceSensor\n")
61 Out.write("import PresenceSensor.PresenceSensors\n")
62 Out.write("import Logger.Logger\n")
63 Out.write("import Location.LocationVar\n")
64 Out.write("import Location.Phrase\n")
65 Out.write("import appTouch.Touched\n")
66 Out.write("import NfcTouch.NfcTouch\n")
67 Out.write("import AeonKeyFob.AeonKeyFob\n")
68 Out.write("import AeonKeyFob.AeonKeyFobs\n")
69 Out.write("import MusicPlayer.MusicPlayer\n")
70 Out.write("import MusicPlayer.MusicPlayers\n")
71 Out.write("import MotionSensor.MotionSensor\n")
72 Out.write("import MotionSensor.MotionSensors\n")
73 Out.write("import ImageCapture.ImageCapture\n")
74 Out.write("import ImageCapture.ImageCaptures\n")
75 Out.write("import SmokeDetector.SmokeDetector\n")
76 Out.write("import SmokeDetector.SmokeDetectors\n")
77 Out.write("import Alarm.Alarm\n")
78 Out.write("import Alarm.Alarms\n")
79 Out.write("import SpeechSynthesis.SpeechSynthesis\n")
80 Out.write("import SpeechSynthesis.SpeechSynthesises\n")
81 Out.write("import AccelerationSensor.AccelerationSensor\n")
82 Out.write("import AccelerationSensor.AccelerationSensors\n")
83 Out.write("import Battery.Battery\n")
84 Out.write("import Battery.Batteries\n")
85 Out.write("import BeaconSensor.BeaconSensor\n")
86 Out.write("import BeaconSensor.BeaconSensors\n")
87 Out.write("import CarbonMonoxideDetector.CarbonMonoxideDetector\n")
88 Out.write("import CarbonMonoxideDetector.CarbonMonoxideDetectors\n")
89 Out.write("import ColorControl.ColorControl\n")
90 Out.write("import ColorControl.ColorControls\n")
91 Out.write("import EnergyMeter.EnergyMeter\n")
92 Out.write("import EnergyMeter.EnergyMeters\n")
93 Out.write("import IlluminanceMeasurement.IlluminanceMeasurement\n")
94 Out.write("import IlluminanceMeasurement.IlluminanceMeasurements\n")
95 Out.write("import PowerMeter.PowerMeter\n")
96 Out.write("import PowerMeter.PowerMeters\n")
97 Out.write("import RelativeHumidityMeasurement.RelativeHumidityMeasurement\n")
98 Out.write("import RelativeHumidityMeasurement.RelativeHumidityMeasurements\n")
99 Out.write("import RelaySwitch.RelaySwitch\n")
100 Out.write("import RelaySwitch.RelaySwitches\n")
101 Out.write("import SleepSensor.SleepSensor\n")
102 Out.write("import SleepSensor.SleepSensors\n")
103 Out.write("import StepSensor.StepSensor\n")
104 Out.write("import StepSensor.StepSensors\n")
105 Out.write("import SwitchLevel.SwitchLevel\n")
106 Out.write("import SwitchLevel.SwitchLevels\n")
107 Out.write("import TemperatureMeasurement.TemperatureMeasurement\n")
108 Out.write("import TemperatureMeasurement.TemperatureMeasurements\n")
109 Out.write("import WaterSensor.WaterSensor\n")
110 Out.write("import WaterSensor.WaterSensors\n")
111 Out.write("import Valve.Valve\n")
112 Out.write("import Valve.Valves\n")
113 Out.write("import MobilePresence.MobilePresence\n")
114 Out.write("import MobilePresence.MobilePresences\n")
115 Out.write("import ColorTemperature.ColorTemperature\n")
116 Out.write("import ColorTemperature.ColorTemperatures\n")
117 Out.write("import Button.Button\n")
118 Out.write("import Button.Buttons\n")
119 Out.write("import ThreeAxis.ThreeAxis\n")
120 Out.write("import ThreeAxis.ThreeAxises\n")
121 Out.write("import Momentary.Momentary\n")
122 Out.write("import Momentary.Momentaries\n")
123 Out.write("import Event.Event\n")
124 Out.write("import Timer.SimulatedTimer\n")
125 Out.write("\n")
126 Out.write("//JPF's Verify API\n")
127 Out.write("import gov.nasa.jpf.vm.Verify\n")
128 Out.write("\n")
129 Out.write("//Global eventHandler\n")
130 for line in eventHandler:
131         Out.write(line)
132 Out.write("\n")
133 Out.write("//GlobalVariables for both Apps\n")
134 Out.write("@Field def init = Verify.getBoolean()\n\n")
135 for line in GlobalVariablesBothApps:
136         Out.write(line)
137 Out.write("\n")
138 Out.write("//Application #1\n")
139 Out.write("class App1 {\n")
140 Out.write("\tdef reference\n")
141 Out.write("\tdef location\n")
142 Out.write("\tdef app\n")
143 Out.write("\n")
144 Out.write("\t//Extracted objects for App1\n")
145 for line in extractedObjectsApp1:
146         Out.write("\t"+line)
147 Out.write("\n")
148 Out.write("\t//Extracted objects for functions for App1\n")
149 for line in extractedFunctionsApp1:
150         Out.write("\t"+line)
151 Out.write("\n")
152 Out.write("\tApp1(Object obj) {\n")
153 Out.write("\t\treference = obj\n")
154 Out.write("\t\tlocation = obj.locationObject\n")
155 Out.write("\t\tapp = obj.appObject\n")
156 for line in extractedObjectsConstructorApp1:
157         Out.write("\t\t"+line)
158 Out.write("\t}\n")
159 Out.write("\t//Global variables for each app\n")
160 for line in GlobalVariablesEachApp:
161         Out.write("\t"+line)
162 Out.write("\n")
163 Out.write("\t//Methods\n")
164 for line in setLocationMode:
165         Out.write("\t"+line)
166 for line in subscribe:
167         Out.write("\t"+line)
168 for line in runIn:
169         Out.write("\t"+line)
170 for line in unschedule:
171         Out.write("\t"+line)
172 for line in sendNotificationToContacts:
173         Out.write("\t"+line)
174 for line in sendSms:
175         Out.write("\t"+line)
176 for line in sendPush:
177         Out.write("\t"+line)
178 for line in schedule:
179         Out.write("\t"+line)
180 for line in now:
181         Out.write("\t"+line)
182 for line in getTemperatureScale:
183         Out.write("\t"+line)
184 for line in getSunriseAndSunset:
185         Out.write("\t"+line)
186 for line in httpPostJson:
187         Out.write("\t"+line)
188 for line in runEvery15Minutes:
189         Out.write("\t"+line)
190 for line in timeToday:
191         Out.write("\t"+line)
192 for line in sendNotification:
193         Out.write("\t"+line)
194 for line in canSchedule:
195         Out.write("\t"+line)
196 for line in createAccessToken:
197         Out.write("\t"+line)
198 for line in runOnce:
199         Out.write("\t"+line)
200 for line in parseJson:
201         Out.write("\t"+line)
202 for line in unsubscribe:
203         Out.write("\t"+line)
204 Out.write("\n")
205 Start = 0
206 for line in App1:
207         if ("def " in line):
208                 Start = 1
209         if (Start):
210                 Out.write("\t"+line)
211 Out.write("}\n")
212 Out.write("\n")
213 Out.write("\n")
214 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
215
216 #For App2
217 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
218 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
219 subscribe = open("Methods/"+"subscribe.groovy", "r")
220 runIn = open("Methods/"+"runIn.groovy", "r")
221 unschedule = open("Methods/"+"unschedule.groovy", "r")
222 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
223 sendSms = open("Methods/"+"sendSms.groovy", "r")
224 sendPush = open("Methods/"+"sendPush.groovy", "r")
225 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
226 schedule = open("Methods/"+"schedule.groovy", "r")
227 now = open("Methods/"+"now.groovy", "r")
228 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
229 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
230 httpPostJson = open("Methods/"+"httpPostJson.groovy", "r")
231 runEvery15Minutes = open("Methods/"+"runEvery15Minutes.groovy", "r")
232 timeToday = open("Methods/"+"timeToday.groovy", "r")
233 sendNotification = open("Methods/"+"sendNotification.groovy", "r")
234 canSchedule = open("Methods/"+"canSchedule.groovy", "r")
235 createAccessToken = open("Methods/"+"createAccessToken.groovy", "r")
236 runOnce = open("Methods/"+"runOnce.groovy", "r")
237 parseJson = open("Methods/"+"parseJson.groovy", "r")
238 unsubscribe = open("Methods/"+"unsubscribe.groovy", "r")
239 App2 = open("Extractor/"+"App2/App2.groovy", "r")
240 extractedObjectsApp2 = open("Extractor/"+"App2/extractedObjectsApp2.groovy", "r")
241 extractedObjectsConstructorApp2 = open("Extractor/"+"App2/extractedObjectsConstructorApp2.groovy", "r")
242 extractedFunctionsApp2 = open("Extractor/"+"App2/extractedFunctionsApp2.groovy", "r")
243
244 Out.write("//Application #2\n")
245 Out.write("class App2 {\n")
246 Out.write("\tdef reference\n")
247 Out.write("\tdef location\n")
248 Out.write("\tdef app\n")
249 Out.write("\n")
250 Out.write("\t//Extracted objects for App2\n")
251 for line in extractedObjectsApp2:
252         Out.write("\t"+line)
253 Out.write("\n")
254 Out.write("\t//Extracted objects for functions for App2\n")
255 for line in extractedFunctionsApp2:
256         Out.write("\t"+line)
257 Out.write("\n")
258 Out.write("\tApp2(Object obj) {\n")
259 Out.write("\t\treference = obj\n")
260 Out.write("\t\tlocation = obj.locationObject\n")
261 Out.write("\t\tapp = obj.appObject\n")
262 for line in extractedObjectsConstructorApp2:
263         Out.write("\t\t"+line)
264 Out.write("\t}\n")
265 Out.write("\t//Global variables for each app\n")
266 for line in GlobalVariablesEachApp:
267         Out.write("\t"+line)
268 Out.write("\n")
269 Out.write("\t//Methods\n")
270 for line in setLocationMode:
271         Out.write("\t"+line)
272 for line in subscribe:
273         Out.write("\t"+line)
274 for line in runIn:
275         Out.write("\t"+line)
276 for line in unschedule:
277         Out.write("\t"+line)
278 for line in sendNotificationToContacts:
279         Out.write("\t"+line)
280 for line in sendSms:
281         Out.write("\t"+line)
282 for line in sendPush:
283         Out.write("\t"+line)
284 for line in schedule:
285         Out.write("\t"+line)
286 for line in now:
287         Out.write("\t"+line)
288 for line in getTemperatureScale:
289         Out.write("\t"+line)
290 for line in getSunriseAndSunset:
291         Out.write("\t"+line)
292 for line in httpPostJson:
293         Out.write("\t"+line)
294 for line in runEvery15Minutes:
295         Out.write("\t"+line)
296 for line in timeToday:
297         Out.write("\t"+line)
298 for line in sendNotification:
299         Out.write("\t"+line)
300 for line in canSchedule:
301         Out.write("\t"+line)
302 for line in createAccessToken:
303         Out.write("\t"+line)
304 for line in runOnce:
305         Out.write("\t"+line)
306 for line in parseJson:
307         Out.write("\t"+line)
308 for line in unsubscribe:
309         Out.write("\t"+line)
310 Out.write("\n")
311 Start = 0
312 for line in App2:
313         if ("def " in line):
314                 Start = 1
315         if (Start):
316                 Out.write("\t"+line)
317 Out.write("}\n")
318 Out.write("\n")
319 Out.write("@Field def app1\n")
320 Out.write("@Field def app2\n")
321 Out.write("//def initOrder = Verify.getBoolean()\n")
322 Out.write("//if (initOrder) {\n")
323 Out.write("\tapp1 = new App1(this)\n")
324 Out.write("\tapp2 = new App2(this)\n")
325 Out.write("//} else {\n")
326 Out.write("\t//app2 = new App2(this)\n")
327 Out.write("\t//app1 = new App1(this)\n")
328 Out.write("//}\n\n")
329 Out.write("//def installOrder = Verify.getBoolean()\n")
330 Out.write("//if (installOrder) {\n")
331 Out.write("\tapp1.installed()\n")
332 Out.write("\tapp2.installed()\n")
333 Out.write("//} else {\n")
334 Out.write("\t//app2.installed()\n")
335 Out.write("\t//app1.installed()\n")
336 Out.write("//}\n\n")
337 for line in eventSimulator:
338         Out.write(line)
339 Out.close()
340
341
342
343