From e16b27e44880d0b16d19675ad33d9956f08b7601 Mon Sep 17 00:00:00 2001 From: agp8x Date: Fri, 17 Jan 2014 16:34:14 +0100 Subject: [PATCH] new structure to store sensor properties --- Logger.py | 3 +- all.py | 110 +++++++++++++++++++++++++++++++----------------------- 2 files changed, 66 insertions(+), 47 deletions(-) diff --git a/Logger.py b/Logger.py index 309bcbe..7ad3067 100644 --- a/Logger.py +++ b/Logger.py @@ -11,6 +11,7 @@ class Logger(object): def __init__(self,names, temperature_config, log, records): self.names = names self.temp_sensors = temperature_config[0] + self.temp_prev_default=temperature_config[1] self.prev_temps =[] for i in range(self.temp_sensors): self.prev_temps.append(temperature_config[1]) @@ -19,7 +20,7 @@ class Logger(object): self.records = records def temp_rise(self,old,new,sensor): - if(old==20000): + 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") diff --git a/all.py b/all.py index 0c39f0e..eee6473 100644 --- a/all.py +++ b/all.py @@ -1,6 +1,24 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- +#class SensorType(Enum): +class SensorType: + temp = 1 + humi = 2 + ambi = 3 + baro = 4 + rain = 5 + none = -1 + +try: + from tinkerforge.ip_connection import IPConnection + from tinkerforge.bricklet_temperature import Temperature + from tinkerforge.bricklet_humidity import Humidity + from tinkerforge.bricklet_ambient_light import AmbientLight + from tinkerforge.bricklet_barometer import Barometer +except ImportError: + print("package 'tinkerforge' not installed, canceling") + raise import os.path import os @@ -12,19 +30,17 @@ from Logger import Logger HOST = "192.168.2.30" PORT = 4223 -UID = ["7B5", "8js", "7RY", "8Fw", "8DJ", "bB7"] -NAMES = ["temp1", "temp2", "humi1", "ambi1", "ambi2", "baro1"] - - -try: - from tinkerforge.ip_connection import IPConnection - from tinkerforge.bricklet_temperature import Temperature - from tinkerforge.bricklet_humidity import Humidity - from tinkerforge.bricklet_ambient_light import AmbientLight - from tinkerforge.bricklet_barometer import Barometer -except ImportError: - print("package 'tinkerforge' not installed, canceling") - raise +SENSORS=[ + ["temp1", "7B5", SensorType.temp], + ["temp2", "8js", SensorType.temp], + ["humi1", "7RY", SensorType.humi], + ["ambi1", "8Fw", SensorType.ambi], + ["ambi2", "8DJ", SensorType.ambi], + ["baro1", "bB7", SensorType.baro], +] +names=[] +for x in SENSORS: + names.append(x[0]) cbtimetemp=30000 cbtimehumi=30000 @@ -42,50 +58,52 @@ records='records' lockname=locks+"/all.lock" log=open(logs+"/all.log",'a') - - if __name__ == "__main__": if not os.path.exists(lockname): lock=open(lockname,'w') lock.write(str(time.time())) lock.close() # lock obtained - logger=Logger(NAMES, (tempSensors, prev_temps_default, tempmaxdiff), log, records) + logger=Logger(names, (tempSensors, prev_temps_default, tempmaxdiff), log, records) try: ipcon = IPConnection() - t0 = Temperature(UID[0], ipcon) - t1 = Temperature(UID[1], ipcon) - h2 = Humidity(UID[2], ipcon) - al3 = AmbientLight(UID[3], ipcon) - al4 = AmbientLight(UID[4], ipcon) - b5 = Barometer(UID[5], ipcon) # connect ipcon.connect(HOST, PORT) - # ensure all sensors are present - logger.cb_temperature0(t0.get_temperature()) - logger.cb_temperature1(t1.get_temperature()) - logger.cb_humidity2(h2.get_humidity()) - logger.cb_illuminance3(al3.get_illuminance()) - logger.cb_illuminance4(al4.get_illuminance()) - logger.cb_pressure5(b5.get_air_pressure()) - - t0.set_temperature_callback_period(cbtimetemp) - t1.set_temperature_callback_period(cbtimetemp) - h2.set_humidity_callback_period(cbtimehumi) - al3.set_illuminance_callback_period(cbtimeambi) - al4.set_illuminance_callback_period(cbtimeambi) - b5.set_air_pressure_callback_period(cbtimebaro) - log.write('start logging "all" ... @'+time.ctime()+"\n") log.flush() - - t0.register_callback(t0.CALLBACK_TEMPERATURE, logger.cb_temperature0) - t1.register_callback(t1.CALLBACK_TEMPERATURE, logger.cb_temperature1) - h2.register_callback(h2.CALLBACK_HUMIDITY, logger.cb_humidity2) - al3.register_callback(al3.CALLBACK_ILLUMINANCE, logger.cb_illuminance3) - al4.register_callback(al4.CALLBACK_ILLUMINANCE, logger.cb_illuminance4) - b5.register_callback(b5.CALLBACK_AIR_PRESSURE,logger.cb_pressure5) - + connected=[] + for i,sensor in enumerate(SENSORS): + 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) + elif (sensor[2] == SensorType.humi): + obj = Humidity(sensor[1], ipcon) + logger.cb_humidity2(obj.get_humidity()) + obj.set_humidity_callback_period(cbtimehumi) + obj.register_callback(obj.CALLBACK_HUMIDITY, logger.cb_humidity2) + 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) + elif (sensor[2] == SensorType.baro): + obj = Barometer(sensor[1], ipcon) + logger.cb_pressure5(obj.get_air_pressure()) + obj.set_air_pressure_callback_period(cbtimebaro) + obj.register_callback(obj.CALLBACK_AIR_PRESSURE,logger.cb_pressure5) + else: + continue + connected.append(obj) raw_input('Press key to exit\n') ipcon.disconnect() log.write('stop logging... @'+time.ctime()+"\n")