compacted logic to add bricklets into one method

master
agp8x 2014-10-23 22:05:27 +02:00
parent c0197c0812
commit 2fbe788774
2 changed files with 53 additions and 42 deletions

View File

@ -23,61 +23,72 @@ class SensorSetup(object):
def parametrizedCallback(self, name, type): def parametrizedCallback(self, name, type):
return partial(self.cb_generic, sensor=name, type=type) return partial(self.cb_generic, sensor=name, type=type)
def setupTemp(self, callback, id, cbtime): def getTemp(self):
obj = Temperature(id, self.connection) obj = Temperature
obj.set_temperature_callback_period(cbtime) setcb = obj.set_temperature_callback_period
callback(obj.get_temperature()) get = obj.get_temperature
obj.register_callback(obj.CALLBACK_TEMPERATURE, callback) cb = Temperature.CALLBACK_TEMPERATURE
return obj return obj, setcb, get, cb
def setupHumi(self, callback, id, cbtime): def getHumi(self):
obj = Humidity(id, self.connection) obj = Humidity
obj.set_humidity_callback_period(cbtime) setcb = obj.set_humidity_callback_period
callback(obj.get_humidity()) get = obj.get_humidity
obj.register_callback(obj.CALLBACK_HUMIDITY, callback) cb = Humidity.CALLBACK_HUMIDITY
return obj return obj, setcb, get, cb
def setupAmbi(self, callback, id, cbtime): def getAmbi(self):
obj = AmbientLight(id, self.connection) obj = AmbientLight
obj.set_illuminance_callback_period(cbtime) setcb = obj.set_illuminance_callback_period
callback(obj.get_illuminance()) get = obj.get_illuminance
obj.register_callback(obj.CALLBACK_ILLUMINANCE, callback) cb = AmbientLight.CALLBACK_ILLUMINANCE
return obj return obj, setcb, get, cb
def setupBaro(self, callback, id, cbtime): def getBaro(self):
obj = Barometer(id, self.connection) obj = Barometer
callback(obj.get_air_pressure()) setcb = obj.set_air_pressure_callback_period
obj.set_air_pressure_callback_period(cbtime) get = obj.get_air_pressure
obj.register_callback(obj.CALLBACK_AIR_PRESSURE, callback) cb = Barometer.CALLBACK_AIR_PRESSURE
return obj return obj, setcb, get, cb
def setupNone(self, callback, id, cbtime): #def getNew(self):
obj = "None " + str(id) # obj = Bricklet # Object
# setcb = obj.set_XXX_callback_period # set-callback-period-method-pointer
# get = obj.get_XXX # value-get-method-pointer
# cb = Bricklet.CALLBACK_XXX # callback identifier
# return obj, setcb, get, cb
def __setupSensor__(self, callback, id, cbtime, var):
obj = var[0](id, self.connection) # construct instance
var[1](obj, cbtime) # set callback period
callback(var[2](obj ), supress=True) # execute callback with raw getter as value
obj.register_callback(var[3], callback) # register callback
return obj return obj
def genericSensorSetup(self, name, sensor): def genericSensorSetup(self, name, sensor):
status = "setup device "+ sensor[0] +" ("+ name +"): " status = "setup device "+ sensor[0] +" ("+ name +"): "
callback = self.parametrizedCallback(name, type=sensor[1]) callback = self.parametrizedCallback(name, type=sensor[1])
cbtime = self.cbtimes[sensor[1]] cbtime = self.cbtimes[sensor[1]]
obj = None
if sensor[1] is SensorType.temp:
var = self.getTemp()
elif sensor[1] is SensorType.humi:
var = self.getHumi()
elif sensor[1] is SensorType.ambi:
var = self.getAmbi()
elif sensor[1] is SensorType.baro:
var = self.getBaro()
try: try:
if sensor[1] is SensorType.temp: obj = self.__setupSensor__(callback, sensor[0], cbtime, var)
obj = self.setupTemp(callback, sensor[0], cbtime)
elif sensor[1] is SensorType.humi:
obj = self.setupHumi(callback, sensor[0], cbtime)
elif sensor[1] is SensorType.ambi:
obj = self.setupAmbi(callback, sensor[0], cbtime)
elif sensor[1] is SensorType.baro:
obj = self.setupBaro(callback, sensor[0], cbtime)
status += "OK" status += "OK"
except Exception as e: except Exception as e:
status += "FAIL" status += "FAIL"
#print(e) #print(e)
#print(traceback.format_exc()) #print(traceback.format_exc())
print(status) print(status)
obj = self.setupNone(callback, sensor[0] + name, cbtime)
return obj return obj
def setupSensors(self): def setupSensors(self):
connected=[] connected=[]
for name in self.sensors: for name in self.sensors:
@ -86,4 +97,3 @@ class SensorSetup(object):
connected.append(obj) connected.append(obj)
return connected return connected

View File

@ -30,6 +30,7 @@ SENSORS={
"ambi2": ["8DJ", SensorType.ambi], "ambi2": ["8DJ", SensorType.ambi],
"baro1": ["bB7", SensorType.baro], "baro1": ["bB7", SensorType.baro],
"temp3": ["8ms", SensorType.temp], "temp3": ["8ms", SensorType.temp],
"humi2": ["9V5", SensorType.humi],
} }
} }
} }