Profile
Back to NewsBack
GitHub Trending 8 min
Reader Mode
cedricp/ddt4all: OBD tool

cedricp/ddt4all: OBD tool

14 hours ago

DDT4ALL

Build</a> Donate</a> Sponsor</a> Discord</a> Python</a> License</a>

DDT4ALL is a cross-platform diagnostic application for CAN bus vehicle networks. It lets you create your own ECU parameter screens and communicate with ECUs through various OBD-II interfaces, including ELM327, Vlinker FS, VGate iCar Pro, OBDLink SX/EX and ELS27 adapters.


Warnings

  • This application is work in progress. Use Expert mode only if you know what you are doing.
  • In non-expert mode the tool is meant to be harmless for the vehicle (keep the Expert mode button in its released state).
  • Do not use this software if you do not understand how a CAN network (or an ECU) works — serious damage is possible on a live vehicle.
  • Maintenance, testing and research only; the author declines responsibility for any use. You are responsible.

Features

  • Diagnostics: Read / Clear DTC, manual ECU requests, auto-scan ECUs, live parameter monitoring.
  • Screens: Custom ECU parameter screens designer, screen recorder, data editor.
  • Networks: CAN bus sniffing (with live non-blocking capture), DoIP, KWP2000.
  • Database: XML + ZIP (auto ecu.zip), JSON internal conversion, graphics extraction.
  • Automation: Plugin system (vehicle-specific procedures) and extensible Python CLI.
  • Internationalization: gettext/polib catalogs in 14 languages, real-time switch, HTML-aware strings.

Supported devices

| Device | Available speeds | Default baud | Timeout | Flow control | Category | Notes | |--------|------------------|--------------|---------|--------------|----------|-------| | VLinker FS | 57600, 115200 | 38400 | 3 s | None | Enhanced | Most stable, best compatibility | | VGate iCar Pro | 115200, 230400, 500000, 1000000 | 115200 | 2 s | None | Enhanced | High-speed (up to 1 000 000 bps) | | ELM327 (original) | standard | 38400 | 5 s | None | General | Usually marked PIC18F25K80 | | ELM327 (clone) | standard | 9600–38400 | 5 s | None | Budget | Try different baud settings | | ELM327 USB | standard | 38400 | 5 s | None | USB | Dedicated ELM327 USB (STD_USB) | | OBDLink SX | 500k / 1M / 2M | 115200 | 2 s | RTS/CTS | Professional | Highest-speed adapter | | OBDLink EX | 500k / 1M / 2M | 115200 | 2 s | RTS/CTS | Professional | Tested and confirmed | | ELS27 | standard | 38400 | 4 s | None | Alternative | Good ELM327 equivalent | | ELS27 V5 | standard | 38400 | 4 s | None | Enhanced | CAN pins 12-13, PyRen / Renolink compatible | | DERLEK USB-DIAG2/3 | standard | 38400 | 4 s | None | Professional | Auto pin swap, STN/STPX support * | | USB CAN | varies | 38400 | 5 s | None | Special | Automatic detection / fallback |

\* DERLEK USB-DIAG2/3 status: not checked on real hardware yet.

Connection methods

  • USB — recommended for diagnostics (serial-over-USB on a COM/LPT port).
  • Bluetooth — convenient, occasional dropouts possible.
  • WiFi — TCP/IP, IP:PORT format (e.g. 192.168.0.10:35000).
Most adapters appear as a standard serial port. Dedicated USB-CAN / USB-ELM327
devices are handled natively with an automatic fallback.

Language support

gettext catalogs are authored under locales/ and compiled into src/ddt4all/generated/locales/. English is the source language (used as msgid); the following catalogues are shipped:

| Code | Language | |------|----------| | fr | Français | | pt | Português | | de | Deutsch | | es | Español | | it | Italiano | | ru | Русский | | pl | Polski | | nl | Nederlands | | hu | Magyar | | ro | Română | | sr | Српски | | tr | Türkçe | | cs_CZ | Czech | | uk_UA | Українська |

