'saturation' : 1,
'energy' : 1,
'power' : 2,
- 'illuminance' : 1,
+ 'illuminance' : 2,
'humidity' : 2,
'alarm' : 4,
'contact' : 2,
'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,
+ 'schedule': 1,
+ 'sound': 1,
+ 'soundPressureLevel' : 1,
+ 'tamper' : 1,
+ 'ultravioletIndex': 1,
+ 'voltage': 1,
+ 'windowShade': 1,
+ 'touched': 1}
# Mapping for specific event types
eventTypesMap = {'alarm.both': 'alarm',
'tamper.tampered' : 'contact',
'doorState.open' : 'doorState',
'doorState.closed' : 'doorState',
+ 'position' : 'location',
'mode' : 'location',
'mode.away' : 'location',
'mode.home' : 'location',
extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
extractedFunctionsApp2.write("%s\n" % NameofFunc)
+ #Check subscribed events
+ if (Temp == "initialize" or Temp == "installed"):
+ Temp = GetToken(F)
+ Temp = GetToken(F)
+ Temp = GetToken(F)
+ # If it is a schedule function, then extract the scheduled method and put it as one of the events
+ if (Temp == "schedule"):
+ eventList.append("schedule")
+ if (appName == "App1"):
+ eventAppList.append("App1")
+ else:
+ eventAppList.append("App2")
+ while Temp != ",":
+ Temp = GetToken(F)
+ Temp = GetToken(F)
+ # If this is a " then get the next one still---we are interested in the scheduled function name
+ if (Temp == "\""):
+ Temp = GetToken(F)
+ # Insert function name into the map
+ if "schedule" in eventVarMap.keys():
+ listOfEvents = eventVarMap["schedule"]
+ listOfEvents.append(Temp)
+ else:
+ eventVarMap["schedule"] = [Temp]
+
#Check input capability
if (Temp == "input"):
while Temp != "\"":
#print capabilityMap
#print "DEBUG: location variable: %s" % Temp
- #This is a bogus event, just skip it...
- if Temp == "unlock":
- continue
+ #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]
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
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
#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
# 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
#print "DEBUG: App1: %d" % indexApp1
#print "DEBUG: App2: %d" % indexApp2
#print "DEBUG: eventList: %d" % len(eventList)
+ #print capabilityMap
+ #print eventVarMap
+ #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:
isApp1 = True
#print "DEBUG: i: %d" % i
extractedEvents.write("\t\tcase %d:\n" % counter)
- if eventList[i] == "lock":
+ if eventList[i] == "schedule":
+ 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
+ currentMethod = variable[eventVarCount]
+ extractedEvents.write("\t\t\t// Scheduled method in installed() or intialize()\n")
+ extractedEvents.write("\t\t\t%s.%s()" % (eventAppList[i].lower(), currentMethod))
+ elif eventList[i] == "lock":
#Write two events subsequently
event = open("eventSimulator/lockLockedEvent.groovy", "r")
for line in event:
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:
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":
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()
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()
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():
#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