handle no trips or no charge, move utils.py to libs

This commit is contained in:
Florian Bezannier
2021-05-10 20:53:53 +02:00
parent 9f7a024767
commit d6d14d0332
7 changed files with 48 additions and 44 deletions
View File
+1 -1
View File
@@ -22,7 +22,7 @@ from otp.otp import load_otp, new_otp_session, save_otp, ConfigException, Otp
from psa_connectedcar.rest import ApiException
from mylogger import logger
from utils import rate_limit
from libs.utils import rate_limit
from web.abrp import Abrp
from web.db import Database
+1 -1
View File
@@ -16,7 +16,7 @@ from libs.elec_price import ElecPrice
from mylogger import my_logger
from mylogger import logger
from my_psacc import MyPSACC
from utils import is_port_in_use
from libs.utils import is_port_in_use
from web.app import start_app, save_config
CONFIG_NAME = "config.json"
+27 -24
View File
@@ -100,11 +100,13 @@ function update_figures(data, old_figure, x,y) {
figure["data"][0]["lon"].push(...trip["positions"][y_label[0]]);
figure["data"][0]["hovertext"].push(...Array(x_pos.length).fill(trip[y_label[1]]), null);
}
var last_pos = trip["positions"][y_label[0]].length;
figure.layout.mapbox.center.lat = trip["positions"][x_label][last_pos - 1];
figure.layout.mapbox.center.lon = trip["positions"][y_label[0]][last_pos - 1];
figure.data[1].lat = [figure.layout.mapbox.center.lat]
figure.data[1].lon = [figure.layout.mapbox.center.lon]
if(trip){
var last_pos = trip["positions"][y_label[0]].length;
figure.layout.mapbox.center.lat = trip["positions"][x_label][last_pos - 1];
figure.layout.mapbox.center.lon = trip["positions"][y_label[0]][last_pos - 1];
figure.data[1].lat = [figure.layout.mapbox.center.lat]
figure.data[1].lon = [figure.layout.mapbox.center.lon]
}
}
else {
x_values = trips.map(a => a[x_label])
@@ -131,11 +133,8 @@ function update_table(data, tables){
function update_cards_value(data){
res = {}
avg_co2=new Avg();
avg_kw = new Avg();
avg_time = new Avg()
avg_price = new Avg();
var res = {}
var avg_co2=new Avg(), avg_kw = new Avg(),avg_time = new Avg(), avg_price = new Avg();
data["chargings"].forEach(function(charge){
diff = ((new Date(charge["stop_at"])) - (new Date(charge["start_at"])))/3600000;
avg_kw.add_value(charge["kw"]);
@@ -145,21 +144,25 @@ function update_cards_value(data){
avg_time.add_value(diff);
}
})
total_distance = data["trips"][data["trips"].length-1]["mileage"]-data["trips"][0]["mileage"]
avg_kw = avg_kw.average();
avg_co2 = avg_co2.average()
avg_price_kw = avg_price.average()/avg_kw;
res["avg_consum_kw"] = Avg.get_average_key(data["trips"], "consumption_km")
res["avg_emission_kw"] = avg_co2;
res["avg_emission_km"] = res["avg_emission_kw"]*res["avg_consum_kw"]/100;
res["avg_chg_speed"] = avg_kw/avg_time.average()
res["elec_consum_kw"] = total_distance*res["avg_consum_kw"]/100;
res["elec_consum_price"] = avg_price_kw*res["elec_consum_kw"]
res["avg_consum_price"] = avg_price_kw*res["avg_consum_kw"]
//console.log(res);
if(data["chargings"].length>0){
avg_kw = avg_kw.average();
avg_co2 = avg_co2.average()
avg_price_kw = avg_price.average()/avg_kw;
res["avg_emission_kw"] = avg_co2;
res["avg_chg_speed"] = avg_kw/avg_time.average();
}
if(data["trips"].length>0){
var total_distance = data["trips"][data["trips"].length-1]["mileage"]-data["trips"][0]["mileage"]
res["avg_consum_kw"] = Avg.get_average_key(data["trips"], "consumption_km");
res["elec_consum_kw"] = total_distance*res["avg_consum_kw"]/100;
}
if(data["trips"].length>0 && data["chargings"].length>0){
res["avg_emission_km"] = res["avg_emission_kw"]*res["avg_consum_kw"]/100;
res["elec_consum_price"] = avg_price_kw*res["elec_consum_kw"]
res["avg_consum_price"] = avg_price_kw*res["avg_consum_kw"]
}
for (const [key, value] of Object.entries(res)) {
document.getElementById(key).innerHTML=value.toPrecision(3);
document.getElementById(key).innerHTML=value.toPrecision(3);
}
}
+1 -1
View File
@@ -11,7 +11,7 @@ from geojson import Feature, Point, FeatureCollection
from geojson import dumps as geo_dumps
from mylogger import logger
from utils import get_temp
from libs.utils import get_temp
NEW_BATTERY_COLUMNS = [["price", "INTEGER"], ["charging_mode", "TEXT"]]
NEW_POSITION_COLUMNS = [["level_fuel", "INTEGER"], ["altitude", "INTEGER"]]
+3 -5
View File
@@ -24,9 +24,7 @@ consumption_fig_by_speed = ERROR_DIV
consumption_fig_by_temp = ERROR_DIV
table_fig = ERROR_DIV
info = ""
battery_info = ERROR_DIV
battery_table = None
consumption_df_dict = None
battery_table = ERROR_DIV
AVG_CHARGE_SPEED = "avg_chg_speed"
AVG_EMISSION_KM = "avg_emission_km"
@@ -52,8 +50,8 @@ SUMMARY_CARDS = {"Average consumption": {"text": [card_value_div(AVG_CONSUM_KW,
# pylint: disable=too-many-locals
def get_figures(car: Car):
global consumption_fig, consumption_df, trips_map, consumption_fig_by_speed, table_fig, info, battery_info, \
battery_table, consumption_fig_by_temp, consumption_df_dict
global consumption_fig, consumption_df, trips_map, consumption_fig_by_speed, table_fig, info, \
battery_table, consumption_fig_by_temp
lats = [42, 41]
lons = [1, 2]
names = ["undefined", "undefined"]
+15 -12
View File
@@ -11,7 +11,7 @@ from deepdiff import DeepDiff
from flask import jsonify, request, Response as FlaskResponse
import web.utils
from libs.car import Cars
from libs.car import Cars, Car
from mylogger import logger
from trip import Trips
@@ -31,7 +31,7 @@ EMPTY_DIV = "empty-div"
ABRP_SWITCH = 'abrp-switch'
CALLBACK_CREATED = False
trips: Trips
trips: Trips = Trips()
chargings: List[dict]
min_date = max_date = min_millis = max_millis = step = marks = cached_layout = None
@@ -232,8 +232,9 @@ def update_trips():
min_date = trips[0].start_at
max_date = trips[-1].start_at
figures.get_figures(trips[0].car)
except (StopIteration, AssertionError):
except (AssertionError, KeyError):
logger.debug("No trips yet")
figures.get_figures(Car("vin","vid","brand"))
try:
chargings = Charging.get_chargings()
assert len(chargings) > 0
@@ -288,6 +289,14 @@ def serve_layout():
logger.debug("Create new layout")
fig_filter = Figure_Filter()
try:
range_slider = dcc.RangeSlider(
id='date-slider',
min=min_millis,
max=max_millis,
step=step,
marks=marks,
value=[min_millis, max_millis],
)
summary_tab = [
dbc.Container(dbc.Row(id="summary-cards",
children=create_card(figures.SUMMARY_CARDS)), fluid=True),
@@ -304,19 +313,13 @@ def serve_layout():
fig_filter.src = {"trips": trips.get_trips_as_dict(), "chargings": chargings}
dash_app.clientside_callback(*fig_filter.get_clientside_callback())
create_callback()
range_slider = dcc.RangeSlider(
id='date-slider',
min=min_millis,
max=max_millis,
step=step,
marks=marks,
value=[min_millis, max_millis],
)
except (IndexError, TypeError, NameError):
except (IndexError, TypeError, NameError, AssertionError, NameError):
summary_tab = figures.ERROR_DIV
maps = figures.ERROR_DIV
logger.warning("Failed to generate figure, there is probably not enough data yet", exc_info_debug=True)
range_slider = html.Div()
figures.battery_table = figures.ERROR_DIV
data_div = html.Div([
*fig_filter.get_store(),
range_slider,