From b665468ca193b962bfa4e75637f39b5d652b4d9a Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Thu, 13 May 2021 13:35:01 +0200 Subject: [PATCH] improve battery curve algo --- libs/car.py | 4 ++-- web/figures.py | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libs/car.py b/libs/car.py index d3fc416..2b2949d 100644 --- a/libs/car.py +++ b/libs/car.py @@ -78,9 +78,9 @@ class Car: self._status.__class__ = CarStatus self._status.correct() - def get_charge_speed(self, start_level, end_level, duration_in_sec) -> float: + def get_charge_speed(self, diff_elvel, duration_in_sec) -> float: duration_in_hour = duration_in_sec / 3600 - charged_kw = self.battery_power * (end_level - start_level) / 100 + charged_kw = self.battery_power * diff_elvel / 100 kw_hour = charged_kw / duration_in_hour return kw_hour diff --git a/web/figures.py b/web/figures.py index 1cbadf0..8bd7943 100644 --- a/web/figures.py +++ b/web/figures.py @@ -162,16 +162,20 @@ def get_battery_curve_fig(row: dict, car: Car): res = Database.get_battery_curve(conn, start_date, car.vin) conn.close() res.insert(0, {"level": row["start_level"], "date": start_date}) - res.append({"level": row["end_level"], "date": stop_at}) + if row["end_level"] is not None: + res.append({"level": row["end_level"], "date": stop_at}) battery_curves = [] speed = 0 - for x in range(1, len(res)): - start_level = res[x - 1]["level"] - end_level = res[x]["level"] - diff_sec = (res[x]["date"] - res[x - 1]["date"]).total_seconds() - if diff_sec > 0: - speed = car.get_charge_speed(start_level, end_level, diff_sec) + start = 0 + for end in range(1, len(res)): + start_level = res[start]["level"] + end_level = res[end]["level"] + diff_level = end_level-start_level + diff_sec = (res[end]["date"] - res[start]["date"]).total_seconds() + if diff_sec > 0 and diff_level > 3: + speed = car.get_charge_speed(diff_level, diff_sec) battery_curves.append({"level": start_level, "speed": speed}) + start = end battery_curves.append({"level": row["end_level"], "speed": speed}) fig = px.line(battery_curves, x="level", y="speed") fig.update_layout(xaxis_title="Battery %", yaxis_title="Charging speed in kW")