Chttpd generalisation, external data expunge
This commit is contained in:
163
web/dynamic.py
163
web/dynamic.py
@@ -332,166 +332,3 @@ class DynamicData(object):
|
||||
except:
|
||||
disk_value = ''
|
||||
yield "{},{},{},{}\n".format(tm, cpu_value, mem_value, disk_value)
|
||||
|
||||
|
||||
@cherrypy.expose
|
||||
def historical_values(self, **kwargs):
|
||||
'''
|
||||
Function to all historical readings from InfluxDB.
|
||||
These parsed into a CSV? Dict?
|
||||
|
||||
returns: csv in raw, text format
|
||||
time, V_solar, I_solar
|
||||
|
||||
select mean(I_solar) as I_solar from voltage where time > now() - 10m group by time(30s) order by time desc
|
||||
'''
|
||||
|
||||
# GET variables now set, ready to reference them
|
||||
|
||||
measure_range = kwargs['range']
|
||||
query1 = "SELECT mean(V_array) as Uarr, mean(I_consumption) as Icon, "
|
||||
query2 = "mean(V_solar) as Usol, mean(I_solar) as Isol, "
|
||||
query3 = "mean(V_unit1) as Us1, mean(V_unit2) as Us2, max(charging) as charge FROM voltage"
|
||||
query4 = "WHERE time > NOW() - {} GROUP BY time(30s)".format(measure_range)
|
||||
query5 = "ORDER BY time DESC"
|
||||
query = "{} {} {} {} {}".format(query1, query2, query3, query4, query5)
|
||||
measures = self.influx_client.query(query)
|
||||
|
||||
# Let's get the data from DB
|
||||
result = []
|
||||
for datapoint in measures["voltage"]:
|
||||
tm = datapoint['time']
|
||||
try:
|
||||
array_voltage = round(float(datapoint["Uarr"]), 2)
|
||||
current_consumed = round(float(datapoint["Icon"]) / array_voltage, 2)
|
||||
|
||||
solar_voltage = round(float(datapoint["Usol"]), 2)
|
||||
solar_current = round(float(datapoint["Isol"]) / solar_voltage , 2)
|
||||
|
||||
Us1 = round(float(datapoint["Us1"]), 2)
|
||||
Us2 = round(float(datapoint["Us2"]), 2)
|
||||
except:
|
||||
continue
|
||||
|
||||
charging = int(datapoint["charge"])
|
||||
row = {"time": tm,
|
||||
"V_array": array_voltage,
|
||||
"I_consumption": current_consumed,
|
||||
"V_solar": solar_voltage,
|
||||
"I_solar": solar_current,
|
||||
"V_unit1": Us1,
|
||||
"V_unit2": Us2,
|
||||
"charging": charging}
|
||||
result.append(row)
|
||||
return result
|
||||
|
||||
@cherrypy.expose
|
||||
def stat_values(self, **kwargs):
|
||||
'''
|
||||
Function to all historical readings from InfluxDB.
|
||||
These parsed into a CSV? Dict?
|
||||
|
||||
returns: csv in raw, text format
|
||||
24Wh_consumed, 24Wh_solar
|
||||
|
||||
select mean(I_solar) as I_solar from voltage where time > now() - 10m group by time(30s) order by time desc
|
||||
'''
|
||||
|
||||
# GET variables now set, ready to reference them
|
||||
|
||||
_days = kwargs['days']
|
||||
d = datetime.datetime.now()
|
||||
measures = []
|
||||
result = []
|
||||
|
||||
for t_range in range(1, _days*24, 24):
|
||||
day = (d - datetime.timedelta(hours = t_range)).strftime("%Y-%m-%d")
|
||||
query1 = "SELECT mean(V_array) as Uarr, mean(I_consumption) as Icon, "
|
||||
query2 = "mean(V_solar) as Usol, mean(I_solar) as Isol, "
|
||||
query3 = "mean(V_unit1) as Us1, mean(V_unit2) as Us2, max(charging) as charge FROM voltage"
|
||||
query4 = "WHERE time > '{} 00:00:00' AND time < '{} 23:59:59' GROUP BY time(1h) fill(0)".format(day, day)
|
||||
query5 = "ORDER BY time DESC"
|
||||
query = "{} {} {} {} {}".format(query1, query2, query3, query4, query5)
|
||||
measure = self.influx_client.query(query)
|
||||
|
||||
# Let's get the data from DB
|
||||
tm = []
|
||||
Ubat = []
|
||||
Icon = []
|
||||
Usol = []
|
||||
Isol = []
|
||||
Uss1 = []
|
||||
Uss2 = []
|
||||
P_cons = []
|
||||
P_sol = []
|
||||
charging = 0
|
||||
day_result = []
|
||||
|
||||
for datapoint in measure["voltage"]:
|
||||
#print(datapoint)
|
||||
|
||||
tstamp = datapoint['time']
|
||||
array_voltage = round(float(datapoint["Uarr"]), 2)
|
||||
current_consumed = round(float(datapoint["Icon"]), 2)
|
||||
solar_voltage = round(float(datapoint["Usol"]), 2)
|
||||
solar_current = round(float(datapoint["Isol"]), 2)
|
||||
Us1 = round(float(datapoint["Us1"]), 2)
|
||||
Us2 = round(float(datapoint["Us2"]), 2)
|
||||
charge = int(datapoint["charge"])
|
||||
p_consumed = round(float(array_voltage / 1000.00 \
|
||||
* current_consumed / 1000.00), 2)
|
||||
p_solar = round(float(solar_voltage / 1000.00 \
|
||||
* solar_current / 1000.00), 2)
|
||||
|
||||
tm.append(tstamp),
|
||||
Ubat.append(array_voltage),
|
||||
Icon.append(current_consumed),
|
||||
Usol.append(solar_voltage),
|
||||
Isol.append(solar_current),
|
||||
Uss1.append(Us1),
|
||||
Uss2.append(Us2),
|
||||
charging = charging + charge
|
||||
P_cons.append(p_consumed)
|
||||
P_sol.append(p_solar)
|
||||
|
||||
row = {"time": tm,
|
||||
"V_array": Ubat,
|
||||
"I_consumption": Icon,
|
||||
"V_solar": Usol,
|
||||
"I_solar": Isol,
|
||||
"V_unit1": Uss1,
|
||||
"V_unit2": Uss2,
|
||||
"charging": charging,
|
||||
"P_cons": P_cons,
|
||||
"P_sol": P_sol}
|
||||
|
||||
try:
|
||||
day_result = [
|
||||
row['time'][0][0:10],
|
||||
round(min(row['V_array']) / 1000, 2),
|
||||
round(sum(row['I_consumption']) / 1000, 2),
|
||||
round(max(row['V_solar']) / 1000, 2),
|
||||
round(sum(row['I_solar']) / 1000, 2),
|
||||
round(min(row['V_unit1']) / 1000, 2),
|
||||
round(min(row['V_unit2']) / 1000, 2),
|
||||
row['charging'],
|
||||
round(sum(row['P_cons']),2),
|
||||
round(sum(row['P_sol']), 2)
|
||||
]
|
||||
except:
|
||||
day_result = [
|
||||
d.strftime("%Y-%m-%d"),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
# need to compute averages, mate...
|
||||
print(day_result)
|
||||
result.append(day_result)
|
||||
return result
|
||||
|
||||
@@ -141,8 +141,8 @@ class WeatherInfo(object):
|
||||
wind_gust = influx_weather_client.query(wind_gust_q)
|
||||
hum_ext = influx_weather_client.query(hum_ext_q)
|
||||
hum_int = influx_weather_client.query(hum_int_q)
|
||||
press = influx_weather_client.query(press_q)
|
||||
presr = influx_weather_client.query(presr_q)
|
||||
#press = influx_weather_client.query(press_q)
|
||||
#presr = influx_weather_client.query(presr_q)
|
||||
t_ext = influx_weather_client.query(t_ext_q)
|
||||
t_int = influx_weather_client.query(t_int_q)
|
||||
|
||||
@@ -150,10 +150,10 @@ class WeatherInfo(object):
|
||||
result_windspeed = [speed for speed in wind_speed][0][0]
|
||||
result_winddir = [direction for direction in wind_direction][0][0]
|
||||
result_windgust = [gust for gust in wind_gust][0][0]
|
||||
result_hum_int = [y for y in hum_int][0][0]
|
||||
result_t_int = [c for c in t_int][0][0]
|
||||
result_press = [z for z in press][0][0]
|
||||
result_presr = [a for a in presr][0][0]
|
||||
#result_hum_int = [y for y in hum_int][0][0]
|
||||
#result_t_int = [c for c in t_int][0][0]
|
||||
#result_press = [z for z in press][0][0]
|
||||
#result_presr = [a for a in presr][0][0]
|
||||
result_t_ext = [b for b in t_ext][0][0]
|
||||
result_hum_ext = [x for x in hum_ext][0][0]
|
||||
|
||||
@@ -168,11 +168,11 @@ class WeatherInfo(object):
|
||||
result.update({"direction": round(result_winddir['value'], 1)})
|
||||
result.update({"windgust": round(result_windgust['value'], 1)})
|
||||
result.update({"humidity_ext": round(result_hum_ext['humidity'], 1)})
|
||||
result.update({"humidity_int": round(result_hum_int['humidity'], 1)})
|
||||
result.update({"pressure": round(result_press['pressure'], 1)})
|
||||
result.update({"pressure_raw": round(result_presr['pressure'], 1)})
|
||||
#result.update({"humidity_int": round(result_hum_int['humidity'], 1)})
|
||||
#result.update({"pressure": round(result_press['pressure'], 1)})
|
||||
#result.update({"pressure_raw": round(result_presr['pressure'], 1)})
|
||||
result.update({"temp_ext": round(result_t_ext['temperature'], 1)})
|
||||
result.update({"temp_int": round(result_t_int['temperature'], 1)})
|
||||
#result.update({"temp_int": round(result_t_int['temperature'], 1)})
|
||||
return result
|
||||
|
||||
def body(self):
|
||||
@@ -197,9 +197,9 @@ class WeatherInfo(object):
|
||||
out_temp_icon=fs_out_temperature_icon,
|
||||
out_temp=current_weather['temp_ext'],
|
||||
in_temp_icon=fs_in_temperature_icon,
|
||||
in_temp=current_weather['temp_int'],
|
||||
pressure_icon=fs_pressure_icon,
|
||||
pressure=current_weather['pressure'],
|
||||
raw_pressure=current_weather['pressure_raw']
|
||||
#in_temp=current_weather['temp_int'],
|
||||
pressure_icon=fs_pressure_icon
|
||||
#pressure=current_weather['pressure'],
|
||||
#raw_pressure=current_weather['pressure_raw']
|
||||
)
|
||||
return admin_html
|
||||
|
||||
Reference in New Issue
Block a user