]> ToastFreeware Gitweb - toast/airingbutler.git/blob - plot_mhz19.py
plot_mhz19.py: (optionally) pass filename and startdate
[toast/airingbutler.git] / plot_mhz19.py
1 #!/usr/bin/python3
2
3 import csv
4 import argparse
5 from datetime import datetime, date, timedelta
6 from matplotlib import pyplot as plt
7
8 '''
9 filename = 'log.csv'
10 Time,TS,CO2,Temp
11 21:02:02,0,661,24
12 21:02:08,5021,657,24
13
14 '''
15
16 def parsedatetime(timevalue, currentdate):
17     dt = datetime.strptime(timevalue, '%H:%M:%S')
18     return datetime.combine(currentdate, dt.time())
19
20 def main():
21     parser = argparse.ArgumentParser('Plot log.csv.')
22     parser.add_argument('filename', nargs='?', default='log.csv', help='Name of csv file')
23     parser.add_argument('-s', '--startdate', nargs='?', default='2020-10-22', help='First date in csv file')
24     parser.add_argument('-t', '--temperature', action='store_true', help='Include temperature plot')
25     args = parser.parse_args()
26     startdate = datetime.strptime(args.startdate, '%Y-%m-%d').date()
27
28     with open(args.filename) as f:
29         reader = csv.reader(f)
30         headers = next(reader)
31
32         time = []
33         co2 = []
34         temp = []
35         for row in reader:
36             dt = parsedatetime(row[0], startdate)
37             if len(time) > 0 and dt - time[-1] < timedelta(hours=-2): # DST switch!
38                 startdate += timedelta(days=1)
39                 dt += timedelta(days=1)
40             time.append(dt)
41             co2.append(int(row[2]))
42             temp.append(int(row[3]))
43
44         plt.plot(time, co2, c = 'red')
45         plt.title('CO₂')
46         plt.xlabel('time')
47         plt.ylabel('ppm')
48         plt.tick_params(axis = 'both', which = 'major')
49         if args.temperature is True:
50             plt.gca().twinx()
51             plt.plot(time, temp, c = 'blue')
52         plt.show()
53
54 if __name__ == '__main__':
55     main()