X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Extractor%2FExtractorScript.py;h=8a888fcf194c6a5ba7364b16e0997606bbab261b;hb=893b77f97aee54e538df5c5114983637722e7490;hp=5ed1a1451ade76a4287b17c563a04b4c4046026d;hpb=78b457ee3678c7e8cae6d187c94ac43fff1a579a;p=smartthings-infrastructure.git diff --git a/Extractor/ExtractorScript.py b/Extractor/ExtractorScript.py index 5ed1a14..8a888fc 100644 --- a/Extractor/ExtractorScript.py +++ b/Extractor/ExtractorScript.py @@ -15,7 +15,6 @@ 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, @@ -40,16 +39,16 @@ eventTypeCounterMap = {'lock': 2, 'sunriseTime' : 1, 'acceleration' : 2, 'sleeping' : 2, - 'goal' : 1, - 'steps' : 1, + 'goal' : 2, + 'steps' : 2, 'color' : 1, 'colorTemperature' : 1, 'hue' : 1, 'saturation' : 1, 'energy' : 1, - 'power' : 1, - 'illuminance' : 1, - 'humidity' : 1, + 'power' : 2, + 'illuminance' : 2, + 'humidity' : 2, 'alarm' : 4, 'contact' : 2, 'status' : 3, @@ -57,10 +56,11 @@ eventTypeCounterMap = {'lock': 2, 'trackDescription' : 1, 'trackData' : 1, 'mute' : 2, - 'temperature' : 1, + 'temperature' : 2, 'heatingSetpoint' : 1, 'coolingSetpoint' : 1, - 'thermostatSetpoint' : 1} + 'thermostatSetpoint' : 1, + 'threeAxis' : 1} # Mapping for specific event types eventTypesMap = {'alarm.both': 'alarm', @@ -72,6 +72,7 @@ eventTypesMap = {'alarm.both': 'alarm', 'tamper.tampered' : 'contact', 'doorState.open' : 'doorState', 'doorState.closed' : 'doorState', + 'position' : 'location', 'mode' : 'location', 'mode.away' : 'location', 'mode.home' : 'location', @@ -87,6 +88,7 @@ eventTypesMap = {'alarm.both': 'alarm', 'mute.unmuted' : 'mute', 'presence.present' : 'presence', 'presence.not present' : 'presence', + 'presence.not' : 'presence', 'smoke.detected' : 'smoke', 'smoke.clear' : 'smoke', 'smoke.tested' : 'smoke', @@ -212,7 +214,10 @@ def ExtractFunctions(F, appName): #print "DEBUG: %s - %s" % (variable, Temp) #print capabilityMap #print "DEBUG: location variable: %s" % Temp - + + #This is a bogus event, just skip it... + if Temp == "unlock": + continue #Translate and reduce through mapping if Temp in eventTypesMap.keys(): Temp = eventTypesMap[Temp] @@ -256,6 +261,7 @@ def AnalyzeCapabilities(Temp, appName, F): Temp == "capability.switchLevel" or Temp == "capability.illuminanceMeasurement" or Temp == "capability.colorControl" or + Temp == "capability.colorTemperature" or #Motion related Temp == "capability.motionSensor" or Temp == "capability.accelerationSensor" or @@ -284,7 +290,7 @@ def AnalyzeCapabilities(Temp, appName, F): def AnalyzePhysicalInteraction(app1Capab, app2Capab): #Light if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or - "capability.switchLevel" in app2Capab or "capability.colorControl" in app2Capab): + "capability.switchLevel" in app2Capab or "capability.colorControl" or "capability.colorTemperature" in app2Capab): print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n") #Motion # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion @@ -303,6 +309,7 @@ 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] @@ -321,12 +328,20 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\tswitch(eventNumber) {\n") counter = 0 indexApp1 = 0 - indexApp2 = eventAppList.index("App2") + 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) - isApp1 = True + #print eventAppList + #print eventList + if indexApp2Start > 0: + isApp1 = True + else: + isApp1 = False while counter < numOfActualEvents: # Interleave events from App1 and App2 if isApp1 is True: @@ -354,9 +369,6 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "unlock": - #Don't do anything for this case - counter = counter - 1 elif eventList[i] == "nfcTouch": event = open("eventSimulator/nfcTouchEvent.groovy", "r") for line in event: @@ -450,6 +462,7 @@ def ExtractEvents(extractedEvents): extractedEvents.write(line) event.close() elif eventList[i] == "motion": + print("HERE????") #Write two events subsequently event = open("eventSimulator/motionActiveEvent.groovy", "r") for line in event: @@ -650,6 +663,8 @@ def ExtractEvents(extractedEvents): eventVarCounterMap[eventList[i]] = eventVarCount + 1 capability = capabilityMap[variable[eventVarCount]] #Write two events subsequently + print("//////////////////////") + print(capability) if capability == "capability.switch": event = open("eventSimulator/switchOnEvent.groovy", "r") elif capability == "capability.switchLevel": @@ -732,36 +747,42 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "acceleration.active": - event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r") + elif eventList[i] == "sleeping": + #Write two events subsequently + event = open("eventSimulator/sleepSleepingEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "acceleration.inactive": - event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r") + 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(line) event.close() - elif eventList[i] == "sleeping": + elif eventList[i] == "goal": #Write two events subsequently - event = open("eventSimulator/sleepSleepingEvent.groovy", "r") + event = open("eventSimulator/stepGoalHighEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() extractedEvents.write("\n\t\t\tbreak\n") counter = counter + 1 extractedEvents.write("\t\tcase %d:\n" % counter) - event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r") + event = open("eventSimulator/stepGoalLowEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "goal": - event = open("eventSimulator/stepGoalEvent.groovy", "r") + elif eventList[i] == "steps": + #Write two events subsequently + event = open("eventSimulator/stepStepsHighEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "steps": - event = open("eventSimulator/stepStepsEvent.groovy", "r") + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) + event = open("eventSimulator/stepStepsLowEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -791,17 +812,39 @@ def ExtractEvents(extractedEvents): extractedEvents.write(line) event.close() elif eventList[i] == "power": - event = open("eventSimulator/powerMeterEvent.groovy", "r") + #Write two events subsequently + event = open("eventSimulator/powerMeterHighPowerEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) + event = open("eventSimulator/powerMeterLowPowerEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() elif eventList[i] == "illuminance": - event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r") + event = open("eventSimulator/illuminanceMeasurementLowEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) + event = open("eventSimulator/illuminanceMeasurementHighEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() elif eventList[i] == "humidity": - event = open("eventSimulator/humidityMeasurementEvent.groovy", "r") + event = open("eventSimulator/humidityHighMeasurementEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) + event = open("eventSimulator/humidityLowMeasurementEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -896,6 +939,8 @@ def ExtractEvents(extractedEvents): event = open("eventSimulator/switchLevelEvent.groovy", "r") elif capability == "capability.colorControl": event = open("eventSimulator/colorLevelChangeEvent.groovy", "r") + elif capability == "capability.switch": + event = open("eventSimulator/switchLevelChangeEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -932,10 +977,21 @@ def ExtractEvents(extractedEvents): eventVarCount = eventVarCounterMap[eventList[i]] eventVarCounterMap[eventList[i]] = eventVarCount + 1 capability = capabilityMap[variable[eventVarCount]] + #Write two events subsequently + if capability == "capability.thermostat": + event = open("eventSimulator/temperatureHighEvent.groovy", "r") + elif capability == "capability.temperatureMeasurement": + event = open("eventSimulator/temperatureHighMeasurementEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + extractedEvents.write("\n\t\t\tbreak\n") + counter = counter + 1 + extractedEvents.write("\t\tcase %d:\n" % counter) if capability == "capability.thermostat": - event = open("eventSimulator/temperatureEvent.groovy", "r") + event = open("eventSimulator/temperatureLowEvent.groovy", "r") elif capability == "capability.temperatureMeasurement": - event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r") + event = open("eventSimulator/temperatureLowMeasurementEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -954,6 +1010,11 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() + elif eventList[i] == "threeAxis": + event = open("eventSimulator/threeAxisChangeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() ###TODO: Add more events later extractedEvents.write("\n\t\t\tbreak\n")