1 ////////////////////@Field App
3 ////////////////////////////////////////
5 import groovy.transform.Field
10 import ContactSensor.ContactSensor
11 import ContactSensor.ContactSensors
12 import DoorControl.DoorControl
13 import DoorControl.DoorControls
16 import Thermostat.Thermostat
17 import Thermostat.Thermostats
19 import Switch.Switches
20 import PresenceSensor.PresenceSensor
21 import PresenceSensor.PresenceSensors
23 import Location.LocationVar
24 import Location.Phrase
25 import appTouch.Touched
26 import NfcTouch.NfcTouch
27 import Timer.SimulatedTimer
33 //Global variables for files
34 @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy")
35 @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy")
36 @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy")
37 @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy")
42 extractedObjectsApp1.write("")
43 extractedObjectsConstructorApp1.write("")
44 } else if (App == "App2") {
45 extractedObjectsApp2.write("")
46 extractedObjectsConstructorApp2.write("")
54 //Global Object for class Touch Sensor!
55 @Field def touchSensorObject
56 //Global Object for class switch!
57 @Field def switchObject
58 //Global Object for class lock!
60 //Global Object for class door control!
61 @Field def doorControlObject
62 //Global Object for class contact sensor!
63 @Field def contactObject
64 //Global Object for class presence sensor!
65 @Field def presenceSensorObject
66 //Global Object for class thermostat!
67 @Field def thermostatObject
72 @Field modeVariables = 0
80 @Field numberVariables = 0
88 @Field timeVariables = 0
96 @Field enumVariables = 0
104 @Field phoneVariables = 0
112 @Field contactVariables = 0
122 /////Input Methods/////
124 def input(String name, String type) {
126 case "capability.lock":
128 this[lockObject] = new Locks({}, 1)
130 extractedObjectsApp1.append("//Object for class lock!\n")
131 extractedObjectsApp1.append("def "+name+"\n")
132 extractedObjectsConstructorApp1.append(name+" = obj.lockObject\n")
134 extractedObjectsApp2.append("//Object for class lock!\n")
135 extractedObjectsApp2.append("def "+name+"\n")
136 extractedObjectsConstructorApp2.append(name+" = obj.lockObject\n")
139 case "capability.alarm":
141 case "capability.battery":
143 case "capability.beacon":
145 case "capability.carbonMonoxideDetector":
147 case "capability.colorControl":
149 case "capability.contactSensor":
151 this[contactObject] = new ContactSensors({}, 1)
153 extractedObjectsApp1.append("//Object for class contactSensor!\n")
154 extractedObjectsApp1.append("def "+name+"\n")
155 extractedObjectsConstructorApp1.append(name+" = obj.contactObject\n")
157 extractedObjectsApp2.append("//Object for class contactSensor!\n")
158 extractedObjectsApp2.append("def "+name+"\n")
159 extractedObjectsConstructorApp2.append(name+" = obj.contactObject\n")
162 case "capability.doorControl":
163 doorControlObject = name
164 this[doorControlObject] = new DoorControls({}, 1)
166 extractedObjectsApp1.append("//Object for class door control!\n")
167 extractedObjectsApp1.append("def "+name+"\n")
168 extractedObjectsConstructorApp1.append(name+" = obj.doorControlObject\n")
170 extractedObjectsApp2.append("//Object for class door control!\n")
171 extractedObjectsApp2.append("def "+name+"\n")
172 extractedObjectsConstructorApp2.append(name+" = obj.doorControlObject\n")
175 case "capability.energyMeter":
177 case "capability.illuminanceMeasurement":
179 case "capability.accelerationSensor":
181 case "capability.motionSensor":
183 case "capability.musicPlayer":
185 case "capability.powerMeter":
187 case "capability.presenceSensor":
188 presenceSensorObject = name
189 this[presenceSensorObject] = new PresenceSensors({}, 1)
191 extractedObjectsApp1.append("//Object for class presence sensor!\n")
192 extractedObjectsApp1.append("def "+name+"\n")
193 extractedObjectsConstructorApp1.append(name+" = obj.presenceSensorObject\n")
195 extractedObjectsApp2.append("//Object for class presence sensor!\n")
196 extractedObjectsApp2.append("def "+name+"\n")
197 extractedObjectsConstructorApp2.append(name+" = obj.presenceSensorObject\n")
200 case "capability.relativeHumidityMeasurement":
202 case "capability.relaySwitch":
204 case "capability.sleepSensor":
206 case "capability.smokeDetector":
208 case "capability.stepSensor":
210 case "capability.switch":
212 this[switchObject] = new Switches({}, 1)
214 extractedObjectsApp1.append("//Object for class switch!\n")
215 extractedObjectsApp1.append("def "+name+"\n")
216 extractedObjectsConstructorApp1.append(name+" = obj.switchObject\n")
218 extractedObjectsApp2.append("//Object for class switch!\n")
219 extractedObjectsApp2.append("def "+name+"\n")
220 extractedObjectsConstructorApp2.append(name+" = obj.switchObject\n")
223 case "capability.switchLevel":
225 case "capability.temperatureMeasurement":
227 case "capability.thermostat":
228 thermostatObject = name
229 this[thermostatObject] = new Thermostats({}, 1)
231 extractedObjectsApp1.append("//Object for class thermostat!\n")
232 extractedObjectsApp1.append("def "+name+"\n")
233 extractedObjectsConstructorApp1.append(name+" = obj.thermostatObject\n")
235 extractedObjectsApp2.append("//Object for class thermostat!\n")
236 extractedObjectsApp2.append("def "+name+"\n")
237 extractedObjectsConstructorApp2.append(name+" = obj.thermostatObject\n")
240 case "capability.valve":
242 case "capability.waterSensor":
244 case "capability.touchSensor":
245 touchSensorObject = name
246 this[touchSensorObject] = new NfcTouch({}, 1)
248 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
249 extractedObjectsApp1.append("def "+name+"\n")
250 extractedObjectsConstructorApp1.append(name+" = obj.touchSensorObject\n")
252 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
253 extractedObjectsApp2.append("def "+name+"\n")
254 extractedObjectsConstructorApp2.append(name+" = obj.touchSensorObject\n")
257 case "capability.imageCapture":
259 case "device.mobilePresence":
261 case "device.aeonKeyFob":
264 def userInput = System.console().readLine 'Enter the mode:'
266 if (modeVariables == 0) {
268 this[mode0] = userInput
269 } else if (modeVariables == 1) {
271 this[mode1] = userInput
272 } else if (modeVariables == 2) {
274 this[mode2] = userInput
275 } else if (modeVariables == 3) {
277 this[mode3] = userInput
278 } else if (modeVariables == 4) {
280 this[mode4] = userInput
281 } else if (modeVariables == 5) {
283 this[mode5] = userInput
287 extractedObjectsApp1.append("//Global variable for mode!\n")
288 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
290 extractedObjectsApp2.append("//Global variable for mode!\n")
291 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
299 def userInput = System.console().readLine 'Enter the number:'
301 if (numberVariables == 0) {
303 this[number0] = userInput
304 } else if (numberVariables == 1) {
306 this[number1] = userInput
307 } else if (numberVariables == 2) {
309 this[number2] = userInput
310 } else if (numberVariables == 3) {
312 this[number3] = userInput
313 } else if (numberVariables == 4) {
315 this[number4] = userInput
316 } else if (numberVariables == 5) {
318 this[number5] = userInput
322 extractedObjectsApp1.append("//Global variable for number!\n")
323 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
325 extractedObjectsApp2.append("//Global variable for number!\n")
326 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
330 def userInput = System.console().readLine 'Enter the time:'
332 if (timeVariables == 0) {
334 this[time0] = userInput
335 } else if (timeVariables == 1) {
337 this[time1] = userInput
338 } else if (timeVariables == 2) {
340 this[time2] = userInput
341 } else if (timeVariables == 3) {
343 this[time3] = userInput
344 } else if (timeVariables == 4) {
346 this[time4] = userInput
347 } else if (timeVariables == 5) {
349 this[time5] = userInput
353 extractedObjectsApp1.append("//Global variable for time!\n")
354 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
356 extractedObjectsApp2.append("//Global variable for time!\n")
357 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
361 def userInput = System.console().readLine 'Enter the enum:'
363 if (enumVariables == 0) {
365 this[enum0] = userInput
366 } else if (enumVariables == 1) {
368 this[enum1] = userInput
369 } else if (enumVariables == 2) {
371 this[enum2] = userInput
372 } else if (enumVariables == 3) {
374 this[enum3] = userInput
375 } else if (enumVariables == 4) {
377 this[enum4] = userInput
378 } else if (enumVariables == 5) {
380 this[enum5] = userInput
384 extractedObjectsApp1.append("//Global variable for enum!\n")
385 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
387 extractedObjectsApp2.append("//Global variable for enum!\n")
388 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
394 def userInput = System.console().readLine 'Enter the phone:'
396 if (phoneVariables == 0) {
398 this[phone0] = userInput
399 } else if (phoneVariables == 1) {
401 this[phone1] = userInput
402 } else if (phoneVariables == 2) {
404 this[phone2] = userInput
405 } else if (phoneVariables == 3) {
407 this[phone3] = userInput
408 } else if (phoneVariables == 4) {
410 this[phone4] = userInput
411 } else if (phoneVariables == 5) {
413 this[phone5] = userInput
417 extractedObjectsApp1.append("//Global variable for phone!\n")
418 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
420 extractedObjectsApp2.append("//Global variable for phone!\n")
421 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
425 def userInput = System.console().readLine 'Enter the name of the contact:'
427 if (contactVariables == 0) {
429 this[contact0] = userInput
430 } else if (contactVariables == 1) {
432 this[contact1] = userInput
433 } else if (contactVariables == 2) {
435 this[contact2] = userInput
436 } else if (contactVariables == 3) {
438 this[contact3] = userInput
439 } else if (contactVariables == 4) {
441 this[contact4] = userInput
442 } else if (contactVariables == 5) {
444 this[contact5] = userInput
448 extractedObjectsApp1.append("//Global variable for contact!\n")
449 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
451 extractedObjectsApp2.append("//Global variable for contact!\n")
452 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
460 //input "","",linkedHashMap
461 def input(LinkedHashMap metaData, String name, String type) {
463 case "capability.lock":
464 if (metaData.containsKey('title')) {
465 println metaData['title']
467 if (metaData.containsKey('options')) {
468 println "Options: "+metaData['options']
471 this[lockObject] = new Locks({}, 1)
473 extractedObjectsApp1.append("//Object for class lock!\n")
474 extractedObjectsApp1.append("def "+name+"\n")
475 extractedObjectsConstructorApp1.append(name+" = obj.lockObject\n")
477 extractedObjectsApp2.append("//Object for class lock!\n")
478 extractedObjectsApp2.append("def "+name+"\n")
479 extractedObjectsConstructorApp2.append(name+" = obj.lockObject\n")
482 case "capability.alarm":
484 case "capability.battery":
486 case "capability.beacon":
488 case "capability.carbonMonoxideDetector":
490 case "capability.colorControl":
492 case "capability.contactSensor":
493 if (metaData.containsKey('title')) {
494 println metaData['title']
496 if (metaData.containsKey('options')) {
497 println "Options: "+metaData['options']
500 this[contactObject] = new ContactSensors({}, 1)
502 extractedObjectsApp1.append("//Object for class contactSensor!\n")
503 extractedObjectsApp1.append("def "+name+"\n")
504 extractedObjectsConstructorApp1.append(name+" = obj.contactObject\n")
506 extractedObjectsApp2.append("//Object for class contactSensor!\n")
507 extractedObjectsApp2.append("def "+name+"\n")
508 extractedObjectsConstructorApp2.append(name+" = obj.contactObject\n")
511 case "capability.doorControl":
512 if (metaData.containsKey('title')) {
513 println metaData['title']
515 if (metaData.containsKey('options')) {
516 println "Options: "+metaData['options']
518 doorControlObject = name
519 this[doorControlObject] = new DoorControls({}, 1)
521 extractedObjectsApp1.append("//Object for class door control!\n")
522 extractedObjectsApp1.append("def "+name+"\n")
523 extractedObjectsConstructorApp1.append(name+" = obj.doorControlObject\n")
525 extractedObjectsApp2.append("//Object for class door control!\n")
526 extractedObjectsApp2.append("def "+name+"\n")
527 extractedObjectsConstructorApp2.append(name+" = obj.doorControlObject\n")
530 case "capability.energyMeter":
532 case "capability.illuminanceMeasurement":
534 case "capability.accelerationSensor":
536 case "capability.motionSensor":
538 case "capability.musicPlayer":
540 case "capability.powerMeter":
542 case "capability.presenceSensor":
543 if (metaData.containsKey('title')) {
544 println metaData['title']
546 if (metaData.containsKey('options')) {
547 println "Options: "+metaData['options']
549 presenceSensorObject = name
550 this[presenceSensorObject] = new PresenceSensors({}, 1)
552 extractedObjectsApp1.append("//Object for class presence sensor!\n")
553 extractedObjectsApp1.append("def "+name+"\n")
554 extractedObjectsConstructorApp1.append(name+" = obj.presenceSensorObject\n")
556 extractedObjectsApp2.append("//Object for class presence sensor!\n")
557 extractedObjectsApp2.append("def "+name+"\n")
558 extractedObjectsConstructorApp2.append(name+" = obj.presenceSensorObject\n")
561 case "capability.relativeHumidityMeasurement":
563 case "capability.relaySwitch":
565 case "capability.sleepSensor":
567 case "capability.smokeDetector":
569 case "capability.stepSensor":
571 case "capability.switch":
572 if (metaData.containsKey('title')) {
573 println metaData['title']
575 if (metaData.containsKey('options')) {
576 println "Options: "+metaData['options']
579 this[switchObject] = new Switches({}, 1)
581 extractedObjectsApp1.append("//Object for class switch!\n")
582 extractedObjectsApp1.append("def "+name+"\n")
583 extractedObjectsConstructorApp1.append(name+" = obj.switchObject\n")
585 extractedObjectsApp2.append("//Object for class switch!\n")
586 extractedObjectsApp2.append("def "+name+"\n")
587 extractedObjectsConstructorApp2.append(name+" = obj.switchObject\n")
590 case "capability.switchLevel":
592 case "capability.temperatureMeasurement":
594 case "capability.thermostat":
595 if (metaData.containsKey('title')) {
596 println metaData['title']
598 if (metaData.containsKey('options')) {
599 println "Options: "+metaData['options']
601 thermostatObject = name
602 this[thermostatObject] = new Thermostats({}, 1)
604 extractedObjectsApp1.append("//Object for class thermostat!\n")
605 extractedObjectsApp1.append("def "+name+"\n")
606 extractedObjectsConstructorApp1.append(name+" = obj.thermostatObject\n")
608 extractedObjectsApp2.append("//Object for class thermostat!\n")
609 extractedObjectsApp2.append("def "+name+"\n")
610 extractedObjectsConstructorApp2.append(name+" = obj.thermostatObject\n")
613 case "capability.valve":
615 case "capability.waterSensor":
617 case "capability.touchSensor":
618 if (metaData.containsKey('title')) {
619 println metaData['title']
621 if (metaData.containsKey('options')) {
622 println "Options: "+metaData['options']
624 touchSensorObject = name
625 this[touchSensorObject] = new NfcTouch({}, 1)
627 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
628 extractedObjectsApp1.append("def "+name+"\n")
629 extractedObjectsConstructorApp1.append(name+" = obj.touchSensorObject\n")
631 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
632 extractedObjectsApp2.append("def "+name+"\n")
633 extractedObjectsConstructorApp2.append(name+" = obj.touchSensorObject\n")
636 case "capability.imageCapture":
638 case "device.mobilePresence":
640 case "device.aeonKeyFob":
643 if (metaData.containsKey('title')) {
644 println metaData['title']
646 if (metaData.containsKey('options')) {
647 println "Options: "+metaData['options']
649 def userInput = System.console().readLine 'Enter the mode:'
651 if (modeVariables == 0) {
653 this[mode0] = userInput
654 } else if (modeVariables == 1) {
656 this[mode1] = userInput
657 } else if (modeVariables == 2) {
659 this[mode2] = userInput
660 } else if (modeVariables == 3) {
662 this[mode3] = userInput
663 } else if (modeVariables == 4) {
665 this[mode4] = userInput
666 } else if (modeVariables == 5) {
668 this[mode5] = userInput
671 modeVariables=modeVariables+1
674 extractedObjectsApp1.append("//Global variable for mode!\n")
675 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
677 extractedObjectsApp2.append("//Global variable for mode!\n")
678 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
686 if (metaData.containsKey('title')) {
687 println metaData['title']
689 if (metaData.containsKey('options')) {
690 println "Options: "+metaData['options']
692 def userInput = System.console().readLine 'Enter the number:'
694 if (numberVariables == 0) {
696 this[number0] = userInput
697 } else if (numberVariables == 1) {
699 this[number1] = userInput
700 } else if (numberVariables == 2) {
702 this[number2] = userInput
703 } else if (numberVariables == 3) {
705 this[number3] = userInput
706 } else if (numberVariables == 4) {
708 this[number4] = userInput
709 } else if (numberVariables == 5) {
711 this[number5] = userInput
714 numberVariables=numberVariables+1
717 extractedObjectsApp1.append("//Global variable for number!\n")
718 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
720 extractedObjectsApp2.append("//Global variable for number!\n")
721 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
725 if (metaData.containsKey('title')) {
726 println metaData['title']
728 if (metaData.containsKey('options')) {
729 println "Options: "+metaData['options']
731 def userInput = System.console().readLine 'Enter the time:'
733 if (timeVariables == 0) {
735 this[time0] = userInput
736 } else if (timeVariables == 1) {
738 this[time1] = userInput
739 } else if (timeVariables == 2) {
741 this[time2] = userInput
742 } else if (timeVariables == 3) {
744 this[time3] = userInput
745 } else if (timeVariables == 4) {
747 this[time4] = userInput
748 } else if (timeVariables == 5) {
750 this[time5] = userInput
753 timeVariables=timeVariables+1
756 extractedObjectsApp1.append("//Global variable for time!\n")
757 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
759 extractedObjectsApp2.append("//Global variable for time!\n")
760 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
764 if (metaData.containsKey('title')) {
765 println metaData['title']
767 if (metaData.containsKey('options')) {
768 println "Options: "+metaData['options']
770 def userInput = System.console().readLine 'Enter the enum:'
772 if (enumVariables == 0) {
774 this[enum0] = userInput
775 } else if (enumVariables == 1) {
777 this[enum1] = userInput
778 } else if (enumVariables == 2) {
780 this[enum2] = userInput
781 } else if (enumVariables == 3) {
783 this[enum3] = userInput
784 } else if (enumVariables == 4) {
786 this[enum4] = userInput
787 } else if (enumVariables == 5) {
789 this[enum5] = userInput
792 enumVariables=enumVariables+1
795 extractedObjectsApp1.append("//Global variable for enum!\n")
796 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
798 extractedObjectsApp2.append("//Global variable for enum!\n")
799 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
805 if (metaData.containsKey('title')) {
806 println metaData['title']
808 if (metaData.containsKey('options')) {
809 println "Options: "+metaData['options']
811 def userInput = System.console().readLine 'Enter the phone:'
813 if (phoneVariables == 0) {
815 this[phone0] = userInput
816 } else if (phoneVariables == 1) {
818 this[phone1] = userInput
819 } else if (phoneVariables == 2) {
821 this[phone2] = userInput
822 } else if (phoneVariables == 3) {
824 this[phone3] = userInput
825 } else if (phoneVariables == 4) {
827 this[phone4] = userInput
828 } else if (phoneVariables == 5) {
830 this[phone5] = userInput
833 phoneVariables=phoneVariables+1
836 extractedObjectsApp1.append("//Global variable for phone!\n")
837 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
839 extractedObjectsApp2.append("//Global variable for phone!\n")
840 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
844 if (metaData.containsKey('title')) {
845 println metaData['title']
847 if (metaData.containsKey('options')) {
848 println "Options: "+metaData['options']
850 def userInput = System.console().readLine 'Enter the name of the contact:'
852 if (contactVariables == 0) {
854 this[contact0] = userInput
855 } else if (contactVariables == 1) {
857 this[contact1] = userInput
858 } else if (contactVariables == 2) {
860 this[contact2] = userInput
861 } else if (contactVariables == 3) {
863 this[contact3] = userInput
864 } else if (contactVariables == 4) {
866 this[contact4] = userInput
867 } else if (contactVariables == 5) {
869 this[contact5] = userInput
872 contactVariables=contactVariables+1
875 extractedObjectsApp1.append("//Global variable for contact!\n")
876 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
878 extractedObjectsApp2.append("//Global variable for contact!\n")
879 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
886 //input linkedHashMap
887 def input(LinkedHashMap metaData) {
888 switch(metaData['type']) {
889 case "capability.lock":
890 if (metaData.containsKey('title')) {
891 println metaData['title']
893 if (metaData.containsKey('options')) {
894 println "Options: "+metaData['options']
896 lockObject = metaData['name']
897 this[lockObject] = new Locks({}, 1)
899 extractedObjectsApp1.append("//Object for class lock!\n")
900 extractedObjectsApp1.append("def "+metaData['name']+"\n")
901 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")
903 extractedObjectsApp2.append("//Object for class lock!\n")
904 extractedObjectsApp2.append("def "+metaData['name']+"\n")
905 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
908 case "capability.alarm":
910 case "capability.battery":
912 case "capability.beacon":
914 case "capability.carbonMonoxideDetector":
916 case "capability.colorControl":
918 case "capability.contactSensor":
919 if (metaData.containsKey('title')) {
920 println metaData['title']
922 if (metaData.containsKey('options')) {
923 println "Options: "+metaData['options']
925 contactObject = metaData['name']
926 this[contactObject] = new ContactSensors({}, 1)
928 extractedObjectsApp1.append("//Object for class contactSensor!\n")
929 extractedObjectsApp1.append("def "+metaData['name']+"\n")
930 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")
932 extractedObjectsApp2.append("//Object for class contactSensor!\n")
933 extractedObjectsApp2.append("def "+metaData['name']+"\n")
934 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
937 case "capability.doorControl":
938 doorControlObject = metaData['name']
939 this[doorControlObject] = new DoorControls({}, 1)
941 extractedObjectsApp1.append("//Object for class door control!\n")
942 extractedObjectsApp1.append("def "+metaData['name']+"\n")
943 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")
945 extractedObjectsApp2.append("//Object for class door control!\n")
946 extractedObjectsApp2.append("def "+metaData['name']+"\n")
947 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
950 case "capability.energyMeter":
952 case "capability.illuminanceMeasurement":
954 case "capability.accelerationSensor":
956 case "capability.motionSensor":
958 case "capability.musicPlayer":
960 case "capability.powerMeter":
962 case "capability.presenceSensor":
963 if (metaData.containsKey('title')) {
964 println metaData['title']
966 if (metaData.containsKey('options')) {
967 println "Options: "+metaData['options']
969 presenceSensorObject = metaData['name']
970 this[presenceSensorObject] = new PresenceSensors({}, 1)
972 extractedObjectsApp1.append("//Object for class presence sensor!\n")
973 extractedObjectsApp1.append("def "+metaData['name']+"\n")
974 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")
976 extractedObjectsApp2.append("//Object for class presence sensor!\n")
977 extractedObjectsApp2.append("def "+metaData['name']+"\n")
978 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
981 case "capability.relativeHumidityMeasurement":
983 case "capability.relaySwitch":
985 case "capability.sleepSensor":
987 case "capability.smokeDetector":
989 case "capability.stepSensor":
991 case "capability.switch":
992 if (metaData.containsKey('title')) {
993 println metaData['title']
995 if (metaData.containsKey('options')) {
996 println "Options: "+metaData['options']
998 switchObject = metaData['name']
999 this[switchObject] = new Switches({}, 1)
1000 if (App == "App1") {
1001 extractedObjectsApp1.append("//Object for class switch!\n")
1002 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1003 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")
1005 extractedObjectsApp2.append("//Object for class switch!\n")
1006 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1007 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
1010 case "capability.switchLevel":
1012 case "capability.temperatureMeasurement":
1014 case "capability.thermostat":
1015 if (metaData.containsKey('title')) {
1016 println metaData['title']
1018 if (metaData.containsKey('options')) {
1019 println "Options: "+metaData['options']
1021 thermostatObject = metaData['name']
1022 this[thermostatObject] = new Thermostats({}, 1)
1023 if (App == "App1") {
1024 extractedObjectsApp1.append("//Object for class thermostat!\n")
1025 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1026 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")
1028 extractedObjectsApp2.append("//Object for class thermostat!\n")
1029 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1030 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
1033 case "capability.valve":
1035 case "capability.waterSensor":
1037 case "capability.touchSensor":
1038 if (metaData.containsKey('title')) {
1039 println metaData['title']
1041 if (metaData.containsKey('options')) {
1042 println "Options: "+metaData['options']
1044 touchSensorObject = metaData['name']
1045 this[touchSensorObject] = new NfcTouch({}, 1)
1046 if (App == "App1") {
1047 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
1048 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1049 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")
1051 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
1052 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1053 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
1056 case "capability.imageCapture":
1058 case "device.mobilePresence":
1060 case "device.aeonKeyFob":
1063 if (metaData.containsKey('title')) {
1064 println metaData['title']
1066 if (metaData.containsKey('options')) {
1067 println "Options: "+metaData['options']
1069 def userInput = System.console().readLine 'Enter the mode:'
1071 if (modeVariables == 0) {
1072 mode0 = metaData['name']
1073 this[mode0] = userInput
1074 } else if (modeVariables == 1) {
1075 mode1 = metaData['name']
1076 this[mode1] = userInput
1077 } else if (modeVariables == 2) {
1078 mode2 = metaData['name']
1079 this[mode2] = userInput
1080 } else if (modeVariables == 3) {
1081 mode3 = metaData['name']
1082 this[mode3] = userInput
1083 } else if (modeVariables == 4) {
1084 mode4 = metaData['name']
1085 this[mode4] = userInput
1086 } else if (modeVariables == 5) {
1087 mode5 = metaData['name']
1088 this[mode5] = userInput
1091 if (App == "App1") {
1092 extractedObjectsApp1.append("//Global variable for mode!\n")
1093 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1095 extractedObjectsApp2.append("//Global variable for mode!\n")
1096 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1104 if (metaData.containsKey('title')) {
1105 println metaData['title']
1107 if (metaData.containsKey('options')) {
1108 println "Options: "+metaData['options']
1110 def userInput = System.console().readLine 'Enter the number:'
1112 if (numberVariables == 0) {
1113 number0 = metaData['name']
1114 this[number0] = userInput
1115 } else if (numberVariables == 1) {
1116 number1 = metaData['name']
1117 this[number1] = userInput
1118 } else if (numberVariables == 2) {
1119 number2 = metaData['name']
1120 this[number2] = userInput
1121 } else if (numberVariables == 3) {
1122 number3 = metaData['name']
1123 this[number3] = userInput
1124 } else if (numberVariables == 4) {
1125 number4 = metaData['name']
1126 this[number4] = userInput
1127 } else if (numberVariables == 5) {
1128 number5 = metaData['name']
1129 this[number5] = userInput
1132 if (App == "App1") {
1133 extractedObjectsApp1.append("//Global variable for number!\n")
1134 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1136 extractedObjectsApp2.append("//Global variable for number!\n")
1137 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1141 if (metaData.containsKey('title')) {
1142 println metaData['title']
1144 if (metaData.containsKey('options')) {
1145 println "Options: "+metaData['options']
1147 def userInput = System.console().readLine 'Enter the time:'
1149 if (timeVariables == 0) {
1150 time0 = metaData['name']
1151 this[time0] = userInput
1152 } else if (timeVariables == 1) {
1153 time1 = metaData['name']
1154 this[time1] = userInput
1155 } else if (timeVariables == 2) {
1156 time2 = metaData['name']
1157 this[time2] = userInput
1158 } else if (timeVariables == 3) {
1159 time3 = metaData['name']
1160 this[time3] = userInput
1161 } else if (timeVariables == 4) {
1162 time4 = metaData['name']
1163 this[time4] = userInput
1164 } else if (timeVariables == 5) {
1165 time5 = metaData['name']
1166 this[time5] = userInput
1169 if (App == "App1") {
1170 extractedObjectsApp1.append("//Global variable for time!\n")
1171 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1173 extractedObjectsApp2.append("//Global variable for time!\n")
1174 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1178 if (metaData.containsKey('title')) {
1179 println metaData['title']
1181 if (metaData.containsKey('options')) {
1182 println "Options: "+metaData['options']
1184 def userInput = System.console().readLine 'Enter the enum:'
1186 if (enumVariables == 0) {
1187 enum0 = metaData['name']
1188 this[enum0] = userInput
1189 } else if (enumVariables == 1) {
1190 enum1 = metaData['name']
1191 this[enum1] = userInput
1192 } else if (enumVariables == 2) {
1193 enum2 = metaData['name']
1194 this[enum2] = userInput
1195 } else if (enumVariables == 3) {
1196 enum3 = metaData['name']
1197 this[enum3] = userInput
1198 } else if (enumVariables == 4) {
1199 enum4 = metaData['name']
1200 this[enum4] = userInput
1201 } else if (enumVariables == 5) {
1202 enum5 = metaData['name']
1203 this[enum5] = userInput
1206 if (App == "App1") {
1207 extractedObjectsApp1.append("//Global variable for enum!\n")
1208 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1210 extractedObjectsApp2.append("//Global variable for enum!\n")
1211 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1217 if (metaData.containsKey('title')) {
1218 println metaData['title']
1220 if (metaData.containsKey('options')) {
1221 println "Options: "+metaData['options']
1223 def userInput = System.console().readLine 'Enter the phone:'
1225 if (phoneVariables == 0) {
1226 phone0 = metaData['name']
1227 this[phone0] = userInput
1228 } else if (phoneVariables == 1) {
1229 phone1 = metaData['name']
1230 this[phone1] = userInput
1231 } else if (phoneVariables == 2) {
1232 phone2 = metaData['name']
1233 this[phone2] = userInput
1234 } else if (phoneVariables == 3) {
1235 phone3 = metaData['name']
1236 this[phone3] = userInput
1237 } else if (phoneVariables == 4) {
1238 phone4 = metaData['name']
1239 this[phone4] = userInput
1240 } else if (phoneVariables == 5) {
1241 phone5 = metaData['name']
1242 this[phone5] = userInput
1245 if (App == "App1") {
1246 extractedObjectsApp1.append("//Global variable for phone!\n")
1247 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1249 extractedObjectsApp2.append("//Global variable for phone!\n")
1250 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1254 if (metaData.containsKey('title')) {
1255 println metaData['title']
1257 if (metaData.containsKey('options')) {
1258 println "Options: "+metaData['options']
1260 def userInput = System.console().readLine 'Enter the metaData['name'] of the contact:'
1262 if (contactVariables == 0) {
1263 contact0 = metaData['name']
1264 this[contact0] = userInput
1265 } else if (contactVariables == 1) {
1266 contact1 = metaData['name']
1267 this[contact1] = userInput
1268 } else if (contactVariables == 2) {
1269 contact2 = metaData['name']
1270 this[contact2] = userInput
1271 } else if (contactVariables == 3) {
1272 contact3 = metaData['name']
1273 this[contact3] = userInput
1274 } else if (contactVariables == 4) {
1275 contact4 = metaData['name']
1276 this[contact4] = userInput
1277 } else if (contactVariables == 5) {
1278 contact5 = metaData['name']
1279 this[contact5] = userInput
1282 if (App == "App1") {
1283 extractedObjectsApp1.append("//Global variable for contact!\n")
1284 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1286 extractedObjectsApp2.append("//Global variable for contact!\n")
1287 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1295 def label(LinkedHashMap metaData) {
1296 if (metaData.containsKey('title')) {
1297 println metaData['title']
1299 if (metaData.containsKey('options')) {
1300 println "Options: "+metaData['options']
1303 println("//IGNORE--ForMobileUse//")
1306 def mode(LinkedHashMap metaData) {
1307 if (metaData.containsKey('title')) {
1308 println metaData['title']
1310 if (metaData.containsKey('options')) {
1311 println "Options: "+metaData['options']
1314 println("//IGNORE--ForMobileUse//")
1316 /////Input Methods/////
1319 /////MethodsForExtraction/////
1320 def definition(LinkedHashMap metaData) {
1321 println("///Just some information///")
1324 def preferences(Closure inputData) {
1325 find(inputData) //Run the closure to extract pages/sections/inputMethods
1328 def page(LinkedHashMap metaData, Closure inputData) {
1329 if (metaData.containsKey('name'))
1330 println(metaData['name'])
1331 if (metaData.containsKey('title'))
1332 println(metaData['title'])
1334 find(inputData) //Run the closure to extract sections/inputMethods
1337 def page(LinkedHashMap metaData) {
1338 def nameOfFunction = metaData['name']
1339 "$nameOfFunction"() //Call the page
1342 def dynamicPage(LinkedHashMap metaData, Closure inputData) {
1343 if (metaData.containsKey('name'))
1344 println(metaData['name'])
1345 if (metaData.containsKey('title'))
1346 println(metaData['title'])
1348 find(inputData) //Run the closure to extract sections/inputMethods
1351 def section(String title, Closure inputData) {
1353 find(inputData) //Run the closure to extract inputMethods
1356 def section(LinkedHashMap metaData, Closure inputData) {
1357 find(inputData) //Run the closure to extract inputMethods
1359 /////MethodsForExtraction/////
1365 name: "Good Night House",
1366 namespace: "charette.joseph@gmail.com",
1367 author: "Joseph Charette",
1368 description: "Some on, some off with delay for bedtime, Lock The Doors",
1369 category: "Convenience",
1370 iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png",
1371 iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png"
1373 * Borrowed code from
1374 * Walk Gentle Into That Good Night
1376 * Author: oneaccttorulethehouse@gmail.com
1381 section("When I touch the app turn these lights off…"){
1382 input "switchesoff", "capability.switch", multiple: true, required:true
1384 section("When I touch the app turn these lights on…"){
1385 input "switcheson", "capability.switch", multiple: true, required:false
1387 section("Lock theses locks...") {
1388 input "lock1","capability.lock", multiple: true
1390 section("And change to this mode...") {
1391 input "newMode", "mode", title: "Mode?"
1393 section("After so many seconds (optional)"){
1394 input "waitfor", "number", title: "Off after (default 120)", required: true
1401 log.debug "Installed with settings: ${settings}"
1402 log.debug "Current mode = ${location.mode}"
1403 subscribe(app, appTouch)
1409 log.debug "Updated with settings: ${settings}"
1410 log.debug "Current mode = ${location.mode}"
1412 subscribe(app, appTouch)
1416 log.debug "changeMode, location.mode = $location.mode, newMode = $newMode, location.modes = $location.modes"
1417 if (location.mode != newMode) {
1418 setLocationMode(newMode)
1419 log.debug "Changed the mode to '${newMode}'"
1421 log.debug "New mode is the same as the old mode, leaving it be"
1423 log.debug "appTouch: $evt"
1426 def delay = (waitfor != null && waitfor != "") ? waitfor * 1000 : 120000
1427 switchesoff.off(delay: delay)