meas_data: mean value to store
parent
6fca0679bb
commit
7e75e0bf75
|
@ -158,8 +158,8 @@ def main(args):
|
|||
if "port" in log_conf['sqlserver']:
|
||||
port=int(log_conf['sqlserver']['port'])
|
||||
|
||||
pm25=meas_data(var_name="pm25",ring_length=5,device=parameter['device'],sensor="sds",i2c=0,store_file="/home/pi/log/data_sds",sigma=2)
|
||||
pm10=meas_data(var_name="pm10",ring_length=5,device=parameter['device'],sensor="sds",i2c=0,store_file="/home/pi/log/data_sds",sigma=2)
|
||||
pm25=meas_data(var_name="pm25",ring_length=60,mean_count=5,store_each_value=True,device=parameter['device'],sensor="sds",i2c=0,store_file="/home/pi/log/data_sds",sigma=2)
|
||||
pm10=meas_data(var_name="pm10",ring_length=60,mean_count=5,store_each_value=True,device=parameter['device'],sensor="sds",i2c=0,store_file="/home/pi/log/data_sds",sigma=2)
|
||||
pm25.set_sql(host=hostname,port=port)
|
||||
pm10.set_sql(host=hostname,port=port)
|
||||
sensebox_id="5cf8a49707460b001b43a245"
|
||||
|
|
39
meas_data.py
39
meas_data.py
|
@ -1,11 +1,13 @@
|
|||
import socket,numpy,time,thread,json,requests
|
||||
class meas_data:
|
||||
def __init__(self,var_name,ring_length=100,sigma=2,device=socket.gethostname(),sensor="CPU",i2c=0,store_file="/home/pi/data"):
|
||||
def __init__(self,var_name,ring_length=100,sigma=2,device=socket.gethostname(),sensor="CPU",i2c=0,store_file="/home/pi/data",mean_count=5,store_each_cycle=True):
|
||||
self.var_name=var_name
|
||||
self.value=[]
|
||||
self.mval=[]
|
||||
self.stat_val_mean=0
|
||||
self.stat_val_std=0
|
||||
self.ring_length=ring_length
|
||||
self.mean_count=mean_count
|
||||
self.sensebox=""
|
||||
self.senseid=""
|
||||
self.sense_url="https://ingress.opensensemap.org/"
|
||||
|
@ -20,10 +22,13 @@ class meas_data:
|
|||
self.store_file=store_file
|
||||
self.act_value=0
|
||||
self.act_time=0
|
||||
self.stat_mean=0
|
||||
self.stat_std=0
|
||||
self.sigma=sigma
|
||||
self.device=device
|
||||
self.sensor=sensor
|
||||
self.i2c=i2c
|
||||
self.bstoreeach=store_each_value
|
||||
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
|
||||
|
@ -55,15 +60,24 @@ class meas_data:
|
|||
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 self.stat_val_std==0:
|
||||
self.stat_val_std=abs(self.stat_val_mean/100)
|
||||
if (value <> self.act_value) and ((abs(value-self.stat_val_mean)>(self.sigma*self.stat_val_std)) or (self.act_value==0)):
|
||||
self.act_value=value
|
||||
self.value.append(value)
|
||||
if (len(self.mval)==0) and (len(self.value)>1):
|
||||
self.stat_mean=numpy.mean(self.value)
|
||||
self.stat_std=numpy.std(self.value)/sqrt(len(self.value)-1)
|
||||
self.mval.append(value)
|
||||
if len(self.mval)==self.mean_count:
|
||||
nmean=abs(numpy.mean(self.mval)-self.stat_mean)
|
||||
nstd=self.stat_std+numpy.std(self.mval)/sqrt(len(self.mval)-1)
|
||||
bsave=self.bstoreeach
|
||||
if nmean > (self.sigma*nstd):
|
||||
bsave=True
|
||||
if bsave:
|
||||
if self.stat_val_std==0:
|
||||
self.stat_val_std=abs(self.stat_val_mean/100)
|
||||
nmean=numpy.mean(self.mval)
|
||||
nstd=numpy.mean(self.mval)
|
||||
nmean=round(nmean/nstd,0)*nstd
|
||||
self.act_value=nmean
|
||||
self.act_time=int(1000*time.time())
|
||||
if self.bsql:
|
||||
thread.start_new_thread(self.send_sql,(0,))
|
||||
|
@ -71,8 +85,9 @@ class meas_data:
|
|||
thread.start_new_thread(self.send_file,(0,))
|
||||
if self.bsense:
|
||||
thread.start_new_thread(self.upload_osm,(0,))
|
||||
self.value.append(value)
|
||||
self.value=self.value[1:]
|
||||
self.mval=[]
|
||||
if len(self.value)>=self.ring_length:
|
||||
self.value=[(-1)*self.ring_length:]
|
||||
def get_ring(self):
|
||||
return(self.value)
|
||||
def get_act_value(self):
|
||||
|
|
Loading…
Reference in New Issue