8
|
1 #!/usr/bin/env python
|
|
2
|
|
3 import re, datetime, time, pylab, matplotlib
|
|
4 daterestr = '([0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}): '
|
|
5 targtre = re.compile(daterestr + 'target temperature - (-?[0-9]+\.[0-9]+)')
|
|
6 linere = re.compile(daterestr + '(-?[0-9]+\.[0-9]+)\s+(-?[0-9]+\.[0-9]+)\s+(-?[0-9]+\.[0-9]+)\s+([a-z-]+)\s+([a-z-]+)')
|
|
7 datefmt = '%Y/%m/%d %H:%M:%S'
|
|
8 tz = matplotlib.pytz.timezone('Australia/Adelaide')
|
|
9
|
|
10 targetTemp = 18.0
|
|
11 logfile = '/tmp/beermon.log'
|
|
12 start = time.mktime(time.strptime("2007/09/24 00:00:00", datefmt))
|
|
13 #end = time.mktime(time.strptime("2007/09/28 00:00:00", datefmt))
|
|
14 end = None
|
|
15
|
|
16 f = open(logfile)
|
|
17
|
|
18 times = []
|
|
19 fermTemps = []
|
|
20 fridgeTemps = []
|
|
21 ambTemps = []
|
|
22 states = []
|
|
23 targetTemps = []
|
|
24
|
|
25 for line in f:
|
|
26 m = linere.match(line)
|
|
27 if (m == None):
|
|
28 m = targtre.match(line)
|
|
29 if (m != None):
|
|
30 t = time.mktime(time.strptime(m.group(1), datefmt))
|
|
31 if (t < start or t > end):
|
|
32 continue
|
|
33
|
|
34 targetTemp = float(m.group(2))
|
|
35 continue
|
|
36 else:
|
|
37 continue
|
|
38
|
|
39 t = time.mktime(time.strptime(m.group(1), datefmt))
|
|
40 if (start != None and t < start):
|
|
41 continue
|
|
42
|
|
43 if (end != None and t > end):
|
|
44 continue
|
|
45
|
|
46 fermTemp = float(m.group(2))
|
|
47 fridgeTemp = float(m.group(3))
|
|
48 ambTemp = float(m.group(4))
|
|
49 state = m.group(5)
|
|
50
|
|
51 times.append(t / (24 * 60 * 60)) # Is in float days
|
|
52 fermTemps.append(fermTemp)
|
|
53 fridgeTemps.append(fridgeTemp)
|
|
54 ambTemps.append(ambTemp)
|
|
55 states.append(state)
|
|
56 targetTemps.append(targetTemp)
|
|
57
|
|
58 print "From %s to %s" % (time.asctime(time.localtime(times[0] * (24 * 60 * 60))),
|
|
59 time.asctime(time.localtime(times[-1] * (24 * 60 * 60))))
|
|
60 fig = pylab.figure()
|
|
61 ax = fig.add_subplot(111)
|
|
62 p = ax.plot(times, fermTemps, times, fridgeTemps, times, ambTemps, times, targetTemps)
|
|
63 ax.set_autoscale_on(True)
|
|
64 hoursFmt = pylab.DateFormatter('%d %b %H:%M', tz = tz)
|
|
65 ax.xaxis.set_major_formatter(hoursFmt)
|
|
66 labels = ax.get_xticklabels()
|
|
67 pylab.setp(labels, 'rotation', 5.0)
|
|
68 ax.grid(True)
|
|
69 ax.set_xlabel('time(UTC)')
|
|
70 ax.set_ylabel('Temperature(C)')
|
|
71 pylab.legend((p[0], p[1], p[2], p[3]), ('Fermenter', 'Fridge', 'Ambient', 'Target'), 'best')
|
|
72 #pylab.legend((p[0], p[1], p[2]), ('Fermenter', 'Fridge', 'Ambient'), 'best')
|
|
73 #pylab.axhline(y = targetTemp)
|
|
74 pylab.show()
|