diff --git a/Setup.py b/Setup.py index 65f2fd9..3ef4a52 100644 --- a/Setup.py +++ b/Setup.py @@ -42,7 +42,6 @@ class ConnectionSetup(object): connection.disconnect() class SensorSetup(object): - #TODO: port "getTYPE" to dict def __init__(self, connection, sensors, cb_generic, log): self.connection = connection @@ -50,59 +49,54 @@ class SensorSetup(object): self.cb_generic = cb_generic self.log = log self._previous_sensors={} + self._configs={ + #SensorType.none: { + # 'obj': , + # 'setcb': , + # 'get': , + # 'cb': + #}, + SensorType.temp: { + 'obj': Temperature, + 'setcb': Temperature.set_temperature_callback_period, + 'get': Temperature.get_temperature, + 'cb': Temperature.CALLBACK_TEMPERATURE + }, + SensorType.humi: { + 'obj': Humidity, + 'setcb': Humidity.set_humidity_callback_period, + 'get': Humidity.get_humidity, + 'cb': Humidity.CALLBACK_HUMIDITY + }, + SensorType.ambi: { + 'obj': AmbientLight, + 'setcb': AmbientLight.set_illuminance_callback_period, + 'get': AmbientLight.get_illuminance, + 'cb': AmbientLight.CALLBACK_ILLUMINANCE + }, + SensorType.baro: { + 'obj': Barometer, + 'setcb': Barometer.get_air_pressure_callback_period, + 'get': Barometer.get_air_pressure, + 'cb': Barometer.CALLBACK_AIR_PRESSURE + }, + SensorType.iram: { + 'obj': BrickletTemperatureIR, + 'setcb': BrickletTemperatureIR.set_ambient_temperature_callback_period, + 'get': BrickletTemperatureIR.get_ambient_temperature, + 'cb': BrickletTemperatureIR.CALLBACK_AMBIENT_TEMPERATURE + }, + SensorType.irob: { + 'obj': BrickletTemperatureIR, + 'setcb': BrickletTemperatureIR.set_object_temperature_callback_period, + 'get': BrickletTemperatureIR.get_object_temperature, + 'cb': BrickletTemperatureIR.CALLBACK_OBJECT_TEMPERATURE + } + } def parametrizedCallback(self, name, type): return partial(self.cb_generic, sensor=name, type=type) - 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 getIram(self): - obj = BrickletTemperatureIR # Object - setcb = obj.set_ambient_temperature_callback_period # set-callback-period-method-pointer - get = obj.get_ambient_temperature # value-get-method-pointer - cb = BrickletTemperatureIR.CALLBACK_AMBIENT_TEMPERATURE # callback identifier - return obj, setcb, get, cb - - def getIrob(self): - obj = BrickletTemperatureIR # Object - setcb = obj.set_object_temperature_callback_period # set-callback-period-method-pointer - get = obj.get_object_temperature # value-get-method-pointer - cb = BrickletTemperatureIR.CALLBACK_OBJECT_TEMPERATURE # callback identifier - 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 = None if id in self._previous_sensors: @@ -110,11 +104,11 @@ class SensorSetup(object): obj = self._previous_sensors[id] # restore instance for another callback else: self.log.debug("new instance for %s", id) - obj = var[0](id, self.connection) # construct instance + obj = var['obj'](id, self.connection) # construct instance self._previous_sensors[id] = obj # save instance for multiple callbacks - 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 + var['setcb'](obj, cbtime) # set callback period + callback(var['get'](obj ), supress=True) # execute callback with raw getter as value + obj.register_callback(var['cb'], callback) # register callback return obj def genericSensorSetup(self, name, sensor): @@ -122,26 +116,14 @@ class SensorSetup(object): callback = self.parametrizedCallback(name, type=sensor[1]) cbtime = settings.sensor_properties[sensor[1]][0] 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() - elif sensor[1] is SensorType.rain: + if sensor[1] is SensorType.rain: self.log.error("rain is not yet implemented (%s, %s)", sensor[0], name) return None - elif sensor[1] is SensorType.iram: - var = self.getIram() - elif sensor[1] is SensorType.irob: - var = self.getIrob() - else: + elif not sensor[1] in self._configs: self.log.error("%s FAIL (unknown type)", status) return None try: - obj = self.__setupSensor__(callback, sensor[0], cbtime, var) + obj = self.__setupSensor__(callback, sensor[0], cbtime, self._configs[sensor[1]]) self.log.info("%s OK", status) except Exception as e: self.log.error("%s FAIL:: %s (%s)",status, e,traceback.format_exc()) diff --git a/main.py b/main.py index e4b511a..dcbde80 100644 --- a/main.py +++ b/main.py @@ -15,8 +15,8 @@ def check_dirs_and_files(): # log if not os.path.exists(settings.logs): os.mkdir(settings.logs, 0o000755) - if not os.path.exists(settings.exceptionlog): - file=open(settings.exceptionlog, 'w') + if not os.path.exists(os.path.join(settings.logs,settings.exceptionlog)): + file=open(os.path.join(settings.logs,settings.exceptionlog), 'w') file.write("") file.close() # lock