All catalogs are complete (content of all msgstr fields is present and no #, fuzzy remains), keep valid gettext syntax and preserve the original %s / named placeholders.


Requirements

  • Python >=3.8 (3.10 or newer recommended)
  • PyQt5 >=5.15, <5.16 — GUI framework
  • PyQtWebEngine >=5.15, <5.16 — optional, full HTML documentation view
  • pyserial ==3.5 — serial port communication
  • pyusb ==1.2.1 — USB access
  • crcmod ==1.7 — checksums
  • polib, platformdirs
  • pywin32 >=227 — Windows (serial)

Installation

Modern (recommended)

git clone https://github.com/cedricp/ddt4all.git
cd ddt4all
python -m venv ./venv

activate virtual environment

Windows:

.\venv\Scripts\activate.bat

Linux / macOS:

source ./venv/bin/activate

install the package (editable for development)

pip install -e .

launch application

ddt4all

or

python -m ddt4all

With optional features

pip install -e ".[dev]"                    # pytest, linting
pip install -e ".[can]"                    # python-can, obd
pip install -e ".[network]"                # requests, websockets
pip install -e ".[bluetooth]"              # pybluez / bleak

all together:

pip install -e ".[dev,can,network,bluetooth]"

Legacy (manual dependencies)

pip install "PyQt5>=5.15,<5.16" "PyQtWebEngine>=5.15,<5.16" pyserial==3.5 pyusb==1.2.1 crcmod==1.7 polib platformdirs

Platform notes

  • Linux — add the current user to the dialout group to access serial ports:
sudo usermod -a -G dialout $USER
  # logout and login again
  • Windows — ensure the serial/USB drivers are installed and that a COM port is
assigned to the adapter. Run with administrator rights if port access fails.
  • macOS — if an editable-install error is raised by pip install -e ., update the
packaging tools first:
python3 -m pip install --upgrade pip setuptools wheel
  python3 -m pip install -e .
If the package data is missing at runtime (resources/projects.json not found), reinstall from the repository root:
python3 -m pip install --force-reinstall -e .

Quick start

# after a successful install
ddt4all

or, from source (development mode):

python -m ddt4all

Use the built-in connection test to let DDT4ALL auto-detect the adapter and the correct baud rate. On discovery, the optimal device configuration is applied.

Shortcut / alias (optional)

# Linux / macOS
alias ddt4all-dev='cd /path/to/ddt4all && source ./venv/bin/activate && python -m ddt4all'

Windows (PowerShell)

Set-Alias -Name ddt4all -Value "ddt4all"

Plugin system

Vehicle-specific procedures are provided as Python modules under src/ddt4all/plugins/:

  • ab90_reset.py — AB90 air-bag reset
  • card_programming.py — ECU card programming
  • clio3_eps_reset.py, clio4_eps_reset.py — Clio 3/4 EPS reset
  • cmd_macros.py — DDT2000 command macros (.cmd, uses cmd_macros_lib/)
  • laguna2_uch_reset.py, laguna3_uch_reset.py — Laguna 2/3 UCH
  • megane2_uch_reset.py, megane3_uch_reset.py — Megane 2/3 UCH
  • megane3_ab_reset.py — Megane 3 air-bag reset
  • megane3_eps_reset.py — Megane 3 EPS
  • rsat4_reset.py — RSAT4 system reset
  • vin_crc.py — VIN CRC calculation
  • zoe_waterpump_counter_reset.py — ZOE water-pump counting reset
The plugin architecture allows custom procedures for other ECUs and brands.

Architecture

Core modules

  • src/ddt4all/main.py — entry point (PyQt GUI + connection handling)
  • src/ddt4all/version.py — version / codename / contributors
  • src/ddt4all/options.py — configuration & device settings persistence
  • src/ddt4all/file_manager.py — file and directory utilities
  • src/ddt4all/cli/ — command-line interface handlers (DoIP, parameters, USB device)

Communication

  • core/elm/ — ELM327 / adapter communication (elm.py, device_manager.py,
port.py, constants.py)
  • core/ecu/ — ECU database, files and scanning (ecu_database.py,
ecu_scanner.py, ecu_device.py, ecu_file.py, ecu_request.py, ecu_ident.py, data_item.py, utils.py)
  • core/doip/ — DoIP (Diagnostics over IP) protocol support
  • core/parameters/helpers.py — parameter parsing / helpers
  • core/usbdevice/ — USB CAN devices (obd_device.py, usb_can.py, constants.py)

Modern UI

  • ui/ — main window, widgets, dialogs
  • ui/displaymod/ — display widgets / graphical elements
  • ui/data_editor/ — ECU qualitative data editing
  • ui/sniffer/ — CAN sniffing with a QThread-based thread

Data & resources

  • generated/ — compiled resources and .mo translation catalogs
  • resources.qrc — Qt resource descriptor
  • vehicles/ — vehicle-specific files
  • json/ — JSON database folder
  • logs/ — runtime logs (see also the platform user-log directory)

Threading

  • QThread for the network sniffer (non-blocking capture)
  • threading.Lock() in the ELM layer for safe serial operations
  • QTimer for periodic refresh and connection monitoring

Testing

pip install -e ".[dev]"
pytest

Test suites are in tests/ (unit, integration, smoke). A GitHub Actions workflow (python-app.yml) runs the test suite on multiple OSes.

Distribution / build

  • Windows: InnoSetup installer under setup_tools/inno-win-setup/
(wininstaller.iss, version.h, win32_deps/).
  • macOS: DMG build via setup_tools/mac-os/builddmg.sh (with main.spec,
entitlements.plist).
  • Linux: AppImage build scripts / workflow (see setup_tools/).
Prebuilt installers are published on the Releases page.

Troubleshooting

Connection

  • No serial port listed — check driver installation. On Linux, verify the user
is in the dialout group. On Windows, try running as administrator.
  • Adapter not detected — test every available COM/USB port with the connection
test; try another baud rate (38400, 9600, 115200).
  • ELS27 V5 special case — check the driver (PyRen / Reolink), then select the
proper serial port manually (device may appear as FTDI, CH340 or CP210x).
  • WiFi — format IP:PORT, same local network, firewall open.

Installation

  • PyQtWebEngine missing — DDT4All still works; only the full web-based
documentation view is limited (graceful fallback).
  • Windows serial fails — reinstall pywin32 and run
python -m pywin32_postinstall -install, ideally with admin rights.

Documentation & videos

See the project Wiki (Android port, device notes) and the YouTube channel (CAN sniffing, AirBag DTC, Megane examples).

Community

Contributing

  • Report bugs — add a screenshot, your Logs/ file, [Bug] in the title, OS + Python + adapter info.
  • Suggestions / ideas — open a discussion with [Suggestion] in the title.
  • Translations — improve or add language catalogs under locales/.
  • Donations — financial (PayPal / GitHub Sponsors) and hardware donations
(OBD-II interfaces, ECU devices) are welcome to extend device support.

License & disclaimer

This project is free software under the GPL-3.0-or-later license. DDT4ALL is an independent, unofficial, educational tool and is not affiliated with any vehicle/software brand. It is provided for study, testing and research only; it is not a replacement for factory/bench diagnostic tools. Use on a real vehicle is at your own risk — see the warnings at the top of this file.

Happy CAN studying! 🚗🔧

Chat with me