OOBDcmd ist ein kleines Softwarewerkzeug, speziell entwickelt, um einfach mit einem Fahrzeug zu kommunizieren, waehrend automatisierte Tests an Ihm ueber den OOBD Dongle wie CAN-Invader durchfuehrt werden.
Um dies zu ermoeglichen, arbeitet OOBDcmd wie ein Kommandozeilenwerkzeug:
Beim Start verbindet es sich selbst mit dem Dongle ueber eine festgelegte Bluetooth MAC Addresse. Nachdem diese Verbindung hergestellt ist, ueberprueft OOBDcmd, ob das angesprochene Bluetooth Geraet wirklich ein OOBD Dongle ist. Falls Ja, uebermittelt es die optional gegebene Kommandozeilensequenz. Am Ende gibt es einen optionalen Fehlercode zurueck und die zuletzt empfangenen Anwort vom Dongle.
OOBDcmd ist nicht ein gewoehnliches Programm, sondern nur ein Python Skript. Deswegen muss eine Python Version >=3.4 auf dem Computer installiert sein. Um diese zu installieren
Weil OOBDcmd ein Kommandozeilentool ist, muss es von einem Kommandozeilenprompt gestartet werden. Falls Du nicht weisst as das ist, wirst Du auch OBDcmd nicht benoetigen…
Stelle sicher das der Python Interpreter in dem Suchpfad fuer ausfuehrbare Programme ist. Falls Probleme auftauchen, folge der Python Dokumentation.
Nun kannst Du das Skript aufrufen
python oobdcmd.py Usage: oobdcmd.py BT-MAC-Address ['cmdset[,cmdset]'] for detailed information goto http://www.oobd.org/doku.php?id=doc:tools_oobdcmd
OOBDcmd kann mit der MAC Adresse des Bluetooth Dongle und optional mit einem oder mehreren Kommandozeilensequenzen aufgerufen werden.
Wenn es ohne Kommandozeilensequenz aufgerufen wird, ueberprueft es nur die Verbindung und eine korrekte Anwort vom Dongle.
Falls erfolgreich, ist der zurueckgebene Fehlerkode die 0, andernfalls 1 (Bluetoothfehler) oder 2 (Dongle Identifikationsfehler)
Die Maechtigkeit von OOBDcmd, kommt aus der Faehigkeit sich durch eine komplette Kommandozeilensequenz zu arbeiten, die sogenannten cmdsets.
Eine Kommandozeilensequenz besteht aus einer oder mehreren Kommandozeilesequenzen, unterteilt mit , . Die gesamte Kommandozeilensequenz muss in ' ' eingeschlossen sein
Ein Kommandosatz besteht aus einer OOBD Eingabezeile (cmd) und einem regulaeren Ausdruck (regex), getrennt mit einem |
Die OOBD Eingabezeile cmd wird erklaert in OOBD Firmware Syntax. Vergesse bitte nicht, das Eingabekommando mit einem anhaengenden “\r” enden zu lassen
Das regex Format wird erklaert in Python regex tutorial
Wenn also OOBDcmd durch die Kommandozeilensequenz geht, nimmt es jeden Kommandosatz und sendet es zum Dongle. Nachdem es die Antwort empfangen hat, vergleicht es Ihn gegen den regulaeren Ausdruck. Falls der Regulaere Ausdruck gueltig ist, faehrt es mit dem naechsten Kommandosatz fort. Falls der Regulaere Ausdruck ungueltig ist, schreibt OOBDcmd die empfangene Antwort auf die Standartausgabe und wird dann beendet mit dem Rueckgabekode 3 (Fehler in der Kommandosequenz)
Falls der letzte Kommandosatz erfolgreich abgeschlossen wurde, schreibt OOBDcmd die zuletzt empfangene Antwort auf die Standartausgabe und beendet die Programausfuehrung mit dem Rueckgabekode 0 (= keine Fehler)
Hier sind einige Beispiele. Bitte beachte, das aus Geheimhaltungsgruenden die IDs und DIDs kuenstlich hergestellt sind und keine realen Werte abbilden. Wenn Du diese Beispiele 1:1 uebernimmst, wird es nicht funktionieren
Auslesen des Dongle Firmware Versionsstrings
python3.4 oobdcmd.py 00:12:6F:2B:F0:84 'p 0 0 0\r|.*(OBD).*' >echo $? # ermittle den Program exit Kode 0
Wieder das Auslesen des Firmware Versionsstrings, aber nun mit einem nicht passenden regulaeren Ausdruck , welches dann einen Fehlerkode erzeugt
python3.4 oobdcmd.py 00:12:6F:2B:F0:84 'p 0 0 0\r|.*(O-D).*' >echo $? # ermittle den Program exit Kode 2
Schreibe das Ergebnis in eine Datei
python3.4 oobdcmd.py 00:12:6F:2B:F0:84 'p 0 0 0\r|.*(OBD).*' > version.txt >echo $? # ermittle den Program exit Kode 0 >more version.txt OOBD D2a 715 Lux-Wolf CAN-Invader Fri, 15 Nov 2013 17:37:58 +0100
Nun etwas Spannenderes: Waehle den Highspeed Bus, konfiguriere Ihn, setze die Filter und Modul IDs und teste via tester present, ob das Modul antwortet
python3.4 oobdcmd.py 00:12:6F:2B:F0:84 'p 8 2 0\r|\.,p 8 3 0\r|\.,p 8 2 3\r|\.,p 6 5 $620\r|\.,p 8 10 1 $7FE\r|\.,p 8 11 1 $0000\r|\.,2002\r|^(60)' >echo $? # ermittle den Program exit Kode 0
Und nun eine große komplette Anwendung: Initialisiere und lese die Fahrzeugkonfiguration aus
python3.4 oobdcmd.py 00:12:6F:2B:F0:84 'p 8 2 0\r|\.,p 8 3 0\r|\.,p 8 2 3\r|\.,p 6 5 $620\r|\.,p 8 10 1 $7FE\r|\.,p 8 11 1 $0000\r|\.,32F106\r|^(62)' 62f106fccc04020100600204011101080100000001000200000201020200040200000100010100000000000200000307010000010000000000000000000302000101020100030102001366310002010400000100000100010001000202000000000100000100000000000000000704000200010000020001000100000000000000000000000000000000000002000000000300040001000000020000000000000001000000000000000000000000020003000000000000000000000000000002000001000100000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e >echo $? # ermittle den Program exit Kode 0
Alle Statusinformationen werden nach stderr geschrieben, die zuletzt empfangene Antwort wird auf die Standardausgabe geschrieben (mehrere Zeilen werden aneinandergehaengt in einer einzigen Zeile ausgegeben , die angehaengte .\r> Sequenz wird abgeschnitten), ebenfalls gibt auch OBBDcmd einen gueltigen Programm exit Kode zurueck