justin 74bfa2e146 Add 2 Honda vehicle profiles (2007 CR-V 2.4, 2022 Odyssey 3.5)
Built by the honda-profile-research workflow (per-vehicle research ->
synthesize -> adversarial-review) and validated through the loader (every
formula compiles, presets resolve, decoders sane):

- honda-crv-2.4-2007.json    ISO 15765 CAN, MAF + wideband A/F (lambda),
                             single-bank K24Z1 i-VTEC, 19 PIDs, 39 DTCs.
- honda-odyssey-3.5-2022.json ISO 15765 CAN, MAF, dual-bank J35 V6 (STFT/LTFT
                             B1&B2 + 4 O2/AF sensors), 31 PIDs, 83 DTCs.

Standard SAE Mode-01 PIDs (all verified) + gauge zones on ECT/RPM/BATT;
Honda enhanced Mode-22 PIDs omitted (no public source pairs a documented PID
with a verified formula for these -- Honda uses proprietary HDS). Web-
researched, not yet read on the actual vehicles.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
2026-07-01 08:45:57 -04:00
2026-06-30 15:37:47 -04:00

OBDash

Open-source, vehicle-agnostic OBD-II scanner — Python/Qt, cross-platform.

A desktop app that turns a cheap ELM327 adapter into a real diagnostic tool: live multi-axis graphs, automotive-style gauges, a sortable data table, and DTC read/clear — for any OBD-II vehicle. What it can read for each car is defined by a JSON vehicle profile (PIDs, scaling, codes, gauges), so adding a new vehicle is data, not code. Runs on Windows, macOS, and Linux.

Multi-axis graph Gauge view

Validated on real vehicles (1997 Jeep Wrangler 4.0 I6, 1996 Mustang Cobra 4.6 DOHC, Ford 6.0L Power Stroke, …) using a QinHeng CH340 ELM327 clone.

Features

  • Live graphs with true multi-axis overlay — each metric gets its own Y axis, colored to match its line; click a line to move its axis to the left. Optional Normalize (% of range) mode.
  • Gauge view — round, tach-style gauges with tick scales, needles, redline zones (configurable per metric), and peak-hold.
  • Table view — value, min/max, and confidence per signal.
  • Diagnostics — read/clear trouble codes (guarded), with descriptions from a built-in 1,400+ generic SAE DTC database (profiles override) and no-start codes flagged; plus freeze-frame (the snapshot when a code set).
  • Emissions readiness — I/M monitor status + MIL → a "will it pass inspection?" report. Vehicle info — VIN, calibration IDs, ECU name (Mode 09).
  • Trip / Performance — live MPG, trip distance/fuel, and 0-60 mph & 1/4-mile timers (auto-detected from a standing start).
  • Vehicle profiles — switch/import/edit vehicles from the Profile menu.
  • Units — °C/°F toggle (US/metric).
  • Captures — record a session to CSV and replay it.
  • Mock mode — explore the whole app with simulated data, no adapter needed.

Download

Grab a prebuilt binary from the latest release:

Platform File
Windows OBDash-windows.exe
macOS OBDash-macos.zip (unzip → OBDash.app)
Linux x86_64 OBDash-linux-x86_64
Linux ARM64 (Raspberry Pi) OBDash-linux-aarch64

Each binary ships with a .sha256 so you can verify the download:

# macOS / Linux
shasum -a 256 -c OBDash-macos.zip.sha256        # macOS
sha256sum -c OBDash-linux-x86_64.sha256         # Linux
# Windows
(Get-FileHash OBDash-windows.exe -Algorithm SHA256).Hash.ToLower()
Get-Content OBDash-windows.exe.sha256           # compare the two

Unsigned-binary warnings (expected for open source)

The binaries aren't code-signed, so the OS will warn on first launch. They're safe — verify the checksum above, then:

  • Windows (SmartScreen): "Windows protected your PC" → More infoRun anyway.
  • macOS (Gatekeeper): right-click the app → Open (then Open again), or clear the quarantine flag: xattr -dr com.apple.quarantine OBDash.app.
  • Linux: chmod +x OBDash-linux-x86_64 && ./OBDash-linux-x86_64.

