Ich hatte schon einige Kickstarter-Projekte beobachtet, die einen Adapter entwickeln wollten, über den man mit Handy/Computer Zugriff auf die Fahrzeugdaten seines KfZ erlangen kann.

Dass Versicherungen sich so langsam für diese Fahrzeugdaten interessieren, finde ich bedenklich, für den Eigengebrauch finde ich es allerdings sehr interessant.

Sinnige Verwendungsmöglichkeit hin oder her – so etwas lässt mein Bastler-Herz höher schlagen.

Überraschenderweise braucht es keinen über 100€ teuren Adapter – sei es von einer Kickstarter-Kampagne oder sonst wo her. Alle in diesem Jahrtausende hergestellten Fahrzeuge verfügen nämlich über ein- und dieselbe Schnittstelle (ODB2), über welche die Werkstatt (und auch solche Adapter, um die es sich hier dreht) Zugriff auf Fahrzeugdaten erlangen kann.

Bei eBay fand' ich diesen 12€ teuren ODB2-Adapter, der live alle Daten per BlueTooth übertragen kann und klein genug ist, dauerhaft in die ODB2-Schnittstelle (über die er auch mit Strom versorgt wird) eingesteckt zu bleiben und die Abdeckung trotzdem wieder auf den Sicherungskasten passt.

Erwähnte ODB2-Schnittstelle befindet sich bei meinem Wagen bei den Sicherungen unter dem Lenkrad. Irgendwo in dieser Gegend sollte sie jeder finden, der keinen Oldtimer fährt.
 
Mit eingestecktem Adapter sieht das dann so aus.
 

Der Adapter ist schnell nutzbar: Einstecken, Zündung einschalten, Handy zücken, Bluetooth aktivieren und Adapter als BlueTooth-Gerät hinzufügen (Pairing-Code sollte hoffentlich mitgeliefert worden sein).
Um auf die Daten zuzugreifen, empfehlen die meisten ODB2-Besitzer die Android-App Torque, die sowohl gratis als Lite-Version wie auch für aktuell 3,55€ als Pro-Version in Googles Play-Store zur Verfügung steht.
Ich habe noch nichts anderes getestet.

Was kann Torque?

Zum einen kann man sich ein "Dashboard" in dem Programm einrichten und verschiedene Fahrzeugdaten (z.B. aktuelle Geschwindigkeit, Sprit-Verbrauch, Drehzahl,...) oder GPS-Daten (z.B. Standort, Höhe oder Geschwindigkeit laut GPS) als Zahl, Tacho-Graphik oder Liniendiagramm anzeigen lassen.

Was Torque außerdem interessant macht: Es kann diese Fahrzeugdaten auch per Internet übermitteln. Standardmäßig an den Server des Entwicklers, der gratis die Möglichkeit anbietet, die Daten auf seiner Website auswerten zu können (dafür braucht man die in der Android-App angezeigte ID und – falls es sich um die Pro-Version handelt – seine in den Einstellungen hinterlegte E-Mail-Adresse), allerdings kann man die Daten auch an seinen eigenen Server übermitteln lassen. Und hier wird es für mich interessant.

Daten auswerten

Der Torque-Entwickler gibt leider nicht all zu viele Informationen heraus, wie die Daten von seinem Programm übermitteln werden, aber ich wurde bei einem GitHub-Projekt fündig, welches mir die Rumprobiererei ersparte: Die Daten werden per GET-Anfrage versendet.

Gibt man in den Torque-Einstellungen zum Beispiel unter Einstellungen > Datenaufzeichnung & Upload > Webserver URL als Server-Adresse https://odb2.apfel-z.net/get.php an, so wird in regelmäßigen Intervallen von Torque eine URL dieses Schemas aufgerufen:

https://odb2.apfel-z.net/get.php?v=3&session=1455809199211&id=123456789abcdef123456789abcdef12&time=1455889402053&kff1005=2.80228061&kff1002=47.74438094&kd=0.0&k110=17.394218&kc=0.0&kff1207=-11.21393&kff1205=0.0&kff5181=32.911616&kff1001=0.0&k5=83.0

Die Schlüssel v, session, id, time sind fest, alle restlichen beziehen sich auf die unter Einstellungen > Datenaufzeichnung & Upload > Aufzuzeichnende PIDs eingerichteten "PIDs" (Sensor-Werte).
Hier wird übrigens der Unterschied zwischen der Lite- und Pro-Version klar: In der Lite-Version lassen sich nur maximal 5 PIDs konfigurieren.
v ist vermutlich die aktuelle Version der Schnittstelle und wird von mir ignoriert, session ergibt bei jedem Trip eine neue ID, id ist die ID des Adapter/Programmes und time durch 1000 geteilt ergibt den Unix-Kompatiblen Timestamp.

In dem erwähnten GitHub-Projekt findet sich auch eine Auflistung der PID-Codes und ihrer Bedeutung.

Mein PHP-Skript auf der heimischen Seite, um die empfangenen Daten in eine Datenbank zu speichern, sieht, um ein bisschen Overhead gekürzt, wie folgt aus:

// Um zu vermeiden, dass sonstwer meine Datenbank mit Mist flutet,
// prüfe ich hier, dass auf jeden Fall die ID meines Adapters im Request steht.
// Diese ID ist immer dieselbe und in den Torque-Einstellungen zu finden
// ...oder in Erfahrung zu bringen, wenn man sich den gesamten GET-Request anzeigen lässt
if ($_GET['id'] != "123456789abcdef123456789abcdef12") {
        header("Content-type: text/html\nStatus: 403 Forbidden\n\n");
        die();
        }

// ... Verbindung mit mySQL-Datenbank ...

@mysql_query("insert into kopf (session, zeit) " .
            "values ('".$_GET['session']."', '".date("Y-m-d H:i:s.000", $_GET['time']/1000)."')");
$id = mysql_insert_id();
foreach ($_GET as $key => $val) if (!in_array($key, array("v", "session", "id", "time")))
        @mysql_query("insert into daten (idKopf, name, wert) values ($id, '$key', '$val')");

echo("OK!"); // <-- Muss unbedingt zurückgemeldet werden

Ab hier überlasse ich (für's Erste) jedem seinen eigenen Spieltrieb ;-)