From c31b3f4854ed32338f4c62c7f7cddf5e35c7968a Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Wed, 5 May 2021 20:36:51 +0200 Subject: [PATCH 01/11] WIP client filter --- trip.py | 12 +++- web/app.py | 6 +- web/assets/clientside.js | 48 +++++++++++++ .../images/battery-charge-line.svg | 0 web/{static => assets}/images/consumption.svg | 0 .../images/electricity bill.svg | 0 web/{static => assets}/images/pollution.svg | 0 web/assets/style.json | 22 ++++++ web/figures.py | 71 +++++++++---------- web/views.py | 59 +++++++++++---- 10 files changed, 165 insertions(+), 53 deletions(-) create mode 100644 web/assets/clientside.js rename web/{static => assets}/images/battery-charge-line.svg (100%) rename web/{static => assets}/images/consumption.svg (100%) rename web/{static => assets}/images/electricity bill.svg (100%) rename web/{static => assets}/images/pollution.svg (100%) create mode 100644 web/assets/style.json diff --git a/trip.py b/trip.py index 207e1a9..8c6208e 100644 --- a/trip.py +++ b/trip.py @@ -89,8 +89,8 @@ class Trip: return res def get_consumption(self): - return {"speed": self.speed_average, "consumption_km": self.consumption_km, "date": self.start_at, - "consumption_by_temp": self.get_temperature()} + return {"speed": self.speed_average, "consumption_km": self.consumption_km, "start_at": self.start_at, + "consumption_by_temp": self.get_temperature(), "positions": self.get_positions()} def set_altitude_diff(self, start, end): try: @@ -98,6 +98,14 @@ class Trip: except (NameError, TypeError): pass + def get_positions(self): + lat = [] + long = [] + for position in self.positions: + lat.append(position.latitude) + long.append(position.longitude) + return {"lat": lat, "long": long} + class Trips(list): def __init__(self, *args): diff --git a/web/app.py b/web/app.py index 9c7aebf..4b3bb2f 100644 --- a/web/app.py +++ b/web/app.py @@ -27,7 +27,8 @@ myp: MyPSACC = None chc: ChargeControls = None -def start_app(title, base_path, debug: bool, host, port, reloader=False): # pylint: disable=too-many-arguments +def start_app(title, base_path, debug: bool, host, port, reloader=False, # pylint: disable=too-many-arguments + unminified=False): global app, dash_app, dispatcher try: lang = locale.getlocale()[0].split("_")[0] @@ -36,6 +37,8 @@ def start_app(title, base_path, debug: bool, host, port, reloader=False): # pyl except (IndexError, locale.Error): locale_url = None logger.warning("Can't get language") + if unminified: + locale_url = ["assets/plotly-with-meta.js"] app = Flask(__name__) app.config["DEBUG"] = debug if base_path == "/": @@ -46,6 +49,7 @@ def start_app(title, base_path, debug: bool, host, port, reloader=False): # pyl requests_pathname_prefix = base_path + "/" dash_app = dash.Dash(external_stylesheets=[dbc.themes.BOOTSTRAP], external_scripts=locale_url, title=title, server=app, requests_pathname_prefix=requests_pathname_prefix) + dash_app.enable_dev_tools(reloader) # keep this line import web.views # pylint: disable=unused-import,import-outside-toplevel return run_simple(host, port, application, use_reloader=reloader, use_debugger=debug) diff --git a/web/assets/clientside.js b/web/assets/clientside.js new file mode 100644 index 0000000..9c292d4 --- /dev/null +++ b/web/assets/clientside.js @@ -0,0 +1,48 @@ +function filter_dataset(data, range, old_figure, x,y) { + function is_in_range(st){ + ts_date = new Date(st).getTime()/1000 + return ts_date >= range[0] && ts_date <= range[1] + } + var data_filtered = data.filter(line => is_in_range(line["start_at"])); + var figures = []; + var i=0 + y.forEach(function (y_label){ + var x_label=x[i] + var figure = Object.assign({}, old_figure[i]); + i++; + // var unique_y_label = y[i].filter((v, i, a) => a.indexOf(v) === i); + //var data_nonnull = data_filtered + // unique_y_label.forEach(function(label) { + // data_nonnull = data_nonnull.filter(line => line[label]); + // }); + if ("mapbox" in figure["layout"]){ + figure["data"][0]["lat"] = [] + figure["data"][0]["lon"] = [] + figure["data"][0]["hovertext"] = [] + var trip = null; + for (trip of data_filtered) { + x_pos = trip["positions"][x_label] + figure["data"][0]["lat"].push(...x_pos, null); + 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] + } + else { + x_values = data_filtered.map(a => a[x_label]) + // for each y label + for (j = 0; j < y_label.length; j++) { + figure["data"][j]["y"] = data_filtered.map(a => a[y_label[j]]); + figure["data"][j]["x"] = x_values + } + } + console.log(figure); + figures.push(figure); + + }); + return figures; +} diff --git a/web/static/images/battery-charge-line.svg b/web/assets/images/battery-charge-line.svg similarity index 100% rename from web/static/images/battery-charge-line.svg rename to web/assets/images/battery-charge-line.svg diff --git a/web/static/images/consumption.svg b/web/assets/images/consumption.svg similarity index 100% rename from web/static/images/consumption.svg rename to web/assets/images/consumption.svg diff --git a/web/static/images/electricity bill.svg b/web/assets/images/electricity bill.svg similarity index 100% rename from web/static/images/electricity bill.svg rename to web/assets/images/electricity bill.svg diff --git a/web/static/images/pollution.svg b/web/assets/images/pollution.svg similarity index 100% rename from web/static/images/pollution.svg rename to web/assets/images/pollution.svg diff --git a/web/assets/style.json b/web/assets/style.json new file mode 100644 index 0000000..1e9b3ed --- /dev/null +++ b/web/assets/style.json @@ -0,0 +1,22 @@ +{ + "version": 8, + "sources": { + "osm": { + "type": "raster", + "tiles": [ + "https://tile.openstreetmap.org/{z}/{x}/{y}.png" + ], + "tileSize": 256, + "attribution": "Map tiles by OpenStreetMap tile servers, under the tile usage policy. Data by OpenStreetMap" + } + }, + "sprite": "", + "glyphs": "https://api.maptiler.com/fonts/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "osm", + "type": "raster", + "source": "osm" + } + ] +} diff --git a/web/figures.py b/web/figures.py index f23110a..ea2de9a 100644 --- a/web/figures.py +++ b/web/figures.py @@ -1,10 +1,10 @@ from copy import deepcopy +from statistics import mean from typing import List import dash_bootstrap_components as dbc import dash_table -import numpy as np from dash_core_components import Graph from dash_table.Format import Format, Scheme, Symbol from dateutil.relativedelta import relativedelta @@ -55,37 +55,34 @@ consumption_fig = ERROR_DIV consumption_df = ERROR_DIV trips_map = ERROR_DIV consumption_fig_by_speed = ERROR_DIV -consumption_graph_by_temp = ERROR_DIV +consumption_fig_by_temp = ERROR_DIV table_fig = ERROR_DIV pandas_options.display.float_format = '${:.2f}'.format info = "" battery_info = ERROR_DIV battery_table = None +consumption_df_dict = None -SUMMARY_CARDS = {"Average consumption": {"text": None, "src": "static/images/consumption.svg"}, - "Average emission": {"text": None, "src": "static/images/pollution.svg"}, - "Average charge speed": {"text": None, "src": "static/images/battery-charge-line.svg"}, - "Electricity consumption": {"text": None, "src": "static/images/electricity bill.svg"} +SUMMARY_CARDS = {"Average consumption": {"text": None, "src": "assets/images/consumption.svg"}, + "Average emission": {"text": None, "src": "assets/images/pollution.svg"}, + "Average charge speed": {"text": None, "src": "assets/images/battery-charge-line.svg"}, + "Electricity consumption": {"text": None, "src": "assets/images/electricity bill.svg"} } # pylint: disable=too-many-locals def get_figures(trips: Trips, charging: List[dict]): global consumption_fig, consumption_df, trips_map, consumption_fig_by_speed, table_fig, info, battery_info, \ - battery_table, consumption_graph_by_temp - lats = [] - lons = [] - names = [] - for trip in trips: - for points in trip.positions: - lats = np.append(lats, points.latitude) - lons = np.append(lons, points.longitude) - names = np.append(names, [str(trip.start_at)]) - lats = np.append(lats, None) - lons = np.append(lons, None) - names = np.append(names, None) - trips_map = px.line_mapbox(lat=lats, lon=lons, hover_name=names, - mapbox_style="stamen-terrain", zoom=12) + battery_table, consumption_fig_by_temp, consumption_df_dict + lats = [42, 41] + lons = [1, 2] + names = ["undefined", "undefined"] + trips_map = px.line_mapbox(lat=lats, lon=lons, hover_name=names, zoom=12, mapbox_style="/assets/style2.json") + trips_map.add_trace(go.Scattermapbox( + mode="markers", + marker={"symbol": "marker", "size": 20}, + lon=[lons[0]], lat=[lats[0]], + showlegend=False, name="Last Position")) # table nb_format = Format(precision=2, scheme=Scheme.fixed, symbol=Symbol.yes) # pylint: disable=no-member table_fig = dash_table.DataTable( @@ -120,20 +117,19 @@ def get_figures(trips: Trips, charging: List[dict]): page_size=50 ) # consumption_fig - consumption_df = DataFrame.from_records(trips.get_long_trips()) - consumption_fig = px.histogram(consumption_df, x="date", y="consumption_km", title='Consumption of the car', + consumption_df_dict = trips.get_long_trips() + consumption_fig = px.histogram(x=[0], y=[1], title='Consumption of the car', histfunc="avg") consumption_fig.update_layout(yaxis_title="Consumption kWh/100Km") - consumption_fig_by_speed = px.histogram(consumption_df, x="speed", y="consumption_km", histfunc="avg", + consumption_fig_by_speed = px.histogram(x=[0], y=[1], histfunc="avg", title="Consumption by speed") consumption_fig_by_speed.update_traces(xbins_size=15) consumption_fig_by_speed.update_layout(bargap=0.05) - consumption_fig_by_speed.add_trace( - go.Scatter(mode="markers", x=consumption_df["speed"], y=consumption_df["consumption_km"], - name="Trips")) + consumption_fig_by_speed.add_trace(go.Scatter(mode="markers", x=[0], + y=[0], name="Trips")) consumption_fig_by_speed.update_layout(xaxis_title="average Speed km/h", yaxis_title="Consumption kWh/100Km") - kw_per_km = float(consumption_df["consumption_km"].mean()) + kw_per_km = mean([t.consumption_km for t in trips]) info = "Average consumption: {:.1f} kWh/100km".format(kw_per_km) # charging @@ -154,7 +150,7 @@ def get_figures(trips: Trips, charging: List[dict]): SUMMARY_CARDS["Average emission"]["text"] = [html.P(f"{co2_per_km:.1f} g/km"), html.P(f"{co2_per_kw:.1f} g/kWh")] SUMMARY_CARDS["Electricity consumption"]["text"] = [f"{total_elec:.0f} kWh", html.Br(), \ f"{total_elec * price_kw:.0f} {ElecPrice.currency}"] - SUMMARY_CARDS["Average consumption"]["text"] = f"{consumption_df['consumption_km'].mean():.1f} kWh/100km" + SUMMARY_CARDS["Average consumption"]["text"] = f"{kw_per_km:.1f} kWh/100km" battery_table = dash_table.DataTable( id='battery-table', sort_action='native', @@ -183,21 +179,22 @@ def get_figures(trips: Trips, charging: List[dict]): } ], ) - consumption_by_temp_df = consumption_df[consumption_df["consumption_by_temp"].notnull()] - if len(consumption_by_temp_df) > 0: - consumption_fig_by_temp = px.histogram(consumption_by_temp_df, x="consumption_by_temp", y="consumption_km", + consumption_fig_by_temp = None + temp_value = False + for trip in trips: + if trip.get_temperature() is not None: + temp_value = True + break + if temp_value: + consumption_fig_by_temp = px.histogram(x=[0], y=[0], histfunc="avg", title="Consumption by temperature") consumption_fig_by_temp.update_traces(xbins_size=2) consumption_fig_by_temp.update_layout(bargap=0.05) consumption_fig_by_temp.add_trace( - go.Scatter(mode="markers", x=consumption_by_temp_df["consumption_by_temp"], - y=consumption_by_temp_df["consumption_km"], name="Trips")) + go.Scatter(mode="markers", x=[0], + y=[0], name="Trips")) consumption_fig_by_temp.update_layout(xaxis_title="average temperature in °C", yaxis_title="Consumption kWh/100Km") - consumption_graph_by_temp = html.Div(Graph(figure=consumption_fig_by_temp), id="consumption_graph_by_temp") - - else: - consumption_graph_by_temp = html.Div(Graph(style={'display': 'none'}), id="consumption_graph_by_temp") return True diff --git a/web/views.py b/web/views.py index 822f678..ad77ef4 100644 --- a/web/views.py +++ b/web/views.py @@ -55,14 +55,28 @@ def diff_dashtable(data, data_previous, row_id_name="row_id"): return changes +figures_list = ["consumption_fig", "consumption_fig_by_speed", "consumption_graph_by_temp", "trips_map"] +y_list = [["consumption_km"], ["consumption_km", "consumption_km"], ["consumption_km", "consumption_km"], + ["long", "start_at"]] +x_list = ["start_at", "speed", "consumption_by_temp", "lat"] +outputs = [Output(id, "figure") for id in figures_list] + + +dash_app.clientside_callback( + """ + function(data,range, figures) { + return filter_dataset(data,range,figures,%s, %s); + } + """ % (x_list, y_list), + *outputs, + Input('clientside-data-store', 'data'), + Input('date-slider', 'value'), + Input('clientside-figure-store', 'data')) + def create_callback(): # noqa: MC0001 global CALLBACK_CREATED if not CALLBACK_CREATED: - @dash_app.callback(Output('trips_map', 'figure'), - Output('consumption_fig', 'figure'), - Output('consumption_fig_by_speed', 'figure'), - Output('consumption_graph_by_temp', 'children'), - Output('summary-cards', 'children'), + @dash_app.callback(Output('summary-cards', 'children'), Output('tab_trips_fig', 'children'), Output('tab_charge', 'children'), Output('date-slider', 'max'), @@ -78,8 +92,7 @@ def create_callback(): # noqa: MC0001 filtered_trips.append(trip) filtered_chargings = Charging.get_chargings(mini, maxi) figures.get_figures(filtered_trips, filtered_chargings) - return figures.trips_map, figures.consumption_fig, figures.consumption_fig_by_speed, \ - figures.consumption_graph_by_temp, create_card(figures.SUMMARY_CARDS), \ + return create_card(figures.SUMMARY_CARDS), \ figures.table_fig, figures.battery_table, max_millis, step, marks @dash_app.callback(Output(EMPTY_DIV, "children"), @@ -159,6 +172,21 @@ def get_vehicle_info(vin): return response +STYLE_CACHE = None + + +@app.route("/assets/style2.json") +def get_style(): + global STYLE_CACHE + if not STYLE_CACHE: + with open(app.root_path + "/assets/style.json", "r") as f: + res = json.loads(f.read()) + STYLE_CACHE = res + url_root = request.url_root + STYLE_CACHE["sprite"] = url_root + "assets/sprites/osm-liberty@2x" + return jsonify(STYLE_CACHE) + + @app.route('/charge_now//') def charge_now(vin, charge): return jsonify(myp.charge_now(vin, charge != 0)) @@ -312,9 +340,9 @@ def create_card(card: dict): dbc.Card([ html.H4(tile, className="card-title text-center"), dbc.Row([ - dbc.Col(dbc.CardBody(text, style={"white-space": "nowrap", "font-size": "160%"}), + dbc.Col(dbc.CardBody(text, style={"whiteS pace": "nowrap", "fontSize": "160%"}), className="text-center"), - dbc.Col(dbc.CardImg(src=value.get("src", Component.UNDEFINED), style={"max-height": "7rem"})) + dbc.Col(dbc.CardImg(src=value.get("src", Component.UNDEFINED), style={"maxHeight": "7rem"})) ], className="align-items-center flex-nowrap") ], className="h-100 p-2"), @@ -331,10 +359,12 @@ def serve_layout(): figures.get_figures(trips, chargings) summary_tab = [dbc.Container(dbc.Row(id="summary-cards", children=create_card(figures.SUMMARY_CARDS)), fluid=True), - dcc.Graph(figure=figures.consumption_fig, id="consumption_fig"), - dcc.Graph(figure=figures.consumption_fig_by_speed, id="consumption_fig_by_speed"), - figures.consumption_graph_by_temp] - maps = dcc.Graph(figure=figures.trips_map, id="trips_map", style={"height": '90vh'}) + dcc.Graph(id="consumption_fig"), + dcc.Graph(id="consumption_fig_by_speed"), + dcc.Graph(id="consumption_graph_by_temp", + style={'display': 'none'} if figures.consumption_fig_by_temp is None else {}, + )] + maps = dcc.Graph(id="trips_map", style={"height": '90vh'}) create_callback() range_slider = dcc.RangeSlider( id='date-slider', @@ -350,6 +380,9 @@ def serve_layout(): logger.warning("Failed to generate figure, there is probably not enough data yet", exc_info_debug=True) range_slider = html.Div() data_div = html.Div([ + dcc.Store(id='clientside-figure-store', data=[figures.consumption_fig, figures.consumption_fig_by_speed, + figures.consumption_fig_by_temp, figures.trips_map]), + dcc.Store(id='clientside-data-store', data=figures.consumption_df_dict), range_slider, html.Div([ dbc.Tabs([ From c2d0cdadd5af4d7cf3fe86871da082ff907e0ee3 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Wed, 5 May 2021 21:08:45 +0200 Subject: [PATCH 02/11] fix path --- web/figures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/figures.py b/web/figures.py index ea2de9a..7257291 100644 --- a/web/figures.py +++ b/web/figures.py @@ -77,7 +77,7 @@ def get_figures(trips: Trips, charging: List[dict]): lats = [42, 41] lons = [1, 2] names = ["undefined", "undefined"] - trips_map = px.line_mapbox(lat=lats, lon=lons, hover_name=names, zoom=12, mapbox_style="/assets/style2.json") + trips_map = px.line_mapbox(lat=lats, lon=lons, hover_name=names, zoom=12, mapbox_style="assets/style2.json") trips_map.add_trace(go.Scattermapbox( mode="markers", marker={"symbol": "marker", "size": 20}, From 6334dacae926c0e539a9d45ebe5eb7c3e1327d16 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Wed, 5 May 2021 23:18:00 +0200 Subject: [PATCH 03/11] disable console.log and set xaxis_title --- web/assets/clientside.js | 3 +-- web/figures.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/web/assets/clientside.js b/web/assets/clientside.js index 9c292d4..8aed1f4 100644 --- a/web/assets/clientside.js +++ b/web/assets/clientside.js @@ -40,9 +40,8 @@ function filter_dataset(data, range, old_figure, x,y) { figure["data"][j]["x"] = x_values } } - console.log(figure); + // console.log(figure); figures.push(figure); - }); return figures; } diff --git a/web/figures.py b/web/figures.py index 7257291..de3e0a8 100644 --- a/web/figures.py +++ b/web/figures.py @@ -120,7 +120,7 @@ def get_figures(trips: Trips, charging: List[dict]): consumption_df_dict = trips.get_long_trips() consumption_fig = px.histogram(x=[0], y=[1], title='Consumption of the car', histfunc="avg") - consumption_fig.update_layout(yaxis_title="Consumption kWh/100Km") + consumption_fig.update_layout(yaxis_title="Consumption kWh/100Km", xaxis_title="date") consumption_fig_by_speed = px.histogram(x=[0], y=[1], histfunc="avg", title="Consumption by speed") From 06535ac14eb1eae66b85e3a0e5a2ddf0c195f2d2 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Fri, 7 May 2021 13:20:51 +0200 Subject: [PATCH 04/11] remove numpy --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index dc113c9..e34af87 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,6 @@ Werkzeug>=1.0.0 pandas oauth2_client requests -numpy pytz typing argparse From b7b8fe71c83863fffa8a6b857a3b9753f061abe9 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Sat, 8 May 2021 10:44:02 +0200 Subject: [PATCH 05/11] fix load order --- web/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/views.py b/web/views.py index ad77ef4..4083d70 100644 --- a/web/views.py +++ b/web/views.py @@ -436,8 +436,8 @@ def serve_layout(): try: - Database.set_db_callback(update_trips) Charging.set_default_price() + Database.set_db_callback(update_trips) update_trips() except (IndexError, TypeError): logger.debug("Failed to get trips, there is probably not enough data yet:", exc_info=True) From 335c8f79bf84ea01a222de8133ad8cc3ba9db34f Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Mon, 10 May 2021 13:30:45 +0200 Subject: [PATCH 06/11] add clean req --- web/db.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/web/db.py b/web/db.py index b65eabe..b80fbb9 100644 --- a/web/db.py +++ b/web/db.py @@ -126,7 +126,10 @@ class Database: def clean_battery(conn): # delete charging longer than 17h conn.execute("DElETE FROM battery WHERE JULIANDAY(stop_at)-JULIANDAY(start_at)>0.7;") - conn.execute("DELETE FROM battery WHERE start_level==end_level;") + # delete charging not finished longer than 17h + conn.execute("DELETE from battery where stop_at is NULL and JULIANDAY()-JULIANDAY(start_at)>0.7;") + #delete little charge + conn.execute("DELETE FROM battery WHERE start_level >= end_level-1;") @staticmethod def clean_position(conn): From c111d87640e48a461e83990bd8fa80d147e1d866 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Mon, 10 May 2021 13:34:11 +0200 Subject: [PATCH 07/11] filter every element on clientside --- libs/car.py | 6 + libs/charging.py | 12 +- trip.py | 45 +- web/assets/clientside.js | 200 ++- web/assets/sprites/osm-liberty.json | 1745 ++++++++++++++++++++++++ web/assets/sprites/osm-liberty.png | Bin 0 -> 103877 bytes web/assets/sprites/osm-liberty@2x.json | 1745 ++++++++++++++++++++++++ web/assets/sprites/osm-liberty@2x.png | Bin 0 -> 202875 bytes web/figure_filter.py | 121 ++ web/figures.py | 114 +- web/views.py | 90 +- 11 files changed, 3916 insertions(+), 162 deletions(-) create mode 100644 web/assets/sprites/osm-liberty.json create mode 100644 web/assets/sprites/osm-liberty.png create mode 100644 web/assets/sprites/osm-liberty@2x.json create mode 100644 web/assets/sprites/osm-liberty@2x.png create mode 100644 web/figure_filter.py diff --git a/libs/car.py b/libs/car.py index 27f1d0b..d3fc416 100644 --- a/libs/car.py +++ b/libs/car.py @@ -38,6 +38,12 @@ class Car: def is_hybrid(self) -> bool: return self.fuel_capacity > 0 and self.battery_power > 0 + def has_battery(self): + return self.battery_power > 0 + + def has_fuel(self): + return self.fuel_capacity > 0 + def get_status(self): if self.status is not None: return self.status diff --git a/libs/charging.py b/libs/charging.py index 50400f0..6b4190b 100644 --- a/libs/charging.py +++ b/libs/charging.py @@ -13,17 +13,9 @@ class Charging: elec_price: ElecPrice = ElecPrice(None) @staticmethod - def get_chargings(mini=None, maxi=None) -> List[dict]: + def get_chargings() -> List[dict]: conn = Database.get_db() - if mini is not None: - if maxi is not None: - res = conn.execute("select * from battery WHERE start_at>=? and start_at<=?", (mini, maxi)).fetchall() - else: - res = conn.execute("select * from battery WHERE start_at>=?", (mini,)).fetchall() - elif maxi is not None: - res = conn.execute("select * from battery WHERE start_at<=?", (maxi,)).fetchall() - else: - res = conn.execute("select * from battery").fetchall() + res = conn.execute("select * from battery ORDER BY start_at").fetchall() conn.close() return list(map(dict, res)) diff --git a/trip.py b/trip.py index 8c6208e..a3bfe75 100644 --- a/trip.py +++ b/trip.py @@ -2,7 +2,6 @@ import logging from statistics import mean from typing import List, Dict -from dateutil import tz from geojson import Feature, FeatureCollection, MultiLineString from libs.car import Cars, Car @@ -38,6 +37,7 @@ class Trip: self.car: Car = None self.altitude_diff = None self.temperatures = [] + self.id = None def add_points(self, latitude, longitude): self.positions.append(Points(latitude, longitude)) @@ -78,19 +78,22 @@ class Trip: "average consumption": self.consumption_km, "average consumption fuel": self.consumption_fuel_km}) - def get_info(self, row_id=None): - res = {"start_at": self.start_at.astimezone(tz.tzlocal()).replace(tzinfo=None).strftime("%x %X"), - # convert to naive tz, - "duration": self.duration * 60, "speed_average": self.speed_average, - "consumption_km": self.consumption_km, "consumption_fuel_km": self.consumption_fuel_km, - "distance": self.distance, "mileage": self.mileage, "altitude_diff": self.altitude_diff} - if row_id is not None: - res["id"] = row_id - return res - def get_consumption(self): - return {"speed": self.speed_average, "consumption_km": self.consumption_km, "start_at": self.start_at, - "consumption_by_temp": self.get_temperature(), "positions": self.get_positions()} + def get_info(self): + + res = {"consumption_km": self.consumption_km, "start_at": self.start_at, + "consumption_by_temp": self.get_temperature(), "positions": self.get_positions(), + "duration": self.duration * 60, "speed_average": self.speed_average, "distance": self.distance, + "mileage": self.mileage, "altitude_diff": self.altitude_diff, "id": self.id, + "consumption": self.consumption + } + if self.car.has_battery(): + res["consumption_km"] = self.consumption_km + + if self.car.has_fuel(): + res["consumption_fuel_km"] = self.consumption_fuel_km + + return res def set_altitude_diff(self, start, end): try: @@ -110,14 +113,14 @@ class Trip: class Trips(list): def __init__(self, *args): list.__init__(self, *args) + self.trip_num = 1 def to_geo_json(self): feature_collection = FeatureCollection(self) return feature_collection - def get_long_trips(self): - res = [trip.get_consumption() for trip in self if trip.consumption > 1.8] - return res + def get_trips_as_dict(self): + return [trip.get_info() for trip in self] def get_distance(self): return self[-1].mileage - self[0].mileage @@ -125,6 +128,8 @@ class Trips(list): def check_and_append(self, trip: Trip): if trip.consumption_km <= trip.car.max_elec_consumption and \ trip.consumption_fuel_km <= trip.car.max_fuel_consumption: + trip.id = self.trip_num + self.trip_num += 1 self.append(trip) return True logger.debugv("trip discarded") @@ -218,11 +223,3 @@ class Trips(list): trips_by_vin[vin] = trips conn.close() return trips_by_vin - - def get_info(self): - res = [] - row_id = 1 - for trip in self: - res.append(trip.get_info(row_id)) - row_id += 1 - return res diff --git a/web/assets/clientside.js b/web/assets/clientside.js index 8aed1f4..d3710bf 100644 --- a/web/assets/clientside.js +++ b/web/assets/clientside.js @@ -1,17 +1,91 @@ -function filter_dataset(data, range, old_figure, x,y) { - function is_in_range(st){ - ts_date = new Date(st).getTime()/1000 - return ts_date >= range[0] && ts_date <= range[1] - } - var data_filtered = data.filter(line => is_in_range(line["start_at"])); +class Avg{ + constructor(){ + this.total = 0; + this.count = 0; + } + add_value(value){ + if (typeof value === 'number') { + this.count++; + this.total = ((this.total*(this.count-1))/this.count) + (value/this.count); + } + } + + average(){ + return this.total; + } + static get_average_key(array, key){ + var avg = new Avg() + array.forEach(function(obj){ avg.add_value(obj[key])}) + return avg.average(); + } +} +var logger = function() +{ + var oldConsoleLog = null; + var pub = {}; + + pub.enableLogger = function enableLogger() + { + if(oldConsoleLog == null) + return; + + window['console']['log'] = oldConsoleLog; + }; + + pub.disableLogger = function disableLogger() + { + oldConsoleLog = console.log; + window['console']['log'] = function() {}; + }; + + return pub; +}(); +function add_date_str(data, date_key){ + var date_option = [undefined, {"hour":"numeric", "minute":"numeric"}] + for([dataset_name, dataset] of Object.entries(data)){ + dataset.forEach(function (row) { + date_key[dataset_name].forEach(function (key) { + var date= new Date(row[key]); + row[key] = date + row[key + "_str"] = date.toLocaleDateString(...date_option); + }) + }) + } +} + +function filter_dataset(data,range){ + function date_from_iso_str(st){ + return new Date(st).getTime()/1000 + } + function is_in_range(st){ + ts_date = date_from_iso_str(st); + return ts_date >= range[0] && ts_date <= range[1] + } + var res = {"trips": data["trips"].filter(line => is_in_range(line["start_at"])), + "chargings": data["chargings"].filter(line => is_in_range(line["start_at"]))}; + console.log("filtered_dataset", res); + return res; +} + + +function filter_short_trip(data){ + var long_trips = {"trips": data["trips"].filter(line => line["distance"]>10), + "chargings": data["chargings"]}; + console.log("long trips:" , long_trips) + return long_trips; +} + +function update_figures(data, old_figure, x,y) { + var trips = data["trips"] var figures = []; var i=0 y.forEach(function (y_label){ var x_label=x[i] var figure = Object.assign({}, old_figure[i]); i++; + // console.log(old_figure[i]); // var unique_y_label = y[i].filter((v, i, a) => a.indexOf(v) === i); - //var data_nonnull = data_filtered + //var data_nonnull = trips // unique_y_label.forEach(function(label) { // data_nonnull = data_nonnull.filter(line => line[label]); // }); @@ -20,7 +94,7 @@ function filter_dataset(data, range, old_figure, x,y) { figure["data"][0]["lon"] = [] figure["data"][0]["hovertext"] = [] var trip = null; - for (trip of data_filtered) { + for (trip of trips) { x_pos = trip["positions"][x_label] figure["data"][0]["lat"].push(...x_pos, null); figure["data"][0]["lon"].push(...trip["positions"][y_label[0]]); @@ -33,15 +107,119 @@ function filter_dataset(data, range, old_figure, x,y) { figure.data[1].lon = [figure.layout.mapbox.center.lon] } else { - x_values = data_filtered.map(a => a[x_label]) + x_values = trips.map(a => a[x_label]) // for each y label for (j = 0; j < y_label.length; j++) { - figure["data"][j]["y"] = data_filtered.map(a => a[y_label[j]]); + figure["data"][j]["y"] = trips.map(a => a[y_label[j]]); figure["data"][j]["x"] = x_values } } - // console.log(figure); + console.log(x_label, figure); figures.push(figure); }); return figures; } + +function update_table(data, tables){ + console.log("tables", tables); + figures = []; + tables.forEach(function (table){ + figures.push(data[table.src]); + }) + return figures; +} + + +function update_cards_value(data){ + res = {} + 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"]); + avg_co2.add_value(charge["co2"]); + avg_price.add_value(charge["price"]); + if(diff > 0){ + 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); + for (const [key, value] of Object.entries(res)) { + document.getElementById(key).innerHTML=value.toPrecision(3); + } +} + +function sort_dataset(ctx, data, tables){ + var table_id = ctx.prop_id.split(".")[0]; + if(ctx.value.length > 0){ + var asc = ctx.value[0].direction==='asc'; + var column_id = ctx.value[0].column_id; + var table = tables.filter(table => table.table_id === table_id)[0]; + var sorted = null; + if (column_id.endsWith("_str")){ + column_id = column_id.slice(0, -4); + sorted = data[table.src].sort(function(a,b){ + return a[column_id] - b[column_id]; + }); + } + else if(typeof data[table.src][0][column_id] == 'number'){ + sorted = data[table.src].sort(function(a,b){ + return a[column_id] - b[column_id]; + }); + } + else { + sorted = data[table.src].sort((a, b) => a[column_id].localeCompare(b[column_id])); + } + if(asc===false){ + sorted = sorted.reverse(); + } + data[table.src]=sorted; + } +} + + + +function filter_and_sort(data,range, figures, p, log) { + if(log>10){ + logger.disableLogger(); + } + console.log("figures:", figures); + console.log("data:", data) + var ctx = dash_clientside.callback_context.triggered; + console.log("ctx", ctx); + var out_figures = []; + if(ctx.length > 0 && ctx[0].prop_id.endsWith("sort_by")){ + var data_filtered = filter_dataset(data, range); + sort_dataset(ctx[0], data_filtered, p.table_src); + out_figures.push(...update_table(data_filtered, p.table_src)); + out_figures.push(...figures.graph); + out_figures.push(...figures.maps); + } + else{ + add_date_str(data,p.date_columns); + var data_filtered = filter_dataset(data, range); + out_figures.push(...update_table(data_filtered, p.table_src)); + console.log(data_filtered["trips"].length); + long_trips = filter_short_trip(data_filtered); + console.log("trips", data_filtered["trips"].length); + console.log("long_trips", long_trips["trips"].length); + out_figures.push(...update_figures(long_trips, figures["graph"], p.graph_x_label, p.graph_y_label)); + out_figures.push(...update_figures(data_filtered, figures["maps"], p.map_x_label, p.map_y_label)); + update_cards_value(long_trips); + } + return out_figures; +} \ No newline at end of file diff --git a/web/assets/sprites/osm-liberty.json b/web/assets/sprites/osm-liberty.json new file mode 100644 index 0000000..4aae1dd --- /dev/null +++ b/web/assets/sprites/osm-liberty.json @@ -0,0 +1,1745 @@ +{ + "aerialway-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 314, + "y": 0 + }, + "aerialway-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 122, + "y": 229 + }, + "airfield-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 329, + "y": 0 + }, + "airfield-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 141, + "y": 229 + }, + "airport-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 344, + "y": 0 + }, + "airport-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 160, + "y": 229 + }, + "alcohol_shop-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 485, + "y": 145 + }, + "alcohol_shop-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 104, + "y": 94 + }, + "america_football-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 418, + "y": 166 + }, + "america_football-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 117, + "y": 64 + }, + "amusement_park-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 435, + "y": 166 + }, + "amusement_park-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 138, + "y": 64 + }, + "aquarium-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 452, + "y": 166 + }, + "aquarium-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 159, + "y": 64 + }, + "arrow": { + "height": 7, + "pixelRatio": 1, + "width": 20, + "x": 285, + "y": 250 + }, + "art_gallery-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 469, + "y": 166 + }, + "art_gallery-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 180, + "y": 64 + }, + "attraction-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 486, + "y": 166 + }, + "attraction-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 201, + "y": 64 + }, + "bakery-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 252, + "y": 187 + }, + "bakery-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 222, + "y": 64 + }, + "bank-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 269, + "y": 187 + }, + "bank-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 125, + "y": 94 + }, + "bar-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 286, + "y": 187 + }, + "bar-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 146, + "y": 94 + }, + "baseball-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 303, + "y": 187 + }, + "baseball-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 167, + "y": 94 + }, + "basketball-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 320, + "y": 187 + }, + "basketball-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 188, + "y": 94 + }, + "beer-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 337, + "y": 187 + }, + "beer-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 209, + "y": 94 + }, + "bicycle-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 354, + "y": 187 + }, + "bicycle-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 230, + "y": 94 + }, + "bicycle_rental-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 371, + "y": 187 + }, + "bicycle_rental-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 124, + "y": 0 + }, + "building-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 359, + "y": 0 + }, + "building-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 179, + "y": 229 + }, + "bus-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 374, + "y": 0 + }, + "bus-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 198, + "y": 229 + }, + "butcher-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 388, + "y": 187 + }, + "butcher-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 145, + "y": 0 + }, + "ca-transcanada_2": { + "height": 30, + "pixelRatio": 1, + "width": 30, + "x": 64, + "y": 0 + }, + "cafe-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 405, + "y": 187 + }, + "cafe-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 166, + "y": 0 + }, + "campsite-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 422, + "y": 187 + }, + "campsite-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 187, + "y": 0 + }, + "car-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 389, + "y": 0 + }, + "car-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 217, + "y": 229 + }, + "castle-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 439, + "y": 187 + }, + "castle-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 208, + "y": 0 + }, + "cemetery-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 456, + "y": 187 + }, + "cemetery-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 229, + "y": 0 + }, + "cinema-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 473, + "y": 187 + }, + "cinema-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 124 + }, + "circle-stroked-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 404, + "y": 0 + }, + "circle-stroked-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 236, + "y": 229 + }, + "circle-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 419, + "y": 0 + }, + "circle-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 252, + "y": 124 + }, + "clothing_store-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 490, + "y": 187 + }, + "clothing_store-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 124 + }, + "college-11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 250, + "y": 0 + }, + "college-15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 42, + "y": 229 + }, + "commercial-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 434, + "y": 0 + }, + "commercial-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 271, + "y": 124 + }, + "cricket-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 252, + "y": 208 + }, + "cricket-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 124 + }, + "cross-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 449, + "y": 0 + }, + "cross-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 290, + "y": 124 + }, + "dam-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 464, + "y": 0 + }, + "dam-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 309, + "y": 124 + }, + "danger-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 269, + "y": 208 + }, + "danger-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 124 + }, + "default_1": { + "height": 18, + "pixelRatio": 1, + "width": 18, + "x": 442, + "y": 145 + }, + "default_2": { + "height": 18, + "pixelRatio": 1, + "width": 25, + "x": 460, + "y": 145 + }, + "default_3": { + "height": 18, + "pixelRatio": 1, + "width": 32, + "x": 252, + "y": 166 + }, + "default_4": { + "height": 18, + "pixelRatio": 1, + "width": 39, + "x": 284, + "y": 166 + }, + "default_5": { + "height": 18, + "pixelRatio": 1, + "width": 45, + "x": 323, + "y": 166 + }, + "default_6": { + "height": 18, + "pixelRatio": 1, + "width": 50, + "x": 368, + "y": 166 + }, + "dentist-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 286, + "y": 208 + }, + "dentist-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 124 + }, + "doctor-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 303, + "y": 208 + }, + "doctor-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 124 + }, + "dog_park-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 320, + "y": 208 + }, + "dog_park-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 124 + }, + "dot-10": { + "height": 10, + "pixelRatio": 1, + "width": 10, + "x": 266, + "y": 250 + }, + "dot-11": { + "height": 11, + "pixelRatio": 1, + "width": 11, + "x": 255, + "y": 250 + }, + "dot_9": { + "height": 9, + "pixelRatio": 1, + "width": 9, + "x": 276, + "y": 250 + }, + "drinking-water-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 337, + "y": 208 + }, + "drinking_water-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 124 + }, + "embassy-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 354, + "y": 208 + }, + "embassy-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 124 + }, + "entrance-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 479, + "y": 0 + }, + "entrance-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 328, + "y": 124 + }, + "fast_food-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 371, + "y": 208 + }, + "fast_food-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 124 + }, + "ferry-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 494, + "y": 0 + }, + "ferry-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 347, + "y": 124 + }, + "fire-station-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 388, + "y": 208 + }, + "fire-station-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 124 + }, + "fuel-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 0, + "y": 250 + }, + "fuel-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 366, + "y": 124 + }, + "garden-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 405, + "y": 208 + }, + "garden-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 124 + }, + "gb-motorway_3": { + "height": 30, + "pixelRatio": 1, + "width": 50, + "x": 0, + "y": 64 + }, + "gift-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 422, + "y": 208 + }, + "gift-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 145 + }, + "golf-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 439, + "y": 208 + }, + "golf-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 145 + }, + "grocery-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 456, + "y": 208 + }, + "grocery-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 145 + }, + "hairdresser-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 473, + "y": 208 + }, + "hairdresser-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 145 + }, + "harbor-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 15, + "y": 250 + }, + "harbor-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 385, + "y": 124 + }, + "heart-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 490, + "y": 208 + }, + "heart-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 145 + }, + "heliport-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 30, + "y": 250 + }, + "heliport-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 404, + "y": 124 + }, + "hospital-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 255, + "y": 229 + }, + "hospital-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 145 + }, + "ice_cream-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 272, + "y": 229 + }, + "ice_cream-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 145 + }, + "industry-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 45, + "y": 250 + }, + "industry-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 423, + "y": 124 + }, + "information-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 289, + "y": 229 + }, + "information-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 145 + }, + "laundry-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 306, + "y": 229 + }, + "laundry-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 145 + }, + "library-11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 266, + "y": 0 + }, + "library-15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 62, + "y": 229 + }, + "lighthouse-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 323, + "y": 229 + }, + "lighthouse-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 145 + }, + "lodging-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 340, + "y": 229 + }, + "lodging-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 145 + }, + "marker-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 60, + "y": 250 + }, + "marker-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 442, + "y": 124 + }, + "monument-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 357, + "y": 229 + }, + "monument-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 145 + }, + "mountain-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 374, + "y": 229 + }, + "mountain-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 166 + }, + "museum-11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 282, + "y": 0 + }, + "museum-15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 82, + "y": 229 + }, + "music-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 391, + "y": 229 + }, + "music-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 166 + }, + "park-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 408, + "y": 229 + }, + "park-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 166 + }, + "parking-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 75, + "y": 250 + }, + "parking-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 461, + "y": 124 + }, + "parking_garage-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 90, + "y": 250 + }, + "parking_garage-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 480, + "y": 124 + }, + "pedestrian_polygon": { + "height": 64, + "pixelRatio": 1, + "width": 64, + "x": 0, + "y": 0 + }, + "pharmacy-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 425, + "y": 229 + }, + "pharmacy-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 166 + }, + "picnic_site-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 442, + "y": 229 + }, + "picnic_site-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 166 + }, + "pitch-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 459, + "y": 229 + }, + "pitch-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 166 + }, + "place_of_worship-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 476, + "y": 229 + }, + "place_of_worship-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 166 + }, + "playground-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 493, + "y": 229 + }, + "playground-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 166 + }, + "police-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 243, + "y": 64 + }, + "police-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 166 + }, + "post-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 260, + "y": 64 + }, + "post-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 166 + }, + "prison-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 277, + "y": 64 + }, + "prison-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 166 + }, + "railway-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 105, + "y": 250 + }, + "railway-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 252, + "y": 145 + }, + "railway_light-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 120, + "y": 250 + }, + "railway_light-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 271, + "y": 145 + }, + "railway_metro-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 135, + "y": 250 + }, + "railway_metro-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 290, + "y": 145 + }, + "ranger_station-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 294, + "y": 64 + }, + "ranger_station-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 166 + }, + "religious_christian-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 311, + "y": 64 + }, + "religious_christian-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 187 + }, + "religious_jewish-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 328, + "y": 64 + }, + "religious_jewish-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 187 + }, + "religious_muslim-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 345, + "y": 64 + }, + "religious_muslim-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 187 + }, + "restaurant-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 362, + "y": 64 + }, + "restaurant-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 187 + }, + "roadblock-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 379, + "y": 64 + }, + "roadblock-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 187 + }, + "rocket-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 396, + "y": 64 + }, + "rocket-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 187 + }, + "school-11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 298, + "y": 0 + }, + "school-15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 102, + "y": 229 + }, + "shelter-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 413, + "y": 64 + }, + "shelter-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 187 + }, + "shop-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 430, + "y": 64 + }, + "shop-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 187 + }, + "skiing-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 447, + "y": 64 + }, + "skiing-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 187 + }, + "soccer-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 464, + "y": 64 + }, + "soccer-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 187 + }, + "square-stroke-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 150, + "y": 250 + }, + "square-stroke-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 309, + "y": 145 + }, + "square-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 165, + "y": 250 + }, + "square-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 328, + "y": 145 + }, + "stadium-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 481, + "y": 64 + }, + "stadium-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 187 + }, + "star-stroke-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 180, + "y": 250 + }, + "star-stroke-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 347, + "y": 145 + }, + "star-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 195, + "y": 250 + }, + "star-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 366, + "y": 145 + }, + "suitcase-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 251, + "y": 94 + }, + "suitcase-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 187 + }, + "sushi-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 268, + "y": 94 + }, + "sushi-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 208 + }, + "swimming-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 285, + "y": 94 + }, + "swimming-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 208 + }, + "telephone-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 302, + "y": 94 + }, + "telephone-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 208 + }, + "tennis-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 319, + "y": 94 + }, + "tennis-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 208 + }, + "theatre-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 336, + "y": 94 + }, + "theatre-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 208 + }, + "toilet-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 353, + "y": 94 + }, + "toilet-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 208 + }, + "town_hall-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 370, + "y": 94 + }, + "town_hall-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 208 + }, + "triangle-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 210, + "y": 250 + }, + "triangle-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 385, + "y": 145 + }, + "triangle_stroked-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 225, + "y": 250 + }, + "triangle_stroked-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 404, + "y": 145 + }, + "us-highway_2": { + "height": 30, + "pixelRatio": 1, + "width": 30, + "x": 50, + "y": 64 + }, + "us-highway_3": { + "height": 30, + "pixelRatio": 1, + "width": 37, + "x": 80, + "y": 64 + }, + "us-interstate_2": { + "height": 30, + "pixelRatio": 1, + "width": 30, + "x": 94, + "y": 0 + }, + "us-interstate_3": { + "height": 30, + "pixelRatio": 1, + "width": 37, + "x": 0, + "y": 94 + }, + "us-state_2": { + "height": 30, + "pixelRatio": 1, + "width": 30, + "x": 37, + "y": 94 + }, + "us-state_3": { + "height": 30, + "pixelRatio": 1, + "width": 37, + "x": 67, + "y": 94 + }, + "veterinary-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 387, + "y": 94 + }, + "veterinary-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 208 + }, + "volcano-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 404, + "y": 94 + }, + "volcano-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 208 + }, + "warehouse-11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 240, + "y": 250 + }, + "warehouse-15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 423, + "y": 145 + }, + "waste_basket-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 421, + "y": 94 + }, + "waste_basket-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 208 + }, + "water-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 438, + "y": 94 + }, + "water-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 208 + }, + "wetland-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 455, + "y": 94 + }, + "wetland-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 208 + }, + "wheelchair-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 472, + "y": 94 + }, + "wheelchair-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 229 + }, + "zoo-11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 489, + "y": 94 + }, + "zoo-15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 229 + } +} \ No newline at end of file diff --git a/web/assets/sprites/osm-liberty.png b/web/assets/sprites/osm-liberty.png new file mode 100644 index 0000000000000000000000000000000000000000..61f15ac77a26e71b36e9c74422e07e4a47c05990 GIT binary patch literal 103877 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�z+wu}EpDkv#kW-%7YzL%X_aD5r3?bkfvxc6Bp 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 {KAyN{hMdqT-oNW=+R=`y8YMX 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 Rl!kztjHIGO*;}Je{{vs-RVV-e literal 0 HcmV?d00001 diff --git a/web/assets/sprites/osm-liberty@2x.json b/web/assets/sprites/osm-liberty@2x.json new file mode 100644 index 0000000..649cea8 --- /dev/null +++ b/web/assets/sprites/osm-liberty@2x.json @@ -0,0 +1,1745 @@ +{ + "aerialway-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 628, + "y": 0 + }, + "aerialway-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 244, + "y": 458 + }, + "airfield-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 658, + "y": 0 + }, + "airfield-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 282, + "y": 458 + }, + "airport-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 688, + "y": 0 + }, + "airport-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 320, + "y": 458 + }, + "alcohol_shop-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 970, + "y": 290 + }, + "alcohol_shop-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 210, + "y": 188 + }, + "america_football-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 836, + "y": 332 + }, + "america_football-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 235, + "y": 128 + }, + "amusement_park-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 870, + "y": 332 + }, + "amusement_park-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 277, + "y": 128 + }, + "aquarium-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 904, + "y": 332 + }, + "aquarium-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 319, + "y": 128 + }, + "arrow": { + "height": 14, + "pixelRatio": 2, + "width": 40, + "x": 570, + "y": 500 + }, + "art_gallery-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 938, + "y": 332 + }, + "art_gallery-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 361, + "y": 128 + }, + "attraction-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 972, + "y": 332 + }, + "attraction-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 403, + "y": 128 + }, + "bakery-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 504, + "y": 374 + }, + "bakery-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 445, + "y": 128 + }, + "bank-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 538, + "y": 374 + }, + "bank-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 252, + "y": 188 + }, + "bar-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 572, + "y": 374 + }, + "bar-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 294, + "y": 188 + }, + "baseball-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 606, + "y": 374 + }, + "baseball-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 336, + "y": 188 + }, + "basketball-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 640, + "y": 374 + }, + "basketball-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 378, + "y": 188 + }, + "beer-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 674, + "y": 374 + }, + "beer-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 420, + "y": 188 + }, + "bicycle-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 708, + "y": 374 + }, + "bicycle-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 462, + "y": 188 + }, + "bicycle_rental-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 742, + "y": 374 + }, + "bicycle_rental-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 248, + "y": 0 + }, + "building-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 718, + "y": 0 + }, + "building-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 358, + "y": 458 + }, + "bus-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 748, + "y": 0 + }, + "bus-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 396, + "y": 458 + }, + "butcher-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 776, + "y": 374 + }, + "butcher-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 290, + "y": 0 + }, + "ca-transcanada_2": { + "height": 60, + "pixelRatio": 2, + "width": 60, + "x": 128, + "y": 0 + }, + "cafe-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 810, + "y": 374 + }, + "cafe-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 332, + "y": 0 + }, + "campsite-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 844, + "y": 374 + }, + "campsite-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 374, + "y": 0 + }, + "car-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 778, + "y": 0 + }, + "car-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 434, + "y": 458 + }, + "castle-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 878, + "y": 374 + }, + "castle-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 416, + "y": 0 + }, + "cemetery-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 912, + "y": 374 + }, + "cemetery-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 458, + "y": 0 + }, + "cinema-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 946, + "y": 374 + }, + "cinema-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 0, + "y": 248 + }, + "circle-stroked-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 808, + "y": 0 + }, + "circle-stroked-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 472, + "y": 458 + }, + "circle-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 838, + "y": 0 + }, + "circle-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 504, + "y": 248 + }, + "clothing_store-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 980, + "y": 374 + }, + "clothing_store-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 42, + "y": 248 + }, + "college-11": { + "height": 32, + "pixelRatio": 2, + "width": 32, + "x": 500, + "y": 0 + }, + "college-15": { + "height": 40, + "pixelRatio": 2, + "width": 40, + "x": 84, + "y": 458 + }, + "commercial-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 868, + "y": 0 + }, + "commercial-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 542, + "y": 248 + }, + "cricket-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 504, + "y": 416 + }, + "cricket-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 84, + "y": 248 + }, + "cross-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 898, + "y": 0 + }, + "cross-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 580, + "y": 248 + }, + "dam-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 928, + "y": 0 + }, + "dam-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 618, + "y": 248 + }, + "danger-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 538, + "y": 416 + }, + "danger-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 126, + "y": 248 + }, + "default_1": { + "height": 36, + "pixelRatio": 2, + "width": 36, + "x": 884, + "y": 290 + }, + "default_2": { + "height": 36, + "pixelRatio": 2, + "width": 50, + "x": 920, + "y": 290 + }, + "default_3": { + "height": 36, + "pixelRatio": 2, + "width": 64, + "x": 504, + "y": 332 + }, + "default_4": { + "height": 36, + "pixelRatio": 2, + "width": 78, + "x": 568, + "y": 332 + }, + "default_5": { + "height": 36, + "pixelRatio": 2, + "width": 90, + "x": 646, + "y": 332 + }, + "default_6": { + "height": 36, + "pixelRatio": 2, + "width": 100, + "x": 736, + "y": 332 + }, + "dentist-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 572, + "y": 416 + }, + "dentist-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 168, + "y": 248 + }, + "doctor-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 606, + "y": 416 + }, + "doctor-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 210, + "y": 248 + }, + "dog_park-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 640, + "y": 416 + }, + "dog_park-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 252, + "y": 248 + }, + "dot-10": { + "height": 20, + "pixelRatio": 2, + "width": 20, + "x": 532, + "y": 500 + }, + "dot-11": { + "height": 22, + "pixelRatio": 2, + "width": 22, + "x": 510, + "y": 500 + }, + "dot_9": { + "height": 18, + "pixelRatio": 2, + "width": 18, + "x": 552, + "y": 500 + }, + "drinking-water-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 674, + "y": 416 + }, + "drinking_water-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 294, + "y": 248 + }, + "embassy-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 708, + "y": 416 + }, + "embassy-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 336, + "y": 248 + }, + "entrance-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 958, + "y": 0 + }, + "entrance-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 656, + "y": 248 + }, + "fast_food-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 742, + "y": 416 + }, + "fast_food-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 378, + "y": 248 + }, + "ferry-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 988, + "y": 0 + }, + "ferry-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 694, + "y": 248 + }, + "fire-station-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 776, + "y": 416 + }, + "fire-station-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 420, + "y": 248 + }, + "fuel-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 0, + "y": 500 + }, + "fuel-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 732, + "y": 248 + }, + "garden-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 810, + "y": 416 + }, + "garden-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 462, + "y": 248 + }, + "gb-motorway_3": { + "height": 60, + "pixelRatio": 2, + "width": 100, + "x": 0, + "y": 128 + }, + "gift-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 844, + "y": 416 + }, + "gift-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 0, + "y": 290 + }, + "golf-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 878, + "y": 416 + }, + "golf-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 42, + "y": 290 + }, + "grocery-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 912, + "y": 416 + }, + "grocery-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 84, + "y": 290 + }, + "hairdresser-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 946, + "y": 416 + }, + "hairdresser-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 126, + "y": 290 + }, + "harbor-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 30, + "y": 500 + }, + "harbor-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 770, + "y": 248 + }, + "heart-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 980, + "y": 416 + }, + "heart-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 168, + "y": 290 + }, + "heliport-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 60, + "y": 500 + }, + "heliport-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 808, + "y": 248 + }, + "hospital-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 510, + "y": 458 + }, + "hospital-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 210, + "y": 290 + }, + "ice_cream-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 544, + "y": 458 + }, + "ice_cream-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 252, + "y": 290 + }, + "industry-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 90, + "y": 500 + }, + "industry-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 846, + "y": 248 + }, + "information-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 578, + "y": 458 + }, + "information-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 294, + "y": 290 + }, + "laundry-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 612, + "y": 458 + }, + "laundry-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 336, + "y": 290 + }, + "library-11": { + "height": 32, + "pixelRatio": 2, + "width": 32, + "x": 532, + "y": 0 + }, + "library-15": { + "height": 40, + "pixelRatio": 2, + "width": 40, + "x": 124, + "y": 458 + }, + "lighthouse-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 646, + "y": 458 + }, + "lighthouse-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 378, + "y": 290 + }, + "lodging-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 680, + "y": 458 + }, + "lodging-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 420, + "y": 290 + }, + "marker-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 120, + "y": 500 + }, + "marker-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 884, + "y": 248 + }, + "monument-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 714, + "y": 458 + }, + "monument-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 462, + "y": 290 + }, + "mountain-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 748, + "y": 458 + }, + "mountain-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 0, + "y": 332 + }, + "museum-11": { + "height": 32, + "pixelRatio": 2, + "width": 32, + "x": 564, + "y": 0 + }, + "museum-15": { + "height": 40, + "pixelRatio": 2, + "width": 40, + "x": 164, + "y": 458 + }, + "music-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 782, + "y": 458 + }, + "music-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 42, + "y": 332 + }, + "park-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 816, + "y": 458 + }, + "park-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 84, + "y": 332 + }, + "parking-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 150, + "y": 500 + }, + "parking-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 922, + "y": 248 + }, + "parking_garage-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 180, + "y": 500 + }, + "parking_garage-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 960, + "y": 248 + }, + "pedestrian_polygon": { + "height": 128, + "pixelRatio": 2, + "width": 128, + "x": 0, + "y": 0 + }, + "pharmacy-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 850, + "y": 458 + }, + "pharmacy-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 126, + "y": 332 + }, + "picnic_site-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 884, + "y": 458 + }, + "picnic_site-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 168, + "y": 332 + }, + "pitch-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 918, + "y": 458 + }, + "pitch-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 210, + "y": 332 + }, + "place_of_worship-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 952, + "y": 458 + }, + "place_of_worship-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 252, + "y": 332 + }, + "playground-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 986, + "y": 458 + }, + "playground-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 294, + "y": 332 + }, + "police-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 487, + "y": 128 + }, + "police-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 336, + "y": 332 + }, + "post-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 521, + "y": 128 + }, + "post-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 378, + "y": 332 + }, + "prison-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 555, + "y": 128 + }, + "prison-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 420, + "y": 332 + }, + "railway-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 210, + "y": 500 + }, + "railway-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 504, + "y": 290 + }, + "railway_light-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 240, + "y": 500 + }, + "railway_light-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 542, + "y": 290 + }, + "railway_metro-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 270, + "y": 500 + }, + "railway_metro-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 580, + "y": 290 + }, + "ranger_station-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 589, + "y": 128 + }, + "ranger_station-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 462, + "y": 332 + }, + "religious_christian-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 623, + "y": 128 + }, + "religious_christian-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 0, + "y": 374 + }, + "religious_jewish-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 657, + "y": 128 + }, + "religious_jewish-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 42, + "y": 374 + }, + "religious_muslim-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 691, + "y": 128 + }, + "religious_muslim-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 84, + "y": 374 + }, + "restaurant-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 725, + "y": 128 + }, + "restaurant-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 126, + "y": 374 + }, + "roadblock-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 759, + "y": 128 + }, + "roadblock-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 168, + "y": 374 + }, + "rocket-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 793, + "y": 128 + }, + "rocket-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 210, + "y": 374 + }, + "school-11": { + "height": 32, + "pixelRatio": 2, + "width": 32, + "x": 596, + "y": 0 + }, + "school-15": { + "height": 40, + "pixelRatio": 2, + "width": 40, + "x": 204, + "y": 458 + }, + "shelter-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 827, + "y": 128 + }, + "shelter-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 252, + "y": 374 + }, + "shop-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 861, + "y": 128 + }, + "shop-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 294, + "y": 374 + }, + "skiing-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 895, + "y": 128 + }, + "skiing-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 336, + "y": 374 + }, + "soccer-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 929, + "y": 128 + }, + "soccer-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 378, + "y": 374 + }, + "square-stroke-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 300, + "y": 500 + }, + "square-stroke-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 618, + "y": 290 + }, + "square-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 330, + "y": 500 + }, + "square-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 656, + "y": 290 + }, + "stadium-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 963, + "y": 128 + }, + "stadium-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 420, + "y": 374 + }, + "star-stroke-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 360, + "y": 500 + }, + "star-stroke-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 694, + "y": 290 + }, + "star-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 390, + "y": 500 + }, + "star-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 732, + "y": 290 + }, + "suitcase-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 504, + "y": 188 + }, + "suitcase-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 462, + "y": 374 + }, + "sushi-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 538, + "y": 188 + }, + "sushi-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 0, + "y": 416 + }, + "swimming-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 572, + "y": 188 + }, + "swimming-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 42, + "y": 416 + }, + "telephone-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 606, + "y": 188 + }, + "telephone-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 84, + "y": 416 + }, + "tennis-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 640, + "y": 188 + }, + "tennis-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 126, + "y": 416 + }, + "theatre-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 674, + "y": 188 + }, + "theatre-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 168, + "y": 416 + }, + "toilet-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 708, + "y": 188 + }, + "toilet-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 210, + "y": 416 + }, + "town_hall-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 742, + "y": 188 + }, + "town_hall-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 252, + "y": 416 + }, + "triangle-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 420, + "y": 500 + }, + "triangle-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 770, + "y": 290 + }, + "triangle_stroked-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 450, + "y": 500 + }, + "triangle_stroked-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 808, + "y": 290 + }, + "us-highway_2": { + "height": 60, + "pixelRatio": 2, + "width": 60, + "x": 100, + "y": 128 + }, + "us-highway_3": { + "height": 60, + "pixelRatio": 2, + "width": 75, + "x": 160, + "y": 128 + }, + "us-interstate_2": { + "height": 60, + "pixelRatio": 2, + "width": 60, + "x": 188, + "y": 0 + }, + "us-interstate_3": { + "height": 60, + "pixelRatio": 2, + "width": 75, + "x": 0, + "y": 188 + }, + "us-state_2": { + "height": 60, + "pixelRatio": 2, + "width": 60, + "x": 75, + "y": 188 + }, + "us-state_3": { + "height": 60, + "pixelRatio": 2, + "width": 75, + "x": 135, + "y": 188 + }, + "veterinary-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 776, + "y": 188 + }, + "veterinary-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 294, + "y": 416 + }, + "volcano-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 810, + "y": 188 + }, + "volcano-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 336, + "y": 416 + }, + "warehouse-11": { + "height": 30, + "pixelRatio": 2, + "width": 30, + "x": 480, + "y": 500 + }, + "warehouse-15": { + "height": 38, + "pixelRatio": 2, + "width": 38, + "x": 846, + "y": 290 + }, + "waste_basket-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 844, + "y": 188 + }, + "waste_basket-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 378, + "y": 416 + }, + "water-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 878, + "y": 188 + }, + "water-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 420, + "y": 416 + }, + "wetland-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 912, + "y": 188 + }, + "wetland-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 462, + "y": 416 + }, + "wheelchair-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 946, + "y": 188 + }, + "wheelchair-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 0, + "y": 458 + }, + "zoo-11": { + "height": 34, + "pixelRatio": 2, + "width": 34, + "x": 980, + "y": 188 + }, + "zoo-15": { + "height": 42, + "pixelRatio": 2, + "width": 42, + "x": 42, + "y": 458 + } +} \ No newline at end of file diff --git a/web/assets/sprites/osm-liberty@2x.png b/web/assets/sprites/osm-liberty@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1b54e3ea127492bc6b7dd3e65484fc49142425c1 GIT binary patch literal 202875 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%0AWWViO4`dKgEh( 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˧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.{|wHk5px|VIzpFnN!O6p@$KC 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

