X-Git-Url: http://plrg.eecs.uci.edu/git/?p=smartthings-infrastructure.git;a=blobdiff_plain;f=Extractor%2FExtractorScript.py;h=1172b4e392a6d987c1ea764a0a74109fb268e9fd;hp=f89c9ea42c62dc7fdcdd1059117e7c379069e43d;hb=8a357c98dc56b51939bb80079dbd3f3f1ac9e828;hpb=99635103460e10293e14b7b42116da57af23b4ce diff --git a/Extractor/ExtractorScript.py b/Extractor/ExtractorScript.py index f89c9ea..1172b4e 100644 --- a/Extractor/ExtractorScript.py +++ b/Extractor/ExtractorScript.py @@ -2,13 +2,126 @@ import os readyToReturn = 0 ToReturn = "" eventList = [] +eventAppList = [] # This list maps App1 or App2 to a specific event eventVarMap = {} +eventVarCounterMap = {} capabilityMap = {} +capabilityList = [] app1Capabilities = [] app2Capabilities = [] app1Subscribe = False app2Subscribe = False +# Mapping for event type and number of events +# e.g., switch has 2 events: on and off +eventTypeCounterMap = {'lock': 2, + 'unlock' : 1, + 'nfcTouch' : 1, + 'app' : 1, + 'button' : 2, + 'water' : 2, + 'water.dry' : 1, + 'water.wet' : 1, + 'presence' : 2, + 'doorState' : 2, + 'motion' : 2, + 'smoke' : 3, + 'carbonMonoxide' : 3, + 'battery' : 1, + 'thermostatMode' : 5, + 'thermostatFanMode' : 5, + 'thermostatOperatingState' : 5, + 'switch' : 2, + 'location' : 3, + 'mode' : 3, + 'sunset' : 1, + 'sunsetTime' : 1, + 'sunrise' : 1, + 'sunriseTime' : 1, + 'acceleration' : 2, + 'sleeping' : 2, + 'goal' : 1, + 'steps' : 1, + 'color' : 1, + 'colorTemperature' : 1, + 'hue' : 1, + 'saturation' : 1, + 'energy' : 1, + 'power' : 1, + 'illuminance' : 1, + 'humidity' : 1, + 'alarm' : 4, + 'contact' : 2, + 'status' : 3, + 'level' : 1, + 'trackDescription' : 1, + 'trackData' : 1, + 'mute' : 2, + 'temperature' : 1, + 'heatingSetpoint' : 1, + 'coolingSetpoint' : 1, + 'thermostatSetpoint' : 1} + +# Mapping for specific event types +eventTypesMap = {'alarm.both': 'alarm', + 'alarm.siren' : 'alarm', + 'alarm.strobe' : 'alarm', + 'alarm.off' : 'alarm', + 'contact.open' : 'contact', + 'contact.closed' : 'contact', + 'tamper.tampered' : 'contact', + 'doorState.open' : 'doorState', + 'doorState.closed' : 'doorState', + 'mode' : 'location', + 'mode.away' : 'location', + 'mode.home' : 'location', + 'mode.night' : 'location', + 'unlock' : 'lock', + 'lock.locked' : 'lock', + 'lock.unlocked' : 'lock', + 'motion.active' : 'motion', + 'motion.inactive' : 'motion', + 'status.playing' : 'status', + 'status.stopped' : 'status', + 'status.paused' : 'status', + 'mute.muted' : 'mute', + 'mute.unmuted' : 'mute', + 'presence.present' : 'presence', + 'presence.not present' : 'presence', + 'presence.not' : 'presence', + 'smoke.detected' : 'smoke', + 'smoke.clear' : 'smoke', + 'smoke.tested' : 'smoke', + 'carbonMonoxide.detected' : 'carbonMonoxide', + 'carbonMonoxide.clear' : 'carbonMonoxide', + 'carbonMonoxide.tested' : 'carbonMonoxide', + 'thermostatMode.cool' : 'thermostatMode', + 'thermostatMode.auto' : 'thermostatMode', + 'thermostatMode.emergencyHeat' : 'thermostatMode', + 'thermostatMode.heat' : 'thermostatMode', + 'thermostatMode.off' : 'thermostatMode', + 'thermostatFanMode.auto' : 'thermostatFanMode', + 'thermostatFanMode.fanCirculate' : 'thermostatFanMode', + 'thermostatFanMode.circulate' : 'thermostatFanMode', + 'thermostatFanMode.fanOn' : 'thermostatFanMode', + 'thermostatFanMode.on' : 'thermostatFanMode', + 'fanMode' : 'thermostatFanMode', + 'fanMode.auto' : 'thermostatFanMode', + 'fanMode.fanCirculate' : 'thermostatFanMode', + 'fanMode.circulate' : 'thermostatFanMode', + 'fanMode.fanOn' : 'thermostatFanMode', + 'fanMode.on' : 'thermostatFanMode', + 'switch.on' : 'switch', + 'switch.off' : 'switch', + 'button.pushed' : 'button', + 'button.held' : 'button', + 'acceleration.active' : 'acceleration', + 'acceleration.inactive' : 'acceleration', + 'sleeping.sleeping' : 'sleeping', + 'sleeping.not sleeping' : 'sleeping', + 'water.dry' : 'water', + 'water.wet' : 'water'} + def GetToken(f): global readyToReturn global ToReturn @@ -41,6 +154,8 @@ def GetToken(f): def ExtractFunctions(F, appName): global eventList + global eventAppList + global eventTypesMap global app1Subscribe global app2Subscribe Temp = GetToken(F) @@ -84,11 +199,49 @@ def ExtractFunctions(F, appName): variable = Temp while (Temp != "\"" and Temp != "app" and Temp != "location"): Temp = GetToken(F) + if Temp == "location": + # See if we have another case for location + Temp = GetToken(F) # Get ',' + Temp = GetToken(F) # Get '"' + if Temp == "\"": + Temp = GetToken(F) + else: + # This is the special case where we will see, e.g., sunset, sunrise, etc. + Temp = "location" if Temp == "\"": Temp = GetToken(F) - if Temp not in eventList: + + #print "DEBUG: %s - %s" % (variable, Temp) + #print capabilityMap + #print "DEBUG: location variable: %s" % Temp + + #Translate and reduce through mapping + if Temp in eventTypesMap.keys(): + Temp = eventTypesMap[Temp] + if Temp == "app" or Temp == "location" or Temp == "mode" or Temp == "sunset" or Temp == "sunrise" or Temp == "sunsetTime" or Temp == "sunriseTime": + if Temp not in eventList: + eventList.append(Temp) + if (appName == "App1"): + eventAppList.append("App1") + else: + eventAppList.append("App2") + elif Temp not in eventList or (variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList): + # We do not repeat the same capability twice + capability = capabilityMap[variable] + capabilityList.append(capability) eventList.append(Temp) - eventVarMap[Temp] = variable + if (appName == "App1"): + eventAppList.append("App1") + else: + eventAppList.append("App2") + if Temp in eventVarMap.keys(): + listOfEvents = eventVarMap[Temp] + listOfEvents.append(variable) + else: + eventVarMap[Temp] = [variable] + #print "DEBUG: %s - %s" % (variable, Temp) + #print capabilityMap + #print eventList #Check and analyze capabilities for physical interaction AnalyzeCapabilities(Temp, appName, F) @@ -99,7 +252,6 @@ def ExtractFunctions(F, appName): AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities) AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities) - def AnalyzeCapabilities(Temp, appName, F): #Illuminance related if (Temp == "capability.switch" or @@ -149,41 +301,63 @@ def AnalyzePhysicalInteraction(app1Capab, app2Capab): "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab): print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n") +def CountEvents(): + global eventList + numOfActualEvents = 0 + #print "DEBUG: eventlist: %d" % len(eventList) + #print "DEBUG: eventlist: %s" % eventList + for event in eventList: + #print "DEBUG: Event: %s %d" % (event, eventTypeCounterMap[event]) + numOfActualEvents = numOfActualEvents + eventTypeCounterMap[event] + return numOfActualEvents + def ExtractEvents(extractedEvents): global eventList + global eventAppList global eventVarMap global capabilityMap + global eventVarCounterMap + # Count the number of events + numOfActualEvents = CountEvents() extractedEvents.write("while(true) {\n") - extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (len(eventList) - 1)) + extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1)) extractedEvents.write("\tswitch(eventNumber) {\n") - for i in range(len(eventList)): - extractedEvents.write("\t\tcase %d:\n" % i) + counter = 0 + indexApp1 = 0 + if "App2" in eventAppList: + indexApp2 = eventAppList.index("App2") + else: + indexApp2 = len(eventList) + indexApp2Start = indexApp2 + #print "DEBUG: App1: %d" % indexApp1 + #print "DEBUG: App2: %d" % indexApp2 + #print "DEBUG: eventList: %d" % len(eventList) + #print eventList + isApp1 = True + while counter < numOfActualEvents: + # Interleave events from App1 and App2 + if isApp1 is True: + i = indexApp1 + indexApp1 = indexApp1 + 1 + if indexApp2 < len(eventList): + isApp1 = False + else: + i = indexApp2 + indexApp2 = indexApp2 + 1 + if indexApp1 < indexApp2Start: + isApp1 = True + #print "DEBUG: i: %d" % i + extractedEvents.write("\t\tcase %d:\n" % counter) if eventList[i] == "lock": #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/lockLockedEvent.groovy", "r") - for line in event: - extractedEvents.write("\t\t" + line) - event.close() - extractedEvents.write("\t\t\t} else {\n") - event = open("eventSimulator/lockUnlockedEvent.groovy", "r") - for line in event: - extractedEvents.write("\t\t" + line) - event.close() - extractedEvents.write("\t\t\t}\n") - elif eventList[i] == "unlock": - event = open("eventSimulator/unlockEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "contact.open": - event = open("eventSimulator/contactOpenEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "contact.closed": - event = open("eventSimulator/contactClosedEvent.groovy", "r") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) + event = open("eventSimulator/lockUnlockedEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -198,146 +372,168 @@ def ExtractEvents(extractedEvents): extractedEvents.write(line) event.close() elif eventList[i] == "button": + #Check which capability + variable = eventVarMap[eventList[i]] + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") - event = open("eventSimulator/buttonPushedEvent.groovy", "r") + if capability == "capability.button": + event = open("eventSimulator/buttonHeldEvent.groovy", "r") + elif capability == "device.aeonKeyFob": + event = open("eventSimulator/aeonKeyFobHeldEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") - event = open("eventSimulator/buttonHeldEvent.groovy", "r") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) + if capability == "capability.button": + event = open("eventSimulator/buttonPushedEvent.groovy", "r") + elif capability == "device.aeonKeyFob": + event = open("eventSimulator/aeonKeyFobPushedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "water": #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/waterDryEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/waterWetEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "presence": #Check which capability - print eventVarMap - print capabilityMap variable = eventVarMap[eventList[i]] - print "DEBUG: %s" % variable - capability = capabilityMap[variable] - #Write three events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] + #Write two events subsequently if capability == "capability.presenceSensor": event = open("eventSimulator/presencePresentEvent.groovy", "r") elif capability == "capability.beacon": event = open("eventSimulator/beaconPresentEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) if capability == "capability.presenceSensor": event = open("eventSimulator/presenceLeftEvent.groovy", "r") elif capability == "capability.beacon": event = open("eventSimulator/beaconLeftEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) - event.close() - extractedEvents.write("\t\t\t} else {\n") - event = open("eventSimulator/presencePresencePresentEvent.groovy", "r") - for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "doorState": #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/doorOpenEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/doorClosedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "motion": #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/motionActiveEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/motionInactiveEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "smoke": #Write three events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/smokeClearEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/smokeDetectedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/smokeTestedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "carbonMonoxide": #Check which capability variable = eventVarMap[eventList[i]] - capability = capabilityMap[variable] - #Write three events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] + #Write three events subsequently if capability == "capability.smokeDetector": event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r") elif capability == "capability.carbonMonoxideDetector": event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) if capability == "capability.smokeDetector": event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r") elif capability == "capability.carbonMonoxideDetector": event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) if capability == "capability.smokeDetector": event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r") elif capability == "capability.carbonMonoxideDetector": event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "battery": #Check which capability variable = eventVarMap[eventList[i]] - capability = capabilityMap[variable] + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] if capability == "capability.smokeDetector": event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r") elif capability == "capability.battery": @@ -347,165 +543,222 @@ def ExtractEvents(extractedEvents): event.close() elif eventList[i] == "thermostatMode": #Write five events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 2) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 3) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatOffModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "thermostatFanMode": #Write five events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 2) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 3) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "thermostatOperatingState": #Write five events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 2) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 3) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "switch": #Check which capability variable = eventVarMap[eventList[i]] - capability = capabilityMap[variable] + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") if capability == "capability.switch": event = open("eventSimulator/switchOnEvent.groovy", "r") elif capability == "capability.switchLevel": event = open("eventSimulator/switchLevelOnEvent.groovy", "r") elif capability == "capability.relaySwitch": event = open("eventSimulator/relaySwitchOnEvent.groovy", "r") + elif capability == "capability.colorControl": + event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r") + elif capability == "capability.colorTemperature": + event = open("eventSimulator/colorTemperatureSwitchOnEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) if capability == "capability.switch": event = open("eventSimulator/switchOffEvent.groovy", "r") elif capability == "capability.switchLevel": event = open("eventSimulator/switchLevelOffEvent.groovy", "r") elif capability == "capability.relaySwitch": event = open("eventSimulator/relaySwitchOffEvent.groovy", "r") + elif capability == "capability.colorControl": + event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r") + elif capability == "capability.colorTemperature": + event = open("eventSimulator/colorTemperatureSwitchOffEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "location": #Case for Location event #Write three events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/locationHomeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/locationAwayEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/locationNightEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) + event.close() + elif eventList[i] == "sunrise": + event = open("eventSimulator/locationSunriseEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "sunset": + event = open("eventSimulator/locationSunsetEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "sunsetTime": + event = open("eventSimulator/locationSunsetTimeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "sunriseTime": + event = open("eventSimulator/locationSunriseTimeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "acceleration": #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/accelerationActiveEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/accelerationInactiveEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) + event.close() + elif eventList[i] == "acceleration.active": + event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "acceleration.inactive": + event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r") + for line in event: + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "sleeping": #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/sleepSleepingEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "goal": event = open("eventSimulator/stepGoalEvent.groovy", "r") for line in event: @@ -517,17 +770,22 @@ def ExtractEvents(extractedEvents): extractedEvents.write(line) event.close() elif eventList[i] == "color": - event = open("eventSimulator/colorChangedEvent.groovy", "r") + event = open("eventSimulator/colorChangeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "colorTemperature": + event = open("eventSimulator/colorTemperatureEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() elif eventList[i] == "hue": - event = open("eventSimulator/hueChangedEvent.groovy", "r") + event = open("eventSimulator/hueChangeEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() elif eventList[i] == "saturation": - event = open("eventSimulator/saturationChangedEvent.groovy", "r") + event = open("eventSimulator/saturationChangeEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -553,78 +811,95 @@ def ExtractEvents(extractedEvents): event.close() elif eventList[i] == "alarm": #Write four events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,3)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/alarmBothEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/alarmSirenEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 2) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/alarmStrobeEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/alarmOffEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "contact": #Check which capability variable = eventVarMap[eventList[i]] - capability = capabilityMap[variable] + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") if capability == "capability.contactSensor": event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r") elif capability == "capability.valve": event = open("eventSimulator/valveClosedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) if capability == "capability.contactSensor": event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r") elif capability == "capability.valve": event = open("eventSimulator/valveOpenEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "status": #Write three events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else if (event == 1) {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "level": #Check which capability variable = eventVarMap[eventList[i]] - capability = capabilityMap[variable] + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] if capability == "capability.musicPlayer": event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r") elif capability == "capability.switchLevel": event = open("eventSimulator/switchLevelEvent.groovy", "r") + elif capability == "capability.colorControl": + event = open("eventSimulator/colorLevelChangeEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -640,22 +915,27 @@ def ExtractEvents(extractedEvents): event.close() elif eventList[i] == "mute": #Write two events subsequently - extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") - extractedEvents.write("\t\t\tif (event == 0) {\n") event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t} else {\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r") for line in event: - extractedEvents.write("\t\t" + line) + extractedEvents.write(line) event.close() - extractedEvents.write("\t\t\t}\n") elif eventList[i] == "temperature": #Check which capability variable = eventVarMap[eventList[i]] - capability = capabilityMap[variable] + if eventList[i] not in eventVarCounterMap.keys(): + eventVarCounterMap[eventList[i]] = 1 + eventVarCount = 0 + else: + eventVarCount = eventVarCounterMap[eventList[i]] + eventVarCounterMap[eventList[i]] = eventVarCount + 1 + capability = capabilityMap[variable[eventVarCount]] if capability == "capability.thermostat": event = open("eventSimulator/temperatureEvent.groovy", "r") elif capability == "capability.temperatureMeasurement": @@ -680,7 +960,8 @@ def ExtractEvents(extractedEvents): event.close() ###TODO: Add more events later - extractedEvents.write("\t\t\tbreak\n") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 extractedEvents.write("\t}\n") extractedEvents.write("}\n")