From 2fbe788774a98e1da52fe075631bab8e3009c43f Mon Sep 17 00:00:00 2001 From: agp8x Date: Thu, 23 Oct 2014 22:05:27 +0200 Subject: [PATCH] compacted logic to add bricklets into one method --- SensorSetup.py | 94 ++++++++++++++++++++++++++++---------------------- settings.py | 1 + 2 files changed, 53 insertions(+), 42 deletions(-) diff --git a/SensorSetup.py b/SensorSetup.py index 94e081b..6a039f4 100644 --- a/SensorSetup.py +++ b/SensorSetup.py @@ -23,61 +23,72 @@ class SensorSetup(object): def parametrizedCallback(self, name, type): return partial(self.cb_generic, sensor=name, type=type) - - def setupTemp(self, callback, id, cbtime): - obj = Temperature(id, self.connection) - obj.set_temperature_callback_period(cbtime) - callback(obj.get_temperature()) - obj.register_callback(obj.CALLBACK_TEMPERATURE, callback) - return obj - - def setupHumi(self, callback, id, cbtime): - obj = Humidity(id, self.connection) - obj.set_humidity_callback_period(cbtime) - callback(obj.get_humidity()) - obj.register_callback(obj.CALLBACK_HUMIDITY, callback) - return obj - - def setupAmbi(self, callback, id, cbtime): - obj = AmbientLight(id, self.connection) - obj.set_illuminance_callback_period(cbtime) - callback(obj.get_illuminance()) - obj.register_callback(obj.CALLBACK_ILLUMINANCE, callback) - return obj - - def setupBaro(self, callback, id, cbtime): - obj = Barometer(id, self.connection) - callback(obj.get_air_pressure()) - obj.set_air_pressure_callback_period(cbtime) - obj.register_callback(obj.CALLBACK_AIR_PRESSURE, callback) - return obj - - def setupNone(self, callback, id, cbtime): - obj = "None " + str(id) + + def getTemp(self): + obj = Temperature + setcb = obj.set_temperature_callback_period + get = obj.get_temperature + cb = Temperature.CALLBACK_TEMPERATURE + return obj, setcb, get, cb + + def getHumi(self): + obj = Humidity + setcb = obj.set_humidity_callback_period + get = obj.get_humidity + cb = Humidity.CALLBACK_HUMIDITY + return obj, setcb, get, cb + + def getAmbi(self): + obj = AmbientLight + setcb = obj.set_illuminance_callback_period + get = obj.get_illuminance + cb = AmbientLight.CALLBACK_ILLUMINANCE + return obj, setcb, get, cb + + def getBaro(self): + obj = Barometer + setcb = obj.set_air_pressure_callback_period + get = obj.get_air_pressure + cb = Barometer.CALLBACK_AIR_PRESSURE + return obj, setcb, get, cb + + #def getNew(self): + # 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 def genericSensorSetup(self, name, sensor): status = "setup device "+ sensor[0] +" ("+ name +"): " callback = self.parametrizedCallback(name, type=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: - if sensor[1] is SensorType.temp: - 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) + obj = self.__setupSensor__(callback, sensor[0], cbtime, var) status += "OK" except Exception as e: status += "FAIL" #print(e) #print(traceback.format_exc()) print(status) - obj = self.setupNone(callback, sensor[0] + name, cbtime) return obj - + def setupSensors(self): connected=[] for name in self.sensors: @@ -86,4 +97,3 @@ class SensorSetup(object): connected.append(obj) return connected - diff --git a/settings.py b/settings.py index d4fa030..4944822 100644 --- a/settings.py +++ b/settings.py @@ -30,6 +30,7 @@ SENSORS={ "ambi2": ["8DJ", SensorType.ambi], "baro1": ["bB7", SensorType.baro], "temp3": ["8ms", SensorType.temp], + "humi2": ["9V5", SensorType.humi], } } }