OBD2-Protokollierung und Online-Übertragung

thorschtn

Aktiv-Mitglied
Ort
Rangsdorf
Mein Auto
T6 Multivan
Erstzulassung
12/2017
Motor
TDI® 110 KW EU6 / 6d-temp CXHA
DPF
ab Werk
Getriebe
6-Gang
Antrieb
Front
Ausstattungslinie
Trendline
Radio / Navi
Navigation Discover MEDIA
Extras
Anhängevorr., ACC 160, LED SW & RL, Discover Media, ParkPilot, Rear View, Sitzhz.
Aktuell nutze ich den originalen VW Data Plug mit der Connected Van App von VW und einem ausgemusterten Handy (was ohnehin als WLAN-Access-Point und für die Blitzer-App permanent im Auto liegt).

Die Kombi kann zuverlässig
- aktuellen KM-Stand und Distanz bis nächster Service übermitten
- Fahrten aufzeichnen (Start, Ende, Strecke)
- den Standort übermitteln
- Tankstopps erkennen und protokollieren.

Eigentlich wollte ich damit den aktuellen Tankinhalt auslesen und an die Hausautomation übermitteln (um beim Blick auf das Flurdisplay zu sehen, ob ich tanken muss, oder mir bei besonders niedrigen Spritpreisen und leerem Tank ne Whatsapp zu schicken). Das kann der Dataplug aber nicht.

Darüber hinaus kann ich zwar den Standort übermitteln, als GSM Tracker im Falle eines Diebstahls taugt das aber auch nicht, da das Handy offensichtlich in der Mittelkonsole liegt und der OBD2 Stecker auch offensichtlich steckt.

Pesrpektivisch suche ich daher eine andere Lösung, die meine Anforderungen abdeckt (bzw. werde die wohl selber bauen, weil ich noch nichts gefunden habe, was alle meine Anforderungen abdeckt):

- automatisches Fahrtenbuch
- automatische Erfassung von Tankstopps
- Übermittlung des Tankfüllstandes und AdBlue-Standes
- Übermittlung der km bis zum nächsten Service, Ölwechsel
- Protokollierung AGR-Anteil und DPF-Regeneration, ggfs weiterer Leistungsdaten
- GPS-Tracking (zur Ortung beim Diebstahl, also versteckter Einbau)
- Remote-Schaltung der Standheizung
- Überwachung des ZV-Status (und Remote-abschliessen)
- WLAN-Access-Point
- Mobilfunk-Anbindung
- Anbindung an meine FHEM-Hausautomation (über eigene Schnittstelle oder cloudbasierte Lösung)

Sollte dazu jemand geeignete Lösungen kennen, oder an einer eigenen Rasperry- oder Arduino-Lösung und Verwendung bereits bestehender Open-Source-Implementierungen mitüberlegen wollen: alle Ideen sind willkommen.

Auch ein Update auf das CarNet-Modul Security und Service ist vielleicht eine Option, das gibt es zwar offiziell (noch) nicht für den T6, lässt sich aber möglicherweise trotzem in den CAN-Bus einbinden. Ich präferiere derzeit aber eher die kostengünstige Open-Source-Lösung.

Habt ihr alternative Vorschläge?
 
Zuletzt bearbeitet:
Ich hab an dem Projekt durchaus Interesse. Kann auch mit entwickeln, die Frage ist nur was es zu entwicklen gibt? :]
 
Nun, für die Lösung ODB an Raspberry müsste man sicher schon ein bisschen entwickeln, da gibt es schon die ein oder andere Bibliothek für, aber nichts fertiges.

Ich tendiere gerade aber eher zu der weniger aufwändigen Quick&Dirty-Lösung: ODB2-Bluetooth-Adapter -> Android-Telefon mit Torque -> Regelmässige übermittlung von Standort & Restreichweite über Tasker per GSM, detaillierte Auswertungen/Protokolle per WLAN über Tasker sobald das Auto vor der Tür steht. Berechnung der Tankstops über veränderte Restreichweite im Logfile in FHEM.
 
Nun, für die Lösung ODB an Raspberry müsste man sicher schon ein bisschen entwickeln, da gibt es schon die ein oder andere Bibliothek für, aber nichts fertiges.

Ich tendiere gerade aber eher zu der weniger aufwändigen Quick&Dirty-Lösung: ODB2-Bluetooth-Adapter -> Android-Telefon mit Torque -> Regelmässige übermittlung von Standort & Restreichweite über Tasker per GSM, detaillierte Auswertungen/Protokolle per WLAN über Tasker sobald das Auto vor der Tür steht. Berechnung der Tankstops über veränderte Restreichweite im Logfile in FHEM.
Hi, @thorschtn, bist du schon weiter gekommen mit deinem Projekt. Hört sich ja ganz gut an.
 
