diff --git a/Logger.py b/Logger.py index 7ad3067..dd5cd2a 100644 --- a/Logger.py +++ b/Logger.py @@ -23,7 +23,7 @@ class Logger(object): if(old==self.temp_prev_default): return True if((old-new)>self.temp_max_diff or (new-old)>self.temp_max_diff): - self.log.write('error checking temp '+sensor+';prev('+str(old)+');cur('+str(new)+'); ... @'+time.ctime()+"\n") + self.log.write('error checking '+self.names[sensor]+';prev('+str(old)+');cur('+str(new)+'); ... @'+time.ctime()+"\n") self.log.flush() return False else: @@ -38,55 +38,33 @@ class Logger(object): valuelog.write(str(value) + ';' + str(int(time.time())) +"\n") valuelog.close() - ######################################### - # generic checking of temperature # - ######################################### - def check_and_write_temperature(self,value,sensor): - if(sensor>=self.temp_sensors): - return - if(self.temp_rise(self.prev_temps[sensor],value,str(sensor+1))): - self.write_value(value,sensor) - self.prev_temps[sensor]=value - ########################################## # callbacks for temp1+2 # ########################################## - def cb_temperature0(self,value): - sensor=0 - self.check_and_write_temperature(value,sensor) - print(self.names[sensor] +': ' + str(value/100.0) + ' °C,' + str(time.ctime())) - # - def cb_temperature1(self,value): - sensor=1 - self.check_and_write_temperature(value,sensor) + def cb_temperature(self,value,sensor): + if(self.temp_rise(self.prev_temps[sensor],value,sensor)): + self.write_value(value,sensor) + self.prev_temps[sensor]=value print(self.names[sensor] +': ' + str(value/100.0) + ' °C,' + str(time.ctime())) ########################################### # callback for humidity1 # ########################################### - def cb_humidity2(self,rh): - sensor=2 + def cb_humidity(self,rh,sensor): self.write_value(rh,sensor) print(self.names[sensor] +': '+ str(rh/10.0) + ' %RH,' + str(time.ctime())) ########################################### # callback for ambi-light1+2 # ########################################### - def cb_illuminance3(self,illuminance): - sensor=3 - self.write_value(illuminance,sensor) - print(self.names[sensor] +': '+ str(illuminance/10.0) + ' Lux,' + str(time.ctime())) - # - def cb_illuminance4(self,illuminance): - sensor=4 + def cb_illuminance(self,illuminance,sensor): self.write_value(illuminance,sensor) print(self.names[sensor] +': '+ str(illuminance/10.0) + ' Lux,' + str(time.ctime())) ########################################### # callback for barometer1 # ########################################### - def cb_pressure5(self,pressure): - sensor=5 + def cb_pressure(self,pressure,sensor): self.write_value(pressure,sensor) print(self.names[sensor] +": "+str(pressure/1000)+ "mbar"+str(time.ctime())) diff --git a/all.py b/all.py index eee6473..6d65eb3 100644 --- a/all.py +++ b/all.py @@ -3,12 +3,12 @@ #class SensorType(Enum): class SensorType: + none = 0 temp = 1 humi = 2 ambi = 3 baro = 4 rain = 5 - none = -1 try: from tinkerforge.ip_connection import IPConnection @@ -23,6 +23,7 @@ except ImportError: import os.path import os import time +from functools import partial from Logger import Logger @@ -57,6 +58,7 @@ records='records' lockname=locks+"/all.lock" log=open(logs+"/all.log",'a') +noop_cb = lambda value,sensor:0 if __name__ == "__main__": if not os.path.exists(lockname): @@ -65,6 +67,7 @@ if __name__ == "__main__": lock.close() # lock obtained logger=Logger(names, (tempSensors, prev_temps_default, tempmaxdiff), log, records) + callbacks=[noop_cb, logger.cb_temperature, logger.cb_humidity, logger.cb_illuminance, logger.cb_pressure, noop_cb] try: ipcon = IPConnection() # connect @@ -73,34 +76,27 @@ if __name__ == "__main__": log.flush() connected=[] for i,sensor in enumerate(SENSORS): + callback=partial(callbacks[sensor[2]], sensor=i) if(sensor[2] == SensorType.temp): obj = Temperature(sensor[1], ipcon) obj.set_temperature_callback_period(cbtimetemp) - if(i == 0): - logger.cb_temperature0(obj.get_temperature()) - obj.register_callback(obj.CALLBACK_TEMPERATURE, logger.cb_temperature0) - else: - logger.cb_temperature1(obj.get_temperature()) - obj.register_callback(obj.CALLBACK_TEMPERATURE, logger.cb_temperature1) + callback(obj.get_temperature()) + obj.register_callback(obj.CALLBACK_TEMPERATURE, callback) elif (sensor[2] == SensorType.humi): obj = Humidity(sensor[1], ipcon) - logger.cb_humidity2(obj.get_humidity()) + callback(obj.get_humidity()) obj.set_humidity_callback_period(cbtimehumi) - obj.register_callback(obj.CALLBACK_HUMIDITY, logger.cb_humidity2) + obj.register_callback(obj.CALLBACK_HUMIDITY, callback) elif(sensor[2] == SensorType.ambi): obj = AmbientLight(sensor[1], ipcon) obj.set_illuminance_callback_period(cbtimeambi) - if(i == 0): - logger.cb_illuminance3(obj.get_illuminance()) - obj.register_callback(obj.CALLBACK_ILLUMINANCE, logger.cb_illuminance3) - else: - logger.cb_illuminance4(obj.get_illuminance()) - obj.register_callback(obj.CALLBACK_ILLUMINANCE, logger.cb_illuminance4) + callback(obj.get_illuminance()) + obj.register_callback(obj.CALLBACK_ILLUMINANCE, callback) elif (sensor[2] == SensorType.baro): obj = Barometer(sensor[1], ipcon) - logger.cb_pressure5(obj.get_air_pressure()) + callback(obj.get_air_pressure()) obj.set_air_pressure_callback_period(cbtimebaro) - obj.register_callback(obj.CALLBACK_AIR_PRESSURE,logger.cb_pressure5) + obj.register_callback(obj.CALLBACK_AIR_PRESSURE,callback) else: continue connected.append(obj)