improve battery curve algo

This commit is contained in:
Florian Bezannier
2021-05-13 13:35:38 +02:00
parent 6207b75b27
commit b665468ca1
2 changed files with 13 additions and 9 deletions
+2 -2
View File
@@ -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
+11 -7
View File
@@ -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")