X-Git-Url: http://plrg.eecs.uci.edu/git/?p=smartthings-infrastructure.git;a=blobdiff_plain;f=Extractor%2FExtractorScript.py;h=0fa30bad5a28e734e4d8539ca527ff67907de962;hp=eb7fa99acd981613151cb2f299b0490496be2558;hb=5afcc469fd9d6a42f000af2662c6b3d3f651d460;hpb=8304c0f7e7f30d8a14948e80c86c03fca31b318a diff --git a/Extractor/ExtractorScript.py b/Extractor/ExtractorScript.py index eb7fa99..0fa30ba 100644 --- a/Extractor/ExtractorScript.py +++ b/Extractor/ExtractorScript.py @@ -2,6 +2,7 @@ import os readyToReturn = 0 ToReturn = "" eventList = [] +eventAppList = [] # This list maps App1 or App2 to a specific event eventVarMap = {} eventVarCounterMap = {} capabilityMap = {} @@ -14,10 +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, - 'contact.open' : 1, - 'contact.closed' : 1, - 'tamper.tampered' : 1, 'nfcTouch' : 1, 'app' : 1, 'button' : 2, @@ -25,19 +22,10 @@ eventTypeCounterMap = {'lock': 2, 'water.dry' : 1, 'water.wet' : 1, 'presence' : 2, - 'presence.present' : 1, 'doorState' : 2, 'motion' : 2, - 'motion.active' : 1, - 'motion.inactive' : 1, 'smoke' : 3, - 'smoke.clear' : 1, - 'smoke.detected' : 1, - 'smoke.tested' : 1, 'carbonMonoxide' : 3, - 'carbonMonoxide.clear' : 1, - 'carbonMonoxide.detected' : 1, - 'carbonMonoxide.tested' : 1, 'battery' : 1, 'thermostatMode' : 5, 'thermostatFanMode' : 5, @@ -45,20 +33,22 @@ eventTypeCounterMap = {'lock': 2, 'switch' : 2, 'location' : 3, 'mode' : 3, + 'sunset' : 1, + 'sunsetTime' : 1, + 'sunrise' : 1, + 'sunriseTime' : 1, 'acceleration' : 2, - 'acceleration.active' : 1, - 'acceleration.inactive' : 1, '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, @@ -66,10 +56,85 @@ 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', + 'alarm.siren' : 'alarm', + 'alarm.strobe' : 'alarm', + 'alarm.off' : 'alarm', + 'contact.open' : 'contact', + 'contact.closed' : 'contact', + 'tamper.tampered' : 'contact', + 'doorState.open' : 'doorState', + 'doorState.closed' : 'doorState', + 'position' : 'location', + 'mode' : 'location', + 'mode.away' : 'location', + 'mode.home' : 'location', + 'mode.night' : 'location', + '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 @@ -103,6 +168,8 @@ def GetToken(f): def ExtractFunctions(F, appName): global eventList + global eventAppList + global eventTypesMap global app1Subscribe global app2Subscribe Temp = GetToken(F) @@ -146,19 +213,44 @@ 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) + Temp = GetToken(F) #print "DEBUG: %s - %s" % (variable, Temp) #print capabilityMap - if Temp == "app" or Temp == "location": + #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] + 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) + if (appName == "App1"): + eventAppList.append("App1") + else: + eventAppList.append("App2") if Temp in eventVarMap.keys(): listOfEvents = eventVarMap[Temp] listOfEvents.append(variable) @@ -183,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 @@ -211,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 @@ -229,12 +322,16 @@ def AnalyzePhysicalInteraction(app1Capab, app2Capab): 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 @@ -244,7 +341,34 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1)) extractedEvents.write("\tswitch(eventNumber) {\n") counter = 0 - for i in range(len(eventList)): + 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 eventAppList + #print eventList + if indexApp2Start > 0: + isApp1 = True + else: + isApp1 = False + 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 @@ -259,34 +383,6 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - 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") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "tamper.tampered": - #Write two events subsequently - event = open("eventSimulator/tamperTamperedOpenEvent.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/tamperTamperedClosedEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() elif eventList[i] == "nfcTouch": event = open("eventSimulator/nfcTouchEvent.groovy", "r") for line in event: @@ -298,15 +394,30 @@ 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 - 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(line) event.close() extractedEvents.write("\n\t\t\tbreak\n") counter = counter + 1 extractedEvents.write("\t\tcase %d:\n" % counter) - event = open("eventSimulator/buttonHeldEvent.groovy", "r") + 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(line) event.close() @@ -323,16 +434,6 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "water.dry": - event = open("eventSimulator/waterDefaultDryEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "water.wet": - event = open("eventSimulator/waterDefaultWetEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() elif eventList[i] == "presence": #Check which capability variable = eventVarMap[eventList[i]] @@ -361,15 +462,8 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "presence.present": #Case for Touched event - event = open("eventSimulator/presencePresencePresentEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() 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(line) @@ -382,6 +476,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: @@ -394,16 +489,6 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "motion.active": - event = open("eventSimulator/motionDefaultActiveEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "motion.inactive": - event = open("eventSimulator/motionDefaultInactiveEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() elif eventList[i] == "smoke": #Write three events subsequently event = open("eventSimulator/smokeClearEvent.groovy", "r") @@ -424,21 +509,6 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "smoke.clear": - event = open("eventSimulator/smokeDefaultClearEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "smoke.detected": - event = open("eventSimulator/smokeDefaultDetectedEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "smoke.tested": - event = open("eventSimulator/smokeDefaultTestedEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() elif eventList[i] == "carbonMonoxide": #Check which capability variable = eventVarMap[eventList[i]] @@ -477,57 +547,6 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "carbonMonoxide.clear": - #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]] - if capability == "capability.smokeDetector": - event = open("eventSimulator/smokeCarbonMonoxideDefaultClearEvent.groovy", "r") - elif capability == "capability.carbonMonoxideDetector": - event = open("eventSimulator/carbonMonoxideDefaultClearEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "carbonMonoxide.detected": - #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]] - if capability == "capability.smokeDetector": - event = open("eventSimulator/smokeCarbonMonoxideDefaultDetectedEvent.groovy", "r") - elif capability == "capability.carbonMonoxideDetector": - event = open("eventSimulator/carbonMonoxideDefaultDetectedEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() - elif eventList[i] == "carbonMonoxide.tested": - #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]] - if capability == "capability.smokeDetector": - event = open("eventSimulator/smokeCarbonMonoxideDefaultTestedEvent.groovy", "r") - elif capability == "capability.carbonMonoxideDetector": - event = open("eventSimulator/carbonMonoxideDefaultTestedEvent.groovy", "r") - for line in event: - extractedEvents.write(line) - event.close() elif eventList[i] == "battery": #Check which capability variable = eventVarMap[eventList[i]] @@ -658,6 +677,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": @@ -666,6 +687,8 @@ def ExtractEvents(extractedEvents): 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(line) event.close() @@ -680,6 +703,8 @@ def ExtractEvents(extractedEvents): 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(line) event.close() @@ -703,23 +728,23 @@ def ExtractEvents(extractedEvents): for line in event: extractedEvents.write(line) event.close() - elif eventList[i] == "mode": - #Write three events subsequently - event = open("eventSimulator/modeHomeEvent.groovy", "r") + elif eventList[i] == "sunrise": + event = open("eventSimulator/locationSunriseEvent.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/modeAwayEvent.groovy", "r") + elif eventList[i] == "sunset": + event = open("eventSimulator/locationSunsetEvent.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/modeNightEvent.groovy", "r") + 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() @@ -736,36 +761,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() @@ -795,17 +826,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() @@ -898,6 +951,10 @@ def ExtractEvents(extractedEvents): 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") + elif capability == "capability.switch": + event = open("eventSimulator/switchLevelChangeEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() @@ -934,10 +991,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() @@ -956,6 +1024,76 @@ 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") @@ -968,7 +1106,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