fix: bugs in plotting/logging

This commit is contained in:
bernis
2016-06-18 19:38:35 +02:00
parent 672d8551a2
commit fcf5c14bde
3 changed files with 49 additions and 34 deletions

View File

@@ -69,16 +69,22 @@ class DataLogger:
for i in range(SENSOR_BASEID, SENSOR_BASEID + 8): for i in range(SENSOR_BASEID, SENSOR_BASEID + 8):
(count, data) = self.ioif.bb_i2c_zip(P_SDA, [I2C_SET_ADDR, i, I2C_START, I2C_READ, SENSOR_DATALEN, I2C_STOP, I2C_END]) (count, data) = self.ioif.bb_i2c_zip(P_SDA, [I2C_SET_ADDR, i, I2C_START, I2C_READ, SENSOR_DATALEN, I2C_STOP, I2C_END])
columns.append(str(i)) columns.append(str(i))
if count > 0: if count > 1:
data_fast[i-SENSOR_BASEID] += int(data[0]) + int(data[1]) / 256.0 sign = 1
data_perm[i-SENSOR_BASEID] += int(data[0]) + int(data[1]) / 256.0 if data[0] > 128:
print "sign"
data[0] = data[0]-128
sign = -1
data_fast[i-SENSOR_BASEID] += sign * (int(data[0]) + (int(data[1]) / 256.0))
data_perm[i-SENSOR_BASEID] += sign * (int(data[0]) + (int(data[1]) / 256.0))
else: else:
data_fast[i-SENSOR_BASEID] = np.nan data_fast[i-SENSOR_BASEID] = np.nan
data_perm[i-SENSOR_BASEID] = np.nan data_perm[i-SENSOR_BASEID] = np.nan
time.sleep(0.05)
infoline = np.empty((1, 9), dtype=object) infoline = np.empty((1, 9), dtype=object)
if n_fast % 2 == 0: if n_fast % 10 == 0:
infoline[0, 1:9] = data_fast[0:8] / n_fast infoline[0, 1:9] = data_fast[0:8] / n_fast
n_fast = 0 n_fast = 0
infoline[0, 0] = dt.datetime.now() infoline[0, 0] = dt.datetime.now()
@@ -86,7 +92,7 @@ class DataLogger:
self.savetofile(False, pdataline) self.savetofile(False, pdataline)
data_fast = np.zeros(8) data_fast = np.zeros(8)
if n_perm % 120 == 0: if n_perm % 100 == 0:
infoline[0, 1:9] = data_perm[0:8] / n_perm infoline[0, 1:9] = data_perm[0:8] / n_perm
n_perm = 0 n_perm = 0
infoline[0, 0] = dt.datetime.now() infoline[0, 0] = dt.datetime.now()
@@ -96,7 +102,7 @@ class DataLogger:
n_fast += 1 n_fast += 1
n_perm += 1 n_perm += 1
time.sleep(0.5)
def savetofile(self, permanent, data): def savetofile(self, permanent, data):
@@ -104,7 +110,7 @@ class DataLogger:
date = dt.datetime.now().strftime('%Y%m%d') date = dt.datetime.now().strftime('%Y%m%d')
exists = os.path.isfile('app/static/logdata_' + date + '.csv') exists = os.path.isfile('app/static/logdata_' + date + '.csv')
with open('app/static/logdata_' + date + '.csv', 'a+') as f: with open('app/static/logdata_' + date + '.csv', 'a+') as f:
data.to_csv(f, header=False, index=False) data.to_csv(f, header=not exists, index=False)
else: else:
exists = os.path.isfile('/tmp/baroness_logdata_fast.csv') exists = os.path.isfile('/tmp/baroness_logdata_fast.csv')
with open('/tmp/baroness_logdata_fast.csv', 'a+') as f: with open('/tmp/baroness_logdata_fast.csv', 'a+') as f:
@@ -121,4 +127,4 @@ if __name__ == "__main__":
print "creating datalogger" print "creating datalogger"
logger = DataLogger() logger = DataLogger()
while(1): while(1):
time.sleep(1) time.sleep(1)

View File