Wne%%I5>D& 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 QK)~zq11)$7%p&;z0Nlb3)&Kwi literal 0 HcmV?d00001 diff --git a/web/figure_filter.py b/web/figure_filter.py new file mode 100644 index 0000000..373d73c --- /dev/null +++ b/web/figure_filter.py @@ -0,0 +1,121 @@ +import json +from logging import DEBUG + +from dash.dependencies import Output, Input +from dash_core_components import Store +from mylogger import logger + + +class Graph: + def __init__(self, graph_id, x, y: [], figure): + self.graph_id = graph_id + self.x = x + self.y = y + self.figure = figure + + +class Table: + def __init__(self, table_id, src, figure): + self.table_id = table_id + self.src = src + self.figure = figure + self.date_columns = [] + + +def figures_to_dict(figures): + el_list = [] + for figure in figures: + res = {} + for key, value in figure.__dict__.items(): + if key != "figure": + res[key] = value + el_list.append(res) + return el_list + + +class Figure_Filter: + + def __init__(self): + self.graphs = [] + self.tables = [] + self.maps = [] + self.src = {} + + def add_map(self, dash_Graph, latitude, longitude, figure): + self.maps.append(Graph(dash_Graph.id, latitude, longitude, figure)) + return dash_Graph + + def add_graph(self, dash_Graph, x, y, figure): + self.graphs.append(Graph(dash_Graph.id, x, y, figure)) + return dash_Graph + + def add_table(self, src, figure): + table = Table(figure.id, src, figure) + table.date_columns = [col["id"][:-4] for col in figure.columns if col["type"] == "datetime" and + col["id"].endswith("_str")] + self.tables.append(table) + + def __get_table_date_column_id(self): + res = {table.src: table.date_columns for table in self.tables} + return res + + def __get_table_src(self): + return [table.src for table in self.tables] + + def __get_figures(self): + return {"graph": [graph.figure for graph in self.graphs], + "tables": [table.figure for table in self.tables], + "maps": [map.figure for map in self.maps]} + + def __get_output(self) -> list: + outputs = [Output(table.table_id, "data") for table in self.tables] + outputs.extend([Output(graph.graph_id, "figure") for graph in self.graphs]) + outputs.extend([Output(graph.graph_id, "figure") for graph in self.maps]) + return outputs + + def __get_graph_x_label(self, graphs): + return [graph.x for graph in graphs] + + def __get_graph_y_label(self, graphs): + return [graph.y for graph in graphs] + + def __get_table_input_sort_by(self): + inputs = [Input(table.table_id, 'sort_by') for table in self.tables] + return inputs + + def gen_unused_variable(self): + res = ", ".join([chr(i) for i in range(ord('a'), ord('a') + len(self.tables))]) + return res + + def get_params(self): + params = json.dumps({ + "date_columns": self.__get_table_date_column_id(), + "table_src": figures_to_dict(self.tables), + "graph_x_label": self.__get_graph_x_label(self.graphs), + "graph_y_label": self.__get_graph_y_label(self.graphs), + "map_x_label": self.__get_graph_x_label(self.maps), + "map_y_label": self.__get_graph_y_label(self.maps) + }, indent=4) + return params + + def get_clientside_callback(self): + if logger.isEnabledFor(DEBUG): + log_level = 10 + else: + log_level = 20 + fct_def = f"""function(data,range, figures, {self.gen_unused_variable()}) {{ + var params={self.get_params()}; + var log_level={log_level}; + return filter_and_sort(data,range, figures, params, log_level) + }}""" + res = [fct_def, + *self.__get_output(), + Input('clientside-data-store', 'data'), + Input('date-slider', 'value'), + Input('clientside-figure-store', 'data'), + *self.__get_table_input_sort_by()] + return res + + def get_store(self): + return [Store(id='clientside-figure-store', data=self.__get_figures()), + Store(id='clientside-data-store', data=self.src)] diff --git a/web/figures.py b/web/figures.py index de3e0a8..50df6e3 100644 --- a/web/figures.py +++ b/web/figures.py @@ -1,7 +1,4 @@ from copy import deepcopy -from statistics import mean - -from typing import List import dash_bootstrap_components as dbc import dash_table @@ -10,13 +7,11 @@ from dash_table.Format import Format, Scheme, Symbol from dateutil.relativedelta import relativedelta import plotly.express as px import plotly.graph_objects as go -from pandas import DataFrame -from pandas import options as pandas_options import dash_html_components as html from libs.car import Car from libs.elec_price import ElecPrice -from trip import Trips, Trip +from trip import Trip from web.db import Database @@ -57,21 +52,41 @@ trips_map = ERROR_DIV consumption_fig_by_speed = ERROR_DIV consumption_fig_by_temp = ERROR_DIV table_fig = ERROR_DIV -pandas_options.display.float_format = '${:.2f}'.format info = "" battery_info = ERROR_DIV battery_table = None consumption_df_dict = None -SUMMARY_CARDS = {"Average consumption": {"text": None, "src": "assets/images/consumption.svg"}, - "Average emission": {"text": None, "src": "assets/images/pollution.svg"}, - "Average charge speed": {"text": None, "src": "assets/images/battery-charge-line.svg"}, - "Electricity consumption": {"text": None, "src": "assets/images/electricity bill.svg"} + +def card_value_div(card_id, unit, value="-"): + return html.Div([html.Div(value, id=card_id, className="mr-2"), html.Div(unit)], + className="d-flex flex-row justify-content-center") + + +AVG_CHARGE_SPEED = "avg_chg_speed" +AVG_EMISSION_KM = "avg_emission_km" +AVG_EMISSION_KW = "avg_emission_kw" +ELEC_CONSUM_KW = "elec_consum_kw" +ELEC_CONSUM_PRICE = "elec_consum_price" +AVG_CONSUM_KW = "avg_consum_kw" +AVG_CONSUM_PRICE = "avg_consum_price" + +SUMMARY_CARDS = {"Average consumption": {"text": [card_value_div(AVG_CONSUM_KW, "kWh/100km"), + card_value_div(AVG_CONSUM_PRICE, f"{ElecPrice.currency}/100km")], + "src": "assets/images/consumption.svg"}, + "Average emission": {"text": [card_value_div(AVG_EMISSION_KM, " g/km"), + card_value_div(AVG_EMISSION_KW, "g/kWh")], + "src": "assets/images/pollution.svg"}, + "Average charge speed": {"text": [card_value_div(AVG_CHARGE_SPEED, " kW")], + "src": "assets/images/battery-charge-line.svg"}, + "Electricity consumption": {"text": [card_value_div(ELEC_CONSUM_KW, "kWh"), + card_value_div(ELEC_CONSUM_PRICE, ElecPrice.currency)], + "src": "assets/images/electricity bill.svg"} } # pylint: disable=too-many-locals -def get_figures(trips: Trips, charging: List[dict]): +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 lats = [42, 41] @@ -85,12 +100,17 @@ def get_figures(trips: Trips, charging: List[dict]): showlegend=False, name="Last Position")) # table nb_format = Format(precision=2, scheme=Scheme.fixed, symbol=Symbol.yes) # pylint: disable=no-member + style_cell_conditional = [] + if car.is_electric(): + style_cell_conditional.append({'if': {'column_id': 'consumption_fuel_km', }, 'display': 'None', }) + if car.is_thermal(): + style_cell_conditional.append({'if': {'column_id': 'consumption_km', }, 'display': 'None', }) table_fig = dash_table.DataTable( id='trips-table', - sort_action='native', + sort_action='custom', sort_by=[{'column_id': 'id', 'direction': 'desc'}], columns=[{'id': 'id', 'name': '#', 'type': 'numeric'}, - {'id': 'start_at', 'name': 'start at', 'type': 'datetime'}, + {'id': 'start_at_str', 'name': 'start at', 'type': 'datetime'}, {'id': 'duration', 'name': 'duration', 'type': 'numeric', 'format': deepcopy(nb_format).symbol_suffix(" min").precision(0)}, {'id': 'speed_average', 'name': 'average speed', 'type': 'numeric', @@ -113,50 +133,31 @@ def get_figures(trips: Trips, charging: List[dict]): "text-decoration": "underline" } ], - data=trips.get_info(), + style_cell_conditional=style_cell_conditional, + data=[], page_size=50 ) # consumption_fig - consumption_df_dict = trips.get_long_trips() consumption_fig = px.histogram(x=[0], y=[1], title='Consumption of the car', histfunc="avg") consumption_fig.update_layout(yaxis_title="Consumption kWh/100Km", xaxis_title="date") - consumption_fig_by_speed = px.histogram(x=[0], y=[1], histfunc="avg", + consumption_fig_by_speed = px.histogram(data_frame=[{"start_at": 1, "speed_average": 2}], x="start_at", + y="speed_average", histfunc="avg", title="Consumption by speed") consumption_fig_by_speed.update_traces(xbins_size=15) consumption_fig_by_speed.update_layout(bargap=0.05) consumption_fig_by_speed.add_trace(go.Scatter(mode="markers", x=[0], y=[0], name="Trips")) consumption_fig_by_speed.update_layout(xaxis_title="average Speed km/h", yaxis_title="Consumption kWh/100Km") - kw_per_km = mean([t.consumption_km for t in trips]) - info = "Average consumption: {:.1f} kWh/100km".format(kw_per_km) - # charging - charging_data = DataFrame.from_records(charging) - co2_per_kw = __calculate_co2_per_kw(charging_data) - co2_per_km = co2_per_kw * kw_per_km / 100 - try: - charge_speed = 3600 * charging_data["kw"].mean() / \ - (charging_data["stop_at"] - charging_data["start_at"]).mean().total_seconds() - price_kw = (charging_data["price"] / charging_data["kw"]).mean() - total_elec = kw_per_km * trips.get_distance() / 100 - except (TypeError, KeyError, ZeroDivisionError): # when there is no data yet: - charge_speed = 0 - price_kw = 0 - total_elec = 0 - - SUMMARY_CARDS["Average charge speed"]["text"] = f"{charge_speed:.2f} kW" - SUMMARY_CARDS["Average emission"]["text"] = [html.P(f"{co2_per_km:.1f} g/km"), html.P(f"{co2_per_kw:.1f} g/kWh")] - SUMMARY_CARDS["Electricity consumption"]["text"] = [f"{total_elec:.0f} kWh", html.Br(), \ - f"{total_elec * price_kw:.0f} {ElecPrice.currency}"] - SUMMARY_CARDS["Average consumption"]["text"] = f"{kw_per_km:.1f} kWh/100km" + # battery_table battery_table = dash_table.DataTable( id='battery-table', - sort_action='native', - sort_by=[{'column_id': 'start_at', 'direction': 'desc'}], - columns=[{'id': 'start_at', 'name': 'start at', 'type': 'datetime'}, - {'id': 'stop_at', 'name': 'stop at', 'type': 'datetime'}, + sort_action='custom', + sort_by=[{'column_id': 'start_at_str', 'direction': 'desc'}], + columns=[{'id': 'start_at_str', 'name': 'start at', 'type': 'datetime'}, + {'id': 'stop_at_str', 'name': 'stop at', 'type': 'datetime'}, {'id': 'start_level', 'name': 'start level', 'type': 'numeric'}, {'id': 'end_level', 'name': 'end level', 'type': 'numeric'}, {'id': 'co2', 'name': 'CO2', 'type': 'numeric', @@ -166,7 +167,7 @@ def get_figures(trips: Trips, charging: List[dict]): {'id': 'price', 'name': 'price', 'type': 'numeric', 'format': deepcopy(nb_format).symbol_suffix(" " + ElecPrice.currency).precision(2), 'editable': True} ], - data=charging, + data=[], style_data_conditional=[ { 'if': {'column_id': ['start_level', "end_level"]}, @@ -175,26 +176,19 @@ def get_figures(trips: Trips, charging: List[dict]): }, { 'if': {'column_id': 'price'}, - 'backgroundColor': 'rgb(230, 246, 254)' + 'backgroundColor': '#ABE2FB' } ], ) - consumption_fig_by_temp = None - temp_value = False - for trip in trips: - if trip.get_temperature() is not None: - temp_value = True - break - if temp_value: - consumption_fig_by_temp = px.histogram(x=[0], y=[0], - histfunc="avg", title="Consumption by temperature") - consumption_fig_by_temp.update_traces(xbins_size=2) - consumption_fig_by_temp.update_layout(bargap=0.05) - consumption_fig_by_temp.add_trace( - go.Scatter(mode="markers", x=[0], - y=[0], name="Trips")) - consumption_fig_by_temp.update_layout(xaxis_title="average temperature in °C", - yaxis_title="Consumption kWh/100Km") + consumption_fig_by_temp = px.histogram(x=[0], y=[0], + histfunc="avg", title="Consumption by temperature") + consumption_fig_by_temp.update_traces(xbins_size=2) + consumption_fig_by_temp.update_layout(bargap=0.05) + consumption_fig_by_temp.add_trace( + go.Scatter(mode="markers", x=[0], + y=[0], name="Trips")) + consumption_fig_by_temp.update_layout(xaxis_title="average temperature in °C", + yaxis_title="Consumption kWh/100Km") return True diff --git a/web/views.py b/web/views.py index 4083d70..dc229bf 100644 --- a/web/views.py +++ b/web/views.py @@ -1,5 +1,4 @@ import json -from datetime import datetime, timezone from typing import List import dash_bootstrap_components as dbc @@ -12,6 +11,7 @@ import dash_daq as daq import pandas as pd from flask import jsonify, request, Response as FlaskResponse +from libs.car import Cars from mylogger import logger from trip import Trips @@ -23,6 +23,8 @@ from web.app import app, dash_app, myp, chc from web.db import Database # pylint: disable=invalid-name +from web.figure_filter import Figure_Filter + RESPONSE = "-response" EMPTY_DIV = "empty-div" ABRP_SWITCH = 'abrp-switch' @@ -55,46 +57,9 @@ def diff_dashtable(data, data_previous, row_id_name="row_id"): return changes -figures_list = ["consumption_fig", "consumption_fig_by_speed", "consumption_graph_by_temp", "trips_map"] -y_list = [["consumption_km"], ["consumption_km", "consumption_km"], ["consumption_km", "consumption_km"], - ["long", "start_at"]] -x_list = ["start_at", "speed", "consumption_by_temp", "lat"] -outputs = [Output(id, "figure") for id in figures_list] - - -dash_app.clientside_callback( - """ - function(data,range, figures) { - return filter_dataset(data,range,figures,%s, %s); - } - """ % (x_list, y_list), - *outputs, - Input('clientside-data-store', 'data'), - Input('date-slider', 'value'), - Input('clientside-figure-store', 'data')) - def create_callback(): # noqa: MC0001 global CALLBACK_CREATED if not CALLBACK_CREATED: - @dash_app.callback(Output('summary-cards', 'children'), - Output('tab_trips_fig', 'children'), - Output('tab_charge', 'children'), - Output('date-slider', 'max'), - Output('date-slider', 'step'), - Output('date-slider', 'marks'), - Input('date-slider', 'value')) - def display_value(value): # pylint: disable=unused-variable - mini = datetime.fromtimestamp(value[0], tz=timezone.utc) - maxi = datetime.fromtimestamp(value[1], tz=timezone.utc) - filtered_trips = Trips() - for trip in trips: - if mini <= trip.start_at <= maxi: - filtered_trips.append(trip) - filtered_chargings = Charging.get_chargings(mini, maxi) - figures.get_figures(filtered_trips, filtered_chargings) - return create_card(figures.SUMMARY_CARDS), \ - figures.table_fig, figures.battery_table, max_millis, step, marks - @dash_app.callback(Output(EMPTY_DIV, "children"), [Input("battery-table", "data_timestamp")], [State("battery-table", "data"), @@ -106,13 +71,13 @@ def create_callback(): # noqa: MC0001 for changed_line in diff_data: if changed_line['column_name'] == 'price': conn = Database.get_db() - if not Database.set_chargings_price( conn, changed_line['start_at'], + if not Database.set_chargings_price(conn, changed_line['start_at'], changed_line['current_value']): logger.error("Can't find line to update in the database") conn.close() return "" - @dash_app.callback([Output("tab_battery_popup_graph", "children"), Output("tab_battery_popup", "is_open"), ], + @dash_app.callback([Output("tab_battery_popup_graph", "children"), Output("tab_battery_popup", "is_open")], [Input("battery-table", "active_cell"), Input("tab_battery_popup-close", "n_clicks")], [State('battery-table', 'data'), @@ -129,7 +94,7 @@ def create_callback(): # noqa: MC0001 [Input("trips-table", "active_cell"), Input("tab_trips_popup-close", "n_clicks")], State("tab_trips_popup", "is_open")) - def get_altitude(active_cell, close, is_open): # pylint: disable=unused-argument, unused-variable + def get_altitude_graph(active_cell, close, is_open): # pylint: disable=unused-argument, unused-variable if is_open is None: is_open = False if active_cell is not None and active_cell["column_id"] in ["altitude_diff"] and not is_open: @@ -275,12 +240,14 @@ def update_trips(): conn.close() min_date = None max_date = None + car = myp.vehicles_list[0] # todo handle multiple car try: - trips_by_vin = Trips.get_trips(myp.vehicles_list) - trips = next(iter(trips_by_vin.values())) # todo handle multiple car + trips_by_vin = Trips.get_trips(Cars([car])) + trips = trips_by_vin[car.vin] assert len(trips) > 0 min_date = trips[0].start_at max_date = trips[-1].start_at + figures.get_figures(trips[0].car) except (StopIteration, AssertionError): logger.debug("No trips yet") try: @@ -304,6 +271,7 @@ def update_trips(): step = (max_millis - min_millis) / 100 marks = figures.get_marks_from_start_end(min_date, max_date) cached_layout = None # force regenerate layout + figures.get_figures(car) except (ValueError, IndexError): logger.error("update_trips (slider): %s", exc_info=True) except AttributeError: @@ -333,14 +301,17 @@ def __get_control_tabs(): def create_card(card: dict): res = [] for tile, value in card.items(): - text = value["text"] + rows = value["text"] # if isinstance(text, str): # text = html.H3(text) + html_text = [] + for row in rows: + html_text.append(html.Div(row, className="d-flex flex-row justify-content-center")) res.append(html.Div( dbc.Card([ html.H4(tile, className="card-title text-center"), dbc.Row([ - dbc.Col(dbc.CardBody(text, style={"whiteS pace": "nowrap", "fontSize": "160%"}), + dbc.Col(dbc.CardBody(html_text, style={"whiteSpace": "nowrap", "fontSize": "160%"}), className="text-center"), dbc.Col(dbc.CardImg(src=value.get("src", Component.UNDEFINED), style={"maxHeight": "7rem"})) ], @@ -355,16 +326,23 @@ def serve_layout(): global cached_layout if cached_layout is None: logger.debug("Create new layout") + fig_filter = Figure_Filter() try: - figures.get_figures(trips, chargings) - summary_tab = [dbc.Container(dbc.Row(id="summary-cards", - children=create_card(figures.SUMMARY_CARDS)), fluid=True), - dcc.Graph(id="consumption_fig"), - dcc.Graph(id="consumption_fig_by_speed"), - dcc.Graph(id="consumption_graph_by_temp", - style={'display': 'none'} if figures.consumption_fig_by_temp is None else {}, - )] - maps = dcc.Graph(id="trips_map", style={"height": '90vh'}) + summary_tab = [ + dbc.Container(dbc.Row(id="summary-cards", + children=create_card(figures.SUMMARY_CARDS)), fluid=True), + fig_filter.add_graph(dcc.Graph(id="consumption_fig"), "start_at", ["consumption_km"], + figures.consumption_fig), + fig_filter.add_graph(dcc.Graph(id="consumption_fig_by_speed"), "speed_average", + ["consumption_km"] * 2, figures.consumption_fig_by_speed), + fig_filter.add_graph(dcc.Graph(id="consumption_graph_by_temp"), "consumption_by_temp", + ["consumption_km"] * 2, figures.consumption_fig_by_temp)] + maps = fig_filter.add_map(dcc.Graph(id="trips_map", style={"height": '90vh'}), "lat", + ["long", "start_at"], figures.trips_map) + fig_filter.add_table("trips", figures.table_fig) + fig_filter.add_table("chargings", figures.battery_table) + 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', @@ -380,9 +358,7 @@ def serve_layout(): logger.warning("Failed to generate figure, there is probably not enough data yet", exc_info_debug=True) range_slider = html.Div() data_div = html.Div([ - dcc.Store(id='clientside-figure-store', data=[figures.consumption_fig, figures.consumption_fig_by_speed, - figures.consumption_fig_by_temp, figures.trips_map]), - dcc.Store(id='clientside-data-store', data=figures.consumption_df_dict), + *fig_filter.get_store(), range_slider, html.Div([ dbc.Tabs([ From 9f7a0247671f2b9effabdbfeea4b8dbdabc5f536 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Mon, 10 May 2021 16:05:32 +0200 Subject: [PATCH 08/11] remove pandas dependancy & move method to utils.py --- docs/Install.md | 2 +- requirements-dev.txt | 1 - requirements.txt | 2 +- web/figures.py | 52 ++----------------------------- web/utils.py | 66 +++++++++++++++++++++++++++++++++++++++ web/views.py | 74 ++++++++++---------------------------------- 6 files changed, 88 insertions(+), 109 deletions(-) create mode 100644 web/utils.py diff --git a/docs/Install.md b/docs/Install.md index 7b9cb40..6467e27 100644 --- a/docs/Install.md +++ b/docs/Install.md @@ -13,7 +13,7 @@ We will retrieve this information: - On debian based distribution you can install some requirement from repos, it's faster than installtion with pip: ``` - sudo apt-get install python3-typing-extensions python3-pandas python3-plotly python3-paho-mqtt python3-six python3-dateutil python3-brotli libblas-dev liblapack-dev gfortran python3-pycryptodome python3-numpy libatlas3-base python3-cryptography + sudo apt-get install python3-typing-extensions python3-plotly python3-paho-mqtt python3-six python3-dateutil python3-brotli libblas-dev liblapack-dev gfortran python3-pycryptodome python3-cryptography ``` - For everyone : diff --git a/requirements-dev.txt b/requirements-dev.txt index 2af2088..b3f631e 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,3 +1,2 @@ prospector>=1.3.0 pre-commit -deepdiff \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e34af87..bb3e91c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,6 @@ dash_daq plotly>=4 cryptography>=2.6 Werkzeug>=1.0.0 -pandas oauth2_client requests pytz @@ -16,6 +15,7 @@ geojson reverse_geocode androguard pycryptodomex +deepdiff #swagger req certifi >= 14.05.14 diff --git a/web/figures.py b/web/figures.py index 50df6e3..67ae795 100644 --- a/web/figures.py +++ b/web/figures.py @@ -4,7 +4,6 @@ import dash_bootstrap_components as dbc import dash_table from dash_core_components import Graph from dash_table.Format import Format, Scheme, Symbol -from dateutil.relativedelta import relativedelta import plotly.express as px import plotly.graph_objects as go import dash_html_components as html @@ -13,35 +12,7 @@ from libs.car import Car from libs.elec_price import ElecPrice from trip import Trip from web.db import Database - - -def unix_time_millis(date): - return int(date.timestamp()) - - -def get_marks_from_start_end(start, end): - nb_marks = 10 - result = [] - time_delta = int((end - start).total_seconds() / nb_marks) - current = start - if time_delta > 0: - while current <= end: - result.append(current) - current += relativedelta(seconds=time_delta) - result[-1] = end - if time_delta < 3600 * 24: - if time_delta > 3600: - date_f = '%x %Hh' - else: - date_f = '%x %Hh%M' - else: - date_f = '%x' - marks = {} - for date in result: - marks[unix_time_millis(date)] = str(date.strftime(date_f)) - return marks - return None - +from web.utils import card_value_div, dash_date_to_datetime # pylint: disable=invalid-name ERROR_DIV = dbc.Alert("No data to show, there is probably no trips recorded yet", color="danger") @@ -57,12 +28,6 @@ battery_info = ERROR_DIV battery_table = None consumption_df_dict = None - -def card_value_div(card_id, unit, value="-"): - return html.Div([html.Div(value, id=card_id, className="mr-2"), html.Div(unit)], - className="d-flex flex-row justify-content-center") - - AVG_CHARGE_SPEED = "avg_chg_speed" AVG_EMISSION_KM = "avg_emission_km" AVG_EMISSION_KW = "avg_emission_kw" @@ -192,20 +157,9 @@ def get_figures(car: Car): return True -def __calculate_co2_per_kw(charging_data): - try: - co2_data = charging_data[charging_data["co2"] > 0] - co2_kw_sum = co2_data["kw"].sum() - if co2_kw_sum > 0: - return co2_data["co2"].sum() / co2_kw_sum - except KeyError: - return 0 - return 0 - - def get_battery_curve_fig(row: dict, car: Car): - start_date = Database.convert_datetime_from_string(row["start_at"]) - stop_at = Database.convert_datetime_from_string(row["stop_at"]) + start_date = dash_date_to_datetime(row["start_at"]) + stop_at = dash_date_to_datetime(row["stop_at"]) conn = Database.get_db() res = Database.get_battery_curve(conn, start_date, car.vin) conn.close() diff --git a/web/utils.py b/web/utils.py new file mode 100644 index 0000000..aba5fc6 --- /dev/null +++ b/web/utils.py @@ -0,0 +1,66 @@ +from datetime import datetime, timedelta + +import dash_bootstrap_components as dbc +import dash_html_components as html +from dash.development.base_component import Component + + +def unix_time_millis(date): + return int(date.timestamp()) + + +def get_marks_from_start_end(start, end): + nb_marks = 10 + result = [] + time_delta = int((end - start).total_seconds() / nb_marks) + current = start + if time_delta > 0: + while current <= end: + result.append(current) + current += timedelta(seconds=time_delta) + result[-1] = end + if time_delta < 3600 * 24: + if time_delta > 3600: + date_f = '%x %Hh' + else: + date_f = '%x %Hh%M' + else: + date_f = '%x' + marks = {} + for date in result: + marks[unix_time_millis(date)] = str(date.strftime(date_f)) + return marks + return None + + +def card_value_div(card_id, unit, value="-"): + return html.Div([html.Div(value, id=card_id, className="mr-2"), html.Div(unit)], + className="d-flex flex-row justify-content-center") + + +def dash_date_to_datetime(st): + return datetime.strptime(st, "%Y-%m-%dT%H:%M:%S.000Z") + + +def create_card(card: dict): + res = [] + for tile, value in card.items(): + rows = value["text"] + # if isinstance(text, str): + # text = html.H3(text) + html_text = [] + for row in rows: + html_text.append(html.Div(row, className="d-flex flex-row justify-content-center")) + res.append(html.Div( + dbc.Card([ + html.H4(tile, className="card-title text-center"), + dbc.Row([ + dbc.Col(dbc.CardBody(html_text, style={"whiteSpace": "nowrap", "fontSize": "160%"}), + className="text-center"), + dbc.Col(dbc.CardImg(src=value.get("src", Component.UNDEFINED), style={"maxHeight": "7rem"})) + ], + className="align-items-center flex-nowrap") + ], className="h-100 p-2"), + className="col-sm-12 col-md-6 col-lg-3 py-2" + )) + return res diff --git a/web/views.py b/web/views.py index dc229bf..383aae7 100644 --- a/web/views.py +++ b/web/views.py @@ -3,14 +3,14 @@ from typing import List import dash_bootstrap_components as dbc from dash.dependencies import Output, Input, MATCH, State -from dash.development.base_component import Component from dash.exceptions import PreventUpdate import dash_core_components as dcc import dash_html_components as html import dash_daq as daq -import pandas as pd +from deepdiff import DeepDiff from flask import jsonify, request, Response as FlaskResponse +import web.utils from libs.car import Cars from mylogger import logger @@ -24,6 +24,7 @@ from web.db import Database # pylint: disable=invalid-name from web.figure_filter import Figure_Filter +from web.utils import dash_date_to_datetime, create_card RESPONSE = "-response" EMPTY_DIV = "empty-div" @@ -35,28 +36,6 @@ chargings: List[dict] min_date = max_date = min_millis = max_millis = step = marks = cached_layout = None -def diff_dashtable(data, data_previous, row_id_name="row_id"): - df, df_previous = pd.DataFrame(data=data), pd.DataFrame(data_previous) - for _df in [df, df_previous]: - assert row_id_name in _df.columns - _df = _df.set_index(row_id_name) - mask = df.ne(df_previous) - df_diff = df[mask].dropna(how="all", axis="columns").dropna(how="all", axis="rows") - changes = [] - for idx, row in df_diff.iterrows(): - row.dropna(inplace=True) - for change in row.iteritems(): - changes.append( - { - row_id_name: data[idx][row_id_name], - "column_name": change[0], - "current_value": change[1], - "previous_value": df_previous.at[idx, change[0]], - } - ) - return changes - - def create_callback(): # noqa: MC0001 global CALLBACK_CREATED if not CALLBACK_CREATED: @@ -67,15 +46,20 @@ def create_callback(): # noqa: MC0001 def capture_diffs_in_battery_table(timestamp, data, data_previous): # pylint: disable=unused-variable if timestamp is None: raise PreventUpdate - diff_data = diff_dashtable(data, data_previous, "start_at") - for changed_line in diff_data: - if changed_line['column_name'] == 'price': + diff_data = DeepDiff(data_previous, data, ignore_numeric_type_changes=True, ignore_order=True, view="tree", + verbose_level=1) + for value_changed in diff_data["values_changed"]: + index, column_name = value_changed.path(output_format='list') + new_value = value_changed.t2 + if column_name == 'price': conn = Database.get_db() - if not Database.set_chargings_price(conn, changed_line['start_at'], - changed_line['current_value']): + date = dash_date_to_datetime(data[index]['start_at']) + if not Database.set_chargings_price(conn, date, new_value): logger.error("Can't find line to update in the database") + else: + logger.debug("update price %s of %s", value_changed, date) conn.close() - return "" + return "" # don't need to update dashboard @dash_app.callback([Output("tab_battery_popup_graph", "children"), Output("tab_battery_popup", "is_open")], [Input("battery-table", "active_cell"), @@ -266,10 +250,10 @@ def update_trips(): # update for slider try: logger.debug("min_date:%s - max_date:%s", min_date, max_date) - min_millis = figures.unix_time_millis(min_date) - max_millis = figures.unix_time_millis(max_date) + min_millis = web.utils.unix_time_millis(min_date) + max_millis = web.utils.unix_time_millis(max_date) step = (max_millis - min_millis) / 100 - marks = figures.get_marks_from_start_end(min_date, max_date) + marks = web.utils.get_marks_from_start_end(min_date, max_date) cached_layout = None # force regenerate layout figures.get_figures(car) except (ValueError, IndexError): @@ -298,30 +282,6 @@ def __get_control_tabs(): return tabs -def create_card(card: dict): - res = [] - for tile, value in card.items(): - rows = value["text"] - # if isinstance(text, str): - # text = html.H3(text) - html_text = [] - for row in rows: - html_text.append(html.Div(row, className="d-flex flex-row justify-content-center")) - res.append(html.Div( - dbc.Card([ - html.H4(tile, className="card-title text-center"), - dbc.Row([ - dbc.Col(dbc.CardBody(html_text, style={"whiteSpace": "nowrap", "fontSize": "160%"}), - className="text-center"), - dbc.Col(dbc.CardImg(src=value.get("src", Component.UNDEFINED), style={"maxHeight": "7rem"})) - ], - className="align-items-center flex-nowrap") - ], className="h-100 p-2"), - className="col-sm-12 col-md-6 col-lg-3 py-2" - )) - return res - - def serve_layout(): global cached_layout if cached_layout is None: From d6d14d03329054b78795f4bfc1d7aced8541bc0d Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Mon, 10 May 2021 17:13:37 +0200 Subject: [PATCH 09/11] handle no trips or no charge, move utils.py to libs --- utils.py => libs/utils.py | 0 my_psacc.py | 2 +- server.py | 2 +- web/assets/clientside.js | 51 +++++++++++++++++++++------------------ web/db.py | 2 +- web/figures.py | 8 +++--- web/views.py | 27 ++++++++++++--------- 7 files changed, 48 insertions(+), 44 deletions(-) rename utils.py => libs/utils.py (100%) diff --git a/utils.py b/libs/utils.py similarity index 100% rename from utils.py rename to libs/utils.py diff --git a/my_psacc.py b/my_psacc.py index ee5cdd1..2803523 100644 --- a/my_psacc.py +++ b/my_psacc.py @@ -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 diff --git a/server.py b/server.py index d878e7c..b775663 100755 --- a/server.py +++ b/server.py @@ -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" diff --git a/web/assets/clientside.js b/web/assets/clientside.js index d3710bf..42468bc 100644 --- a/web/assets/clientside.js +++ b/web/assets/clientside.js @@ -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); } } diff --git a/web/db.py b/web/db.py index b80fbb9..2a2e526 100644 --- a/web/db.py +++ b/web/db.py @@ -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"]] diff --git a/web/figures.py b/web/figures.py index 67ae795..eb85b0c 100644 --- a/web/figures.py +++ b/web/figures.py @@ -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"] diff --git a/web/views.py b/web/views.py index 383aae7..6306936 100644 --- a/web/views.py +++ b/web/views.py @@ -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, From df79a1f955c5361a8c2c00d7237490b4bbe824c3 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Mon, 10 May 2021 21:09:19 +0200 Subject: [PATCH 10/11] add test unit --- .prospector.yaml | 1 + test/test_unit.py | 255 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 test/test_unit.py diff --git a/.prospector.yaml b/.prospector.yaml index 5e0b84a..59e3ee8 100644 --- a/.prospector.yaml +++ b/.prospector.yaml @@ -3,6 +3,7 @@ use: flask max-line-length: 120 ignore-paths: - psa_connectedcar + - test pep8: disable: - E722 diff --git a/test/test_unit.py b/test/test_unit.py new file mode 100644 index 0000000..86ca49c --- /dev/null +++ b/test/test_unit.py @@ -0,0 +1,255 @@ +# flake8: noqa +import json +import os +import unittest +from datetime import datetime, timedelta +from psa_connectedcar import ApiClient +import psa_connectedcar as psacc +import reverse_geocode +from libs.car import Car, Cars +from libs.charging import Charging +from libs.elec_price import ElecPrice +from my_psacc import MyPSACC +from ecomix import Ecomix +from libs.car_model import CarModel +from mylogger import my_logger +from otp.otp import load_otp, save_otp +from charge_control import ChargeControls +from trip import Trips +from libs.utils import get_temp +from web.db import Database +from web.figures import get_figures, get_battery_curve_fig, get_altitude_fig +import pytz +from deepdiff import DeepDiff + +latitude = 47.2183 +longitude = -1.55362 +date3 = datetime.utcnow().replace(2021, 3, 1, 12, 00, 00, 00, tzinfo=pytz.UTC) +date2 = date3 - timedelta(minutes=20) +date1 = date3 - timedelta(minutes=40) +date0 = date3 - timedelta(minutes=60) +DATA_DIR = os.path.dirname(os.path.realpath(__file__)) + "/data/" + + +def compare_dict(result, expected): + diff = DeepDiff(expected, result) + if diff != {}: + raise AssertionError(str(diff)) + return True + + +dummy_value = 0 + + +def callback_test(): + global dummy_value + dummy_value += 1 + + +class TestUnit(unittest.TestCase): + def __init__(self, methodName='runTest'): + super().__init__(methodName) + self.test_online = os.environ.get("TEST_ONLINE", "0") == "1" + self.vehicule_list = Cars() + self.vehicule_list.extend( + [Car("VR3UHZKX", "vid", "Peugeot"), Car("VXXXXX", "XXXX", "Peugeot", label="SUV 3008")]) + + @staticmethod + def get_new_test_db(): + try: + os.remove(DATA_DIR + "tmp.db") + except: + pass + Database.DEFAULT_DB_FILE = DATA_DIR + "tmp.db" + Database.db_initialized = False + conn = Database.get_db() + return conn + + def test_car(self): + car1 = Car("VRAAAAAAA", "1sdfdksnfk222", "Peugeot", "208", 46, 0) + car2 = Car("VR3UHZKX", "1sdfdksnfk222", "Peugeot") + cars = Cars([car1, car2]) + cars.save_cars(name=DATA_DIR + "test_car.json") + Cars.load_cars(name=DATA_DIR + "test_car.json") + + def test_otp_config(self): + otp_config = load_otp(filename=DATA_DIR + "otp_test.bin") + assert otp_config is not None + save_otp(otp_config, filename=DATA_DIR + "otp_test2.bin") + + def test_mypsacc(self): + if self.test_online: + myp = MyPSACC.load_config("config.json") + myp.refresh_token() + myp.get_vehicles() + car = myp.vehicles_list[0] + myp.abrp.abrp_enable_vin.add(car.vin) + res = myp.get_vehicle_info(myp.vehicles_list[0].vin) + myp.abrp.call(car, 22.1) + myp.save_config() + assert isinstance(get_temp(str(latitude), str(longitude), myp.weather_api), float) + + def test_car_model(self): + assert CarModel.find_model_by_vin("VR3UHZKXZL").name == "e-208" + assert CarModel.find_model_by_vin("VR3UKZKXZM").name == "e-2008" + assert CarModel.find_model_by_vin("VXKUHZKXZL").name == "corsa-e" + + def test_c02_signal_cache(self): + start = datetime.now() - timedelta(minutes=30) + end = datetime.now() + Ecomix._cache = {'FR': [[start - timedelta(days=1), 100], + [start + timedelta(minutes=1), 10], + [start + timedelta(minutes=2), 20], + [start + timedelta(minutes=3), 30]]} + assert Ecomix.get_co2_from_signal_cache(start, end, "FR") == 20 + + def test_c02_signal(self): + if self.test_online: + key = "d186c74bfbcd1da8" + Ecomix.co2_signal_key = key + def_country = "FR" + Ecomix.get_data_from_co2_signal(latitude, longitude, def_country) + res = Ecomix.get_co2_from_signal_cache(datetime.now() - timedelta(minutes=5), datetime.now(), def_country) + assert isinstance(res, float) + + def test_charge_control(self): + charge_control = ChargeControls() + charge_control.file_name = "test_charge_control.json" + charge_control.save_config(force=True) + + def test_battery_curve(self): + from libs.car import Car + from libs.charging import Charging + try: + os.remove("tmp.db") + except: + pass + Database.DEFAULT_DB_FILE = "tmp.db" + conn = Database.get_db() + list(map(dict, conn.execute('PRAGMA database_list').fetchall())) + vin = "VR3UHZKXZL" + car = Car(vin, "id", "Peugeot") + Charging.record_charging(car, "InProgress", date0, 50, latitude, longitude, "FR", "slow") + Charging.record_charging(car, "InProgress", date1, 75, latitude, longitude, "FR", "slow") + Charging.record_charging(car, "InProgress", date2, 85, latitude, longitude, "FR", "slow") + Charging.record_charging(car, "InProgress", date3, 90, latitude, longitude, "FR", "slow") + + res = Database.get_battery_curve(Database.get_db(), date0, vin) + assert len(res) == 3 + + def test_sdk(self): + + res = { + 'lastPosition': {'type': 'Feature', 'geometry': {'type': 'Point', 'coordinates': [9.65457, 49.96119, 21]}, + 'properties': {'updatedAt': '2021-03-29T05:16:10Z', 'heading': 126, + 'type': 'Estimated'}}, 'preconditionning': { + 'airConditioning': {'updatedAt': '2021-04-01T16:17:01Z', 'status': 'Disabled', 'programs': [ + {'enabled': False, 'slot': 1, 'recurrence': 'Daily', 'start': 'PT21H40M', + 'occurence': {'day': ['Sat']}}]}}, + 'energy': [{'updatedAt': '2021-02-23T22:29:03Z', 'type': 'Fuel', 'level': 0}, + {'updatedAt': '2021-04-01T16:17:01Z', 'type': 'Electric', 'level': 70, 'autonomy': 192, + 'charging': {'plugged': False, 'status': 'Disconnected', 'remainingTime': 'PT0S', + 'chargingRate': 0, 'chargingMode': 'No', 'nextDelayedTime': 'PT21H30M'}}], + 'createdAt': '2021-04-01T16:17:01Z', + 'battery': {'voltage': 99, 'current': 0, 'createdAt': '2021-04-01T16:17:01Z'}, + 'kinetic': {'createdAt': '2021-03-29T05:16:10Z', 'moving': False}, + 'privacy': {'createdAt': '2021-04-01T16:17:01Z', 'state': 'None'}, + 'service': {'type': 'Electric', 'updatedAt': '2021-02-23T21:10:29Z'}, '_links': {'self': { + 'href': 'https://api.groupe-psa.com/connectedcar/v4/user/vehicles/myid/status'}, + 'vehicles': { + 'href': 'https://api.groupe-psa.com/connectedcar/v4/user/vehicles/myid'}}, + 'timed.odometer': {'createdAt': None, 'mileage': 1107.1}, 'updatedAt': '2021-04-01T16:17:01Z'} + api = ApiClient() + status: psacc.models.status.Status = api._ApiClient__deserialize(res, "Status") + geocode_res = reverse_geocode.search([(status.last_position.geometry.coordinates[:2])[::-1]])[0] + assert geocode_res["country_code"] == "DE" + TestUnit.get_new_test_db() + car = Car("XX", "vid", "Peugeot") + car.status = status + myp = MyPSACC.load_config(DATA_DIR + "config.json") + myp.record_info(car) + assert "features" in json.loads(Database.get_recorded_position()) + # electric should be first + assert car.status.energy[0].type == 'Electric' + + def test_record_position_charging(self): + TestUnit.get_new_test_db() + ElecPrice.CONFIG_FILENAME = DATA_DIR + "config.ini" + car = self.vehicule_list[0] + Database.record_position(None, car.vin, 11, latitude, longitude - 0.05, None, date0, 40, None, False) + Database.record_position(None, car.vin, 20, latitude, longitude, 32, date1, 35, None, False) + Database.record_position(None, car.vin, 30, latitude, longitude, 42, date2, 30, None, False) + Database.add_altitude_to_db(Database.get_db()) + data = json.loads(Database.get_recorded_position()) + assert data["features"][1]["geometry"]["coordinates"] == [float(longitude), float(latitude)] + trips = Trips.get_trips(self.vehicule_list)[car.vin] + trip = trips[0] + map(trip.add_temperature, [10, 13, 15]) + res = trip.get_info() + assert compare_dict(res, {'consumption_km': 24.21052631578947, + 'start_at': date0, + 'consumption_by_temp': None, + 'positions': {'lat': [latitude], 'long': [longitude]}, + 'duration': 40.0, 'speed_average': 28.5, 'distance': 19.0, 'mileage': 30.0, + 'altitude_diff': 2, 'id': 1, 'consumption': 4.6}) + + Charging.elec_price = ElecPrice.read_config() + start_level = 40 + end_level = 85 + Charging.record_charging(car, "InProgress", date0, start_level, latitude, longitude, None, "slow") + Charging.record_charging(car, "InProgress", date1, 70, latitude, longitude, "FR", "slow") + Charging.record_charging(car, "InProgress", date1, 70, latitude, longitude, "FR", "slow") + Charging.record_charging(car, "InProgress", date2, 80, latitude, longitude, "FR", "slow") + Charging.record_charging(car, "Stopped", date3, end_level, latitude, longitude, "FR", "slow") + chargings = Charging.get_chargings() + co2 = chargings[0]["co2"] + assert isinstance(co2, float) + assert compare_dict(chargings, [{'start_at': date0, + 'stop_at': date3, + 'VIN': 'VR3UHZKX', + 'start_level': 40, + 'end_level': 85, + 'co2': co2, + 'kw': 20.7, + 'price': 3.84, + 'charging_mode': 'slow'}]) + assert get_figures(car) + row = {"start_at": date0.strftime("%Y-%m-%dT%H:%M:%S+00:00"), + "stop_at": date3.strftime("%Y-%m-%dT%H:%M:%S+00:00"), "start_level": start_level, "end_level": end_level} + assert get_battery_curve_fig(row, car) is not None + assert get_altitude_fig(trip) is not None + + def test_fuel_car(self): + TestUnit.get_new_test_db() + ElecPrice.CONFIG_FILENAME = DATA_DIR + "config.ini" + car = self.vehicule_list[1] + Database.record_position(None, car.vin, 11, latitude, longitude, 22, date0, 40, 30, False) + Database.record_position(None, car.vin, 20, latitude, longitude, 22, date1, 35, 29, False) + Database.record_position(None, car.vin, 30, latitude, longitude, 22, date2, 30, 28, False) + trips = Trips.get_trips(self.vehicule_list) + res = trips[car.vin].get_trips_as_dict() + assert compare_dict(res, [{'consumption_km': 5.684210526315789, + 'start_at': date0, + 'consumption_by_temp': None, + 'positions': {'lat': [latitude], + 'long': [longitude]}, + 'duration': 40.0, + 'speed_average': 28.5, + 'distance': 19.0, + 'mileage': 30.0, + 'altitude_diff': 0, + 'id': 1, + 'consumption': 1.08, + 'consumption_fuel_km': 10.53}]) + + def test_db_callback(self): + old_dummy_value = dummy_value + TestUnit.get_new_test_db() + Database.set_db_callback(callback_test) + assert old_dummy_value == dummy_value + Database.record_position(None, "xx", 11, latitude, longitude - 0.05, None, date0, 40, None, False) + assert old_dummy_value != dummy_value + +if __name__ == '__main__': + my_logger(handler_level=os.environ.get("DEBUG_LEVEL", 20)) + unittest.main() From b52a8dc34d56d53d2239908b248eaf249e631e48 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Tue, 11 May 2021 11:47:32 +0200 Subject: [PATCH 11/11] fix code style --- .eslintrc.yml | 11 + .pre-commit-config.yaml | 2 +- web/assets/clientside.js | 429 +++++++++++++++++++-------------------- web/figure_filter.py | 6 +- 4 files changed, 229 insertions(+), 219 deletions(-) create mode 100644 .eslintrc.yml diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..97c1864 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,11 @@ +env: + browser: true + es2021: true +extends: + - standard +parserOptions: + ecmaFeatures: + jsx: true + ecmaVersion: 12 + sourceType: module +rules: {} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2ae7776..411f528 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,4 +5,4 @@ repos: rev: 1.3.1 # The version of Prospector to use, at least 1.1.7 hooks: - id: prospector - language: system + language: system \ No newline at end of file diff --git a/web/assets/clientside.js b/web/assets/clientside.js index 42468bc..cb88d46 100644 --- a/web/assets/clientside.js +++ b/web/assets/clientside.js @@ -1,228 +1,227 @@ -class Avg{ - constructor(){ - this.total = 0; - this.count = 0; +class Avg { + constructor () { + this.total = 0 + this.count = 0 + } + + addValue (value) { + if (typeof value === 'number') { + this.count++ + this.total = ((this.total * (this.count - 1)) / this.count) + (value / this.count) } - add_value(value){ - if (typeof value === 'number') { - this.count++; - this.total = ((this.total*(this.count-1))/this.count) + (value/this.count); + } + + average () { + return this.total + } + + static getAverageFromKey (array, key) { + const avg = new Avg() + array.forEach(function (obj) { avg.addValue(obj[key]) }) + return avg.average() + } +} +const logger = (function () { + let oldConsoleLog = null + const pub = {} + + pub.enableLogger = function enableLogger () { + if (oldConsoleLog == null) { + return + } + + window.console.log = oldConsoleLog + } + + pub.disableLogger = function disableLogger () { + oldConsoleLog = console.log + window.console.log = function () {} + } + + return pub +}()) +function addLocaleDate (data, dateKey) { + const dateOption = [undefined, { hour: 'numeric', minute: 'numeric' }] + function dateToLocale (row, key) { + const date = new Date(row[key]) + row[key] = date + row[key + '_str'] = date.toLocaleDateString(...dateOption) + } + let datasetName, dataset + for ([datasetName, dataset] of Object.entries(data)) { + dataset.forEach(function (row) { + dateKey[datasetName].forEach(key => dateToLocale(row, key)) + }) + } +} + +function filterDataset (data, range) { + function dateFromISO (st) { + return new Date(st).getTime() / 1000 + } + function isInRange (st) { + const tsDate = dateFromISO(st) + return tsDate >= range[0] && tsDate <= range[1] + } + const res = {} + res.trips = data.trips.filter(line => isInRange(line.start_at)) + res.chargings = data.chargings.filter(line => isInRange(line.start_at)) + console.log('filtered_dataset', res) + return res +} + +function filterShortTrip (data) { + const longTrips = { + trips: data.trips.filter(line => line.distance > 10), + chargings: data.chargings + } + console.log('long trips:', longTrips) + return longTrips +} + +function updateFigures (data, oldFigure, x, y) { + const trips = data.trips + const figures = [] + let i = 0 + y.forEach(function (yLabel) { + const xLabel = x[i] + const figure = Object.assign({}, oldFigure[i]) + i++ + // console.log(oldFigure[i]); + // var unique_y_label = y[i].filter((v, i, a) => a.indexOf(v) === i); + // var data_nonnull = trips + // unique_y_label.forEach(function(label) { + // data_nonnull = data_nonnull.filter(line => line[label]); + // }); + if ('mapbox' in figure.layout) { + figure.data[0].lat = [] + figure.data[0].lon = [] + figure.data[0].hovertext = [] + let trip = null + for (trip of trips) { + const xPos = trip.positions[xLabel] + figure.data[0].lat.push(...xPos, null) + figure.data[0].lon.push(...trip.positions[yLabel[0]]) + figure.data[0].hovertext.push(...Array(xPos.length).fill(trip[yLabel[1]]), null) + } + if (trip) { + const lastPos = trip.positions[yLabel[0]].length - 1 + figure.layout.mapbox.center.lat = trip.positions[xLabel][lastPos] + figure.layout.mapbox.center.lon = trip.positions[yLabel[0]][lastPos] + figure.data[1].lat = [figure.layout.mapbox.center.lat] + figure.data[1].lon = [figure.layout.mapbox.center.lon] + } + } else { + const xValues = trips.map(a => a[xLabel]) + // for each y label + for (let j = 0; j < yLabel.length; j++) { + figure.data[j].y = trips.map(a => a[yLabel[j]]) + figure.data[j].x = xValues } } - - average(){ - return this.total; - } - static get_average_key(array, key){ - var avg = new Avg() - array.forEach(function(obj){ avg.add_value(obj[key])}) - return avg.average(); - } -} -var logger = function() -{ - var oldConsoleLog = null; - var pub = {}; - - pub.enableLogger = function enableLogger() - { - if(oldConsoleLog == null) - return; - - window['console']['log'] = oldConsoleLog; - }; - - pub.disableLogger = function disableLogger() - { - oldConsoleLog = console.log; - window['console']['log'] = function() {}; - }; - - return pub; -}(); -function add_date_str(data, date_key){ - var date_option = [undefined, {"hour":"numeric", "minute":"numeric"}] - for([dataset_name, dataset] of Object.entries(data)){ - dataset.forEach(function (row) { - date_key[dataset_name].forEach(function (key) { - var date= new Date(row[key]); - row[key] = date - row[key + "_str"] = date.toLocaleDateString(...date_option); - }) - }) - } + console.log(xLabel, figure) + figures.push(figure) + }) + return figures } -function filter_dataset(data,range){ - function date_from_iso_str(st){ - return new Date(st).getTime()/1000 - } - function is_in_range(st){ - ts_date = date_from_iso_str(st); - return ts_date >= range[0] && ts_date <= range[1] - } - var res = {"trips": data["trips"].filter(line => is_in_range(line["start_at"])), - "chargings": data["chargings"].filter(line => is_in_range(line["start_at"]))}; - console.log("filtered_dataset", res); - return res; +function updateTables (data, tables) { + console.log('tables', tables) + const figures = [] + tables.forEach(function (table) { + figures.push(data[table.src]) + }) + return figures } - -function filter_short_trip(data){ - var long_trips = {"trips": data["trips"].filter(line => line["distance"]>10), - "chargings": data["chargings"]}; - console.log("long trips:" , long_trips) - return long_trips; -} - -function update_figures(data, old_figure, x,y) { - var trips = data["trips"] - var figures = []; - var i=0 - y.forEach(function (y_label){ - var x_label=x[i] - var figure = Object.assign({}, old_figure[i]); - i++; - // console.log(old_figure[i]); - // var unique_y_label = y[i].filter((v, i, a) => a.indexOf(v) === i); - //var data_nonnull = trips - // unique_y_label.forEach(function(label) { - // data_nonnull = data_nonnull.filter(line => line[label]); - // }); - if ("mapbox" in figure["layout"]){ - figure["data"][0]["lat"] = [] - figure["data"][0]["lon"] = [] - figure["data"][0]["hovertext"] = [] - var trip = null; - for (trip of trips) { - x_pos = trip["positions"][x_label] - figure["data"][0]["lat"].push(...x_pos, null); - 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); - } - 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]) - // for each y label - for (j = 0; j < y_label.length; j++) { - figure["data"][j]["y"] = trips.map(a => a[y_label[j]]); - figure["data"][j]["x"] = x_values - } - } - console.log(x_label, figure); - figures.push(figure); - }); - return figures; -} - -function update_table(data, tables){ - console.log("tables", tables); - figures = []; - tables.forEach(function (table){ - figures.push(data[table.src]); - }) - return figures; -} - - -function update_cards_value(data){ - 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"]); - avg_co2.add_value(charge["co2"]); - avg_price.add_value(charge["price"]); - if(diff > 0){ - avg_time.add_value(diff); - } - }) - 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); +function updateCardsValue (data) { + const res = {} + let avgPriceKw + let avgC02 = new Avg(); let avgKw = new Avg(); const avgTime = new Avg() + const avgPrice = new Avg() + data.chargings.forEach(function (charge) { + const diff = ((new Date(charge.stop_at)) - (new Date(charge.start_at))) / 3600000 + avgKw.addValue(charge.kw) + avgC02.addValue(charge.co2) + avgPrice.addValue(charge.price) + if (diff > 0) { + avgTime.addValue(diff) } + }) + if (data.chargings.length > 0) { + avgKw = avgKw.average() + avgC02 = avgC02.average() + avgPriceKw = avgPrice.average() / avgKw + res.avg_emission_kw = avgC02 + res.avg_chg_speed = avgKw / avgTime.average() + } + if (data.trips.length > 0) { + const totalDistance = data.trips[data.trips.length - 1].mileage - data.trips[0].mileage + res.avg_consum_kw = Avg.getAverageFromKey(data.trips, 'consumption_km') + res.elec_consum_kw = totalDistance * 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 = avgPriceKw * res.elec_consum_kw + res.avg_consum_price = avgPriceKw * res.avg_consum_kw + } + for (const [key, value] of Object.entries(res)) { + document.getElementById(key).innerHTML = value.toPrecision(3) + } } -function sort_dataset(ctx, data, tables){ - var table_id = ctx.prop_id.split(".")[0]; - if(ctx.value.length > 0){ - var asc = ctx.value[0].direction==='asc'; - var column_id = ctx.value[0].column_id; - var table = tables.filter(table => table.table_id === table_id)[0]; - var sorted = null; - if (column_id.endsWith("_str")){ - column_id = column_id.slice(0, -4); - sorted = data[table.src].sort(function(a,b){ - return a[column_id] - b[column_id]; - }); - } - else if(typeof data[table.src][0][column_id] == 'number'){ - sorted = data[table.src].sort(function(a,b){ - return a[column_id] - b[column_id]; - }); - } - else { - sorted = data[table.src].sort((a, b) => a[column_id].localeCompare(b[column_id])); - } - if(asc===false){ - sorted = sorted.reverse(); - } - data[table.src]=sorted; +function sortDataset (ctx, data, tables) { + const tableId = ctx.prop_id.split('.')[0] + if (ctx.value.length > 0) { + const asc = ctx.value[0].direction === 'asc' + let columnId = ctx.value[0].column_id + const table = tables.filter(table => table.table_id === tableId)[0] + let sorted + if (columnId.endsWith('_str')) { + columnId = columnId.slice(0, -4) + sorted = data[table.src].sort(function (a, b) { + return a[columnId] - b[columnId] + }) + } else if (typeof data[table.src][0][columnId] === 'number') { + sorted = data[table.src].sort(function (a, b) { + return a[columnId] - b[columnId] + }) + } else { + sorted = data[table.src].sort((a, b) => a[columnId].localeCompare(b[columnId])) } + if (asc === false) { + sorted = sorted.reverse() + } + data[table.src] = sorted + } } - - -function filter_and_sort(data,range, figures, p, log) { - if(log>10){ - logger.disableLogger(); - } - console.log("figures:", figures); - console.log("data:", data) - var ctx = dash_clientside.callback_context.triggered; - console.log("ctx", ctx); - var out_figures = []; - if(ctx.length > 0 && ctx[0].prop_id.endsWith("sort_by")){ - var data_filtered = filter_dataset(data, range); - sort_dataset(ctx[0], data_filtered, p.table_src); - out_figures.push(...update_table(data_filtered, p.table_src)); - out_figures.push(...figures.graph); - out_figures.push(...figures.maps); - } - else{ - add_date_str(data,p.date_columns); - var data_filtered = filter_dataset(data, range); - out_figures.push(...update_table(data_filtered, p.table_src)); - console.log(data_filtered["trips"].length); - long_trips = filter_short_trip(data_filtered); - console.log("trips", data_filtered["trips"].length); - console.log("long_trips", long_trips["trips"].length); - out_figures.push(...update_figures(long_trips, figures["graph"], p.graph_x_label, p.graph_y_label)); - out_figures.push(...update_figures(data_filtered, figures["maps"], p.map_x_label, p.map_y_label)); - update_cards_value(long_trips); - } - return out_figures; -} \ No newline at end of file +function filterAndSort (data, range, figures, p, log) { // eslint-disable-line no-unused-vars + if (log > 10) { + logger.disableLogger() + } + const ctx = dash_clientside.callback_context.triggered // eslint-disable-line no-undef + const outFigures = []; let dataFiltered + console.log('figures:', figures) + console.log('data:', data) + console.log('ctx', ctx) + if (ctx.length > 0 && ctx[0].prop_id.endsWith('sort_by')) { + dataFiltered = filterDataset(data, range) + sortDataset(ctx[0], dataFiltered, p.table_src) + outFigures.push(...updateTables(dataFiltered, p.table_src)) + outFigures.push(...figures.graph) + outFigures.push(...figures.maps) + } else { + addLocaleDate(data, p.date_columns) + dataFiltered = filterDataset(data, range) + outFigures.push(...updateTables(dataFiltered, p.table_src)) + console.log(dataFiltered.trips.length) + const longTrips = filterShortTrip(dataFiltered) + console.log('trips', dataFiltered.trips.length) + console.log('longTrips', longTrips.trips.length) + outFigures.push(...updateFigures(longTrips, figures.graph, p.graph_x_label, p.graph_y_label)) + outFigures.push(...updateFigures(dataFiltered, figures.maps, p.map_x_label, p.map_y_label)) + updateCardsValue(longTrips) + } + return outFigures +} diff --git a/web/figure_filter.py b/web/figure_filter.py index 373d73c..83f1d8e 100644 --- a/web/figure_filter.py +++ b/web/figure_filter.py @@ -104,9 +104,9 @@ class Figure_Filter: else: log_level = 20 fct_def = f"""function(data,range, figures, {self.gen_unused_variable()}) {{ - var params={self.get_params()}; - var log_level={log_level}; - return filter_and_sort(data,range, figures, params, log_level) + const params={self.get_params()}; + const logLevel={log_level}; + return filterAndSort(data, range, figures, params, logLevel); }}""" res = [fct_def, *self.__get_output(),