use of partials to unify callbacks

master
agp8x 2014-01-17 17:36:01 +01:00
parent e16b27e448
commit a5d3fd4f79
2 changed files with 21 additions and 47 deletions

View File

@ -23,7 +23,7 @@ class Logger(object):
if(old==self.temp_prev_default): if(old==self.temp_prev_default):
return True return True
if((old-new)>self.temp_max_diff or (new-old)>self.temp_max_diff): 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() self.log.flush()
return False return False
else: else:
@ -38,55 +38,33 @@ class Logger(object):
valuelog.write(str(value) + ';' + str(int(time.time())) +"\n") valuelog.write(str(value) + ';' + str(int(time.time())) +"\n")
valuelog.close() 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 # # callbacks for temp1+2 #
########################################## ##########################################
def cb_temperature0(self,value): def cb_temperature(self,value,sensor):
sensor=0 if(self.temp_rise(self.prev_temps[sensor],value,sensor)):
self.check_and_write_temperature(value,sensor) self.write_value(value,sensor)
print(self.names[sensor] +': ' + str(value/100.0) + ' °C,' + str(time.ctime())) self.prev_temps[sensor]=value
#
def cb_temperature1(self,value):
sensor=1
self.check_and_write_temperature(value,sensor)
print(self.names[sensor] +': ' + str(value/100.0) + ' °C,' + str(time.ctime())) print(self.names[sensor] +': ' + str(value/100.0) + ' °C,' + str(time.ctime()))
########################################### ###########################################
# callback for humidity1 # # callback for humidity1 #
########################################### ###########################################
def cb_humidity2(self,rh): def cb_humidity(self,rh,sensor):
sensor=2
self.write_value(rh,sensor) self.write_value(rh,sensor)
print(self.names[sensor] +': '+ str(rh/10.0) + ' %RH,' + str(time.ctime())) print(self.names[sensor] +': '+ str(rh/10.0) + ' %RH,' + str(time.ctime()))
########################################### ###########################################
# callback for ambi-light1+2 # # callback for ambi-light1+2 #
########################################### ###########################################
def cb_illuminance3(self,illuminance): def cb_illuminance(self,illuminance,sensor):
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
self.write_value(illuminance,sensor) self.write_value(illuminance,sensor)
print(self.names[sensor] +': '+ str(illuminance/10.0) + ' Lux,' + str(time.ctime())) print(self.names[sensor] +': '+ str(illuminance/10.0) + ' Lux,' + str(time.ctime()))
########################################### ###########################################
# callback for barometer1 # # callback for barometer1 #
########################################### ###########################################
def cb_pressure5(self,pressure): def cb_pressure(self,pressure,sensor):
sensor=5
self.write_value(pressure,sensor) self.write_value(pressure,sensor)
print(self.names[sensor] +": "+str(pressure/1000)+ "mbar"+str(time.ctime())) print(self.names[sensor] +": "+str(pressure/1000)+ "mbar"+str(time.ctime()))

30
all.py
View File

@ -3,12 +3,12 @@
#class SensorType(Enum): #class SensorType(Enum):
class SensorType: class SensorType:
none = 0
temp = 1 temp = 1
humi = 2 humi = 2
ambi = 3 ambi = 3
baro = 4 baro = 4
rain = 5 rain = 5
none = -1
try: try:
from tinkerforge.ip_connection import IPConnection from tinkerforge.ip_connection import IPConnection
@ -23,6 +23,7 @@ except ImportError:
import os.path import os.path
import os import os
import time import time
from functools import partial
from Logger import Logger from Logger import Logger
@ -57,6 +58,7 @@ records='records'
lockname=locks+"/all.lock" lockname=locks+"/all.lock"
log=open(logs+"/all.log",'a') log=open(logs+"/all.log",'a')
noop_cb = lambda value,sensor:0
if __name__ == "__main__": if __name__ == "__main__":
if not os.path.exists(lockname): if not os.path.exists(lockname):
@ -65,6 +67,7 @@ if __name__ == "__main__":
lock.close() lock.close()
# lock obtained # lock obtained
logger=Logger(names, (tempSensors, prev_temps_default, tempmaxdiff), log, records) 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: try:
ipcon = IPConnection() ipcon = IPConnection()
# connect # connect
@ -73,34 +76,27 @@ if __name__ == "__main__":
log.flush() log.flush()
connected=[] connected=[]
for i,sensor in enumerate(SENSORS): for i,sensor in enumerate(SENSORS):
callback=partial(callbacks[sensor[2]], sensor=i)
if(sensor[2] == SensorType.temp): if(sensor[2] == SensorType.temp):
obj = Temperature(sensor[1], ipcon) obj = Temperature(sensor[1], ipcon)
obj.set_temperature_callback_period(cbtimetemp) obj.set_temperature_callback_period(cbtimetemp)
if(i == 0): callback(obj.get_temperature())
logger.cb_temperature0(obj.get_temperature()) obj.register_callback(obj.CALLBACK_TEMPERATURE, callback)
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)
elif (sensor[2] == SensorType.humi): elif (sensor[2] == SensorType.humi):
obj = Humidity(sensor[1], ipcon) obj = Humidity(sensor[1], ipcon)
logger.cb_humidity2(obj.get_humidity()) callback(obj.get_humidity())
obj.set_humidity_callback_period(cbtimehumi) 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): elif(sensor[2] == SensorType.ambi):
obj = AmbientLight(sensor[1], ipcon) obj = AmbientLight(sensor[1], ipcon)
obj.set_illuminance_callback_period(cbtimeambi) obj.set_illuminance_callback_period(cbtimeambi)
if(i == 0): callback(obj.get_illuminance())
logger.cb_illuminance3(obj.get_illuminance()) obj.register_callback(obj.CALLBACK_ILLUMINANCE, callback)
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)
elif (sensor[2] == SensorType.baro): elif (sensor[2] == SensorType.baro):
obj = Barometer(sensor[1], ipcon) 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.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: else:
continue continue
connected.append(obj) connected.append(obj)