X-Git-Url: http://plrg.eecs.uci.edu/git/?p=smartthings-infrastructure.git;a=blobdiff_plain;f=Extractor%2FExtractorScript.py;h=5f18f9f80a8bb61db3f1ff60b1d6c4f5803f3590;hp=cf4b9deb2f3627f6599cbab66a2a0d4e85cbcec5;hb=04cd141e8bb621d445e901ccb93caaa5429b00c8;hpb=d58ceb0d7a69116e8142643adfc840b667d8c06d diff --git a/Extractor/ExtractorScript.py b/Extractor/ExtractorScript.py index cf4b9de..5f18f9f 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,25 @@ eventTypeCounterMap = {'lock': 2, 'trackDescription' : 1, 'trackData' : 1, 'mute' : 2, - 'temperature' : 1, + 'temperature' : 2, 'heatingSetpoint' : 1, 'coolingSetpoint' : 1, - 'thermostatSetpoint' : 1} + 'thermostatSetpoint' : 1, + 'threeAxis' : 1, + 'carbonDioxide' : 1, + 'consumableStatus' : 1, + 'pH' : 1, + 'pressure': 1, + 'shock': 1, + 'lqi': 1, + 'rssi': 1, + 'sound': 1, + 'soundPressureLevel' : 1, + 'tamper' : 1, + 'ultravioletIndex': 1, + 'voltage': 1, + 'windowShade': 1, + 'touched': 1} # Mapping for specific event types eventTypesMap = {'alarm.both': 'alarm', @@ -72,11 +86,11 @@ eventTypesMap = {'alarm.both': 'alarm', 'tamper.tampered' : 'contact', 'doorState.open' : 'doorState', 'doorState.closed' : 'doorState', + 'position' : 'location', 'mode' : 'location', 'mode.away' : 'location', 'mode.home' : 'location', 'mode.night' : 'location', - 'unlock' : 'lock', 'lock.locked' : 'lock', 'lock.unlocked' : 'lock', 'motion.active' : 'motion', @@ -214,7 +228,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] @@ -258,6 +275,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 @@ -286,7 +304,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 @@ -307,7 +325,7 @@ def CountEvents(): #print "DEBUG: eventlist: %d" % len(eventList) #print "DEBUG: eventlist: %s" % eventList for event in eventList: - #print "DEBUG: Event: %s %d" % (event, eventTypeCounterMap[event]) + print "DEBUG: Event: %s %d" % (event, eventTypeCounterMap[event]) numOfActualEvents = numOfActualEvents + eventTypeCounterMap[event] return numOfActualEvents @@ -320,7 +338,13 @@ def ExtractEvents(extractedEvents): # Count the number of events numOfActualEvents = CountEvents() extractedEvents.write("while(true) {\n") - extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1)) + # We use Verify.getIntFromList() instead of Verify.getInt() since we want to manipulate the + # choices in the list/set to implement POR + #extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1)) + extractedEvents.write("\tdef eventNumber = Verify.getIntFromList(0,") + for x in range (1, numOfActualEvents - 1): + extractedEvents.write("%d," % x) + extractedEvents.write("%d)\n" % (numOfActualEvents - 1)) extractedEvents.write("\tswitch(eventNumber) {\n") counter = 0 indexApp1 = 0 @@ -332,8 +356,12 @@ def ExtractEvents(extractedEvents): #print "DEBUG: App1: %d" % indexApp1 #print "DEBUG: App2: %d" % indexApp2 #print "DEBUG: eventList: %d" % len(eventList) + #print eventAppList #print eventList - isApp1 = True + if indexApp2Start > 0: + isApp1 = True + else: + isApp1 = False while counter < numOfActualEvents: # Interleave events from App1 and App2 if isApp1 is True: @@ -454,6 +482,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: @@ -654,6 +683,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": @@ -736,36 +767,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() @@ -808,12 +845,26 @@ def ExtractEvents(extractedEvents): 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() @@ -908,6 +959,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() @@ -944,10 +997,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/temperatureEvent.groovy", "r") + event = open("eventSimulator/temperatureHighEvent.groovy", "r") elif capability == "capability.temperatureMeasurement": - event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r") + 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/temperatureLowEvent.groovy", "r") + elif capability == "capability.temperatureMeasurement": + event = open("eventSimulator/temperatureLowMeasurementEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -966,11 +1030,82 @@ 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() + elif eventList[i] == "carbonDioxide": + event = open("eventSimulator/carbonDioxideEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "consumableStatus": + event = open("eventSimulator/consumableStatusEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "pH": + event = open("eventSimulator/pHEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "pressure": + event = open("eventSimulator/pressureEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "shock": + event = open("eventSimulator/shockEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "lqi": + event = open("eventSimulator/lqiEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "rssi": + event = open("eventSimulator/rssiEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "sound": + event = open("eventSimulator/soundEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "soundPressureLevel": + event = open("eventSimulator/soundPressureLevelEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "tamper": + event = open("eventSimulator/tamperEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "voltage": + event = open("eventSimulator/voltageEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "ultravioletIndex": + event = open("eventSimulator/ultravioletIndexEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "windowShade": + event = open("eventSimulator/windowShadeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() ###TODO: Add more events later extractedEvents.write("\n\t\t\tbreak\n") counter = counter + 1 extractedEvents.write("\t}\n") + extractedEvents.write("\tprintln(\"\\nEVENT NUMBER: \" + eventNumber)\n"); extractedEvents.write("}\n") def CheckIfOnlyTouchEvents(): @@ -978,7 +1113,7 @@ def CheckIfOnlyTouchEvents(): #This is called Direct-Direct interaction and we do not model-check for this case onlyTouchEvents = True for item in eventList: - if item != "nfcTouch" and item != "app": + if item != "nfcTouch" and item != "app" and item != "button": onlyTouchEvents = False if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True: # Write error log file