Hi, @thorschtn, bist du schon weiter gekommen mit deinem Projekt. Hört sich ja ganz gut an.

Nein, leider nicht, mein Schwerpunkt lag im Letzten halben Jahr auf der Hausautomation.

Allerdings hat sich die "VW Data Plug mit der Connected Van App von VW"-Lösung als ziemlich instabil erwiesen und lief im Gegensatz zu den ersten Tagen nie wirklich rund (Login-Probleme und Bluetooth-Connect-Probleme). Das scheint aber auch VW erkannt zu haben, die haben mir (ohne dass ich überhaupt reklamiert habe), von sich aus neue Hardware geschickt und launchen diese Woche ein komplett neues Portal. Mal sehen, ob das besser läuft. Wenn nicht, gehe ich wohl im Herbst doch mal ne eigene OBD2-Lösung an um die Daten nach FHEM zu bekommen.
 
Nein, leider nicht, mein Schwerpunkt lag im Letzten halben Jahr auf der Hausautomation.

Allerdings hat sich die "VW Data Plug mit der Connected Van App von VW"-Lösung als ziemlich instabil erwiesen und lief im Gegensatz zu den ersten Tagen nie wirklich rund (Login-Probleme und Bluetooth-Connect-Probleme). Das scheint aber auch VW erkannt zu haben, die haben mir (ohne dass ich überhaupt reklamiert habe), von sich aus neue Hardware geschickt und launchen diese Woche ein komplett neues Portal. Mal sehen, ob das besser läuft. Wenn nicht, gehe ich wohl im Herbst doch mal ne eigene OBD2-Lösung an um die Daten nach FHEM zu bekommen.

Hi @thorschtn, Hausautomation habe ich auch hinter mir mit Homematic. Beleuchtung mit Milight.
Ich habe auch letzte Woche einen Dongel zugesandt bekommen. Im Grunde ist Connected Van für mich nur spielerei und ziemlich undurchsichtig.
Man teil ja auch VW den gesamten Fshrzrugzustand mit. Aber wie du schon sagst kommt ab dem 21.5. Eine neue App die nicht mehr zum alten Dongel kompatibel sein soll. Ändert aber nichts am gläsernen Auto.
Ich werde mir trotzdem die neue Umgebung an wenn es auch nur so lala läuft fliegt alles wieder raus.
Dir noch einen schönen Tag
LG
Peter
 
Auch das ist ein Grund, warum ich mir eher selber was bauen wollte - ich mag nämlich solche Daten nicht in die Cloud bringen. Das hab ich bei der Hausautomation schon so, da läuft ausser AWS alles lokal und idealerweise möchte ich das auch im Auto haben: OBD2 - VPN - FHEM. Aber da gibts nichts out of the Box, das macht es dann schon ziemlich aufwändig.
 
Auch das ist ein Grund, warum ich mir eher selber was bauen wollte - ich mag nämlich solche Daten nicht in die Cloud bringen. Das hab ich bei der Hausautomation schon so, da läuft ausser AWS alles lokal und idealerweise möchte ich das auch im Auto haben: OBD2 - VPN - FHEM. Aber da gibts nichts out of the Box, das macht es dann schon ziemlich aufwändig.
Homematic läuft bei mir auch ausschließlich lokal. Ich habe einen Raspberry mit und als VPN Server laufen dort kann ich mich über ein lokales Zertifikat einwählen dann brauche ich keine Cloud.
 
Hallo,

ich greife das Thema mal auf.
Ich möchte OBD-Daten automatisch protokollieren, nämlich auf einem Raspberry Pi Zero W. Der benötigt nur 0,5-1W und kann damit im Auto problemlos betrieben werden.
Die Messwertblöcke möchte ich mittels python-OBD auslesen und lokal auf dem Raspberry speichern. Anfänglich nur in einer CSV, später in InfluxDB und Visualisierung mittels Grafana.

Leider erhält das python-OBD von meinem ECU keinerlei Antwort, obwohl ich den OBD-Stecker OS-seitig korrekt anspreche.
Als Stecker hatte ich irgendeinen billigen Bluetooth-Stecker aus der Bucht probiert, sowie diesen USB-Stecker.
Beide Stecker funktionieren via Smartphone/Torque sowie VCDS Lite einwandfrei, jedoch eben nicht unter Linux.
Also bin ich noch weiter zur Basis gegangen und habe es mit AT-Befehlen probiert - siehe diesen echt witzigen Typen ab 03:20.
Beide Stecker antworten niemals (z.B. auf atz).