@@ -1,9 +1,11 @@
#import matplotlib #speed? import matplotlib #speed?
#matplotlib.use('GTKAgg') matplotlib.use('TkAgg')
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
from matplotlib import units from matplotlib import units
from matplotlib import patheffects
from matplotlib.dates import WeekdayLocator, DayLocator, HourLocator, DateFormatter, drange, MONDAY from matplotlib.dates import WeekdayLocator, DayLocator, HourLocator, DateFormatter, drange, MONDAY
from matplotlib import rcParams as rcp
import numpy as np import numpy as np
from user import User from user import User
from database import * from database import *
@@ -27,12 +29,12 @@ class Plotter:
ptime = 0 ptime = 0
while self.active: while self.active:
logging.info("Plotter plotting stuff") logging.info("Plotter plotting stuff")
logfiles = list() logfiles = list()
logfiles += glob.glob("static/logdata*.csv") logfiles += glob.glob("app/static/logdata*.csv")
logfiles.append("/tmp/baroness_logdata_fast.csv") logfiles.append("/tmp/baroness_logdata_fast.csv")
print logfiles
if logfiles: if logfiles:
plot_log(logfiles, hours = 2) plot_log(logfiles, hours = 4)
# plotter not fully integrated yet # plotter not fully integrated yet
#if ptime % 30 or self.joblist: #if ptime % 30 or self.joblist:
@@ -136,11 +138,11 @@ def plot_total(user=None):
fils = "app/static/total%03d.png" % user.id fils = "app/static/total%03d.png" % user.id
fill = "app/static/total%03d_big.png" % user.id fill = "app/static/total%03d_big.png" % user.id
plt.title(tit) plt.title(tit)
logging.info("plot plot_total " + str(datetime.datetime.now())) logging.info("Plot plot_total " + str(datetime.datetime.now()))
#480x320 #480x320
fig.set_size_inches(4.8, 3.2) fig.set_size_inches(4.8, 3.2)
plt.savefig(fils, dpi=100) plt.savefig(fils, dpi=100)
logging.info("end plot_total " + str(datetime.datetime.now())) logging.info("Plot: End plot_total " + str(datetime.datetime.now()))
#fig.set_size_inches(4.8, 3.2) #fig.set_size_inches(4.8, 3.2)
#plt.savefig(fill, dpi=400) #plt.savefig(fill, dpi=400)
@@ -154,7 +156,7 @@ def plot_log(logfiles, hours):
for logfile in logfiles: for logfile in logfiles:
try: try:
d = pd.read_csv(logfile, parse_dates=[0]) d = pd.read_csv(logfile, parse_dates=[0])
if data: if data is not None:
data = pd.concat((data, d)) data = pd.concat((data, d))
else: else:
data = d data = d
@@ -163,36 +165,43 @@ def plot_log(logfiles, hours):
return 0 return 0
#ipdb.set_trace() #ipdb.set_trace()
data = data.sort('time')
data = data[data.time > begin]
data = data.set_index(pd.DatetimeIndex(data.time)) data = data.set_index(pd.DatetimeIndex(data.time))
data = data.drop("time", axis=1) data = data.drop("time", axis=1)
#ipdb.set_trace() #ipdb.set_trace()
plt.xkcd() plt.xkcd()
rcp['path.effects'] = [patheffects.withStroke(linewidth=0)]
#all columns #all columns
for item, frame in data.iteritems(): for item, frame in data.iteritems():
if frame is None or frame.empty or frame.isnull().values.all():
continue
f = plt.figure() f = plt.figure()
#f.patch.set_facecolor("#ccefff") #f.patch.set_facecolor("#ccefff")
#f.patch.set_alpha("0.0") #f.patch.set_alpha("0.0")
logging.debug("column " + str(item) + " " + frame.name) logging.debug("column " + str(item) + " " + frame.name)
plt.plot(data.index.to_pydatetime(), frame, "b") plt.plot(data.index.to_pydatetime(), frame)#"b"
ax = plt.gca() ax = plt.gca()
#ax.grid(True, linewidth=1.0) #ax.grid(True, linewidth=1.0)
plt.xlim(begin, end) #plt.xlim(begin, end)
ax.spines['right'].set_visible(False) #ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False) #ax.spines['top'].set_visible(False)
ax.yaxis.set_ticks_position('none')#('left') ax.yaxis.set_ticks_position('none')#('left')
ax.xaxis.set_ticks_position('none')#('bottom') ax.xaxis.set_ticks_position('none')#('bottom')
f.autofmt_xdate() try: #might not work if few data available
f.autofmt_xdate()
#plt.tick_params(which='minor', length=4) #plt.tick_params(which='minor', length=4)
#plt.tick_params(which='major', length=5) #plt.tick_params(which='major', length=5)
#ipdb.set_trace() #ipdb.set_trace()
ax.fmt_xdata = DateFormatter('%d.%m') #ax.fmt_xdata = AutoDateFormatter('%d.%m/%H')
#ax.xaxis.set_major_locator(WeekdayLocator(MONDAY)) #ax.xaxis.set_major_locator(WeekdayLocator(MONDAY))
#ax.xaxis.set_major_locator(DayLocator()) ax.xaxis.set_major_locator(AutoDateLocator())
ax.xaxis.set_major_formatter(DateFormatter('%d.%m')) ax.xaxis.set_major_formatter(AutoDateFormatter(defaultfmt='%d.%m'))
#f.autofmt_xdate()
except:
logging.warning("Plot: Few data!")
#plt.xlabel('Datum') #plt.xlabel('Datum')
#plt.ylabel('Temperatur / C') #plt.ylabel('Temperatur / C')
outfile = "app/static/log_" + str(item) + ".png" outfile = "app/static/log_" + str(item) + ".png"
@@ -290,4 +299,4 @@ def plot_list(duration):
#1024x768 #1024x768
#fig.set_size_inches(10.24, 7.68) #fig.set_size_inches(10.24, 7.68)
#plt.savefig('app/static/bierliste.png', dpi=100) #plt.savefig('app/static/bierliste.png', dpi=100)
logging.info("Plot End plot_list " + str(datetime.datetime.now())) logging.info("Plot: End plot_list " + str(datetime.datetime.now()))

View File

@@ -1,3 +1,4 @@
import logging
try: try:
import MFRC522 import MFRC522
except: except:
@@ -6,14 +7,13 @@ except:
import signal import signal
import thread import thread
import time import time
import logging
class RFID: class RFID:
def __init__(self, callbackf): def __init__(self, callbackf):
logging.info("RFID Reader initialized!") logging.info("RFID Reader initialized!")
self.reader = MFRC522.MFRC522() self.reader = MFRC522.MFRC522(spd=500000)
signal.signal(signal.SIGINT, self.stop) signal.signal(signal.SIGINT, self.stop)
self.callback = callbackf self.callback = callbackf
self.loop = True self.loop = True