fix: BUG-22 include GPS-derived speeds in trip max (Pi + server)
This commit is contained in:
+12
-2
@@ -450,7 +450,8 @@ def compute_trips_for_device(device_id):
|
||||
seg_rows = rows[start_idx:end_idx + 1]
|
||||
|
||||
distance = 0
|
||||
speeds = []
|
||||
speeds = [] # OBD speeds — used for avg
|
||||
max_speeds = [] # OBD + GPS-derived — used for max
|
||||
for i in range(1, len(seg_rows)):
|
||||
d = haversine_km(seg_rows[i - 1][1], seg_rows[i - 1][2],
|
||||
seg_rows[i][1], seg_rows[i][2])
|
||||
@@ -458,6 +459,15 @@ def compute_trips_for_device(device_id):
|
||||
s = seg_rows[i][3]
|
||||
if s is not None and s > 0:
|
||||
speeds.append(s)
|
||||
max_speeds.append(s)
|
||||
else:
|
||||
# GPS-derived fallback for max (mirror the Pi): when OBD speed
|
||||
# is missing, use the segment's GPS speed (>= 8 m, <= 220 km/h).
|
||||
seconds = (seg_rows[i][0] - seg_rows[i - 1][0]).total_seconds()
|
||||
if seconds > 0 and d * 1000 >= 8:
|
||||
seg_speed = d / seconds * 3600
|
||||
if seg_speed <= 220:
|
||||
max_speeds.append(seg_speed)
|
||||
|
||||
duration_s = int((seg_rows[-1][0] - seg_rows[0][0]).total_seconds())
|
||||
if duration_s < 30 or distance < 0.05:
|
||||
@@ -469,7 +479,7 @@ def compute_trips_for_device(device_id):
|
||||
"distance_km": round(distance, 3),
|
||||
"duration_s": duration_s,
|
||||
"avg_speed_kmh": round(sum(speeds) / len(speeds), 1) if speeds else None,
|
||||
"max_speed_kmh": round(max(speeds), 1) if speeds else None,
|
||||
"max_speed_kmh": round(max(max_speeds), 1) if max_speeds else None,
|
||||
"start_lat": seg_rows[0][1],
|
||||
"start_lon": seg_rows[0][2],
|
||||
"end_lat": seg_rows[-1][1],
|
||||
|
||||
Reference in New Issue
Block a user