Ich habe eine ebay-Rezession zu irgendeinem anderen Stecker gefunden - dort wird ebenso berichtet dass keine Reaktion auf at-Befehle erfolgt.

Hat da jemand Kenntnis oder Erfahrung?

Viele Grüße
Alex
 
Leider erhält das python-OBD von meinem ECU keinerlei Antwort, obwohl ich den OBD-Stecker OS-seitig korrekt anspreche.
Den Fehler konnte ich nun beseitigen. Meine bsherigen Stecker waren keine ELM327-Stecker. Bedeutet, dass das bei mir erforderliche KWP2000-Protokoll software-seitig gesprochen werden müsste. Diese Funktionalität bringt aber python-OBD nicht mit. Diese Protokoll-Umwandlung wird jedoch vom ELM327 erfüllt. Ich habe mir nun in der Bucht einen ELM327-Bluetooth-Stecker (~6 EUR) gekauft und konnte damit auf Anhieb mit python-OBD eine Verbindung zum Motorsteuergerät herstellen und Betriebswerte (PIDs) auslesen. Ich bin nur etwas enttäuscht, wie wenige Werte geliefert werden.
Beim meinem sind es lediglich (Motor war aus):

PID 00/00 = 10011000001110111000000000011001
PID 01/01 = <obd.OBDResponse.Status instance at 0xb626cb48>
PID 04/04 = 0.0 percent
PID 05/05 = 8 degC
PID 0b/11 = 96 kilopascal
PID 0c/12 = 0.0 revolutions_per_minute
PID 0d/13 = 0.0 kph
PID 0f/15 = 10 degC
PID 10/16 = 0.0 gps
PID 11/17 = 94.9019607843 percent
PID 1c/28 = EOBD (Europe)0
PID 1d/29 = ((), (False, False), (False, False), (False, False), (False, True))
PID 20/32 = 10010000000000000000000000000001
PID 21/33 = 0.0 kilometer
PID 24/36 = 0.00976577401389 volt
PID 40/64 = 00000000000000100000000000000000
PID 4f/79 = None

Welcher Wert was bedeutet wird hier aufgelistet.
 
Hallo,

hier ein Script von mir welches sich automatisch mit dem ECU verbindet (auch wiederholend, falls der Motor zwischenzeitlich aus war) und PIDs dauerhaft protokolliert.
Das Skript liegt bei mir unter ~pi/all.py und wird mittels Eintrag in die /etc/rc.local
rfcomm bind rfcomm99 00:00:00:33:33:33
su - pi -c "./all.py >> all.log &"

gestartet. Zuvor binde ich meinen Bluetooth-ELM327 (der sich als 00:00:00:33:33:33 meldet) an /dev/rfcomm99.
Es wird nach ~pi/all.log geshrieben. Der erfolgreiche Connect zum ECU inkl. 2 Lesezyklen schaut bei meinem Fahrzeug so aus:

