replaced functions for sensor-configs with dict
parent
52a9986c95
commit
d2745fa37c
120
Setup.py
120
Setup.py
|
|
@ -42,7 +42,6 @@ class ConnectionSetup(object):
|
||||||
connection.disconnect()
|
connection.disconnect()
|
||||||
|
|
||||||
class SensorSetup(object):
|
class SensorSetup(object):
|
||||||
#TODO: port "getTYPE" to dict
|
|
||||||
|
|
||||||
def __init__(self, connection, sensors, cb_generic, log):
|
def __init__(self, connection, sensors, cb_generic, log):
|
||||||
self.connection = connection
|
self.connection = connection
|
||||||
|
|
@ -50,59 +49,54 @@ class SensorSetup(object):
|
||||||
self.cb_generic = cb_generic
|
self.cb_generic = cb_generic
|
||||||
self.log = log
|
self.log = log
|
||||||
self._previous_sensors={}
|
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):
|
def parametrizedCallback(self, name, type):
|
||||||
return partial(self.cb_generic, sensor=name, type=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):
|
def __setupSensor__(self, callback, id, cbtime, var):
|
||||||
obj = None
|
obj = None
|
||||||
if id in self._previous_sensors:
|
if id in self._previous_sensors:
|
||||||
|
|
@ -110,11 +104,11 @@ class SensorSetup(object):
|
||||||
obj = self._previous_sensors[id] # restore instance for another callback
|
obj = self._previous_sensors[id] # restore instance for another callback
|
||||||
else:
|
else:
|
||||||
self.log.debug("new instance for %s", id)
|
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
|
self._previous_sensors[id] = obj # save instance for multiple callbacks
|
||||||
var[1](obj, cbtime) # set callback period
|
var['setcb'](obj, cbtime) # set callback period
|
||||||
callback(var[2](obj ), supress=True) # execute callback with raw getter as value
|
callback(var['get'](obj ), supress=True) # execute callback with raw getter as value
|
||||||
obj.register_callback(var[3], callback) # register callback
|
obj.register_callback(var['cb'], callback) # register callback
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def genericSensorSetup(self, name, sensor):
|
def genericSensorSetup(self, name, sensor):
|
||||||
|
|
@ -122,26 +116,14 @@ class SensorSetup(object):
|
||||||
callback = self.parametrizedCallback(name, type=sensor[1])
|
callback = self.parametrizedCallback(name, type=sensor[1])
|
||||||
cbtime = settings.sensor_properties[sensor[1]][0]
|
cbtime = settings.sensor_properties[sensor[1]][0]
|
||||||
obj = None
|
obj = None
|
||||||
if sensor[1] is SensorType.temp:
|
if sensor[1] is SensorType.rain:
|
||||||
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:
|
|
||||||
self.log.error("rain is not yet implemented (%s, %s)", sensor[0], name)
|
self.log.error("rain is not yet implemented (%s, %s)", sensor[0], name)
|
||||||
return None
|
return None
|
||||||
elif sensor[1] is SensorType.iram:
|
elif not sensor[1] in self._configs:
|
||||||
var = self.getIram()
|
|
||||||
elif sensor[1] is SensorType.irob:
|
|
||||||
var = self.getIrob()
|
|
||||||
else:
|
|
||||||
self.log.error("%s FAIL (unknown type)", status)
|
self.log.error("%s FAIL (unknown type)", status)
|
||||||
return None
|
return None
|
||||||
try:
|
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)
|
self.log.info("%s OK", status)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.log.error("%s FAIL:: %s (%s)",status, e,traceback.format_exc())
|
self.log.error("%s FAIL:: %s (%s)",status, e,traceback.format_exc())
|
||||||
|
|
|
||||||
4
main.py
4
main.py
|
|
@ -15,8 +15,8 @@ def check_dirs_and_files():
|
||||||
# log
|
# log
|
||||||
if not os.path.exists(settings.logs):
|
if not os.path.exists(settings.logs):
|
||||||
os.mkdir(settings.logs, 0o000755)
|
os.mkdir(settings.logs, 0o000755)
|
||||||
if not os.path.exists(settings.exceptionlog):
|
if not os.path.exists(os.path.join(settings.logs,settings.exceptionlog)):
|
||||||
file=open(settings.exceptionlog, 'w')
|
file=open(os.path.join(settings.logs,settings.exceptionlog), 'w')
|
||||||
file.write("<exceptions></exceptions>")
|
file.write("<exceptions></exceptions>")
|
||||||
file.close()
|
file.close()
|
||||||
# lock
|
# lock
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue