5 eventAppList = [] # This list maps App1 or App2 to a specific event
7 eventVarCounterMap = {}
15 # Mapping for event type and number of events
16 # e.g., switch has 2 events: on and off
17 eventTypeCounterMap = {'lock': 2,
21 'tamper.tampered' : 1,
29 'presence.present' : 1,
33 'motion.inactive' : 1,
39 'carbonMonoxide.clear' : 1,
40 'carbonMonoxide.detected' : 1,
41 'carbonMonoxide.tested' : 1,
44 'thermostatFanMode' : 5,
45 'thermostatOperatingState' : 5,
50 'acceleration.active' : 1,
51 'acceleration.inactive' : 1,
56 'colorTemperature' : 1,
67 'trackDescription' : 1,
71 'heatingSetpoint' : 1,
72 'coolingSetpoint' : 1,
73 'thermostatSetpoint' : 1}
78 Skip = ['\n', '\t', ' ']
79 Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
105 def ExtractFunctions(F, appName):
111 while (Temp != "EOF"):
112 if (Temp == "def" or Temp == "private"):
114 if (Temp == "def" or Temp == "private"):
117 if (GetToken(F) == "("): #We have a function to create object for
118 if (appName == "App1"):
119 extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")
120 extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
121 extractedFunctionsApp1.write("%s\n" % NameofFunc)
123 extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")
124 extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
125 extractedFunctionsApp2.write("%s\n" % NameofFunc)
127 #Check input capability
128 if (Temp == "input"):
131 variable = GetToken(F)
132 Temp = GetToken(F) #Get '"'
133 Temp = GetToken(F) #Get ','
136 capability = GetToken(F)
137 capabilityMap[variable] = capability
139 #Check subscribed events
140 if (Temp == "subscribe"):
141 if (appName == "App1"):
149 while (Temp != "\"" and Temp != "app" and Temp != "location"):
154 #print "DEBUG: %s - %s" % (variable, Temp)
156 if Temp == "app" or Temp == "location":
157 if Temp not in eventList:
158 eventList.append(Temp)
159 if (appName == "App1"):
160 eventAppList.append("App1")
162 eventAppList.append("App2")
163 elif Temp not in eventList or (variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList):
164 # We do not repeat the same capability twice
165 capability = capabilityMap[variable]
166 capabilityList.append(capability)
167 eventList.append(Temp)
168 if (appName == "App1"):
169 eventAppList.append("App1")
171 eventAppList.append("App2")
172 if Temp in eventVarMap.keys():
173 listOfEvents = eventVarMap[Temp]
174 listOfEvents.append(variable)
176 eventVarMap[Temp] = [variable]
177 #print "DEBUG: %s - %s" % (variable, Temp)
181 #Check and analyze capabilities for physical interaction
182 AnalyzeCapabilities(Temp, appName, F)
186 #Warn if there is a potential for physical interaction
187 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
188 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
190 def AnalyzeCapabilities(Temp, appName, F):
192 if (Temp == "capability.switch" or
193 Temp == "capability.switchLevel" or
194 Temp == "capability.illuminanceMeasurement" or
195 Temp == "capability.colorControl" or
197 Temp == "capability.motionSensor" or
198 Temp == "capability.accelerationSensor" or
200 Temp == "capability.valve" or
201 Temp == "capability.waterSensor" or
203 Temp == "capability.musicPlayer" or
204 Temp == "capability.alarm" or
205 Temp == "capability.speechSynthesis" or
206 Temp == "capability.soundSensor"):
207 if (appName == "App1"):
208 app1Capabilities.append(Temp)
210 app2Capabilities.append(Temp)
211 if (Temp == "capability"):
212 Temp = GetToken(F) #Get '"'
213 Temp = GetToken(F) #Get 'Music'
214 Temp = Temp + GetToken(F) #Get 'Player'
215 if (Temp == "MusicPlayer"):
216 if (appName == "App1"):
217 app1Capabilities.append("capability.musicPlayer")
219 app2Capabilities.append("capability.musicPlayer")
221 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
223 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
224 "capability.switchLevel" in app2Capab or "capability.colorControl" in app2Capab):
225 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
227 # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion
228 if ("capability.motionSensor" in app1Capab) or ("capability.accelerationSensor" in app1Capab):
229 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
231 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
232 "capability.switch" in app2Capab):
233 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
235 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
236 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
237 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
241 numOfActualEvents = 0
242 for event in eventList:
243 numOfActualEvents = numOfActualEvents + eventTypeCounterMap[event]
244 return numOfActualEvents
246 def ExtractEvents(extractedEvents):
251 global eventVarCounterMap
252 # Count the number of events
253 numOfActualEvents = CountEvents()
254 extractedEvents.write("while(true) {\n")
255 extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1))
256 extractedEvents.write("\tswitch(eventNumber) {\n")
259 indexApp2 = eventAppList.index("App2")
260 indexApp2Start = indexApp2
261 #print "DEBUG: App1: %d" % indexApp1
262 #print "DEBUG: App2: %d" % indexApp2
263 #print "DEBUG: eventList: %d" % len(eventList)
265 while counter < len(eventList):
266 # Interleave events from App1 and App2
269 indexApp1 = indexApp1 + 1
270 if indexApp2 < len(eventList):
274 indexApp2 = indexApp2 + 1
275 if indexApp1 < indexApp2Start:
277 print "DEBUG: i: %d" % i
278 extractedEvents.write("\t\tcase %d:\n" % counter)
279 if eventList[i] == "lock":
280 #Write two events subsequently
281 event = open("eventSimulator/lockLockedEvent.groovy", "r")
283 extractedEvents.write(line)
285 extractedEvents.write("\n\t\t\tbreak\n")
286 counter = counter + 1
287 extractedEvents.write("\t\tcase %d:\n" % counter)
288 event = open("eventSimulator/lockUnlockedEvent.groovy", "r")
290 extractedEvents.write(line)
292 elif eventList[i] == "unlock":
293 event = open("eventSimulator/unlockEvent.groovy", "r")
295 extractedEvents.write(line)
297 elif eventList[i] == "contact.open":
298 event = open("eventSimulator/contactOpenEvent.groovy", "r")
300 extractedEvents.write(line)
302 elif eventList[i] == "contact.closed":
303 event = open("eventSimulator/contactClosedEvent.groovy", "r")
305 extractedEvents.write(line)
307 elif eventList[i] == "tamper.tampered":
308 #Write two events subsequently
309 event = open("eventSimulator/tamperTamperedOpenEvent.groovy", "r")
311 extractedEvents.write(line)
313 extractedEvents.write("\n\t\t\tbreak\n")
314 counter = counter + 1
315 extractedEvents.write("\t\tcase %d:\n" % counter)
316 event = open("eventSimulator/tamperTamperedClosedEvent.groovy", "r")
318 extractedEvents.write(line)
320 elif eventList[i] == "nfcTouch":
321 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
323 extractedEvents.write(line)
325 elif eventList[i] == "app": #Case for Touched event
326 event = open("eventSimulator/appTouchEvent.groovy", "r")
328 extractedEvents.write(line)
330 elif eventList[i] == "button":
331 #Write two events subsequently
332 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
334 extractedEvents.write(line)
336 extractedEvents.write("\n\t\t\tbreak\n")
337 counter = counter + 1
338 extractedEvents.write("\t\tcase %d:\n" % counter)
339 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
341 extractedEvents.write(line)
343 elif eventList[i] == "water":
344 #Write two events subsequently
345 event = open("eventSimulator/waterDryEvent.groovy", "r")
347 extractedEvents.write(line)
349 extractedEvents.write("\n\t\t\tbreak\n")
350 counter = counter + 1
351 extractedEvents.write("\t\tcase %d:\n" % counter)
352 event = open("eventSimulator/waterWetEvent.groovy", "r")
354 extractedEvents.write(line)
356 elif eventList[i] == "water.dry":
357 event = open("eventSimulator/waterDefaultDryEvent.groovy", "r")
359 extractedEvents.write(line)
361 elif eventList[i] == "water.wet":
362 event = open("eventSimulator/waterDefaultWetEvent.groovy", "r")
364 extractedEvents.write(line)
366 elif eventList[i] == "presence":
367 #Check which capability
368 variable = eventVarMap[eventList[i]]
369 if eventList[i] not in eventVarCounterMap.keys():
370 eventVarCounterMap[eventList[i]] = 1
373 eventVarCount = eventVarCounterMap[eventList[i]]
374 eventVarCounterMap[eventList[i]] = eventVarCount + 1
375 capability = capabilityMap[variable[eventVarCount]]
376 #Write two events subsequently
377 if capability == "capability.presenceSensor":
378 event = open("eventSimulator/presencePresentEvent.groovy", "r")
379 elif capability == "capability.beacon":
380 event = open("eventSimulator/beaconPresentEvent.groovy", "r")
382 extractedEvents.write(line)
384 extractedEvents.write("\n\t\t\tbreak\n")
385 counter = counter + 1
386 extractedEvents.write("\t\tcase %d:\n" % counter)
387 if capability == "capability.presenceSensor":
388 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
389 elif capability == "capability.beacon":
390 event = open("eventSimulator/beaconLeftEvent.groovy", "r")
392 extractedEvents.write(line)
394 elif eventList[i] == "presence.present": #Case for Touched event
395 event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
397 extractedEvents.write(line)
399 elif eventList[i] == "doorState":
400 #Write two events subsequently
401 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
402 extractedEvents.write("\t\t\tif (event == 0) {\n")
403 event = open("eventSimulator/doorOpenEvent.groovy", "r")
405 extractedEvents.write(line)
407 extractedEvents.write("\n\t\t\tbreak\n")
408 counter = counter + 1
409 extractedEvents.write("\t\tcase %d:\n" % counter)
410 event = open("eventSimulator/doorClosedEvent.groovy", "r")
412 extractedEvents.write(line)
414 elif eventList[i] == "motion":
415 #Write two events subsequently
416 event = open("eventSimulator/motionActiveEvent.groovy", "r")
418 extractedEvents.write(line)
420 extractedEvents.write("\n\t\t\tbreak\n")
421 counter = counter + 1
422 extractedEvents.write("\t\tcase %d:\n" % counter)
423 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
425 extractedEvents.write(line)
427 elif eventList[i] == "motion.active":
428 event = open("eventSimulator/motionDefaultActiveEvent.groovy", "r")
430 extractedEvents.write(line)
432 elif eventList[i] == "motion.inactive":
433 event = open("eventSimulator/motionDefaultInactiveEvent.groovy", "r")
435 extractedEvents.write(line)
437 elif eventList[i] == "smoke":
438 #Write three events subsequently
439 event = open("eventSimulator/smokeClearEvent.groovy", "r")
441 extractedEvents.write(line)
443 extractedEvents.write("\n\t\t\tbreak\n")
444 counter = counter + 1
445 extractedEvents.write("\t\tcase %d:\n" % counter)
446 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
448 extractedEvents.write(line)
450 extractedEvents.write("\n\t\t\tbreak\n")
451 counter = counter + 1
452 extractedEvents.write("\t\tcase %d:\n" % counter)
453 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
455 extractedEvents.write(line)
457 elif eventList[i] == "smoke.clear":
458 event = open("eventSimulator/smokeDefaultClearEvent.groovy", "r")
460 extractedEvents.write(line)
462 elif eventList[i] == "smoke.detected":
463 event = open("eventSimulator/smokeDefaultDetectedEvent.groovy", "r")
465 extractedEvents.write(line)
467 elif eventList[i] == "smoke.tested":
468 event = open("eventSimulator/smokeDefaultTestedEvent.groovy", "r")
470 extractedEvents.write(line)
472 elif eventList[i] == "carbonMonoxide":
473 #Check which capability
474 variable = eventVarMap[eventList[i]]
475 if eventList[i] not in eventVarCounterMap.keys():
476 eventVarCounterMap[eventList[i]] = 1
479 eventVarCount = eventVarCounterMap[eventList[i]]
480 eventVarCounterMap[eventList[i]] = eventVarCount + 1
481 capability = capabilityMap[variable[eventVarCount]]
482 #Write three events subsequently
483 if capability == "capability.smokeDetector":
484 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
485 elif capability == "capability.carbonMonoxideDetector":
486 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
488 extractedEvents.write(line)
490 extractedEvents.write("\n\t\t\tbreak\n")
491 counter = counter + 1
492 extractedEvents.write("\t\tcase %d:\n" % counter)
493 if capability == "capability.smokeDetector":
494 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
495 elif capability == "capability.carbonMonoxideDetector":
496 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
498 extractedEvents.write(line)
500 extractedEvents.write("\n\t\t\tbreak\n")
501 counter = counter + 1
502 extractedEvents.write("\t\tcase %d:\n" % counter)
503 if capability == "capability.smokeDetector":
504 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
505 elif capability == "capability.carbonMonoxideDetector":
506 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
508 extractedEvents.write(line)
510 elif eventList[i] == "carbonMonoxide.clear":
511 #Check which capability
512 variable = eventVarMap[eventList[i]]
513 if eventList[i] not in eventVarCounterMap.keys():
514 eventVarCounterMap[eventList[i]] = 1
517 eventVarCount = eventVarCounterMap[eventList[i]]
518 eventVarCounterMap[eventList[i]] = eventVarCount + 1
519 capability = capabilityMap[variable[eventVarCount]]
520 if capability == "capability.smokeDetector":
521 event = open("eventSimulator/smokeCarbonMonoxideDefaultClearEvent.groovy", "r")
522 elif capability == "capability.carbonMonoxideDetector":
523 event = open("eventSimulator/carbonMonoxideDefaultClearEvent.groovy", "r")
525 extractedEvents.write(line)
527 elif eventList[i] == "carbonMonoxide.detected":
528 #Check which capability
529 variable = eventVarMap[eventList[i]]
530 if eventList[i] not in eventVarCounterMap.keys():
531 eventVarCounterMap[eventList[i]] = 1
534 eventVarCount = eventVarCounterMap[eventList[i]]
535 eventVarCounterMap[eventList[i]] = eventVarCount + 1
536 capability = capabilityMap[variable[eventVarCount]]
537 if capability == "capability.smokeDetector":
538 event = open("eventSimulator/smokeCarbonMonoxideDefaultDetectedEvent.groovy", "r")
539 elif capability == "capability.carbonMonoxideDetector":
540 event = open("eventSimulator/carbonMonoxideDefaultDetectedEvent.groovy", "r")
542 extractedEvents.write(line)
544 elif eventList[i] == "carbonMonoxide.tested":
545 #Check which capability
546 variable = eventVarMap[eventList[i]]
547 if eventList[i] not in eventVarCounterMap.keys():
548 eventVarCounterMap[eventList[i]] = 1
551 eventVarCount = eventVarCounterMap[eventList[i]]
552 eventVarCounterMap[eventList[i]] = eventVarCount + 1
553 capability = capabilityMap[variable[eventVarCount]]
554 if capability == "capability.smokeDetector":
555 event = open("eventSimulator/smokeCarbonMonoxideDefaultTestedEvent.groovy", "r")
556 elif capability == "capability.carbonMonoxideDetector":
557 event = open("eventSimulator/carbonMonoxideDefaultTestedEvent.groovy", "r")
559 extractedEvents.write(line)
561 elif eventList[i] == "battery":
562 #Check which capability
563 variable = eventVarMap[eventList[i]]
564 if eventList[i] not in eventVarCounterMap.keys():
565 eventVarCounterMap[eventList[i]] = 1
568 eventVarCount = eventVarCounterMap[eventList[i]]
569 eventVarCounterMap[eventList[i]] = eventVarCount + 1
570 capability = capabilityMap[variable[eventVarCount]]
571 if capability == "capability.smokeDetector":
572 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
573 elif capability == "capability.battery":
574 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
576 extractedEvents.write(line)
578 elif eventList[i] == "thermostatMode":
579 #Write five events subsequently
580 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
582 extractedEvents.write(line)
584 extractedEvents.write("\n\t\t\tbreak\n")
585 counter = counter + 1
586 extractedEvents.write("\t\tcase %d:\n" % counter)
587 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
589 extractedEvents.write(line)
591 extractedEvents.write("\n\t\t\tbreak\n")
592 counter = counter + 1
593 extractedEvents.write("\t\tcase %d:\n" % counter)
594 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
596 extractedEvents.write(line)
598 extractedEvents.write("\n\t\t\tbreak\n")
599 counter = counter + 1
600 extractedEvents.write("\t\tcase %d:\n" % counter)
601 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
603 extractedEvents.write(line)
605 extractedEvents.write("\n\t\t\tbreak\n")
606 counter = counter + 1
607 extractedEvents.write("\t\tcase %d:\n" % counter)
608 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
610 extractedEvents.write(line)
612 elif eventList[i] == "thermostatFanMode":
613 #Write five events subsequently
614 event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")
616 extractedEvents.write(line)
618 extractedEvents.write("\n\t\t\tbreak\n")
619 counter = counter + 1
620 extractedEvents.write("\t\tcase %d:\n" % counter)
621 event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
623 extractedEvents.write(line)
625 extractedEvents.write("\n\t\t\tbreak\n")
626 counter = counter + 1
627 extractedEvents.write("\t\tcase %d:\n" % counter)
628 event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
630 extractedEvents.write(line)
632 extractedEvents.write("\n\t\t\tbreak\n")
633 counter = counter + 1
634 extractedEvents.write("\t\tcase %d:\n" % counter)
635 event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
637 extractedEvents.write(line)
639 extractedEvents.write("\n\t\t\tbreak\n")
640 counter = counter + 1
641 extractedEvents.write("\t\tcase %d:\n" % counter)
642 event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
644 extractedEvents.write(line)
646 elif eventList[i] == "thermostatOperatingState":
647 #Write five events subsequently
648 event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")
650 extractedEvents.write(line)
652 extractedEvents.write("\n\t\t\tbreak\n")
653 counter = counter + 1
654 extractedEvents.write("\t\tcase %d:\n" % counter)
655 event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
657 extractedEvents.write(line)
659 extractedEvents.write("\n\t\t\tbreak\n")
660 counter = counter + 1
661 extractedEvents.write("\t\tcase %d:\n" % counter)
662 event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
664 extractedEvents.write(line)
666 extractedEvents.write("\n\t\t\tbreak\n")
667 counter = counter + 1
668 extractedEvents.write("\t\tcase %d:\n" % counter)
669 event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
671 extractedEvents.write(line)
673 extractedEvents.write("\n\t\t\tbreak\n")
674 counter = counter + 1
675 extractedEvents.write("\t\tcase %d:\n" % counter)
676 event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
678 extractedEvents.write(line)
680 elif eventList[i] == "switch":
681 #Check which capability
682 variable = eventVarMap[eventList[i]]
683 if eventList[i] not in eventVarCounterMap.keys():
684 eventVarCounterMap[eventList[i]] = 1
687 eventVarCount = eventVarCounterMap[eventList[i]]
688 eventVarCounterMap[eventList[i]] = eventVarCount + 1
689 capability = capabilityMap[variable[eventVarCount]]
690 #Write two events subsequently
691 if capability == "capability.switch":
692 event = open("eventSimulator/switchOnEvent.groovy", "r")
693 elif capability == "capability.switchLevel":
694 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
695 elif capability == "capability.relaySwitch":
696 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
697 elif capability == "capability.colorControl":
698 event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r")
700 extractedEvents.write(line)
702 extractedEvents.write("\n\t\t\tbreak\n")
703 counter = counter + 1
704 extractedEvents.write("\t\tcase %d:\n" % counter)
705 if capability == "capability.switch":
706 event = open("eventSimulator/switchOffEvent.groovy", "r")
707 elif capability == "capability.switchLevel":
708 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
709 elif capability == "capability.relaySwitch":
710 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
711 elif capability == "capability.colorControl":
712 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
714 extractedEvents.write(line)
716 elif eventList[i] == "location": #Case for Location event
717 #Write three events subsequently
718 event = open("eventSimulator/locationHomeEvent.groovy", "r")
720 extractedEvents.write(line)
722 extractedEvents.write("\n\t\t\tbreak\n")
723 counter = counter + 1
724 extractedEvents.write("\t\tcase %d:\n" % counter)
725 event = open("eventSimulator/locationAwayEvent.groovy", "r")
727 extractedEvents.write(line)
729 extractedEvents.write("\n\t\t\tbreak\n")
730 counter = counter + 1
731 extractedEvents.write("\t\tcase %d:\n" % counter)
732 event = open("eventSimulator/locationNightEvent.groovy", "r")
734 extractedEvents.write(line)
736 elif eventList[i] == "mode":
737 #Write three events subsequently
738 event = open("eventSimulator/modeHomeEvent.groovy", "r")
740 extractedEvents.write(line)
742 extractedEvents.write("\n\t\t\tbreak\n")
743 counter = counter + 1
744 extractedEvents.write("\t\tcase %d:\n" % counter)
745 event = open("eventSimulator/modeAwayEvent.groovy", "r")
747 extractedEvents.write(line)
749 extractedEvents.write("\n\t\t\tbreak\n")
750 counter = counter + 1
751 extractedEvents.write("\t\tcase %d:\n" % counter)
752 event = open("eventSimulator/modeNightEvent.groovy", "r")
754 extractedEvents.write(line)
756 elif eventList[i] == "acceleration":
757 #Write two events subsequently
758 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
760 extractedEvents.write(line)
762 extractedEvents.write("\n\t\t\tbreak\n")
763 counter = counter + 1
764 extractedEvents.write("\t\tcase %d:\n" % counter)
765 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
767 extractedEvents.write(line)
769 elif eventList[i] == "acceleration.active":
770 event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r")
772 extractedEvents.write(line)
774 elif eventList[i] == "acceleration.inactive":
775 event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r")
777 extractedEvents.write(line)
779 elif eventList[i] == "sleeping":
780 #Write two events subsequently
781 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
783 extractedEvents.write(line)
785 extractedEvents.write("\n\t\t\tbreak\n")
786 counter = counter + 1
787 extractedEvents.write("\t\tcase %d:\n" % counter)
788 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
790 extractedEvents.write(line)
792 elif eventList[i] == "goal":
793 event = open("eventSimulator/stepGoalEvent.groovy", "r")
795 extractedEvents.write(line)
797 elif eventList[i] == "steps":
798 event = open("eventSimulator/stepStepsEvent.groovy", "r")
800 extractedEvents.write(line)
802 elif eventList[i] == "color":
803 event = open("eventSimulator/colorChangeEvent.groovy", "r")
805 extractedEvents.write(line)
807 elif eventList[i] == "colorTemperature":
808 event = open("eventSimulator/colorTemperatureEvent.groovy", "r")
810 extractedEvents.write(line)
812 elif eventList[i] == "hue":
813 event = open("eventSimulator/hueChangeEvent.groovy", "r")
815 extractedEvents.write(line)
817 elif eventList[i] == "saturation":
818 event = open("eventSimulator/saturationChangeEvent.groovy", "r")
820 extractedEvents.write(line)
822 elif eventList[i] == "energy":
823 event = open("eventSimulator/energyMeterEvent.groovy", "r")
825 extractedEvents.write(line)
827 elif eventList[i] == "power":
828 event = open("eventSimulator/powerMeterEvent.groovy", "r")
830 extractedEvents.write(line)
832 elif eventList[i] == "illuminance":
833 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
835 extractedEvents.write(line)
837 elif eventList[i] == "humidity":
838 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
840 extractedEvents.write(line)
842 elif eventList[i] == "alarm":
843 #Write four events subsequently
844 event = open("eventSimulator/alarmBothEvent.groovy", "r")
846 extractedEvents.write(line)
848 extractedEvents.write("\n\t\t\tbreak\n")
849 counter = counter + 1
850 extractedEvents.write("\t\tcase %d:\n" % counter)
851 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
853 extractedEvents.write(line)
855 extractedEvents.write("\n\t\t\tbreak\n")
856 counter = counter + 1
857 extractedEvents.write("\t\tcase %d:\n" % counter)
858 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
860 extractedEvents.write(line)
862 extractedEvents.write("\n\t\t\tbreak\n")
863 counter = counter + 1
864 extractedEvents.write("\t\tcase %d:\n" % counter)
865 event = open("eventSimulator/alarmOffEvent.groovy", "r")
867 extractedEvents.write(line)
869 elif eventList[i] == "contact":
870 #Check which capability
871 variable = eventVarMap[eventList[i]]
872 if eventList[i] not in eventVarCounterMap.keys():
873 eventVarCounterMap[eventList[i]] = 1
876 eventVarCount = eventVarCounterMap[eventList[i]]
877 eventVarCounterMap[eventList[i]] = eventVarCount + 1
878 capability = capabilityMap[variable[eventVarCount]]
879 #Write two events subsequently
880 if capability == "capability.contactSensor":
881 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
882 elif capability == "capability.valve":
883 event = open("eventSimulator/valveClosedEvent.groovy", "r")
885 extractedEvents.write(line)
887 extractedEvents.write("\n\t\t\tbreak\n")
888 counter = counter + 1
889 extractedEvents.write("\t\tcase %d:\n" % counter)
890 if capability == "capability.contactSensor":
891 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
892 elif capability == "capability.valve":
893 event = open("eventSimulator/valveOpenEvent.groovy", "r")
895 extractedEvents.write(line)
897 elif eventList[i] == "status":
898 #Write three events subsequently
899 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
901 extractedEvents.write(line)
903 extractedEvents.write("\n\t\t\tbreak\n")
904 counter = counter + 1
905 extractedEvents.write("\t\tcase %d:\n" % counter)
906 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
908 extractedEvents.write(line)
910 extractedEvents.write("\n\t\t\tbreak\n")
911 counter = counter + 1
912 extractedEvents.write("\t\tcase %d:\n" % counter)
913 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
915 extractedEvents.write(line)
917 elif eventList[i] == "level":
918 #Check which capability
919 variable = eventVarMap[eventList[i]]
920 if eventList[i] not in eventVarCounterMap.keys():
921 eventVarCounterMap[eventList[i]] = 1
924 eventVarCount = eventVarCounterMap[eventList[i]]
925 eventVarCounterMap[eventList[i]] = eventVarCount + 1
926 capability = capabilityMap[variable[eventVarCount]]
927 if capability == "capability.musicPlayer":
928 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
929 elif capability == "capability.switchLevel":
930 event = open("eventSimulator/switchLevelEvent.groovy", "r")
932 extractedEvents.write(line)
934 elif eventList[i] == "trackDescription":
935 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
937 extractedEvents.write(line)
939 elif eventList[i] == "trackData":
940 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
942 extractedEvents.write(line)
944 elif eventList[i] == "mute":
945 #Write two events subsequently
946 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
948 extractedEvents.write(line)
950 extractedEvents.write("\n\t\t\tbreak\n")
951 counter = counter + 1
952 extractedEvents.write("\t\tcase %d:\n" % counter)
953 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
955 extractedEvents.write(line)
957 elif eventList[i] == "temperature":
958 #Check which capability
959 variable = eventVarMap[eventList[i]]
960 if eventList[i] not in eventVarCounterMap.keys():
961 eventVarCounterMap[eventList[i]] = 1
964 eventVarCount = eventVarCounterMap[eventList[i]]
965 eventVarCounterMap[eventList[i]] = eventVarCount + 1
966 capability = capabilityMap[variable[eventVarCount]]
967 if capability == "capability.thermostat":
968 event = open("eventSimulator/temperatureEvent.groovy", "r")
969 elif capability == "capability.temperatureMeasurement":
970 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
972 extractedEvents.write(line)
974 elif eventList[i] == "heatingSetpoint":
975 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
977 extractedEvents.write(line)
979 elif eventList[i] == "coolingSetpoint":
980 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
982 extractedEvents.write(line)
984 elif eventList[i] == "thermostatSetpoint":
985 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
987 extractedEvents.write(line)
990 ###TODO: Add more events later
991 extractedEvents.write("\n\t\t\tbreak\n")
992 counter = counter + 1
993 extractedEvents.write("\t}\n")
994 extractedEvents.write("}\n")
996 def CheckIfOnlyTouchEvents():
997 #Check and throw an error if it is all touch events
998 #This is called Direct-Direct interaction and we do not model-check for this case
999 onlyTouchEvents = True
1000 for item in eventList:
1001 if item != "nfcTouch" and item != "app":
1002 onlyTouchEvents = False
1003 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
1004 # Write error log file
1005 extractError = open("appCreationError.log", "w+")
1006 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
1007 extractError.close()
1008 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
1011 #Extract objects to call functions from App1
1012 F1 = open("Extractor/App1/App1.groovy", "r")
1013 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
1014 ExtractFunctions(F1, "App1")
1017 #Extract objects to call functions from App2
1018 F2 = open("Extractor/App2/App2.groovy", "r")
1019 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
1020 ExtractFunctions(F2, "App2")
1023 #Prepare eventSimulator file while parsing the App1 and App2 files
1024 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
1025 CheckIfOnlyTouchEvents()
1026 ExtractEvents(extractedEvents)
1027 extractedEvents.close()
1029 #Save the extracted methods and app1 in a same file to extract information
1030 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1031 Extractor = open("Extractor/Extractor.groovy", "r")
1032 F1 = open("Extractor/App1/App1.groovy", "r")
1034 extractorFile.write("////////////////////\n")
1035 extractorFile.write("@Field App\n")
1036 extractorFile.write("App = \"App1\"")
1037 extractorFile.write("\n")
1038 for line in Extractor:
1039 extractorFile.write(line)
1040 extractorFile.write("\n\n")
1042 extractorFile.write(line)
1043 extractorFile.close()
1046 #Run the file to extract the objects
1047 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
1050 #Save the extracted methods and app2 in a same file to extract information
1051 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1052 Extractor = open("Extractor/Extractor.groovy", "r")
1053 F2 = open("Extractor/App2/App2.groovy", "r")
1055 extractorFile.write("////////////////////\n")
1056 extractorFile.write("@Field App\n")
1057 extractorFile.write("App = \"App2\"")
1058 extractorFile.write("\n")
1059 for line in Extractor:
1060 extractorFile.write(line)
1061 extractorFile.write("\n\n")
1063 extractorFile.write(line)
1064 #Run the file to extract the objects
1065 extractorFile.close()
1068 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")