Adding exclusion check for button as part of direct-direct relationship warning to...
[smartthings-infrastructure.git] / Extractor / ExtractorScript.py
index 1ad102977466a6eb9c3ba7dc72c4ab22348eb2be..0fa30bad5a28e734e4d8539ca527ff67907de962 100644 (file)
@@ -47,7 +47,7 @@ eventTypeCounterMap =  {'lock': 2,
                                                'saturation' : 1,
                                                'energy' : 1,
                                                'power' : 2,
-                                               'illuminance' : 1,
+                                               'illuminance' : 2,
                                                'humidity' : 2,
                                                'alarm' : 4,
                                                'contact' : 2,
@@ -60,7 +60,21 @@ eventTypeCounterMap =  {'lock': 2,
                                                'heatingSetpoint' : 1,
                                                'coolingSetpoint' : 1,
                                                'thermostatSetpoint' : 1,
-                                                'threeAxis' : 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,6 +86,7 @@ eventTypesMap =          {'alarm.both': 'alarm',
                                                'tamper.tampered' : 'contact',
                                                'doorState.open' : 'doorState',
                                                'doorState.closed' : 'doorState',
+                                               'position' : 'location',
                                                'mode' : 'location',
                                                'mode.away' : 'location',
                                                'mode.home' : 'location',
@@ -260,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
@@ -288,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
@@ -309,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
 
@@ -334,8 +350,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:
@@ -456,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:
@@ -646,7 +667,6 @@ def ExtractEvents(extractedEvents):
                                extractedEvents.write(line)
                        event.close()
                elif eventList[i] == "switch":
-                        
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
                        if eventList[i] not in eventVarCounterMap.keys():
@@ -819,7 +839,14 @@ 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()
@@ -1002,6 +1029,71 @@ def ExtractEvents(extractedEvents):
                         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")
@@ -1014,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