(Code signing removes these warnings but costs money / a hardware token; see the project notes. Checksums give you the same integrity guarantee for free.)

Run from source

pip install -r requirements-gui.txt
python run_gui.py        # tick "Mock" + Connect to explore with no adapter

Needs Python 3.10+. The GUI deps (PySide6, pyqtgraph, numpy, pyserial) all ship wheels for Windows / macOS (incl. Apple Silicon) / Linux.

Connecting to a vehicle

Pick the adapter type in the toolbar, then Connect (key to RUN). OBDash speaks to any ELM327 over three transports:

  • Serial / USB / classic-Bluetooth — the port dropdown. USB CH340 adapters need a one-time driver:
    • Windows — WCH CH341SER; shows as USB-SERIAL CH340 (COMx).
    • macOS — WCH CH34xVCPDriver; port /dev/cu.wchusbserial*.
    • Linux — kernel ch341 (no install); /dev/ttyUSB0 (add yourself to dialout).
    • Classic-Bluetooth ELM327 pair as a serial port (COMx / /dev/cu.* / rfcomm) — pair in your OS, then pick that port here.
  • WiFi — for WiFi ELM327 dongles: enter the host/port (default 192.168.0.10:35000). Connect to the dongle's WiFi network first. No driver needed.
  • Bluetooth LE — Scan and pick the device. BLE support needs pip install bleak (optional; not bundled in the prebuilt binaries). BLE dongle GATT layouts vary, so this is experimental.

Default serial baud is 38400; the ELM327 auto-negotiates the vehicle's protocol.

Vehicle profiles

Each profiles/*.json teaches OBDash how to read one vehicle. Bundled profiles:

Profile Vehicle
generic-obd2.json Any OBD-II vehicle (standard SAE PIDs) — a base to fork
ford-6.0-powerstroke.json Ford 6.0L Power Stroke (20032007) — incl. enhanced ICP/FICM/EBP PIDs
jeep-wrangler-4.0-1997.json 1997 Jeep Wrangler TJ 4.0 I6
ford-mustang-cobra-4.6-1996.json 1996 Mustang SVT Cobra 4.6 DOHC
ford-mustang-gt-4.6-1996.json 1996 Mustang GT 4.6 SOHC
mercury-mountaineer-4.6-2006.json 2006 Mercury Mountaineer 4.6 V8

Add your vehicle: the format is documented in profiles/PROFILE_SPEC.md — it's written to be handed straight to an AI agent ("research <year make model> and produce an OBDash profile per this spec"). Drop the .json in profiles/, load it from the Profile menu, and open a PR. Profiles are pure data — they can't run code (formulas go through a sandboxed evaluator).

Terminal tool (Ford 6.0 no-start)

The repo also includes obd_reader.py, a self-contained CLI focused on diagnosing a 6.0 Power Stroke that won't start — a big live ICP-during-crank monitor (--crank), code read/clear, and CSV logging. It needs only pyserial. See handoff.md and diagnostics/ for the worked no-start investigation that seeded this project. (The GUI above is the general-purpose, multi-vehicle tool; the CLI is the diesel-specific workflow it grew out of.)

python obd_reader.py COM5 --crank      # big ICP cranking monitor
python obd_reader.py COM5 --clear      # read, then clear codes (guarded)

Project

  • ARCHITECTURE.md — design, the acquisition engine, roadmap.
  • Built on a headless obdcore package (link / registry / scheduler / store) shared by the GUI and the CLI; tested without hardware via a mock adapter.
  • CI builds the cross-platform binaries on tag (.gitea/workflows/release.yml).

License

MIT — see LICENSE.

S
Description
OBDash — open-source, vehicle-agnostic OBD-II scanner (Python/Qt). Live multi-axis graphs, car-style gauges, DTC read/clear, JSON vehicle profiles.
Readme MIT 1.8 MiB
v0.1.0 Latest
2026-06-30 16:53:36 -04:00
Languages
Python 99.7%
Batchfile 0.3%