extend meas_data

master
ademant 2019-06-24 06:26:41 +02:00
parent b3cc7b3270
commit 674001ba58
1 changed files with 110 additions and 0 deletions

110
meas_data.py Normal file
View File

@ -0,0 +1,110 @@
import socket,numpy,time,thread,json
class meas_data:
def __init__(self,var_name,ring_length=100,device=socket.gethostname(),sensor="CPU",i2c=0,store_file="/home/pi/data"):
self.var_name=var_name
self.value=[]
self.stat_val_mean=0
self.stat_val_std=0
self.ring_length=ring_length
self.sensebox=""
self.senseid=""
self.sense_url="https://ingress.opensensemap.org/"
self.sense_intervall=300
self.sense_last_time=0
self.sqlhost=""
self.sqlport=0
self.bsense=False
self.bsql=False
self.bchanged=False
self.bfile=False
self.store_file=store_file
self.act_value=0
self.act_time=0
self.device=device
self.sensor=sensor
self.i2c=i2c
self.json_out={"time":0,"device":device,"payload":{var_name:{"sensor":sensor,"value":0,"i2c":i2c}}}
def set_sensebox(self,sensebox,senseid,intervall=300):
tsb=sensebox
tsb=tsb[1:24]
self.sensebox=tsb
tsi=senseid
tsi=tsi[1:24]
self.senseid=tsi
self.sense_intervall=int(intervall)
self.bsense=True
self.sense_url="https://ingress.opensensemap.org/boxes/%s/%s" % (tsb,tsi)
def set_sql(self,host,port=24049):
th=host
self.sqlhost=th
self.sqlport=int(port)
self.bsql=True
def set_file_log(self,store_file="/home/pi/data"):
if len(store_file)>1:
self.store_file=store_file+"_{:d}.txt"
try:
f1=open(self.store_file+"_{:d}.txt".format(int(time.time()/3600)),"a")
except:
print("could not open data storage")
self.bfile=False
else:
self.bfile=True
def show_def(self):
print(self.var_name)
print(self.value)
def append(self,value):
if len(self.value)<self.ring_length:
self.value.append(value)
else:
self.stat_val_mean=numpy.mean(self.value[:-1])
self.stat_val_std=numpy.std(self.value[:-1])
if (abs(value-self.value[-1])>self.stat_val_std) or (self.act_value==0):
self.act_value=value
self.act_time=int(1000*time.time())
if self.bsql:
thread.start_new_thread(self.send_sql,(0,))
if self.bfile:
thread.start_new_thread(self.send_file,(0,))
self.value.append(value)
self.value=self.value[1:]
def get_ring(self):
return(self.value)
def get_act_value(self):
return(self.act_value)
def send_file(self,trigger=0):
try:
f1=open(self.store_file.format(int(time.time()/3600)),"a")
except:
print("could not open log file")
else:
f1.write("time:{0};".format(int(self.act_time))+self.var_name+":{0}".format(self.act_value)+"\n")
# print("time:{0};".format(int(self.act_time))+self.var_name+":{0}".format(self.act_value)+"\n")
f1.close()
def send_sql(self,trigger=0):
self.json_out['time']=self.act_time
self.json_out['payload']['timestamp']=self.act_time
self.json_out['payload']['value']=self.act_value
print(json.dumps(self.json_out))
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except:
print("{}: could not connect to database".format(time.time()))
else:
try:
s.connect((self.sqlhost, self.sqlport))
except:
print("{}: could not connect to database".format(time.time()))
else:
s.sendall(json.dumps(self.json_out))
s.close()
def upload_osm(self,trigger=0):
r = requests.post(self.url,json={'value': self.act_val})
if (r.status_code != requests.codes.ok) & (r.status_code != 201):
print("Error %d: %s" % (r.status_code,r.text))
test=meas_data("temp",5)
test.set_sql("localhost")
test.set_file_log("/home/ademant/data")