mirror of
https://github.com/flobz/psa_car_controller.git
synced 2026-08-26 10:17:18 +00:00
improve performance & debug
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import logging
|
||||
from statistics import mean
|
||||
from typing import List, Dict
|
||||
|
||||
@@ -50,13 +51,14 @@ class Trip:
|
||||
return None
|
||||
|
||||
def set_consumption(self, diff_level: float) -> float:
|
||||
if self.distance is None:
|
||||
raise ValueError("Distance not set")
|
||||
if diff_level < 0:
|
||||
logger.debugv("trip has negative consumption")
|
||||
diff_level = 0
|
||||
self.consumption = diff_level * self.car.battery_power / 100
|
||||
self.consumption_km = 100 * self.consumption / self.distance # kw/100 km
|
||||
try:
|
||||
self.consumption_km = 100 * self.consumption / self.distance # kw/100 km
|
||||
except TypeError:
|
||||
raise ValueError("Distance not set")
|
||||
return self.consumption_km
|
||||
|
||||
def set_fuel_consumption(self, consumption) -> float:
|
||||
@@ -142,7 +144,8 @@ class Trips(list):
|
||||
for vin in vehicles:
|
||||
trips = Trips()
|
||||
vin = vin[0]
|
||||
res = conn.execute('SELECT * FROM position WHERE VIN=? ORDER BY Timestamp', (vin,)).fetchall()
|
||||
res = conn.execute('SELECT Timestamp, VIN, longitude, latitude, mileage, level, moving, temperature,'
|
||||
' level_fuel, altitude FROM position WHERE VIN=? ORDER BY Timestamp', (vin,)).fetchall()
|
||||
if len(res) > 1:
|
||||
car = vehicles_list.get_car_by_vin(vin)
|
||||
assert car is not None
|
||||
@@ -152,8 +155,9 @@ class Trips(list):
|
||||
trip = Trip()
|
||||
# for debugging use this line res = list(map(dict,res))
|
||||
for x in range(0, len(res) - 2):
|
||||
logger.debugv("%s mileage:%.1f level:%s level_fuel:%s",
|
||||
res[x]['Timestamp'], res[x]['mileage'], res[x]['level'], res[x]['level_fuel'])
|
||||
if logger.isEnabledFor(logging.DEBUG): # reduce execution time if debug disabled
|
||||
logger.debugv("%s mileage:%.1f level:%s level_fuel:%s",
|
||||
res[x]['Timestamp'], res[x]['mileage'], res[x]['level'], res[x]['level_fuel'])
|
||||
next_el = res[x + 2]
|
||||
distance = end["mileage"] - start["mileage"]
|
||||
duration = (end["Timestamp"] - start["Timestamp"]).total_seconds() / 3600
|
||||
@@ -161,17 +165,11 @@ class Trips(list):
|
||||
speed_average = distance / duration
|
||||
except ZeroDivisionError:
|
||||
speed_average = 0
|
||||
restart_trip = False
|
||||
if trip_parser.is_refuel(start, end, distance):
|
||||
restart_trip = True
|
||||
elif speed_average < 0.2 and duration > 0.05:
|
||||
restart_trip = True
|
||||
logger.debugv("low speed detected")
|
||||
if restart_trip:
|
||||
if TripParser.is_low_speed(speed_average, duration) or trip_parser.is_refuel(start, end, distance):
|
||||
start = end
|
||||
trip = Trip()
|
||||
logger.debugv("restart trip at %s mileage:%.1f level:%s level_fuel:%s",
|
||||
start['Timestamp'], start['mileage'], start['level'], start['level_fuel'])
|
||||
logger.debugv("restart trip at {0[Timestamp]} mileage:{0[mileage]:.1f} level:{0[level]}"
|
||||
" level_fuel:{0[level_fuel]}", start, style='{')
|
||||
else:
|
||||
distance = next_el["mileage"] - end["mileage"] # km
|
||||
duration = (next_el["Timestamp"] - end["Timestamp"]).total_seconds() / 3600
|
||||
@@ -180,13 +178,9 @@ class Trips(list):
|
||||
except ZeroDivisionError:
|
||||
speed_average = 0
|
||||
end_trip = False
|
||||
if trip_parser.is_refuel(end, next_el, distance):
|
||||
if trip_parser.is_refuel(end, next_el, distance) or \
|
||||
TripParser.is_low_speed(speed_average, duration):
|
||||
end_trip = True
|
||||
elif speed_average < 0.2 and duration > 0.05:
|
||||
# (distance == 0 and duration > 0.08) or duration > 2 or
|
||||
# check the speed to handle missing point
|
||||
end_trip = True
|
||||
logger.debugv("low speed detected")
|
||||
elif duration > 2:
|
||||
end_trip = True
|
||||
logger.debugv("too much time detected")
|
||||
@@ -196,8 +190,8 @@ class Trips(list):
|
||||
end_trip = True
|
||||
logger.debugv("last position found")
|
||||
if end_trip:
|
||||
logger.debugv("stop trip at %s mileage:%.1f level:%s level_fuel:%s",
|
||||
end['Timestamp'], end['mileage'], end['level'], end['level_fuel'])
|
||||
logger.debugv("stop trip at {0[Timestamp]} mileage:{0[mileage]:.1f} level:{0[level]}"
|
||||
" level_fuel:{0[level_fuel]}", end, style='{')
|
||||
trip.distance = end["mileage"] - start["mileage"] # km
|
||||
if trip.distance > 0:
|
||||
trip.start_at = start["Timestamp"]
|
||||
@@ -215,11 +209,10 @@ class Trips(list):
|
||||
if diff_level_fuel != 0:
|
||||
trip.set_fuel_consumption(diff_level_fuel)
|
||||
trip.mileage = end["mileage"]
|
||||
logger.debugv("Trip: %s -> %s %.1fkm %.2fh %.0fkm/h %.2fkWh %.2fkWh/100km %.2fL "
|
||||
"%.2fL/100km %.1fkm",
|
||||
trip.start_at, trip.end_at, trip.distance, trip.duration,
|
||||
trip.speed_average, trip.consumption, trip.consumption_km,
|
||||
trip.consumption_fuel, trip.consumption_fuel_km, trip.mileage)
|
||||
logger.debugv("Trip: {0.start_at} -> {0.end_at} {0.distance:.1f}km {0.duration:.2f}h "
|
||||
"{0.speed_average:.0f}km/h {0.consumption:.2f}kWh "
|
||||
"{0.consumption_km:.2f}kWh/100km {0.consumption_fuel:.2f}L "
|
||||
"{0.consumption_fuel_km:.2f}L/100km {0.mileage:.1f}km", trip, style="{")
|
||||
# filter bad value
|
||||
trips.check_and_append(trip)
|
||||
start = next_el
|
||||
|
||||
Reference in New Issue
Block a user