4 ////////////////////////////////////////
6 import groovy.transform.Field
11 import ContactSensor.ContactSensor
12 import ContactSensor.ContactSensors
13 import DoorControl.DoorControl
14 import DoorControl.DoorControls
17 import Thermostat.Thermostat
18 import Thermostat.Thermostats
20 import Switch.Switches
21 import PresenceSensor.PresenceSensor
22 import PresenceSensor.PresenceSensors
24 import Location.LocationVar
25 import Location.Phrase
26 import appTouch.Touched
27 import NfcTouch.NfcTouch
28 import AeonKeyFob.AeonKeyFob
29 import AeonKeyFob.AeonKeyFobs
30 import MusicPlayer.MusicPlayer
31 import MusicPlayer.MusicPlayers
32 import MotionSensor.MotionSensor
33 import MotionSensor.MotionSensors
34 import ImageCapture.ImageCapture
35 import ImageCapture.ImageCaptures
36 import SmokeDetector.SmokeDetector
37 import SmokeDetector.SmokeDetectors
40 import SpeechSynthesis.SpeechSynthesis
41 import SpeechSynthesis.SpeechSynthesises
42 import AccelerationSensor.AccelerationSensor
43 import AccelerationSensor.AccelerationSensors
44 import Battery.Battery
45 import Battery.Batteries
46 import BeaconSensor.BeaconSensor
47 import BeaconSensor.BeaconSensors
48 import CarbonMonoxideDetector.CarbonMonoxideDetector
49 import CarbonMonoxideDetector.CarbonMonoxideDetectors
50 import ColorControl.ColorControl
51 import ColorControl.ColorControls
52 import EnergyMeter.EnergyMeter
53 import EnergyMeter.EnergyMeters
54 import IlluminanceMeasurement.IlluminanceMeasurement
55 import IlluminanceMeasurement.IlluminanceMeasurements
56 import PowerMeter.PowerMeter
57 import PowerMeter.PowerMeters
58 import RelativeHumidityMeasurement.RelativeHumidityMeasurement
59 import RelativeHumidityMeasurement.RelativeHumidityMeasurements
60 import RelaySwitch.RelaySwitch
61 import RelaySwitch.RelaySwitches
62 import SleepSensor.SleepSensor
63 import SleepSensor.SleepSensors
64 import StepSensor.StepSensor
65 import StepSensor.StepSensors
66 import SwitchLevel.SwitchLevel
67 import SwitchLevel.SwitchLevels
68 import TemperatureMeasurement.TemperatureMeasurement
69 import TemperatureMeasurement.TemperatureMeasurements
70 import WaterSensor.WaterSensor
71 import WaterSensor.WaterSensors
74 import MobilePresence.MobilePresence
75 import MobilePresence.MobilePresences
76 import Timer.SimulatedTimer
79 @Field def location = new LocationVar()
80 //Settings variable defined to settings on purpose
81 @Field def settings = [app: "app"]
82 //Global variable for state[mode]
83 @Field def state = [home:[],away:[],night:[]]
84 //Create a global logger object for methods
85 @Field def log = new Logger()
86 //Create a global variable for optional property
87 @Field def optional = false //by default for now
90 //Global variables for files
91 @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy")
92 @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy")
93 @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy")
94 @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy")
99 extractedObjectsApp1.write("")
100 extractedObjectsConstructorApp1.write("")
101 } else if (App == "App2") {
102 extractedObjectsApp2.write("")
103 extractedObjectsConstructorApp2.write("")
108 //Some of methods-May be needed even in install
109 /////////////////////////////////////////////////////////////////////
110 def timeToday(String time, Object timeZone) {
111 def timeOfDay = new Date()
112 def _inputTime = time.split(':')
113 def inputTime = Integer.parseInt(_inputTime[0])*3600+Integer.parseInt(_inputTime[1])*60+1564191100415
114 timeOfDay.time = inputTime
121 //Global Object for class Touch Sensor!
122 @Field touchSensorObjects = 0
123 @Field def touchSensorObject0
124 @Field def touchSensorObject1
125 @Field def touchSensorObject2
126 //Global Object for class switch!
127 @Field switchObjects = 0
128 @Field def switchObject0
129 @Field def switchObject1
130 @Field def switchObject2
131 //Global Object for class lock!
132 @Field lockObjects = 0
133 @Field def lockObject0
134 @Field def lockObject1
135 @Field def lockObject2
136 //Global Object for class door control!
137 @Field doorControlObjects = 0
138 @Field def doorControlObject0
139 @Field def doorControlObject1
140 @Field def doorControlObject2
141 //Global Object for class contact sensor!
142 @Field contactObjects = 0
143 @Field def contactObject0
144 @Field def contactObject1
145 @Field def contactObject2
146 //Global Object for class presence sensor!
147 @Field presenceSensorObjects = 0
148 @Field def presenceSensorObject0
149 @Field def presenceSensorObject1
150 @Field def presenceSensorObject2
151 //Global Object for class thermostat!
152 @Field thermostatObjects = 0
153 @Field def thermostatObject0
154 @Field def thermostatObject1
155 @Field def thermostatObject2
156 //Global Object for class music player!
157 @Field musicPlayerObjects = 0
158 @Field def musicPlayerObject0
159 @Field def musicPlayerObject1
160 @Field def musicPlayerObject2
161 //Global Object for class aeon key fob!
162 @Field aeonKeyFobObjects = 0
163 @Field def aeonKeyFobObject0
164 @Field def aeonKeyFobObject1
165 @Field def aeonKeyFobObject2
166 //Global Object for class motion sensor!
167 @Field motionSensorObjects = 0
168 @Field def motionSensorObject0
169 @Field def motionSensorObject1
170 @Field def motionSensorObject2
171 //Global Object for class image capture!
172 @Field imageCaptureObjects = 0
173 @Field def imageCaptureObject0
174 @Field def imageCaptureObject1
175 @Field def imageCaptureObject2
176 //Global Object for class smoke detector!
177 @Field smokeDetectorObjects = 0
178 @Field def smokeDetectorObject0
179 @Field def smokeDetectorObject1
180 @Field def smokeDetectorObject2
181 //Global Object for class alarm!
182 @Field alarmObjects = 0
183 @Field def alarmObject0
184 @Field def alarmObject1
185 @Field def alarmObject2
186 //Global Object for class speech synthesis!
187 @Field speechSynthesisObjects = 0
188 @Field def speechSynthesisObject0
189 @Field def speechSynthesisObject1
190 @Field def speechSynthesisObject2
191 //Global Object for class acceleration sensor!
192 @Field accelerationSensorObjects = 0
193 @Field def accelerationSensorObject0
194 @Field def accelerationSensorObject1
195 @Field def accelerationSensorObject2
196 //Global Object for class battery!
197 @Field batteryObjects = 0
198 @Field def batteryObject0
199 @Field def batteryObject1
200 @Field def batteryObject2
201 //Global Object for class beacon sensor!
202 @Field beaconSensorObjects = 0
203 @Field def beaconSensorObject0
204 @Field def beaconSensorObject1
205 @Field def beaconSensorObject2
206 //Global Object for class carbon monoxide detector!
207 @Field carbonMonoxideDetectorObjects = 0
208 @Field def carbonMonoxideDetectorObject0
209 @Field def carbonMonoxideDetectorObject1
210 @Field def carbonMonoxideDetectorObject2
211 //Global Object for class color control!
212 @Field colorControlObjects = 0
213 @Field def colorControlObject0
214 @Field def colorControlObject1
215 @Field def colorControlObject2
216 //Global Object for class energy meter!
217 @Field energyMeterObjects = 0
218 @Field def energyMeterObject0
219 @Field def energyMeterObject1
220 @Field def energyMeterObject2
221 //Global Object for class energy meter!
222 @Field illuminanceMeasurementObjects = 0
223 @Field def illuminanceMeasurementObject0
224 @Field def illuminanceMeasurementObject1
225 @Field def illuminanceMeasurementObject2
226 //Global Object for class power meter!
227 @Field powerMeterObjects = 0
228 @Field def powerMeterObject0
229 @Field def powerMeterObject1
230 @Field def powerMeterObject2
231 //Global Object for class power meter!
232 @Field humidityMeasurementObjects = 0
233 @Field def humidityMeasurementObject0
234 @Field def humidityMeasurementObject1
235 @Field def humidityMeasurementObject2
236 //Global Object for class relay switch!
237 @Field relaySwitchObjects = 0
238 @Field def relaySwitchObject0
239 @Field def relaySwitchObject1
240 @Field def relaySwitchObject2
241 //Global Object for class sleep sensor!
242 @Field sleepSensorObjects = 0
243 @Field def sleepSensorObject0
244 @Field def sleepSensorObject1
245 @Field def sleepSensorObject2
246 //Global Object for class sleep sensor!
247 @Field stepSensorObjects = 0
248 @Field def stepSensorObject0
249 @Field def stepSensorObject1
250 @Field def stepSensorObject2
251 //Global Object for class switch level!
252 @Field switchLevelObjects = 0
253 @Field def switchLevelObject0
254 @Field def switchLevelObject1
255 @Field def switchLevelObject2
256 //Global Object for class temperature measurement!
257 @Field temperatureMeasurementObjects = 0
258 @Field def temperatureMeasurementObject0
259 @Field def temperatureMeasurementObject1
260 @Field def temperatureMeasurementObject2
261 //Global Object for class temperature measurement!
262 @Field waterSensorObjects = 0
263 @Field def waterSensorObject0
264 @Field def waterSensorObject1
265 @Field def waterSensorObject2
266 //Global Object for class valve!
267 @Field valveObjects = 0
268 @Field def valveObject0
269 @Field def valveObject1
270 @Field def valveObject2
271 //Global Object for class valve!
272 @Field mobilePresenceObjects = 0
273 @Field def mobilePresenceObject0
274 @Field def mobilePresenceObject1
275 @Field def mobilePresenceObject2
281 @Field modeVariables = 0
289 @Field numberVariables = 0
297 @Field decimalVariables = 0
305 @Field timeVariables = 0
313 @Field enumVariables = 0
321 @Field phoneVariables = 0
329 @Field contactVariables = 0
337 @Field textVariables = 0
345 @Field boolVariables = 0
354 /////Input Methods/////
356 def input(String name, String type) {
357 LinkedHashMap metaData = []
358 metaData.put('name',name)
359 metaData.put('type',type)
363 //input "","",linkedHashMap
364 def input(LinkedHashMap metaData, String name, String type) {
365 metaData.put('name',name)
366 metaData.put('type',type)
370 //input "", "", linkedHashMap, Closure
371 def input(LinkedHashMap metaData, String name, String type, Closure Input) {
372 metaData.put('name',name)
373 metaData.put('type',type)
378 //input linkedHashMap
379 def input(LinkedHashMap metaData) {
380 if (metaData.containsKey('title')) {
381 println metaData['title']
383 if (metaData.containsKey('options')) {
384 println "Options: "+metaData['options']
386 switch(metaData['type']) {
387 case "capability.lock":
388 if (lockObjects == 0) {
389 lockObject0 = metaData['name']
390 this[lockObject0] = new Locks({}, 1)
391 } else if (lockObjects == 1) {
392 lockObject1 = metaData['name']
393 this[lockObject1] = new Locks({}, 1)
394 } else if (lockObjects == 2) {
395 lockObject2 = metaData['name']
396 this[lockObject2] = new Locks({}, 1)
399 lockObjects=lockObjects+1
401 settings.put(metaData['name'], metaData['name'])
404 extractedObjectsApp1.append("//Object for class lock!\n")
405 extractedObjectsApp1.append("def "+metaData['name']+"\n")
406 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")
408 extractedObjectsApp2.append("//Object for class lock!\n")
409 extractedObjectsApp2.append("def "+metaData['name']+"\n")
410 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
413 case "capability.alarm":
414 if (alarmObjects == 0) {
415 alarmObject0 = metaData['name']
416 this[alarmObject0] = new Alarms({}, 1)
417 } else if (alarmObjects == 1) {
418 alarmObject1 = metaData['name']
419 this[alarmObject1] = new Alarms({}, 1)
420 } else if (alarmObjects == 2) {
421 alarmObject2 = metaData['name']
422 this[alarmObject2] = new Alarms({}, 1)
425 alarmObjects=alarmObjects+1
427 settings.put(metaData['name'], metaData['name'])
430 extractedObjectsApp1.append("//Object for class alarm!\n")
431 extractedObjectsApp1.append("def "+metaData['name']+"\n")
432 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.alarmObject\n")
434 extractedObjectsApp2.append("//Object for class alarm!\n")
435 extractedObjectsApp2.append("def "+metaData['name']+"\n")
436 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.alarmObject\n")
439 case "capability.battery":
440 if (batteryObjects == 0) {
441 batteryObject0 = metaData['name']
442 this[batteryObject0] = new Batteries({}, 1)
443 } else if (batteryObjects == 1) {
444 batteryObject1 = metaData['name']
445 this[batteryObject1] = new Batteries({}, 1)
446 } else if (batteryObjects == 2) {
447 batteryObject2 = metaData['name']
448 this[batteryObject2] = new Batteries({}, 1)
451 batteryObjects=batteryObjects+1
453 settings.put(metaData['name'], metaData['name'])
456 extractedObjectsApp1.append("//Object for class Battery!\n")
457 extractedObjectsApp1.append("def "+metaData['name']+"\n")
458 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.batteryObject\n")
460 extractedObjectsApp2.append("//Object for class Battery!\n")
461 extractedObjectsApp2.append("def "+metaData['name']+"\n")
462 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.batteryObject\n")
465 case "capability.beacon":
466 if (beaconSensorObjects == 0) {
467 beaconSensorObject0 = metaData['name']
468 this[beaconSensorObject0] = new BeaconSensors({}, 1)
469 } else if (beaconSensorObjects == 1) {
470 beaconSensorObject1 = metaData['name']
471 this[beaconSensorObject1] = new BeaconSensors({}, 1)
472 } else if (beaconSensorObjects == 2) {
473 beaconSensorObject2 = metaData['name']
474 this[beaconSensorObject2] = new BeaconSensors({}, 1)
477 beaconSensorObjects=beaconSensorObjects+1
479 settings.put(metaData['name'], metaData['name'])
482 extractedObjectsApp1.append("//Object for class beacon sensor!\n")
483 extractedObjectsApp1.append("def "+metaData['name']+"\n")
484 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.beaconSensorObject\n")
486 extractedObjectsApp2.append("//Object for class beacon sensor!\n")
487 extractedObjectsApp2.append("def "+metaData['name']+"\n")
488 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.beaconSensorObject\n")
491 case "capability.carbonMonoxideDetector":
492 if (carbonMonoxideDetectorObjects == 0) {
493 carbonMonoxideDetectorObject0 = metaData['name']
494 this[carbonMonoxideDetectorObject0] = new CarbonMonoxideDetectors({}, 1)
495 } else if (carbonMonoxideDetectorObjects == 1) {
496 carbonMonoxideDetectorObject1 = metaData['name']
497 this[carbonMonoxideDetectorObject1] = new CarbonMonoxideDetectors({}, 1)
498 } else if (carbonMonoxideDetectorObjects == 2) {
499 carbonMonoxideDetectorObject2 = metaData['name']
500 this[carbonMonoxideDetectorObject2] = new CarbonMonoxideDetectors({}, 1)
503 carbonMonoxideDetectorObjects=carbonMonoxideDetectorObjects+1
505 settings.put(metaData['name'], metaData['name'])
508 extractedObjectsApp1.append("//Object for class carbon monoxide detector!\n")
509 extractedObjectsApp1.append("def "+metaData['name']+"\n")
510 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.carbonMonoxideDetectorObject\n")
512 extractedObjectsApp2.append("//Object for class carbon monoxide detector!\n")
513 extractedObjectsApp2.append("def "+metaData['name']+"\n")
514 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.carbonMonoxideDetectorObject\n")
517 case "capability.colorControl":
518 if (colorControlObjects == 0) {
519 colorControlObject0 = metaData['name']
520 this[colorControlObject0] = new ColorControls({}, 1)
521 } else if (colorControlObjects == 1) {
522 colorControlObject1 = metaData['name']
523 this[colorControlObject1] = new ColorControls({}, 1)
524 } else if (colorControlObjects == 2) {
525 colorControlObject2 = metaData['name']
526 this[colorControlObject2] = new ColorControls({}, 1)
529 colorControlObjects=colorControlObjects+1
531 settings.put(metaData['name'], metaData['name'])
534 extractedObjectsApp1.append("//Object for class color control!\n")
535 extractedObjectsApp1.append("def "+metaData['name']+"\n")
536 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.colorControlObject\n")
538 extractedObjectsApp2.append("//Object for class color control!\n")
539 extractedObjectsApp2.append("def "+metaData['name']+"\n")
540 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.colorControlObject\n")
543 case "capability.contactSensor":
544 if (contactObjects == 0) {
545 contactObject0 = metaData['name']
546 this[contactObject0] = new ContactSensors({}, 1)
547 } else if (contactObjects == 1) {
548 contactObject1 = metaData['name']
549 this[contactObject1] = new ContactSensors({}, 1)
550 } else if (contactObjects == 2) {
551 contactObject2 = metaData['name']
552 this[contactObject2] = new ContactSensors({}, 1)
555 contactObjects=contactObjects+1
557 settings.put(metaData['name'], metaData['name'])
560 extractedObjectsApp1.append("//Object for class contactSensor!\n")
561 extractedObjectsApp1.append("def "+metaData['name']+"\n")
562 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")
564 extractedObjectsApp2.append("//Object for class contactSensor!\n")
565 extractedObjectsApp2.append("def "+metaData['name']+"\n")
566 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
569 case "capability.doorControl":
570 if (doorControlObjects == 0) {
571 doorControlObject0 = metaData['name']
572 this[doorControlObject0] = new DoorControls({}, 1)
573 } else if (doorControlObjects == 1) {
574 doorControlObject1 = metaData['name']
575 this[doorControlObject1] = new DoorControls({}, 1)
576 } else if (doorControlObjects == 2) {
577 doorControlObject2 = metaData['name']
578 this[doorControlObject2] = new DoorControls({}, 1)
581 doorControlObjects=doorControlObjects+1
583 settings.put(metaData['name'], metaData['name'])
586 extractedObjectsApp1.append("//Object for class door control!\n")
587 extractedObjectsApp1.append("def "+metaData['name']+"\n")
588 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")
590 extractedObjectsApp2.append("//Object for class door control!\n")
591 extractedObjectsApp2.append("def "+metaData['name']+"\n")
592 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
595 case "capability.energyMeter":
596 if (energyMeterObjects == 0) {
597 energyMeterObject0 = metaData['name']
598 this[energyMeterObject0] = new EnergyMeters({}, 1)
599 } else if (energyMeterObjects == 1) {
600 energyMeterObject1 = metaData['name']
601 this[energyMeterObject1] = new EnergyMeters({}, 1)
602 } else if (energyMeterObjects == 2) {
603 energyMeterObject2 = metaData['name']
604 this[energyMeterObject2] = new EnergyMeters({}, 1)
607 energyMeterObjects=energyMeterObjects+1
609 settings.put(metaData['name'], metaData['name'])
612 extractedObjectsApp1.append("//Object for class energy meter!\n")
613 extractedObjectsApp1.append("def "+metaData['name']+"\n")
614 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.energyMeterObject\n")
616 extractedObjectsApp2.append("//Object for class energy meter!\n")
617 extractedObjectsApp2.append("def "+metaData['name']+"\n")
618 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.energyMeterObject\n")
621 case "capability.illuminanceMeasurement":
622 if (illuminanceMeasurementObjects == 0) {
623 illuminanceMeasurementObject0 = metaData['name']
624 this[illuminanceMeasurementObject0] = new IlluminanceMeasurements({}, 1)
625 } else if (illuminanceMeasurementObjects == 1) {
626 illuminanceMeasurementObject1 = metaData['name']
627 this[illuminanceMeasurementObject1] = new IlluminanceMeasurements({}, 1)
628 } else if (illuminanceMeasurementObjects == 2) {
629 illuminanceMeasurementObject2 = metaData['name']
630 this[illuminanceMeasurementObject2] = new IlluminanceMeasurements({}, 1)
633 illuminanceMeasurementObjects=illuminanceMeasurementObjects+1
635 settings.put(metaData['name'], metaData['name'])
638 extractedObjectsApp1.append("//Object for class illuminance measurement!\n")
639 extractedObjectsApp1.append("def "+metaData['name']+"\n")
640 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.illuminanceMeasurementObject\n")
642 extractedObjectsApp2.append("//Object for class illuminance measurement!\n")
643 extractedObjectsApp2.append("def "+metaData['name']+"\n")
644 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.illuminanceMeasurementObject\n")
647 case "capability.accelerationSensor":
648 if (accelerationSensorObjects == 0) {
649 accelerationSensorObject0 = metaData['name']
650 this[accelerationSensorObject0] = new AccelerationSensors({}, 1)
651 } else if (accelerationSensorObjects == 1) {
652 accelerationSensorObject1 = metaData['name']
653 this[accelerationSensorObject1] = new AccelerationSensors({}, 1)
654 } else if (accelerationSensorObjects == 2) {
655 accelerationSensorObject2 = metaData['name']
656 this[accelerationSensorObject2] = new AccelerationSensors({}, 1)
659 accelerationSensorObjects=accelerationSensorObjects+1
661 settings.put(metaData['name'], metaData['name'])
664 extractedObjectsApp1.append("//Object for class Acceleration Sensor!\n")
665 extractedObjectsApp1.append("def "+metaData['name']+"\n")
666 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.accelerationSensorObject\n")
668 extractedObjectsApp2.append("//Object for class Acceleration Sensor!\n")
669 extractedObjectsApp2.append("def "+metaData['name']+"\n")
670 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.accelerationSensorObject\n")
673 case "capability.motionSensor":
674 if (motionSensorObjects == 0) {
675 motionSensorObject0 = metaData['name']
676 this[motionSensorObject0] = new MotionSensors({}, 1)
677 } else if (motionSensorObjects == 1) {
678 motionSensorObject1 = metaData['name']
679 this[motionSensorObject1] = new MotionSensors({}, 1)
680 } else if (motionSensorObjects == 2) {
681 motionSensorObject2 = metaData['name']
682 this[motionSensorObject2] = new MotionSensors({}, 1)
685 motionSensorObjects=motionSensorObjects+1
687 settings.put(metaData['name'], metaData['name'])
690 extractedObjectsApp1.append("//Object for class Motion Sensor!\n")
691 extractedObjectsApp1.append("def "+metaData['name']+"\n")
692 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.motionSensorObject\n")
694 extractedObjectsApp2.append("//Object for class Motion Sensor!\n")
695 extractedObjectsApp2.append("def "+metaData['name']+"\n")
696 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.motionSensorObject\n")
699 case "capability.musicPlayer":
700 if (musicPlayerObjects == 0) {
701 musicPlayerObject0 = metaData['name']
702 this[musicPlayerObject0] = new MusicPlayers({}, 1)
703 } else if (musicPlayerObjects == 1) {
704 musicPlayerObject1 = metaData['name']
705 this[musicPlayerObject1] = new MusicPlayers({}, 1)
706 } else if (musicPlayerObjects == 2) {
707 musicPlayerObject2 = metaData['name']
708 this[musicPlayerObject2] = new MusicPlayers({}, 1)
711 musicPlayerObjects=musicPlayerObjects+1
713 settings.put(metaData['name'], metaData['name'])
716 extractedObjectsApp1.append("//Object for class music player!\n")
717 extractedObjectsApp1.append("def "+metaData['name']+"\n")
718 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.musicPlayerObject\n")
720 extractedObjectsApp2.append("//Object for class music player!\n")
721 extractedObjectsApp2.append("def "+metaData['name']+"\n")
722 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.musicPlayerObject\n")
725 case "capability.powerMeter":
726 if (powerMeterObjects == 0) {
727 powerMeterObject0 = metaData['name']
728 this[powerMeterObject0] = new PowerMeters({}, 1)
729 } else if (powerMeterObjects == 1) {
730 powerMeterObject1 = metaData['name']
731 this[powerMeterObject1] = new PowerMeters({}, 1)
732 } else if (powerMeterObjects == 2) {
733 powerMeterObject2 = metaData['name']
734 this[powerMeterObject2] = new PowerMeters({}, 1)
737 powerMeterObjects=powerMeterObjects+1
739 settings.put(metaData['name'], metaData['name'])
742 extractedObjectsApp1.append("//Object for class power meter!\n")
743 extractedObjectsApp1.append("def "+metaData['name']+"\n")
744 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.powerMeterObject\n")
746 extractedObjectsApp2.append("//Object for class power meter!\n")
747 extractedObjectsApp2.append("def "+metaData['name']+"\n")
748 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.powerMeterObject\n")
751 case "capability.presenceSensor":
752 if (presenceSensorObjects == 0) {
753 presenceSensorObject0 = metaData['name']
754 this[presenceSensorObject0] = new PresenceSensors({}, 1)
755 } else if (presenceSensorObjects == 1) {
756 presenceSensorObject1 = metaData['name']
757 this[presenceSensorObject1] = new PresenceSensors({}, 1)
758 } else if (presenceSensorObjects == 2) {
759 presenceSensorObject2 = metaData['name']
760 this[presenceSensorObject2] = new PresenceSensors({}, 1)
763 presenceSensorObjects=presenceSensorObjects+1
765 settings.put(metaData['name'], metaData['name'])
768 extractedObjectsApp1.append("//Object for class presence sensor!\n")
769 extractedObjectsApp1.append("def "+metaData['name']+"\n")
770 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")
772 extractedObjectsApp2.append("//Object for class presence sensor!\n")
773 extractedObjectsApp2.append("def "+metaData['name']+"\n")
774 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
777 case "capability.relativeHumidityMeasurement":
778 if (humidityMeasurementObjects == 0) {
779 humidityMeasurementObject0 = metaData['name']
780 this[humidityMeasurementObject0] = new RelativeHumidityMeasurements({}, 1)
781 } else if (humidityMeasurementObjects == 1) {
782 humidityMeasurementObject1 = metaData['name']
783 this[humidityMeasurementObject1] = new RelativeHumidityMeasurements({}, 1)
784 } else if (humidityMeasurementObjects == 2) {
785 humidityMeasurementObject2 = metaData['name']
786 this[humidityMeasurementObject2] = new RelativeHumidityMeasurements({}, 1)
789 humidityMeasurementObjects=humidityMeasurementObjects+1
791 settings.put(metaData['name'], metaData['name'])
794 extractedObjectsApp1.append("//Object for class humidity measurement!\n")
795 extractedObjectsApp1.append("def "+metaData['name']+"\n")
796 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.humidityMeasurementObject\n")
798 extractedObjectsApp2.append("//Object for class humidity measurement!\n")
799 extractedObjectsApp2.append("def "+metaData['name']+"\n")
800 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.humidityMeasurementObject\n")
803 case "capability.relaySwitch":
804 if (relaySwitchObjects == 0) {
805 relaySwitchObject0 = metaData['name']
806 this[relaySwitchObject0] = new RelaySwitches({}, 1)
807 } else if (relaySwitchObjects == 1) {
808 relaySwitchObject1 = metaData['name']
809 this[relaySwitchObject1] = new RelaySwitches({}, 1)
810 } else if (relaySwitchObjects == 2) {
811 relaySwitchObject2 = metaData['name']
812 this[relaySwitchObject2] = new RelaySwitches({}, 1)
815 relaySwitchObjects=relaySwitchObjects+1
817 settings.put(metaData['name'], metaData['name'])
820 extractedObjectsApp1.append("//Object for class relay switch!\n")
821 extractedObjectsApp1.append("def "+metaData['name']+"\n")
822 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.relaySwitchObject\n")
824 extractedObjectsApp2.append("//Object for class relay switch!\n")
825 extractedObjectsApp2.append("def "+metaData['name']+"\n")
826 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.relaySwitchObject\n")
829 case "capability.sleepSensor":
830 if (sleepSensorObjects == 0) {
831 sleepSensorObject0 = metaData['name']
832 this[sleepSensorObject0] = new SleepSensors({}, 1)
833 } else if (sleepSensorObjects == 1) {
834 sleepSensorObject1 = metaData['name']
835 this[sleepSensorObject1] = new SleepSensors({}, 1)
836 } else if (sleepSensorObjects == 2) {
837 sleepSensorObject2 = metaData['name']
838 this[sleepSensorObject2] = new SleepSensors({}, 1)
841 sleepSensorObjects=sleepSensorObjects+1
843 settings.put(metaData['name'], metaData['name'])
846 extractedObjectsApp1.append("//Object for class sleep sensor!\n")
847 extractedObjectsApp1.append("def "+metaData['name']+"\n")
848 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.sleepSensorObject\n")
850 extractedObjectsApp2.append("//Object for class sleep sensor!\n")
851 extractedObjectsApp2.append("def "+metaData['name']+"\n")
852 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.sleepSensorObject\n")
855 case "capability.smokeDetector":
856 if (smokeDetectorObjects == 0) {
857 smokeDetectorObject0 = metaData['name']
858 this[smokeDetectorObject0] = new SmokeDetectors({}, 1)
859 } else if (smokeDetectorObjects == 1) {
860 smokeDetectorObject1 = metaData['name']
861 this[smokeDetectorObject1] = new SmokeDetectors({}, 1)
862 } else if (smokeDetectorObjects == 2) {
863 smokeDetectorObject2 = metaData['name']
864 this[smokeDetectorObject2] = new SmokeDetectors({}, 1)
867 smokeDetectorObjects=smokeDetectorObjects+1
869 settings.put(metaData['name'], metaData['name'])
872 extractedObjectsApp1.append("//Object for class smoke detector!\n")
873 extractedObjectsApp1.append("def "+metaData['name']+"\n")
874 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.smokeDetectorObject\n")
876 extractedObjectsApp2.append("//Object for class smoke detector!\n")
877 extractedObjectsApp2.append("def "+metaData['name']+"\n")
878 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.smokeDetectorObject\n")
881 case "capability.stepSensor":
882 if (stepSensorObjects == 0) {
883 stepSensorObject0 = metaData['name']
884 this[stepSensorObject0] = new StepSensors({}, 1)
885 } else if (stepSensorObjects == 1) {
886 stepSensorObject1 = metaData['name']
887 this[stepSensorObject1] = new StepSensors({}, 1)
888 } else if (stepSensorObjects == 2) {
889 stepSensorObject2 = metaData['name']
890 this[stepSensorObject2] = new StepSensors({}, 1)
893 stepSensorObjects=stepSensorObjects+1
895 settings.put(metaData['name'], metaData['name'])
898 extractedObjectsApp1.append("//Object for class step sensor!\n")
899 extractedObjectsApp1.append("def "+metaData['name']+"\n")
900 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.stepSensorObject\n")
902 extractedObjectsApp2.append("//Object for class step sensor!\n")
903 extractedObjectsApp2.append("def "+metaData['name']+"\n")
904 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.stepSensorObject\n")
907 case "capability.switch":
908 if (switchObjects == 0) {
909 switchObject0 = metaData['name']
910 this[switchObject0] = new Switches({}, 1)
911 } else if (switchObjects == 1) {
912 switchObject1 = metaData['name']
913 this[switchObject1] = new Switches({}, 1)
914 } else if (switchObjects == 2) {
915 switchObject2 = metaData['name']
916 this[switchObject2] = new Switches({}, 1)
919 switchObjects=switchObjects+1
921 settings.put(metaData['name'], metaData['name'])
924 extractedObjectsApp1.append("//Object for class switch!\n")
925 extractedObjectsApp1.append("def "+metaData['name']+"\n")
926 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")
928 extractedObjectsApp2.append("//Object for class switch!\n")
929 extractedObjectsApp2.append("def "+metaData['name']+"\n")
930 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
933 case "capability.switchLevel":
934 if (switchLevelObjects == 0) {
935 switchLevelObject0 = metaData['name']
936 this[switchLevelObject0] = new SwitchLevels({}, 1)
937 } else if (switchLevelObjects == 1) {
938 switchLevelObject1 = metaData['name']
939 this[switchLevelObject1] = new SwitchLevels({}, 1)
940 } else if (switchLevelObjects == 2) {
941 switchLevelObject2 = metaData['name']
942 this[switchLevelObject2] = new SwitchLevels({}, 1)
945 switchLevelObjects=switchLevelObjects+1
947 settings.put(metaData['name'], metaData['name'])
950 extractedObjectsApp1.append("//Object for class switch level!\n")
951 extractedObjectsApp1.append("def "+metaData['name']+"\n")
952 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchLevelObject\n")
954 extractedObjectsApp2.append("//Object for class switch level!\n")
955 extractedObjectsApp2.append("def "+metaData['name']+"\n")
956 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchLevelObject\n")
959 case "capability.temperatureMeasurement":
960 if (temperatureMeasurementObjects == 0) {
961 temperatureMeasurementObject0 = metaData['name']
962 this[temperatureMeasurementObject0] = new TemperatureMeasurements({}, 1)
963 } else if (temperatureMeasurementObjects == 1) {
964 temperatureMeasurementObject1 = metaData['name']
965 this[temperatureMeasurementObject1] = new TemperatureMeasurements({}, 1)
966 } else if (temperatureMeasurementObjects == 2) {
967 temperatureMeasurementObject2 = metaData['name']
968 this[temperatureMeasurementObject2] = new TemperatureMeasurements({}, 1)
971 temperatureMeasurementObjects=temperatureMeasurementObjects+1
973 settings.put(metaData['name'], metaData['name'])
976 extractedObjectsApp1.append("//Object for class temperature measurement!\n")
977 extractedObjectsApp1.append("def "+metaData['name']+"\n")
978 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.temperatureMeasurementObject\n")
980 extractedObjectsApp2.append("//Object for class temperature measurement!\n")
981 extractedObjectsApp2.append("def "+metaData['name']+"\n")
982 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.temperatureMeasurementObject\n")
985 case "capability.thermostat":
986 if (thermostatObjects == 0) {
987 thermostatObject0 = metaData['name']
988 this[thermostatObject0] = new Thermostats({}, 1)
989 } else if (thermostatObjects == 1) {
990 thermostatObject1 = metaData['name']
991 this[thermostatObject1] = new Thermostats({}, 1)
992 } else if (thermostatObjects == 2) {
993 thermostatObject2 = metaData['name']
994 this[thermostatObject2] = new Thermostats({}, 1)
997 thermostatObjects=thermostatObjects+1
999 settings.put(metaData['name'], metaData['name'])
1001 if (App == "App1") {
1002 extractedObjectsApp1.append("//Object for class thermostat!\n")
1003 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1004 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")
1006 extractedObjectsApp2.append("//Object for class thermostat!\n")
1007 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1008 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
1011 case "capability.valve":
1012 if (valveObjects == 0) {
1013 valveObject0 = metaData['name']
1014 this[valveObject0] = new Valves({}, 1)
1015 } else if (valveObjects == 1) {
1016 valveObject1 = metaData['name']
1017 this[valveObject1] = new Valves({}, 1)
1018 } else if (valveObjects == 2) {
1019 valveObject2 = metaData['name']
1020 this[valveObject2] = new Valves({}, 1)
1023 valveObjects=valveObjects+1
1025 settings.put(metaData['name'], metaData['name'])
1027 if (App == "App1") {
1028 extractedObjectsApp1.append("//Object for class valve!\n")
1029 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1030 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.valveObject\n")
1032 extractedObjectsApp2.append("//Object for class valve!\n")
1033 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1034 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.valveObject\n")
1037 case "capability.speechSynthesis":
1038 if (speechSynthesisObjects == 0) {
1039 speechSynthesisObject0 = metaData['name']
1040 this[speechSynthesisObject0] = new SpeechSynthesises({}, 1)
1041 } else if (speechSynthesisObjects == 1) {
1042 speechSynthesisObject1 = metaData['name']
1043 this[speechSynthesisObject1] = new SpeechSynthesises({}, 1)
1044 } else if (speechSynthesisObjects == 2) {
1045 speechSynthesisObject2 = metaData['name']
1046 this[speechSynthesisObject2] = new SpeechSynthesises({}, 1)
1049 speechSynthesisObjects=speechSynthesisObjects+1
1051 settings.put(metaData['name'], metaData['name'])
1053 if (App == "App1") {
1054 extractedObjectsApp1.append("//Object for class speech synthesis!\n")
1055 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1056 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.speechSynthesisObject\n")
1058 extractedObjectsApp2.append("//Object for class speech synthesis!\n")
1059 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1060 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.speechSynthesisObject\n")
1063 case "capability.waterSensor":
1064 if (waterSensorObjects == 0) {
1065 waterSensorObject0 = metaData['name']
1066 this[waterSensorObject0] = new WaterSensors({}, 1)
1067 } else if (waterSensorObjects == 1) {
1068 waterSensorObject1 = metaData['name']
1069 this[waterSensorObject1] = new WaterSensors({}, 1)
1070 } else if (waterSensorObjects == 2) {
1071 waterSensorObject2 = metaData['name']
1072 this[waterSensorObject2] = new WaterSensors({}, 1)
1075 waterSensorObjects=waterSensorObjects+1
1077 settings.put(metaData['name'], metaData['name'])
1079 if (App == "App1") {
1080 extractedObjectsApp1.append("//Object for class water sensor!\n")
1081 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1082 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.waterSensorObject\n")
1084 extractedObjectsApp2.append("//Object for class water sensor!\n")
1085 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1086 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.waterSensorObject\n")
1089 case "capability.touchSensor":
1090 if (touchSensorObjects == 0) {
1091 touchSensorObject0 = metaData['name']
1092 this[touchSensorObject0] = new NfcTouch({}, 1)
1093 } else if (touchSensorObjects == 1) {
1094 touchSensorObject1 = metaData['name']
1095 this[touchSensorObject1] = new NfcTouch({}, 1)
1096 } else if (touchSensorObjects == 2) {
1097 touchSensorObject2 = metaData['name']
1098 this[touchSensorObject2] = new NfcTouch({}, 1)
1101 touchSensorObjects=touchSensorObjects+1
1103 settings.put(metaData['name'], metaData['name'])
1105 if (App == "App1") {
1106 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
1107 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1108 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")
1110 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
1111 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1112 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
1115 case "capability.imageCapture":
1116 if (imageCaptureObjects == 0) {
1117 imageCaptureObject0 = metaData['name']
1118 this[imageCaptureObject0] = new ImageCaptures({}, 1)
1119 } else if (imageCaptureObjects == 1) {
1120 imageCaptureObject1 = metaData['name']
1121 this[imageCaptureObject1] = new ImageCaptures({}, 1)
1122 } else if (imageCaptureObjects == 2) {
1123 imageCaptureObject2 = metaData['name']
1124 this[imageCaptureObject2] = new ImageCaptures({}, 1)
1127 imageCaptureObjects=imageCaptureObjects+1
1129 settings.put(metaData['name'], metaData['name'])
1131 if (App == "App1") {
1132 extractedObjectsApp1.append("//Object for class Image Capture!\n")
1133 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1134 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.imageCaptureObject\n")
1136 extractedObjectsApp2.append("//Object for class Image Capture!\n")
1137 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1138 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.imageCaptureObject\n")
1141 case "device.mobilePresence":
1142 if (mobilePresenceObjects == 0) {
1143 mobilePresenceObject0 = metaData['name']
1144 this[mobilePresenceObject0] = new MobilePresences({}, 1)
1145 } else if (mobilePresenceObjects == 1) {
1146 mobilePresenceObject1 = metaData['name']
1147 this[mobilePresenceObject1] = new MobilePresences({}, 1)
1148 } else if (mobilePresenceObjects == 2) {
1149 mobilePresenceObject2 = metaData['name']
1150 this[mobilePresenceObject2] = new MobilePresences({}, 1)
1153 mobilePresenceObjects=mobilePresenceObjects+1
1155 settings.put(metaData['name'], metaData['name'])
1157 if (App == "App1") {
1158 extractedObjectsApp1.append("//Object for class mobile presence!\n")
1159 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1160 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.mobilePresenceObject\n")
1162 extractedObjectsApp2.append("//Object for class mobile presence!\n")
1163 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1164 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.mobilePresenceObject\n")
1167 case "device.aeonKeyFob":
1168 if (aeonKeyFobObjects == 0) {
1169 aeonKeyFobObject0 = metaData['name']
1170 this[aeonKeyFobObject0] = new AeonKeyFobs({}, 1)
1171 } else if (aeonKeyFobObjects == 1) {
1172 aeonKeyFobObject1 = metaData['name']
1173 this[aeonKeyFobObject1] = new AeonKeyFobs({}, 1)
1174 } else if (aeonKeyFobObjects == 2) {
1175 aeonKeyFobObject2 = metaData['name']
1176 this[aeonKeyFobObject2] = new AeonKeyFobs({}, 1)
1179 aeonKeyFobObjects=aeonKeyFobObjects+1
1181 settings.put(metaData['name'], metaData['name'])
1183 if (App == "App1") {
1184 extractedObjectsApp1.append("//Object for class aeon key fob!\n")
1185 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1186 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.aeonKeyFobObject\n")
1188 extractedObjectsApp2.append("//Object for class aeon key fob!\n")
1189 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1190 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.aeonKeyFobObject\n")
1194 def randomVariable = Math.abs(new Random().nextInt() % 3)
1195 def modes = ["away", "home", "night"]
1196 def userInput = modes[randomVariable]
1198 if (modeVariables == 0) {
1199 mode0 = metaData['name']
1200 this[mode0] = userInput
1201 } else if (modeVariables == 1) {
1202 mode1 = metaData['name']
1203 this[mode1] = userInput
1204 } else if (modeVariables == 2) {
1205 mode2 = metaData['name']
1206 this[mode2] = userInput
1207 } else if (modeVariables == 3) {
1208 mode3 = metaData['name']
1209 this[mode3] = userInput
1210 } else if (modeVariables == 4) {
1211 mode4 = metaData['name']
1212 this[mode4] = userInput
1213 } else if (modeVariables == 5) {
1214 mode5 = metaData['name']
1215 this[mode5] = userInput
1218 modeVariables=modeVariables+1
1220 settings.put(metaData['name'], metaData['name'])
1222 if (App == "App1") {
1223 extractedObjectsApp1.append("//Global variable for mode!\n")
1224 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1226 extractedObjectsApp2.append("//Global variable for mode!\n")
1227 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1231 def userInput = Math.abs(new Random().nextInt() % 60) + 40
1233 if (decimalVariables == 0) {
1234 decimal0 = metaData['name']
1235 this[decimal0] = userInput
1236 } else if (decimalVariables == 1) {
1237 decimal1 = metaData['name']
1238 this[decimal1] = userInput
1239 } else if (decimalVariables == 2) {
1240 decimal2 = metaData['name']
1241 this[decimal2] = userInput
1242 } else if (decimalVariables == 3) {
1243 decimal3 = metaData['name']
1244 this[decimal3] = userInput
1245 } else if (decimalVariables == 4) {
1246 decimal4 = metaData['name']
1247 this[decimal4] = userInput
1248 } else if (decimalVariables == 5) {
1249 decimal5 = metaData['name']
1250 this[decimal5] = userInput
1253 decimalVariables=decimalVariables+1
1255 settings.put(metaData['name'], metaData['name'])
1257 if (App == "App1") {
1258 extractedObjectsApp1.append("//Global variable for decimal number!\n")
1259 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1261 extractedObjectsApp2.append("//Global variable for decimal number!\n")
1262 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1266 def userInput = "This is just a text!"
1268 if (textVariables == 0) {
1269 text0 = metaData['name']
1270 this[text0] = userInput
1271 } else if (textVariables == 1) {
1272 text1 = metaData['name']
1273 this[text1] = userInput
1274 } else if (textVariables == 2) {
1275 text2 = metaData['name']
1276 this[text2] = userInput
1277 } else if (textVariables == 3) {
1278 text3 = metaData['name']
1279 this[text3] = userInput
1280 } else if (textVariables == 4) {
1281 text4 = metaData['name']
1282 this[text4] = userInput
1283 } else if (textVariables == 5) {
1284 text5 = metaData['name']
1285 this[text5] = userInput
1288 textVariables=textVariables+1
1290 settings.put(metaData['name'], metaData['name'])
1292 if (App == "App1") {
1293 extractedObjectsApp1.append("//Global variable for text!\n")
1294 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1296 extractedObjectsApp2.append("//Global variable for text!\n")
1297 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1301 def userInput = Math.abs(new Random().nextInt() % 60) + 40
1303 if (numberVariables == 0) {
1304 number0 = metaData['name']
1305 this[number0] = userInput
1306 } else if (numberVariables == 1) {
1307 number1 = metaData['name']
1308 this[number1] = userInput
1309 } else if (numberVariables == 2) {
1310 number2 = metaData['name']
1311 this[number2] = userInput
1312 } else if (numberVariables == 3) {
1313 number3 = metaData['name']
1314 this[number3] = userInput
1315 } else if (numberVariables == 4) {
1316 number4 = metaData['name']
1317 this[number4] = userInput
1318 } else if (numberVariables == 5) {
1319 number5 = metaData['name']
1320 this[number5] = userInput
1323 numberVariables=numberVariables+1
1325 settings.put(metaData['name'], metaData['name'])
1327 if (App == "App1") {
1328 extractedObjectsApp1.append("//Global variable for number!\n")
1329 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1331 extractedObjectsApp2.append("//Global variable for number!\n")
1332 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1336 def userInput = "15:00"
1338 if (timeVariables == 0) {
1339 time0 = metaData['name']
1340 this[time0] = userInput
1341 } else if (timeVariables == 1) {
1342 time1 = metaData['name']
1343 this[time1] = userInput
1344 } else if (timeVariables == 2) {
1345 time2 = metaData['name']
1346 this[time2] = userInput
1347 } else if (timeVariables == 3) {
1348 time3 = metaData['name']
1349 this[time3] = userInput
1350 } else if (timeVariables == 4) {
1351 time4 = metaData['name']
1352 this[time4] = userInput
1353 } else if (timeVariables == 5) {
1354 time5 = metaData['name']
1355 this[time5] = userInput
1358 timeVariables=timeVariables+1
1360 settings.put(metaData['name'], metaData['name'])
1362 if (App == "App1") {
1363 extractedObjectsApp1.append("//Global variable for time!\n")
1364 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1366 extractedObjectsApp2.append("//Global variable for time!\n")
1367 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1371 if (metaData['options'] != null)
1372 modes = metaData['options']
1373 else // If it is not named 'options' then it is captured as 'metadata'
1374 modes = metaData['metadata']
1375 def userInput = modes[0]
1377 if (enumVariables == 0) {
1378 enum0 = metaData['name']
1379 this[enum0] = userInput
1380 } else if (enumVariables == 1) {
1381 enum1 = metaData['name']
1382 this[enum1] = userInput
1383 } else if (enumVariables == 2) {
1384 enum2 = metaData['name']
1385 this[enum2] = userInput
1386 } else if (enumVariables == 3) {
1387 enum3 = metaData['name']
1388 this[enum3] = userInput
1389 } else if (enumVariables == 4) {
1390 enum4 = metaData['name']
1391 this[enum4] = userInput
1392 } else if (enumVariables == 5) {
1393 enum5 = metaData['name']
1394 this[enum5] = userInput
1397 enumVariables=enumVariables+1
1399 settings.put(metaData['name'], metaData['name'])
1401 if (App == "App1") {
1402 extractedObjectsApp1.append("//Global variable for enum!\n")
1403 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1405 extractedObjectsApp2.append("//Global variable for enum!\n")
1406 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1410 def userInput = Math.abs(new Random().nextInt() % 2)
1412 if (boolVariables == 0) {
1413 bool0 = metaData['name']
1414 this[bool0] = userInput
1415 } else if (boolVariables == 1) {
1416 bool1 = metaData['name']
1417 this[bool1] = userInput
1418 } else if (boolVariables == 2) {
1419 bool2 = metaData['name']
1420 this[bool2] = userInput
1421 } else if (boolVariables == 3) {
1422 bool3 = metaData['name']
1423 this[bool3] = userInput
1424 } else if (boolVariables == 4) {
1425 bool4 = metaData['name']
1426 this[bool4] = userInput
1427 } else if (boolVariables == 5) {
1428 bool5 = metaData['name']
1429 this[bool5] = userInput
1432 boolVariables=boolVariables+1
1434 settings.put(metaData['name'], metaData['name'])
1436 if (App == "App1") {
1437 extractedObjectsApp1.append("//Global variable for boolean!\n")
1438 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1440 extractedObjectsApp2.append("//Global variable for boolean!\n")
1441 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1445 def userInput = 9495379373
1447 if (phoneVariables == 0) {
1448 phone0 = metaData['name']
1449 this[phone0] = userInput
1450 } else if (phoneVariables == 1) {
1451 phone1 = metaData['name']
1452 this[phone1] = userInput
1453 } else if (phoneVariables == 2) {
1454 phone2 = metaData['name']
1455 this[phone2] = userInput
1456 } else if (phoneVariables == 3) {
1457 phone3 = metaData['name']
1458 this[phone3] = userInput
1459 } else if (phoneVariables == 4) {
1460 phone4 = metaData['name']
1461 this[phone4] = userInput
1462 } else if (phoneVariables == 5) {
1463 phone5 = metaData['name']
1464 this[phone5] = userInput
1467 phoneVariables=phoneVariables+1
1469 settings.put(metaData['name'], metaData['name'])
1471 if (App == "App1") {
1472 extractedObjectsApp1.append("//Global variable for phone!\n")
1473 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1475 extractedObjectsApp2.append("//Global variable for phone!\n")
1476 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1480 def userInput = "AJ"
1482 if (contactVariables == 0) {
1483 contact0 = metaData['name']
1484 this[contact0] = userInput
1485 } else if (contactVariables == 1) {
1486 contact1 = metaData['name']
1487 this[contact1] = userInput
1488 } else if (contactVariables == 2) {
1489 contact2 = metaData['name']
1490 this[contact2] = userInput
1491 } else if (contactVariables == 3) {
1492 contact3 = metaData['name']
1493 this[contact3] = userInput
1494 } else if (contactVariables == 4) {
1495 contact4 = metaData['name']
1496 this[contact4] = userInput
1497 } else if (contactVariables == 5) {
1498 contact5 = metaData['name']
1499 this[contact5] = userInput
1502 contactVariables=contactVariables+1
1504 settings.put(metaData['name'], metaData['name'])
1506 if (App == "App1") {
1507 extractedObjectsApp1.append("//Global variable for contact!\n")
1508 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1510 extractedObjectsApp2.append("//Global variable for contact!\n")
1511 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1519 def label(LinkedHashMap metaData) {
1520 if (metaData.containsKey('title')) {
1521 println metaData['title']
1523 if (metaData.containsKey('options')) {
1524 println "Options: "+metaData['options']
1527 println("//IGNORE--ForMobileUse//")
1530 def mode(LinkedHashMap metaData) {
1531 if (metaData.containsKey('title')) {
1532 println metaData['title']
1534 if (metaData.containsKey('options')) {
1535 println "Options: "+metaData['options']
1538 println("//IGNORE--ForMobileUse//")
1541 def href(LinkedHashMap metaData) {
1542 println("//IGNORE--some data//")
1545 def href(LinkedHashMap metaData, String name) {
1546 println("//IGNORE--some data//")
1548 /////Input Methods/////
1551 /////MethodsForExtraction/////
1552 def definition(LinkedHashMap metaData) {
1553 println("///Just some information///")
1556 def preferences(Closure inputData) {
1557 find(inputData) //Run the closure to extract pages/sections/inputMethods
1558 if (App == "App1") {
1559 extractedObjectsConstructorApp1.append("//Global variable for settings!\n")
1560 extractedObjectsConstructorApp1.append("settings = $settings\n")
1562 extractedObjectsConstructorApp2.append("//Global variable for settings!\n")
1563 extractedObjectsConstructorApp2.append("settings = $settings\n")
1567 def page(LinkedHashMap metaData, Closure inputData) {
1568 if (metaData.containsKey('name'))
1569 println(metaData['name'])
1570 if (metaData.containsKey('title'))
1571 println(metaData['title'])
1573 find(inputData) //Run the closure to extract sections/inputMethods
1576 def page(LinkedHashMap metaData) {
1577 def nameOfFunction = metaData['name']
1578 "$nameOfFunction"() //Call the page
1581 def dynamicPage(LinkedHashMap metaData, Closure inputData) {
1582 if (metaData.containsKey('name'))
1583 println(metaData['name'])
1584 if (metaData.containsKey('title'))
1585 println(metaData['title'])
1587 find(inputData) //Run the closure to extract sections/inputMethods
1590 def paragraph(String paragraphText) {
1591 println(paragraphText)
1594 def section(String title, Closure inputData) {
1596 find(inputData) //Run the closure to extract inputMethods
1599 def section(Closure inputData) {
1600 find(inputData) //Run the closure to extract inputMethods
1603 def section(LinkedHashMap metaData, Closure inputData) {
1604 find(inputData) //Run the closure to extract inputMethods
1607 def mappings(Closure inputData) {
1608 println("//IGNORE--some data//")
1610 /////MethodsForExtraction/////
1615 * Notify If Left Unlocked
1617 * Copyright 2014 George Sudarkoff
1619 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
1620 * in compliance with the License. You may obtain a copy of the License at:
1622 * http://www.apache.org/licenses/LICENSE-2.0
1624 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
1625 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
1626 * for the specific language governing permissions and limitations under the License.
1631 name: "Notify If Left Unlocked",
1632 namespace: "com.sudarkoff",
1633 author: "George Sudarkoff",
1634 description: "Send a push or SMS notification (and lock, if it's closed) if a door is left unlocked for a period of time.",
1635 category: "Safety & Security",
1636 iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png",
1637 iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png")
1641 section("If this lock...") {
1642 input "aLock", "capability.lock", multiple: false, required: true
1643 input "openSensor", "capability.contactSensor", title: "Open/close sensor (optional)", multiple: false, required: false
1645 section("Left unlocked for...") {
1646 input "duration", "number", title: "How many minutes?", required: true
1648 section("Notify me...") {
1649 input "pushNotification", "bool", title: "Push notification"
1650 input "phoneNumber", "phone", title: "Phone number (optional)", required: false
1651 input "lockIfClosed", "bool", title: "Lock the door if it's closed?"
1668 log.trace "Initializing with: ${settings}"
1669 subscribe(aLock, "lock", lockHandler)
1672 def lockHandler(evt)
1674 log.trace "${evt.name} is ${evt.value}."
1675 if (evt.value == "locked") {
1676 log.debug "Canceling lock check because the door is locked..."
1677 unschedule(notifyUnlocked)
1680 log.debug "Starting the countdown for ${duration} minutes..."
1682 runIn(duration * 60, notifyUnlocked)
1686 def notifyUnlocked()
1688 // if no open/close sensor specified, assume the door is closed
1689 def open = openSensor?.latestValue("contact") ?: "closed"
1691 def message = "${aLock.displayName} is left unlocked and ${open} for more than ${duration} minutes."
1692 log.trace "Sending the notification: ${message}."
1693 sendMessage(message)
1696 if (open == "closed") {
1697 log.trace "And locking the door."
1698 sendMessage("Locking the ${aLock.displayName} as prescribed.")
1702 if (state.retries++ < 3) {
1703 log.trace "Door is open, can't lock. Rescheduling the check."
1704 sendMessage("Can't lock the ${aLock.displayName} because the door is open. Will try again in ${duration} minutes.")
1705 runIn(duration * 60, notifyUnlocked)
1708 log.trace "The door is still open after ${state.retries} retries, giving up."
1709 sendMessage("Unable to lock the ${aLock.displayName} after ${state.retries} retries, giving up.")
1715 def sendMessage(msg) {
1716 if (pushNotification) {
1720 sendSMS(phoneNumber, msg)