Chttpd generalisation, external data expunge

This commit is contained in:
2019-05-26 18:25:37 +02:00
parent 2f6745f104
commit edb50210d4
2 changed files with 14 additions and 177 deletions

View File

@@ -332,166 +332,3 @@ class DynamicData(object):
except: except:
disk_value = '' disk_value = ''
yield "{},{},{},{}\n".format(tm, cpu_value, mem_value, 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

View File

@@ -141,8 +141,8 @@ class WeatherInfo(object):
wind_gust = influx_weather_client.query(wind_gust_q) wind_gust = influx_weather_client.query(wind_gust_q)
hum_ext = influx_weather_client.query(hum_ext_q) hum_ext = influx_weather_client.query(hum_ext_q)
hum_int = influx_weather_client.query(hum_int_q) hum_int = influx_weather_client.query(hum_int_q)
press = influx_weather_client.query(press_q) #press = influx_weather_client.query(press_q)
presr = influx_weather_client.query(presr_q) #presr = influx_weather_client.query(presr_q)
t_ext = influx_weather_client.query(t_ext_q) t_ext = influx_weather_client.query(t_ext_q)
t_int = influx_weather_client.query(t_int_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_windspeed = [speed for speed in wind_speed][0][0]
result_winddir = [direction for direction in wind_direction][0][0] result_winddir = [direction for direction in wind_direction][0][0]
result_windgust = [gust for gust in wind_gust][0][0] result_windgust = [gust for gust in wind_gust][0][0]
result_hum_int = [y for y in hum_int][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_t_int = [c for c in t_int][0][0]
result_press = [z for z in press][0][0] #result_press = [z for z in press][0][0]
result_presr = [a for a in presr][0][0] #result_presr = [a for a in presr][0][0]
result_t_ext = [b for b in t_ext][0][0] result_t_ext = [b for b in t_ext][0][0]
result_hum_ext = [x for x in hum_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({"direction": round(result_winddir['value'], 1)})
result.update({"windgust": round(result_windgust['value'], 1)}) result.update({"windgust": round(result_windgust['value'], 1)})
result.update({"humidity_ext": round(result_hum_ext['humidity'], 1)}) result.update({"humidity_ext": round(result_hum_ext['humidity'], 1)})
result.update({"humidity_int": round(result_hum_int['humidity'], 1)}) #result.update({"humidity_int": round(result_hum_int['humidity'], 1)})
result.update({"pressure": round(result_press['pressure'], 1)}) #result.update({"pressure": round(result_press['pressure'], 1)})
result.update({"pressure_raw": round(result_presr['pressure'], 1)}) #result.update({"pressure_raw": round(result_presr['pressure'], 1)})
result.update({"temp_ext": round(result_t_ext['temperature'], 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 return result
def body(self): def body(self):
@@ -197,9 +197,9 @@ class WeatherInfo(object):
out_temp_icon=fs_out_temperature_icon, out_temp_icon=fs_out_temperature_icon,
out_temp=current_weather['temp_ext'], out_temp=current_weather['temp_ext'],
in_temp_icon=fs_in_temperature_icon, in_temp_icon=fs_in_temperature_icon,
in_temp=current_weather['temp_int'], #in_temp=current_weather['temp_int'],
pressure_icon=fs_pressure_icon, pressure_icon=fs_pressure_icon
pressure=current_weather['pressure'], #pressure=current_weather['pressure'],
raw_pressure=current_weather['pressure_raw'] #raw_pressure=current_weather['pressure_raw']
) )
return admin_html return admin_html