Changes¶
Note
The changelog (CHANGELOG.md) is kept in German; it is the same file that the release
workflow copies into the GitHub release.
Alle nennenswerten Änderungen an obd-diag. Versionen folgen Semantic Versioning; vor 1.0 kann sich die Bedienung noch ändern.
0.2.2 – 2026-10-12¶
Neu sind Auswertungen aus den Daten, die das Tool schon liest: Gebrauchtwagen-Check, Readiness-Assistent, Steuergeräte und Testergebnisse (Mode 09/06), Dringlichkeit je Fehlercode, Warnschwellen, Batterie- und Anlasstest, Sitzungsvergleich und 24 weitere Live-Werte. Alles bleibt nur lesend; Löschen ist weiter gesperrt.
Neu¶
Readiness-Assistent:
obd-diag readinessund in der Oberfläche eine Karte im Reiter Readiness. Liest neben dem Stand seit dem Löschen (PID 01) auch den Stand dieser Fahrt (PID 41: abgeschlossen, noch offen, ausgesetzt) und nennt zu jedem offenen Test, welche Fahrt ihn typischerweise abschließt, getrennt für Otto und Diesel. Nur lesende Anfragen (0101,0141); die Demo kennt sie mit einem erfundenen Beispielwert für PID 41.Steuergeräte und Testergebnisse:
obd-diag ecusliest je Steuergerät Name, Kalibrierungs-ID, CVN und Überwachungszähler (Mode 09:0900,0904,0906,0908,090A,090B),obd-diag testsdie Testergebnisse der Eigendiagnosen mit Grenzwerten, Einheit und Urteil (Mode 06, nur CAN). Beides ist Teil vondiagnose, der Sitzung und des PDF-Berichts; in der Oberfläche stehen die Steuergeräte im Reiter Fahrzeug, die Testergebnisse im neuen Reiter Testergebnisse. Gelesen wird mit Headern (ATH1), damit jeder Wert dem richtigen Steuergerät zugeordnet ist. Die Demo zeigt erfundene Beispielwerte.Sitzungsvergleich:
obd-diag compare ALT.json NEU.jsonbzw. in der Oberfläche Datei → Mit Sitzung vergleichen … zeigt, was sich zwischen zwei gespeicherten Diagnosen geändert hat: neue, entfallene und weiterhin vorhandene Fehlercodes, Readiness-Monitore, Kontrollleuchte, Freeze Frame, Zähler seit dem Löschen, FIN, Protokoll und Bordspannung (--jsonfür Skripte). Arbeitet nur mit den Dateien, das Fahrzeug wird nicht angesprochen.Dringlichkeit je Fehlercode in vier Stufen (möglichst nicht weiterfahren, bald in die Werkstatt, bei Gelegenheit prüfen, beobachten) mit Begründung: in
scan/diagnose, in der Oberfläche (Etikett in der Liste, Begründung im Detail), im PDF-Bericht und als letzte CSV-Spalte. Grundlage sind Art des Codes, Kontrollleuchte und wenige genormte Codes (Übertemperatur, Öldruck, Aussetzer, Airbag); keine Ferndiagnose.Warnschwellen für Live-Daten:
obd-diag live --alarm SCHLÜSSEL=UNTEN:OBEN(--no-alarmsohne Vorgaben), in der Oberfläche „Warnschwellen …“. Vorgaben: Kühlmittel über 115 °C, Motoröl über 130 °C, Bord- und Steuergerätespannung unter 11,8 V oder über 15,5 V. Überschrittene Werte sind markiert (!, rote Kachel), die CSV hat dafür die neue letzte Spalte „Warnungen“. Gesendet wird dafür nichts zusätzlich.Batterie- und Anlasstest:
obd-diag batterybzw. Optionen → Batterie- und Anlasstest … misst die Ruhespannung, den Einbruch beim Anlassen (Motor startet man selbst auf Aufforderung) und die Ladespannung im Leerlauf und bewertet sie mit dokumentierten Richtwerten (Grenze beim Anlassen nach Temperatur). Die Spannung kommt beim Anlassen in schneller Folge vom Adapter (ATRV), um die Abweichung zum Steuergerät (PID 42) korrigiert. Nur lesend, keine neuen Befehle; auch im Demo-Modus.Gebrauchtwagen-Check:
obd-diag used-car, Reiter „Gebrauchtwagen“ in der Oberfläche und ein Abschnitt im PDF-Bericht zeigen, ob die Fehlercodes vor kurzem gelöscht wurden. Gelesen werden die Zähler, die das Löschen auf null setzt (Mode 01 PID 30 Warmläufe, 31 Strecke, 4E Zeit seit dem Löschen, 21/4D Strecke/Zeit mit Warnleuchte), dazu Warnleuchte, offene Readiness-Tests und permanente Codes (Mode 0A). Urteil „auffällig“, „unauffällig“ oder „nicht beurteilbar“ nach einer Faustregel (unter 10 Warmläufen, 200 km oder 300 Minuten).obd-diag diagnoseund „Verbinden & Scannen“ lesen die Zähler mit (fünf Anfragen mehr) und speichern sie in der Sitzung; ältere Sitzungen öffnen weiter. Nur lesend, keine neuen Befehle in der Freigabeliste.Live-Daten: 24 weitere Werte aus den PIDs
68(Ansauglufttemperatur je Sensor),6C(Drosselklappensteller A/B),6D(Raildruck Soll/Ist und Temperatur),70(Ladedruck Soll/Ist) und85(AdBlue: Verbrauch, Bedarf, Tankfüllstand, Laufzeit mit NOx-Warnung), jetzt 140 Werte aus 87 PIDs. Der Mercedes A 180 d meldet sie als unterstützt; am Auto geprüft sind die Antworten noch nicht. Auch der Demo-Modus zeigt sie. Vermischen sich mehrteilige Antworten mehrerer Steuergeräte, wird die Anfrage mit Headern wiederholt statt den Wert leer zu lassen.
0.2.1 – 2026-10-11¶
Neu sind Einrichtungs- und Adapter-Check, ein Demo-Modus ohne Auto, die englische Oberfläche und fertige Pakete (PyPI, AUR, Flatpak). Am Lesen vom Fahrzeug ändert sich nichts.
Neu¶
Einrichtung prüfen:
obd-diag setup-checkund in der Oberfläche Optionen → Einrichtung prüfen … (beim ersten Start von selbst). Findet die Adapter, prüft die Zugriffsrechte und nennt die nötige Gruppe (uucpauf Arch,dialoutauf Debian/Ubuntu) samt Befehl, probiert 38400 und 115200 Baud (nur Adapter-Befehle) und erinnert an Zündung und HS-CAN-Schalter. Die Oberfläche übernimmt Port und Baudrate.Demo-Modus:
obd-diag-gui --demo, Port „demo“ in der Liste oderobd-diag … --demozeigt ein eingebautes Beispielfahrzeug ohne Adapter und ohne Auto. Ein simulierter ELM327 antwortet mit den Mitschnitten des Mercedes A 180 d aus den Tests am Auto (Fehlercode U1218, Readiness, Freeze Frame, FIN, Live-Daten im Leerlauf); ein Hinweis und die AdapterkennungELM327 v1.5 (Demo)zeigen, dass die Daten nicht vom eigenen Auto stammen.Adapter-Check:
obd-diag adapterbzw. „Optionen → Adapter prüfen …“ zeigt Kennung, Spannung und welche Befehle aus der Versionsliste des Datenblatts der Adapter wirklich beantwortet (ATPPSv1.1,ATIGN/ATRDv1.4,ATAMCv2.0), erkennt daran Nachbauten (eine echte v1.5 gab es nie), nennt geänderte Programmable Parameters und ob der Adapter voraussichtlich für die UDS-Steuergerätesuche (v0.3) taugt. Neu freigegeben sind dafür nur diese lesenden Adapter-Befehle (mit Quelle incommand_spec.yaml); das Fahrzeug wird nicht angesprochen.
Englisch¶
Englische Oberfläche: Sprache unter „Optionen → Sprache / Language“ wählbar, Wechsel sofort ohne Neustart. Beim ersten Start gilt die Systemsprache (Deutsch nur bei deutschem System, sonst Englisch).
Kommandozeile, PDF-Bericht und CSV mit
--lang de|en(Standard: Systemsprache; die Oberfläche exportiert in ihrer Sprache); englische CSV mit Komma und Dezimalpunkt.Dokumentation zusätzlich auf Englisch unter https://phprell.github.io/obd-diag/en/ mit Sprachumschalter; die deutschen Adressen bleiben gleich.
README auf Englisch, deutsche Fassung in README.de.md.
Tests verhindern Texte, die nur in einer Sprache vorliegen.
Installation¶
Fertige Pakete:
pipx install 'obd-diag[gui]'aus PyPI, AUR-Paketobd-diagund Flatpak-Bundle am GitHub-Release. Der Release-Workflow baut und prüft alle drei (auch bei jedem PR) und lädt auf PyPI hoch.Startmenü-Eintrag mit Symbol und AppStream-Daten; bei pipx-Installationen legt
obd-diag-gui --install-desktopihn an (--remove-desktopentfernt ihn).udev-Regel heißt jetzt
70-obd-diag.rulesund liegt insrc/obd_diag/share/. Unter der alten Nummer 99 kam das Taguaccesszu spät und wirkte nicht; Gruppe und Dateirechte ändert sie nicht mehr (die Gruppeuucpgibt es auf Debian nicht).Das sdist enthält keine Release-Notizen und Arbeitsdateien mehr.
0.2.0 – 2026-10-10¶
Erstes veröffentlichtes Release. Es umfasst den Funktionsumfang v0.1 (nie einzeln veröffentlicht) und die Live-Daten aus v0.2.
Am echten Auto geprüft¶
Erster Test am 2026-10-09 an einem Mercedes A 180 d (W177) mit FORScan ELMconfig (USB, CH340), CAN 29 Bit/500 kBit/s, vier Steuergeräte:
info,diagnoseundlivelesen richtig.Vier Befunde aus dem Test behoben (#7): Freeze Frame vom Steuergerät mit dem Code (vorher „unbekannter Code“), erstes
ATZmit?wird einmal wiederholt, Bordspannung per PID 42 gegengeprüft, wenn der Adapter unter 11,8 V misst, bei Mercedes kein Modelljahr aus FIN-Stelle 10.UNABLE TO CONNECT(Zündung aus) ergibt eine klare Meldung mit Hinweis (#8).Zweiter Test am 2026-10-10 bestätigt diese Korrekturen; Diagnose- und Live-Mitschnitte stimmen Byte für Byte mit J1979.
Readiness hängt nicht mehr von der Reihenfolge ab, in der die Steuergeräte antworten. Vorher konnte ein Steuergerät ohne Abgasmonitore den Diesel als Ottomotor ausgeben und „Alle Tests abgeschlossen“ melden, obwohl der Abgassensor-Test offen war (#14). Widersprüchliche Freeze-Frame-Werte mehrerer Steuergeräte werden verworfen.
Live-Daten: Nach dem Anlassen endet die Drosselung bei niedriger Spannung sofort, statt bis zu 50 s weiterzulaufen (#15).
Die Mitschnitte beider Tests laufen als Regressionstest (
tests/verification/test_real_car.py, FIN-Seriennummer geschwärzt).
Lesen¶
Fehlercodes: gespeichert, ausstehend und permanent (Mode 03, 07, 0A) mit deutschem Klartext, Ursachen und Symptomen aus einem Offline-Katalog (OBDex, CC0, 9533 Codes).
Ablehnungen der Steuergeräte werden nicht mehr als „keine Codes“ gelesen; nur
7F <Mode> 11/12heißt „Mode nicht unterstützt“. Auf7F <Mode> 78wird bis 5 s gewartet (#4).Readiness (Mode 01 PID 01, Otto und Diesel) mit Motorkontrollleuchte; Urteil „Alle Tests abgeschlossen“.
Freeze Frame zum auslösenden Code (Mode 02).
FIN (Mode 09 PID 02) mit Offline-Dekodierung (Hersteller, Land, Modelljahr ohne Gewähr), optional NHTSA vPIC (Opt-in).
Fehlercodes ohne Katalogtext auf Wunsch online erklären (
--online-codes, Option in der Oberfläche, standardmäßig aus; Quelle Wal33D/dtc-database, MIT). Es werden ganze Dateien geladen, Fehlercode und FIN gehen nie ins Netz (#11, ADR 0004).
Live-Daten (v0.2)¶
116 Werte aus 82 Mode-01-PIDs nach SAE J1979, darunter die Lambdasonden 1–8, Nachkat-Trimm und Drehmomentstufen; jede Formel ist gegen python-OBD verglichen.
obd-diag live(--list,--pids,--interval,--duration,--record) und Reiter „Live-Daten“ mit Kacheln und Verlaufskurve; Aufzeichnung als CSV.Unter 11,8 V Bordspannung wird nur alle 5 s abgefragt.
Sicherheit¶
Nur lesend: Freigabeliste in
Elm327.command, jeder andere Befehl wird abgewiesen, bevor etwas gesendet wird. Jeder erlaubte Befehl ist mit Seite und Zitat aus dem ELM327-Datenblatt bzw. dem J1979-Service belegt und wird in allen Tests geprüft (#3).Mindestens 50 ms zwischen zwei Anfragen ans Fahrzeug, auch nach Fehlern (#6).
Löschen (Mode 04) ist gesperrt (
CLEAR_ENABLED = False). Der Ablauf mit Vorbedingungen (Motor aus bei allen Steuergeräten, Spannung), Sicherung und Kontroll-Scan ist fertig und getestet, wird aber erst nach einer bewussten Freigabe eingeschaltet.Abgezogener Adapter (auch zwischen zwei Befehlen) bricht mit Meldung ab, ohne halbe Sitzungen zu speichern.
Bedienung und Ausgabe¶
Kommandozeile
obd-diagmitinfo,scan,diagnose,vin,clear,live,ports,export; Adapter-Mitschnitt mit--trace.Oberfläche
obd-diag-gui(PySide6/QML, Extragui) mit Reitern Fehlercodes, Readiness, Freeze Frame, Fahrzeug, Live-Daten; helles und dunkles Design.Diagnosesitzungen als JSON, PDF-Bericht und CSV.
Dokumentation¶
Website unter https://phprell.github.io/obd-diag/ (#5, #9, #12): Benutzen, wie das Tool mit dem ELM327 spricht (Befehlsreferenz mit Datenblatt-Seiten, PID-Formeln, Sicherheitskonzept, der Mitschnitt vom W177 Zeile für Zeile), Entwickeln.
Bekannte Einschränkungen¶
Bisher an einem Fahrzeug geprüft (zwei Tests am Mercedes W177).
Live-Daten nehmen ohne Header die erste gültige Antwort; antworten mehrere Steuergeräte auf dieselbe PID, kann der Wert zwischen ihnen wechseln (am W177 höchstens 11 1/min).
Nur über USB-Seriell bzw.
/dev/rfcomm*; Bluetooth LE folgt später.Nur die genormte Abgasdiagnose (OBD-II), keine Steuergeräte wie Airbag oder ABS.
PIDs mit Statusbyte (u. a. 70 Ladedruck, 7A–7C Partikelfilter) fehlen noch.