mirror of
https://github.com/flobz/psa_car_controller.git
synced 2026-08-22 01:16:14 +00:00
handle no trips or no charge, move utils.py to libs
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user