new structure to store sensor properties

master
agp8x 2014-01-17 16:34:14 +01:00
parent 1395675600
commit e16b27e448
2 changed files with 66 additions and 47 deletions

View File

@ -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")

110
all.py
View File

@ -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")