fix(phase26): persist DTC/MIL state + server speed_source (BUG-03, BUG-05)
BUG-03: DTC/MIL codes were never persisted; lost on OBD disconnect or reboot. - Add new dtc table schema (code, description, MIL, first/last seen, IS_SET) and a migration that rebuilds the original unused NAME/STATUS/DTC_ID table. - Persist MIL + codes to SQLite on each successful OBD poll (_persist_dtc_state). - /api/dtc falls back to the last-persisted snapshot when OBD is offline/stale. - Fix get_overview_stats to count the real dtc table (was querying non-existent dtc_codes table). - Add cleared/since tracking via IS_SET + FIRST_SEEN_AT/LAST_SEEN_AT. BUG-05: server trip replay hardcoded speed_source:'gps'; mirror Pi's 'obd if speed>0 else gps' logic in server get_trip_route. Adds tests/test_dtc_persistence.py (7 tests).
This commit is contained in:
@@ -335,9 +335,17 @@ def data():
|
||||
|
||||
@app.route('/api/dtc')
|
||||
def api_dtc():
|
||||
fresh_mil = app_obd.get_fresh_mil()
|
||||
fresh_codes = app_obd.get_fresh_dtc_codes()
|
||||
if fresh_mil is None and not fresh_codes:
|
||||
# OBD offline/stale (disconnected or not yet polled): fall back to the
|
||||
# last-persisted DTC snapshot so codes survive a disconnect/reboot.
|
||||
persisted = app_sql.get_persisted_dtc_state()
|
||||
fresh_mil = persisted["mil"]
|
||||
fresh_codes = persisted["codes"]
|
||||
return jsonify({
|
||||
"mil": app_obd.get_fresh_mil(),
|
||||
"codes": app_obd.get_fresh_dtc_codes(),
|
||||
"mil": fresh_mil,
|
||||
"codes": fresh_codes,
|
||||
})
|
||||
|
||||
@app.route('/api/stats')
|
||||
|
||||
Reference in New Issue
Block a user