From 25b86c0149a1a1fb2fc021d54eb34fc45da1ac84 Mon Sep 17 00:00:00 2001 From: Florian BEZANNIER <48728684+flobz@users.noreply.github.com> Date: Tue, 13 Apr 2021 12:48:37 +0200 Subject: [PATCH] Feature abrp (#79) * add ABRP connection * update doc * fix get_last_temp() * add image * update abrp * fix abrpname * fix no last postition * add type point * find model by vin * add Spacetourer * fix indent --- Car.py | 88 +++++++++++++++++----------------------- MyPSACC.py | 97 +++++++++++++++++++++++---------------------- README.md | 3 +- docs/abrp.md | 39 ++++++++++++++++++ docs/abrp.png | Bin 0 -> 112309 bytes libs/car_model.py | 55 +++++++++++++++++++++++++ libs/car_status.py | 37 +++++++++++++++++ otp/Otp.py | 1 - requirements.txt | 1 + server.py | 2 +- web/abrp.py | 51 ++++++++++++++++++++++++ web/db.py | 9 +++++ web/figures.py | 4 +- web/views.py | 63 +++++++++++++++++++++++++++-- 14 files changed, 342 insertions(+), 108 deletions(-) create mode 100644 docs/abrp.md create mode 100644 docs/abrp.png create mode 100644 libs/car_model.py create mode 100644 libs/car_status.py create mode 100644 web/abrp.py diff --git a/Car.py b/Car.py index a857c78..68e3c49 100644 --- a/Car.py +++ b/Car.py @@ -2,66 +2,33 @@ import json from copy import copy from MyLogger import logger +from libs.car_model import CarModel +from libs.car_status import CarStatus -ENERGY_CAPACITY = {'SUV 3008': {'BATTERY_POWER': 10.8, 'FUEL_CAPACITY': 43}, - 'C5 Aircross': {'BATTERY_POWER': 10.8, 'FUEL_CAPACITY': 43}, - 'e-208': {'BATTERY_POWER': 46, 'FUEL_CAPACITY': 0, "ABRP_NAME": "peugeot:e208:20:50"}, - 'e-2008': {'BATTERY_POWER': 46, 'FUEL_CAPACITY': 0, "ABRP_NAME": "peugeot:e2008:20:48"}, - 'corsa-e': {'BATTERY_POWER': 46, 'FUEL_CAPACITY': 0, "ABRP_NAME": "opel:corsae:20:50"} - } -DEFAULT_BATTERY_POWER = 46 -DEFAULT_FUEL_CAPACITY = 0 -DEFAULT_MAX_ELEC_CONSUMPTION = 70 -DEFAULT_MAX_FUEL_CONSUMPTION = 30 -DEFAULT_ABRP_NAME = "peugeot:e208:20:50" CARS_FILE = "cars.json" class Car: - def __init__(self, vin, vehicle_id, brand, label="unknown", battery_power=None, fuel_capacity=None, - max_elec_consumption=None, max_fuel_consumption=None): + def __init__(self, vin, vehicle_id, brand, label=None, battery_power=None, fuel_capacity=None, + max_elec_consumption=None, max_fuel_consumption=None, abrp_name=None): self.vin = vin + if label is not None: + model = CarModel.find_model_by_name(label) + else: + model = CarModel.find_model_by_vin(self.vin) + label = model.name self.vehicle_id = vehicle_id self.label = label self.brand = brand - self.battery_power = None - self.fuel_capacity = None - self.max_elec_consumption = 0 # kwh/100Km - self.max_fuel_consumption = 0 # L/100Km - self.set_energy_capacity(battery_power, fuel_capacity, max_elec_consumption, max_fuel_consumption) - self.status = None + self._status = None + self.abrp_name = abrp_name or model.abrp_name + self.battery_power = battery_power or model.battery_power + self.fuel_capacity = fuel_capacity or model.fuel_capacity + self.max_elec_consumption = max_elec_consumption or model.max_elec_consumption # kwh/100Km + self.max_fuel_consumption = max_fuel_consumption or model.max_fuel_consumption # L/100Km - def set_energy_capacity(self, battery_power=None, fuel_capacity=None, max_elec_consumption=None, - max_fuel_consumption=None): - if battery_power is not None and fuel_capacity is not None: - self.battery_power = battery_power - self.fuel_capacity = fuel_capacity - elif self.__get_model_name() is not None: - model_name = self.__get_model_name() - self.battery_power = ENERGY_CAPACITY[model_name]["BATTERY_POWER"] - self.fuel_capacity = ENERGY_CAPACITY[model_name]["FUEL_CAPACITY"] - else: - logger.warning("Can't get car model please check %s", CARS_FILE) - self.battery_power = DEFAULT_BATTERY_POWER - self.fuel_capacity = DEFAULT_FUEL_CAPACITY - if self.is_electric(): - self.max_fuel_consumption = 0 - else: - self.max_fuel_consumption = max_fuel_consumption or DEFAULT_MAX_FUEL_CONSUMPTION - if self.is_thermal(): - self.max_elec_consumption = 0 - else: - self.max_elec_consumption = max_elec_consumption or DEFAULT_MAX_ELEC_CONSUMPTION - - def __get_model_name(self): - if self.label in ENERGY_CAPACITY: - return self.label - if self.__is_opel_corsa(): - return "corsa-e" - return None - - def __is_opel_corsa(self): - return self.brand == "C" and self.label is None + def set_model_name(self, name): + self.label = name def is_electric(self) -> bool: return self.fuel_capacity == 0 and self.battery_power > 0 @@ -84,12 +51,27 @@ class Car: def to_dict(self): car_dict = copy(self.__dict__) - car_dict.pop("status") + car_dict.pop("_status") return car_dict def __str__(self): return str(self.to_dict()) + def get_abrp_name(self): + if self.abrp_name is not None: + return self.abrp_name + raise ValueError("ABRP model is not set") + + @property + def status(self): + return self._status + + @status.setter + def status(self, value: CarStatus): + self._status = value + if self._status is not None and self.status.__class__ != CarStatus: + self._status.__class__ = CarStatus + self._status.correct() class Cars(list): def __init__(self, *args): @@ -129,7 +111,9 @@ class Cars(list): try: with open(name, "r") as f: json_str = f.read() - return Cars.from_json(json.loads(json_str)) + cars=Cars.from_json(json.loads(json_str)) + cars.save_cars() + return cars except (FileNotFoundError, TypeError) as e: logger.debug(e) return Cars() diff --git a/MyPSACC.py b/MyPSACC.py index 1d7b6ab..6b7deae 100644 --- a/MyPSACC.py +++ b/MyPSACC.py @@ -3,7 +3,6 @@ import re import threading import traceback import uuid -from copy import copy from datetime import datetime from http import HTTPStatus from json import JSONEncoder @@ -24,7 +23,8 @@ from psa_connectedcar.rest import ApiException from MyLogger import logger from utils import get_temp, rate_limit -from web.db import get_db, clean_position +from web.abrp import Abrp +from web.db import get_db, clean_position, get_last_temp from geojson import Feature, Point, FeatureCollection from geojson import dumps as geo_dumps @@ -48,17 +48,9 @@ MQTT_RESP_TOPIC = "psa/RemoteServices/to/cid/" MQTT_EVENT_TOPIC = "psa/RemoteServices/events/MPHRTServices/" MQTT_TOKEN_TTL = 890 CARS_FILE = "cars.json" +DEFAULT_CONFIG_FILENAME = "config.json" -# add method to class Energy -def get_energy(self, energy_type): - for energy in self._energy: - if energy.type == energy_type: - return energy - return psac.models.energy.Energy(charging=psac.models.energy_charging.EnergyCharging()) - - -psac.models.status.Status.get_energy = get_energy class OpenIdCredentialManager(CredentialManager): @@ -128,13 +120,11 @@ def gen_correlation_id(date): class MyPSACC: - vehicles_url = "https://idpcvs.peugeot.com/api/connectedcar/v2/oauth/authorize" - def connect(self, user, password): self.manager.init_with_user_credentials(user, password, self.realm) def __init__(self, refresh_token, client_id, client_secret, remote_refresh_token, customer_id, realm, country_code, - proxies=None, weather_api=None): + proxies=None, weather_api=None, abrp=None): self.realm = realm self.service_information = ServiceInformation(authorize_service, realm_info[self.realm]['oauth_url'], @@ -149,7 +139,6 @@ class MyPSACC: self.remote_refresh_token = remote_refresh_token self.remote_access_token = None self.vehicles_list = Cars.load_cars(CARS_FILE) - self.set_proxies(proxies) self.customer_id = customer_id self._config_hash = None self.api_config.verify_ssl = False @@ -169,12 +158,19 @@ class MyPSACC: self.precond_programs = {} self.info_callback = [] self.info_refresh_rate = 120 + if abrp is None: + self.abrp = Abrp() + else: + self.abrp: Abrp = Abrp(**abrp) + self.set_proxies(proxies) + self.config_file = DEFAULT_CONFIG_FILENAME def get_app_name(self): return realm_info[self.realm]['app_name'] def refresh_token(self): self.manager._refresh_token() + self.save_config() def api(self) -> psac.VehiclesApi: self.api_config.access_token = self.manager._access_token @@ -188,6 +184,7 @@ class MyPSACC: else: self._proxies = proxies self.api_config.proxy = proxies['http'] + self.abrp.proxies = proxies self.manager.proxies = self._proxies Otp.set_proxies(proxies) @@ -198,9 +195,10 @@ class MyPSACC: try: res = self.api().get_vehicle_status(car.vehicle_id, extension=["odometer"]) if res is not None: + car.status = res if self._record_enabled: - self.record_info(vin, res) - break + self.record_info(car) + return res except ApiException: logger.error(traceback.format_exc()) car.status = res @@ -210,7 +208,7 @@ class MyPSACC: if self.info_refresh_rate is not None: while True: sleep(self.info_refresh_rate) - logger.info("refresh_vehicle_info") + logger.debug("refresh_vehicle_info") for car in self.vehicles_list: self.get_vehicle_info(car.vin) for callback in self.info_callback: @@ -276,7 +274,7 @@ class MyPSACC: last_update: datetime = self.remote_token_last_update if (datetime.now() - last_update).total_seconds() < MQTT_TOKEN_TTL: return None - self.manager._refresh_token() + self.refresh_token() if self.remote_refresh_token is None: logger.error("remote_refresh_token isn't defined") self.load_otp(force_new=True) @@ -295,6 +293,7 @@ class MyPSACC: otp_code = self.get_otp_code() res = self.get_remote_access_token(otp_code) self.mqtt_client.username_pw_set("IMA_OAUTH_ACCESS_TOKEN", self.remote_access_token) + self.save_config() return res def on_mqtt_connect(self, client, userdata, rc, a): @@ -471,7 +470,9 @@ class MyPSACC: self.mqtt_client.publish(MQTT_REQ_TOPIC + self.customer_id + "/ThermalPrecond", msg) return True - def save_config(self, name="config.json", force=False): + def save_config(self, name=None, force=False): + if name is None: + name = self.config_file config_str = json.dumps(self, cls=MyPeugeotEncoder, sort_keys=True, indent=4).encode("utf8") new_hash = md5(config_str).hexdigest() if force or self._config_hash != new_hash: @@ -487,37 +488,35 @@ class MyPSACC: config = dict(**json.loads(config_str)) if "country_code" not in config: config["country_code"] = input("What is your country code ? (ex: FR, GB, DE, ES...)\n") - return MyPSACC(**config) + if "abrp" not in config: + config["abrp"] = None + psacc = MyPSACC(**config) + psacc.config_file = name + return psacc def set_record(self, value: bool): self._record_enabled = value - def record_info(self, vin, status: psac.models.status.Status): - mileage = status.timed_odometer.mileage - level = status.get_energy('Electric').level - level_fuel = status.get_energy('Fuel').level - charge_date = status.get_energy('Electric').updated_at - try: - moving = status.kinetic.moving - logger.debug("") - except AttributeError: - logger.error("kinetic not available from api") - moving = None - try: - longitude = status.last_position.geometry.coordinates[0] - latitude = status.last_position.geometry.coordinates[1] - date = status.last_position.properties.updated_at - except AttributeError: - logger.error("last_position not available from api") - longitude = latitude = None + def record_info(self, car: Car): + mileage = car.status.timed_odometer.mileage + level = car.status.get_energy('Electric').level + level_fuel = car.status.get_energy('Fuel').level + charge_date = car.status.get_energy('Electric').updated_at + moving = car.status.kinetic.moving + + longitude = car.status.last_position.geometry.coordinates[0] + latitude = car.status.last_position.geometry.coordinates[1] + date = car.status.last_position.properties.updated_at + if date is None: date = charge_date logger.debug("vin:%s longitude:%s latitude:%s date:%s mileage:%s level:%s charge_date:%s level_fuel:" - "%s moving:%s", vin, longitude, latitude, date, mileage, level, charge_date, level_fuel, + "%s moving:%s", car.vin, longitude, latitude, date, mileage, level, charge_date, level_fuel, moving) - self.record_position(vin, mileage, latitude, longitude, date, level, level_fuel, moving) + self.record_position(car.vin, mileage, latitude, longitude, date, level, level_fuel, moving) + self.abrp.call(car, get_last_temp(car.vin)) try: - charging_status = status.get_energy('Electric').charging.status - self.record_charging(vin, charging_status, charge_date, level, latitude, longitude) + charging_status = car.status.get_energy('Electric').charging.status + self.record_charging(car.vin, charging_status, charge_date, level, latitude, longitude) logger.debug("charging_status:%s ", charging_status) except AttributeError: logger.error("charging status not available from api") @@ -547,8 +546,9 @@ class MyPSACC: conn.commit() logger.info("new position recorded for %s", vin) clean_position(conn) - else: - logger.debug("position already saved") + return True + logger.debug("position already saved") + return False def record_charging(self, vin, charging_status, charge_date, level, latitude, longitude): conn = get_db() @@ -609,12 +609,15 @@ class MyPSACC: res = conn.execute("select * from battery").fetchall() return tuple(map(dict, res)) + def __iter__(self): + for key, value in self.__dict__.items(): + yield key, value class MyPeugeotEncoder(JSONEncoder): def default(self, mp: MyPSACC): - data = copy(mp.__dict__) + data = dict(mp) mpd = {"proxies": data["_proxies"], "refresh_token": mp.manager.refresh_token, - "client_secret": mp.service_information.client_secret} + "client_secret": mp.service_information.client_secret, "abrp":dict(mp.abrp)} for el in ["client_id", "realm", "remote_refresh_token", "customer_id", "weather_api", "country_code"]: mpd[el] = data[el] return mpd diff --git a/README.md b/README.md index d00097f..f1f378a 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,8 @@ We will retrieve these informations: ## FAQ If you have a problem, or a question please check if the answer isn't in the [FAQ](FAQ.md). - +## Connect to A better Route Planner +You can connect the app to ABRP, see [this page](docs/abrp.md) ## API documentation The api documentation is described here : [api_spec.md](api_spec.md). You can use all functions from the doc, for example : diff --git a/docs/abrp.md b/docs/abrp.md new file mode 100644 index 0000000..8a67a5d --- /dev/null +++ b/docs/abrp.md @@ -0,0 +1,39 @@ +## Connect to A better Route Planner + Thank's to this you will no longer have to edit manually: +- Exterior temperature +- Autonomy left +- Consumption + +ABRP will optimize your itinerary with these parameters. + +### Prerequisite +1. A working last version of psa_car_controller +2. A abetterrouteplanner account +3. label must be set in cars.json + +### Procedure +1. Go to [https://abetterrouteplanner.com/](https://abetterrouteplanner.com/) +2. Edit the parameter of your car, you should have something like this: +![](abrp.png) +3. Click on Generic Link +4. Click on copy +5. Open the following url after replacing YOURTOKEN by the value you just copied: +``` +http://localhost:5000/abrp?token=YOURTOKEN +``` +7. Go to [http://localhost:5000](http://localhost:5000) +8. Click on control tab +9. Enable ABRP for your car +10. Open cars.json +11. If abrp_name is null: + + 11.1 Get the name from this list : [model list](https://api.iternio.com/1/tlm/get_carmodels_list?api_key=32b2162f-9599-4647-8139-66e9f9528370) + + 11.2 stop the psa_car_controller + + 11.3 replace null with the correct name + + 11.4 save the file + + 11.5 restart psa_car_controller +12. Enjoy \ No newline at end of file diff --git a/docs/abrp.png b/docs/abrp.png new file mode 100644 index 0000000000000000000000000000000000000000..df1d949b22ca6f79bae88564e8bd67bea3c1b2cd GIT binary patch literal 112309 zcmXtf2Rzh&{J%sl#Mx)>nZ5TWWOGJFI3s({MD{uvkv+1V6_TBOk{y!l?9mrVHov#u z|Nry&_UQ5Gd+t8>9dFd+0lE9H{DTb#E^bD0Kk>BhFh)}C@G#M0VV!Vs zaFBCbxkHQxswjrZI=L#;3`j|bPxSdVp5Sm|YQ#Vlx1rC}UbB=qG@j%N9bc}Ej-7ts zWU0@2C7V2Me>yTEs7yzdF%qf>VT?Rv?`b%2czL3zVE7AR zCYG?HnPp7s`_N3_6S4Z^Lz?js*=g>Er&Z*O{mW+4|N9$I#R`%5rwN>#Lh}`GI-|yD z?m5PXlf`LZe)lOrT|yBV4SeVUQNkm0@b2IjLS_3^Ei%jkmbU)oNrkGVym>Z4p2KRM zRtpRUwf^O6MVGX(E~@6|n&i7xUhgW1KqM5AZjOfa!WbhB6IG@9o9P{2 z2r+6#k{omu$lArPdoXB(`kD%$52uJ0t+p*(Enm*qHVdLxes?{9A=2~}zZ{5jTFhcA zoHga#Jw_L#x6f5Ao|}89Kb%5cEh8C6pr~C0RTYvn$Hf?z?J~Xd6;&>sVO%t7lJfkQ z$ayChdIR6MGCWG`p(CfNY2vw`ug~y=^8VOS#K{dlhP!7_-p7d5AkZF$Iu5KEEZMk zgsgO-h0)XS7&fq0y?hWY@4f6{Tecz_V$uW#uE*cm8wR;KT$NS=P-;&Z< znx(FFI+vDePI0|&!#%(Rjmad29q`kGdT}QktadTFq9I zTOqBH9IhS*of;7jG-u;Dn2_}hRtoYkgkC@RqYSZD=emuBYC@PI)l&cSE69=5@^2Sz ze&V3U()1k_35CNc_$-kE?3MXhDZpbU%SlVgu&2+?~DKUEp;RLRfKa` ztHLz}NtC&8A?gsKT@udvC*lkFOxzFSIXm+I&@g7|t3r~^&vVjIoZ%_jdI$fE)Rkjb z_Y{t!JOP)r3VZb{ZS~Ck0O!kp zzu9&2u~MtPco%WlAh*WyUJlawPoumGSkC0@9dtyT;2c^~Y)4ktQbp~X{d z(Z?Wz*CK=!72#%}ufO!_bg{{KmMPMzTx&{L#=|TkI{G;wjrid~=q+`2x6l9IK9p6g zO+R#oa)z=mO&5tx%Z!e##nXgqvEd*hFZ8ZABm(pl1i;DWRX{Q#p?2I0Y(9?G(TnXP zt=?5H0$ll#mE#VsGa4UEf(HhyWM)bjXM87}MxQ>Fk_v3F`oy3?q-M%Kk|RclWY?Oi z6?LFYex&$f4V^eQH#g&MFhe76-&U)%r3zJi?c9?#?Q4;B(nK-ERLzop) zVn3(}Zz{EQXBz1Q61-$p$>;vj^z`H0uFXi8X|dzK z5*DW6w%G*i_ZQl)y-cl?w)daV?^xDBt?fhTQA}24K~P0pT-u?4iy^#F~AF(e0Cb?FUTHQS8e5kd; z%y{UFITv!7IRjNZOYDI~JA@#y!dXVJkjmlMDY}s&{XYF47%I~0gT8u`2{UXeaHxv0 z^*|5{oRj^qzD(OXi>h~NU-a}U!Y#a9`J-WdskS;AiX!u4_kP)Bv(5dc*cuzXUB%&K z3g3~eeanM`Z1URp8Xk_RN80M9@<7G?Z`WvnTBN>3F=o4m7&Oy(YLt37Vf z-A;xQQ&Lh+qijf$--^Y>$D?i>F<4e-D^R<~=TOBW4zK^P44c@WJ&O2KW0WyWMov!t z)dTWAA0z)aj2X$O%E=fB!9s)ys3yNoR<4YOpj#}D&68COk7$)C8_d*(qj41@cQ4X; z%wmfSiR<(m8MDgNiHJV={jR7*D56dUJ!4>cqz44
g27`y_sf@~MaIrVH^6b1n!pa_*C> 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ξ$&wDL=rIg|kQ4U1>8p9AM-tOdUy1Hsw72 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 a`J+pG6Ymv0I%5sYYsAEeY* Energy: + for energy in self._energy: + if energy.type == energy_type: + return energy + return Energy(charging=EnergyCharging()) diff --git a/otp/Otp.py b/otp/Otp.py index 21fa158..77d0539 100644 --- a/otp/Otp.py +++ b/otp/Otp.py @@ -189,7 +189,6 @@ class Otp: return False def activation_finalyze(self, random_bytes=None): - R = self.get_r() params = {"action": "ActionFinalize", "mode": self.mode, "id": self.data.iwid, "lastsync": self.data.iwTsync, "version": "Generator-1.0/0.2.11", diff --git a/requirements.txt b/requirements.txt index 15421cf..ddc8c37 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ paho-mqtt>=1.5.0 dash>=1.18.0 +dash_daq plotly>=4 cryptography>=3.0 Werkzeug>=1.0.0 diff --git a/server.py b/server.py index 4f4a8da..fdc2dcc 100755 --- a/server.py +++ b/server.py @@ -61,7 +61,7 @@ if __name__ == "__main__": logger.info("offline mode") else: try: - web.app.myp.manager._refresh_token() + web.app.myp.refresh_token() except OAuthError: if args.mail and args.password: client_email = args.mail diff --git a/web/abrp.py b/web/abrp.py new file mode 100644 index 0000000..f45fabd --- /dev/null +++ b/web/abrp.py @@ -0,0 +1,51 @@ +import json +import traceback +from datetime import datetime + +import requests + +from Car import Car +from MyLogger import logger + + +class Abrp: + api_key = "1e28ad14-df16-49f0-97da-364c9154b44a" + url = "https://api.iternio.com/1/tlm/send" + + def __init__(self, token: str = "", abrp_enable_vin=None): + if abrp_enable_vin is None: + abrp_enable_vin = list() + self.token = token + self.abrp_enable_vin = set(abrp_enable_vin) + self.proxies = None + + def call(self, car: Car, ext_temp: float = None): + try: + if self.token is None or len(self.token) == 0: + logger.error("No token provided") + elif car.vin in self.abrp_enable_vin: + energy = car.status.get_energy('Electric') + tlm = {"utc": int(datetime.timestamp(energy.updated_at)), + "soc": energy.level, + "speed": getattr(car.status.kinetic, "speed", None), + "car_model": car.get_abrp_name(), + "current": car.status.battery.current, + "is_charging": energy.charging.status == "InProgress", + "lat": car.status.last_position.geometry.coordinates[1], + "lon": car.status.last_position.geometry.coordinates[0], + "power": energy.consumption + } + if ext_temp is not None: + tlm["ext_temp"] = ext_temp + params = {"tlm": json.dumps(tlm), "token": self.token, "api_key": self.api_key} + response = requests.request("POST", self.url, params=params, proxies=self.proxies, + verify=self.proxies is None) + logger.debug(response.text) + return response.json()["status"] == "ok" + except (AttributeError, IndexError, ValueError): + logger.error(traceback.format_exc()) + return False + + def __iter__(self): + yield "abrp_enable_vin", list(self.abrp_enable_vin) + yield "token", self.token diff --git a/web/db.py b/web/db.py index d54bac8..a8cc21d 100644 --- a/web/db.py +++ b/web/db.py @@ -46,3 +46,12 @@ def clean_position(conn): logger.debug("Delete duplicate line") conn.execute("DELETE FROM position where Timestamp=?;", (res[1]["Timestamp"],)) conn.commit() + + +def get_last_temp(vin): + conn = get_db() + res = conn.execute("SELECT temperature FROM position WHERE VIN=? ORDER BY Timestamp DESC limit 1", + (vin,)).fetchone() + if res is None: + return None + return res[0] diff --git a/web/figures.py b/web/figures.py index 1dbda8a..485b626 100644 --- a/web/figures.py +++ b/web/figures.py @@ -173,10 +173,10 @@ def get_figures(trips: Trips, charging: Tuple[dict]): y=consumption_by_temp_df["consumption_km"], name="Trips")) consumption_fig_by_temp.update_layout(xaxis_title="average temperature in °C", yaxis_title="Consumption kWh/100Km") - consumption_graph_by_temp = Graph(figure=consumption_fig_by_temp, id="consumption_fig_by_temp") + consumption_graph_by_temp = html.Div(Graph(figure=consumption_fig_by_temp), id="consumption_graph_by_temp") else: - consumption_graph_by_temp = Graph(style={'display': 'none'}) + consumption_graph_by_temp = html.Div(Graph(style={'display': 'none'}), id="consumption_graph_by_temp") def __calculate_co2_per_kw(charging_data): diff --git a/web/views.py b/web/views.py index 45d30e5..313725b 100644 --- a/web/views.py +++ b/web/views.py @@ -2,9 +2,10 @@ import json import traceback from datetime import datetime, timezone import dash_bootstrap_components as dbc -from dash.dependencies import Output, Input +from dash.dependencies import Output, Input, MATCH import dash_core_components as dcc import dash_html_components as html +import dash_daq as daq from MyLogger import logger from flask import jsonify, request, Response as FlaskResponse @@ -16,6 +17,12 @@ from web import figures from web.app import app, dash_app, myp, chc import web.db +RESPONSE = "-response" + +EMPTY_DIV = "empty-div" + +ABRP_SWITCH = 'abrp-switch' + ERROR_DIV = dbc.Alert("No data to show, there is probably no trips recorded yet", color="danger") trips: Trips chargings: dict @@ -25,7 +32,7 @@ min_date = max_date = min_millis = max_millis = step = marks = cached_layout = N @dash_app.callback(Output('trips_map', 'figure'), Output('consumption_fig', 'figure'), Output('consumption_fig_by_speed', 'figure'), - Output('consumption_fig_by_temp', 'graph'), + Output('consumption_graph_by_temp', 'children'), Output('consumption', 'children'), Output('tab_trips', 'children'), Output('tab_battery', 'children'), @@ -49,6 +56,19 @@ def display_value(value): figures.battery_table, max_millis, step, marks +@dash_app.callback(Output({'role': ABRP_SWITCH + RESPONSE, 'vin': MATCH}, 'children'), + Input({'role': ABRP_SWITCH, 'vin': MATCH}, 'id'), + Input({'role': ABRP_SWITCH, 'vin': MATCH}, 'value')) +def update_abrp(div_id, value): + vin = div_id["vin"] + if value: + myp.abrp.abrp_enable_vin.add(vin) + else: + myp.abrp.abrp_enable_vin.discard(vin) + myp.save_config() + return " " + + @app.route('/get_vehicles') def get_vehicules(): response = app.response_class( @@ -127,6 +147,21 @@ def get_recorded_position(): return FlaskResponse(myp.get_recorded_position(), mimetype='application/json') +@app.route('/abrp') +def abrp(): + vin = request.args.get('vin', None) + enable = request.args.get('enable', None) + token = request.args.get('token', None) + if vin is not None and enable is not None: + if enable == '1': + myp.abrp.abrp_enable_vin.add(vin) + else: + myp.abrp.abrp_enable_vin.discard(vin) + if token is not None: + myp.abrp.token = token + return jsonify(dict(myp.abrp)) + + @app.after_request def after_request(response): header = response.headers @@ -160,6 +195,25 @@ def update_trips(): logger.error("update_trips (slider): %s", traceback.format_exc()) return + +def __get_control_tabs(): + tabs = [] + for car in myp.vehicles_list: + if car.label is None: + label = car.vin + else: + label = car.label + tabs.append(dbc.Tab(label=label, id="tab-" + car.vin, children=[ + daq.ToggleSwitch( + id={'role': ABRP_SWITCH, 'vin': car.vin}, + value=car.vin in myp.abrp.abrp_enable_vin, + label="Send data to ABRP" + ), + html.Div(id={'role': ABRP_SWITCH + RESPONSE, 'vin': car.vin}) + ])) + return tabs + + def serve_layout(): global cached_layout if cached_layout is None: @@ -188,13 +242,14 @@ def serve_layout(): dbc.Tab(label="Charge", tab_id="charge", id="tab_charge", children=[figures.battery_table]), dbc.Tab(label="Map", tab_id="map", children=[ dcc.Graph(figure=figures.trips_map, id="trips_map", style={"height": '90vh'})]), + dbc.Tab(label="Control", tab_id="control", children=dbc.Tabs(id="control-tabs", + children=__get_control_tabs())) ], id="tabs", active_tab="summary", ), - html.Div(id="tab-content", className="p-4"), + html.Div(id=EMPTY_DIV), ])]) - except (IndexError, TypeError, NameError): logger.warning("Failed to generate figure, there is probably not enough data yet") logger.debug(traceback.format_exc())