use of partials to unify callbacks
parent
e16b27e448
commit
a5d3fd4f79
38
Logger.py
38
Logger.py
|
|
@ -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
30
all.py
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue