fix: bugs in plotting/logging
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
47
app/plot.py
47
app/plot.py
@@ -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')
|
||||||
|
|
||||||
|
try: #might not work if few data available
|
||||||
f.autofmt_xdate()
|
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()))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user