-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplotter.py
68 lines (57 loc) · 2.34 KB
/
plotter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import matplotlib as mpl
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import numpy as np
import sqlite3
import pandas as pd
import sys
from Normalizer import Normalizer
from ArgParsers.PlotterArgParser import PlotterArgParser
from Util.TimeUtil import TimeUtil
from Util.TempUtil import TempUtil
from Util.TimezoneUtil import TimezoneUtil
from Entity.TemperatureUnit import TemperatureUnit
degree_sign = u'\N{DEGREE SIGN}'
parser = PlotterArgParser()
parser.parseArgs(sys.argv[1:])
timezone = parser.timezone
tempUnits = parser.temperatureUnits
startDate = parser.startDate
endDate = parser.endDate
databaseFile = parser.databaseFile
fig, ax = plt.subplots()
con = sqlite3.connect(databaseFile)
queryString = """
SELECT * FROM thermostat_info
WHERE timestamp
BETWEEN '{start}' AND '{end}'
ORDER BY timestamp ASC
""".format(start=startDate, end=endDate)
therm_info_df = pd.read_sql_query(queryString, con)
if therm_info_df.empty:
print("No data found")
exit(0)
times = therm_info_df['timestamp']
indoor_temps = therm_info_df['tempIndoor']
outdoor_temps = therm_info_df['tempOutdoor']
tempUnits = TemperatureUnit.Celsius
if parser.temperatureUnits == TemperatureUnit.Fahrenheit:
indoor_temps = TempUtil.transformToFahrenheit(indoor_temps)
outdoor_temps = TempUtil.transformToFahrenheit(outdoor_temps)
normalizer = Normalizer()
timesResult, indoorTempsResult = normalizer.normalizeTimedData(times, indoor_temps, 3*60)
timesResult = TimeUtil.transformUtcToTimezone(timesResult, parser.timezone)
plt_times = mdates.date2num(timesResult)
ax.plot(plt_times, indoorTempsResult, linestyle='solid', label='Indoor Temperature')
outdoorTempsResult = normalizer.normalizeTimedData(times, outdoor_temps, 3*60)[1]
ax.plot(plt_times, outdoorTempsResult, linestyle='solid', label='Outdoor Temperature')
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S'))
ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=15))
ax.set_xlabel('Time [' + TimezoneUtil.getTimezoneString(timezone) + ']')
ax.set_ylabel('Temperature [' + degree_sign + tempUnits.upper() + ']')
ax.set_title('Historical Temperature Data for ' + startDate.isoformat(" ","seconds") + ' to ' + endDate.isoformat(" ","seconds"))
ax.legend()
fig.autofmt_xdate()
fig.tight_layout()
plt.setp(ax.get_xticklabels(), rotation=90, horizontalalignment='right')
plt.show()