Protocol ID 4 = ISO 14230-4 (KWP 5BAUD)
Connection status = Car Connected
Supported Commands = set([OBDCommand('DTC_COOLANT_TEMP', 'DTC Engine Coolant Temperature', '0205', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_ENGINE_LOAD', 'DTC Calculated E
ngine Load', '0204', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('PIDS_C', 'Supported PIDs [41-60]', '0140', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('ELM_VOLTAGE', '
Voltage detected by OBD-II adapter', 'ATRV', 0, raw_string, ecu=1, fast=False), OBDCommand('DTC_DISTANCE_W_MIL', 'DTC Distance Traveled with MIL on', '0221', 4, raw_string, ecu=ECU.ENGINE,
fast=True), OBDCommand('O2_S1_WR_VOLTAGE', '02 Sensor 1 WR Lambda Voltage', '0124', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_PIDS_C', 'DTC Supported PIDs [41-60]', '0240',
6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('PIDS_B', 'Supported PIDs [21-40]', '0120', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DISTANCE_W_MIL', 'Distance Traveled
with MIL on', '0121', 4, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_STATUS', 'DTC Status since DTCs cleared', '0201', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('EL
M_VERSION', 'ELM327 version string', 'ATI', 0, raw_string, ecu=1, fast=False), OBDCommand('COOLANT_TEMP', 'Engine Coolant Temperature', '0105', 3, raw_string, ecu=ECU.ENGINE, fast=True), OB
DCommand('ENGINE_LOAD', 'Calculated Engine Load', '0104', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('PIDS_A', 'Supported PIDs [01-20]', '0100', 6, raw_string, ecu=ECU.ENGINE, fa
st=True), OBDCommand('STATUS', 'Status since DTCs cleared', '0101', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('OBD_COMPLIANCE', 'OBD Standards Compliance', '011C', 3, raw_string
, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_PIDS_B', 'DTC Supported PIDs [21-40]', '0220', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('O2_SENSORS_ALT', 'O2 Sensors Present (alt
ernate)', '011D', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('CLEAR_DTC', 'Clear DTCs and Freeze data', '04', 0, raw_string, ecu=ECU.ALL, fast=False), OBDCommand('DTC_OBD_COMPLIA
NCE', 'DTC OBD Standards Compliance', '021C', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_O2_SENSORS_ALT', 'DTC O2 Sensors Present (alternate)', '021D', 3, raw_string, ecu=EC
U.ENGINE, fast=True), OBDCommand('DTC_O2_S1_WR_VOLTAGE', 'DTC 02 Sensor 1 WR Lambda Voltage', '0224', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('MIDS_A', 'Supported MIDs [01-20]
', '0600', 0, raw_string, ecu=ECU.ALL, fast=False), OBDCommand('DTC_MAF', 'DTC Air Flow Rate (MAF)', '0210', 4, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_THROTTLE_POS', 'DTC T
hrottle Position', '0211', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('GET_DTC', 'Get DTCs', '03', 0, raw_string, ecu=ECU.ALL, fast=False), OBDCommand('THROTTLE_POS', 'Throttle P
osition', '0111', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('MAF', 'Air Flow Rate (MAF)', '0110', 4, raw_string, ecu=ECU.ENGINE, fasttest
=True), OBDCommand('DTC_MAX_VALUES', 'DTC Various Max values', '024F', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('INTAKE_TEMP', 'Intake Air Temp', '010F', 3, raw_string, ecu=ECU
.ENGINE, fast=True), OBDCommand('SPEED', 'Vehicle Speed', '010D', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('INTAKE_PRESSURE', 'Intake Manifold Pressure', '010B', 3, raw_string,
ecu=ECU.ENGINE, fast=True), OBDCommand('RPM', 'Engine RPM', '010C', 4, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_SPEED', 'DTC Vehicle Speed', '020D', 3, raw_string, ecu=ECU.E
NGINE, fast=True), OBDCommand('GET_CURRENT_DTC', 'Get DTCs from the current/last driving cycle', '07', 0, raw_string, ecu=ECU.ALL, fast=False), OBDCommand('DTC_INTAKE_TEMP', 'DTC Intake Air
Temp', '020F', 3, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('MAX_VALUES', 'Various Max values', '014F', 6, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_RPM', 'DTC Engin
e RPM', '020C', 4, raw_string, ecu=ECU.ENGINE, fast=True), OBDCommand('DTC_INTAKE_PRESSURE', 'DTC Intake Manifold Pressure', '020B', 3, raw_string, ecu=ECU.ENGINE, fast=True)])
ts = 1572772414.15
PID 04/04 = 0.0 percent
PID 05/05 = 11 degC
PID 0b/11 = 92 kilopascal
PID 0c/12 = 0.0 revolutions_per_minute
PID 0d/13 = 0.0 kph
PID 0f/15 = 13 degC
PID 10/16 = 0.0 gps
PID 11/17 = 94.9019607843 percent
PID 24/36 = 0.00976577401389 volt
Read 9 of 9 PIDs successfully
Sleeping for 7.69 seconds for next reading...
ts = 1572772424.15
PID 04/04 = 0.0 percent
PID 05/05 = 11 degC
PID 0b/11 = 92 kilopascal
PID 0c/12 = 0.0 revolutions_per_minute
PID 0d/13 = 0.0 kph
PID 0f/15 = 13 degC
PID 10/16 = 0.0 gps
PID 11/17 = 94.9019607843 percent
PID 24/36 = 0.00976577401389 volt
Read 9 of 9 PIDs successfully
Sleeping for 7.63 seconds for next reading...


Ich bin zum einen begeistert, wie einfach und zuverlässig man mit Pi/Python/ELM327 die PIDs auslesen kann, bin aber gleichzeitig enttäuscht, wie wenig interessante Daten über diesen Weg von meinem Fahrzeug geliefert werden.
Kennt jemand eine Möglichkeit, unter Linux an die Messwertblöcke ranzukommen?

Viele Grüße
Alex
 

Anhänge

  • all.py.txt
    1,8 KB · Aufrufe: 11
Zurück
Oben