Adding sunset and sunrise events.
[smartthings-infrastructure.git] / Extractor / ExtractorScript.py
index eb7fa99acd981613151cb2f299b0490496be2558..bd7a320e6726a38726a7d6d864a66dc0b6c281b1 100644 (file)
@@ -2,6 +2,7 @@ import os
 readyToReturn = 0
 ToReturn = ""
 eventList = []
+eventAppList = [] # This list maps App1 or App2 to a specific event
 eventVarMap = {}
 eventVarCounterMap = {}
 capabilityMap = {}
@@ -43,8 +44,14 @@ eventTypeCounterMap =  {'lock': 2,
                                                'thermostatFanMode' : 5,
                                                'thermostatOperatingState' : 5,
                                                'switch' : 2,
+                                               'switch.on' : 1,
+                                               'switch.off' : 1,
                                                'location' : 3,
                                                'mode' : 3,
+                                               'sunset' : 1,
+                                               'sunsetTime' : 1,
+                                               'sunrise' : 1,
+                                               'sunriseTime' : 1,
                                                'acceleration' : 2,
                                                'acceleration.active' : 1,
                                                'acceleration.inactive' : 1,
@@ -103,6 +110,7 @@ def GetToken(f):
 
 def ExtractFunctions(F, appName):
        global eventList
+       global eventAppList
        global app1Subscribe
        global app2Subscribe
        Temp = GetToken(F)
@@ -146,19 +154,37 @@ 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    
+                       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)
@@ -229,12 +255,15 @@ def AnalyzePhysicalInteraction(app1Capab, app2Capab):
 def CountEvents():
        global eventList
        numOfActualEvents = 0
+       #print "DEBUG: eventlist: %d" % len(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 +273,26 @@ 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
+       indexApp2 = eventAppList.index("App2")
+       indexApp2Start = indexApp2
+       #print "DEBUG: App1: %d" % indexApp1
+       #print "DEBUG: App2: %d" % indexApp2
+       #print "DEBUG: eventList: %d" % len(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
@@ -260,10 +308,8 @@ def ExtractEvents(extractedEvents):
                                extractedEvents.write(line)
                        event.close()
                elif eventList[i] == "unlock":
-                       event = open("eventSimulator/unlockEvent.groovy", "r")
-                       for line in event:
-                               extractedEvents.write(line)
-                       event.close()
+                        #Don't do anything for this case
+                        counter = counter - 1
                elif eventList[i] == "contact.open":
                        event = open("eventSimulator/contactOpenEvent.groovy", "r")
                        for line in event:
@@ -298,15 +344,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()
@@ -368,8 +429,6 @@ def ExtractEvents(extractedEvents):
                        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)
@@ -666,6 +725,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 +741,56 @@ 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()
+               elif eventList[i] == "switch.on":
+                       #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
+                       if capability == "capability.switch":
+                               event = open("eventSimulator/switchOnDefaultEvent.groovy", "r")
+                       elif capability == "capability.switchLevel":
+                               event = open("eventSimulator/switchLevelOnDefaultEvent.groovy", "r")
+                       elif capability == "capability.relaySwitch":
+                               event = open("eventSimulator/relaySwitchOnDefaultEvent.groovy", "r")
+                       elif capability == "capability.colorControl":
+                               event = open("eventSimulator/colorControlSwitchOnDefaultEvent.groovy", "r")
+                       elif capability == "capability.colorTemperature":
+                               event = open("eventSimulator/colorTemperatureSwitchOnDefaultEvent.groovy", "r")
+                       for line in event:
+                               extractedEvents.write(line)
+                       event.close()
+               elif eventList[i] == "switch.off":
+                       #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
+                       if capability == "capability.switch":
+                               event = open("eventSimulator/switchOffDefaultEvent.groovy", "r")
+                       elif capability == "capability.switchLevel":
+                               event = open("eventSimulator/switchLevelOffDefaultEvent.groovy", "r")
+                       elif capability == "capability.relaySwitch":
+                               event = open("eventSimulator/relaySwitchOffDefaultEvent.groovy", "r")
+                       elif capability == "capability.colorControl":
+                               event = open("eventSimulator/colorControlSwitchOffDefaultEvent.groovy", "r")
+                       elif capability == "capability.colorTemperature":
+                               event = open("eventSimulator/colorTemperatureSwitchOffDefaultEvent.groovy", "r")
                        for line in event:
                                extractedEvents.write(line)
                        event.close()
@@ -723,6 +834,26 @@ def ExtractEvents(extractedEvents):
                        for line in event:
                                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()
                elif eventList[i] == "acceleration":
                        #Write two events subsequently
                        event = open("eventSimulator/accelerationActiveEvent.groovy", "r")                      
@@ -898,6 +1029,8 @@ 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")
                        for line in event:
                                extractedEvents.write(line)
                        event.close()