OBD-Logging mit einem Pi

Begonnen von Maui, 09 Juni 2020, 07:23:30

Vorheriges Thema - Nächstes Thema

Maui

Moin zusammen,

ich habe mal damit angefangen, mein Auto per OBD zu loggen und die Werte in fhem zu bringen.
Angefangen habe ich mit einem Pi und einem BT-OBD Dongle. Der Dongle ist nix besonderes, vor Ewigkeiten in China gekauft. Als Pi hatte ich noch einen Pi3 rumliegen, war praktisch wegen BT.
Kommunikation läuft über python mit pyOBD (https://github.com/brendan-w/python-OBD) bzw. ich bin irgendwann auf den Fork von Autopi (https://github.com/autopi-io/py-obd) umgestiegen, bin der Meinung da wurden paar Änderungen gemacht, wodurch die Kommunikation stabiler läuft.
Ergänzt habe ich das ganze mittlerweile mit einem UMTS-Stick (ebenfalls ein alter, den ich noch hatte) und einem GPS-Modul Neo 6M.
Bei dem gleichzeitigen Betrieb von OBD per BT am Pi und GPS-Modul muss man darauf achten, dass man zumindest einen der beiden auf die minicom legt, da sonst beide den "Haupt" UART nutzen wollen, was nicht klappt.

Die Daten vom Pi kommen aktuell über den UMTS-Stick per MQTT und Portfreigabe in mein Netz. Aktuell auf ein (virtuelles) fhem, welches keinen anderen Zweck hat, als die Daten zu empfangen und zu halten. Somit kann zwar jemand mir sinnlose Daten per MQTT schicken, verfälscht aber damit nur meine geloggten Daten.
Geplant ist bei diesem fhem noch ein Spielen und Testen mit grafana.

Mit Stromversorgung vom Pi habe ich auch überlegt, wie man es am schönsten realisieren könnte, bin aktuell aber nur per USB Kabel direkt am Auto. Das hat den Nachteil, dass ich nur bei Klemme 15 (Zündung) Daten bekomme, aber den Vorteil, dass es die einfachste Variante ist und ich mir keine Sorgen um ein geregelten Shutdown oder Autostart machen muss. Natürlich könnte die SD irgendwann drunter leiden.

Ich habe aktuell über systemd drei separate Skripte per autostart laufen. Eins zum Connecten des Sticks (bash mit wvdial), ein kleines Python Skript zum GPS Loggen und ein weiteres Python Skript für den OBD-Dongle mit ausgewählten Variablen.
Ich habe GPS extra vom OBD getrennt, so kriege ich auch GPS-Signale, wenn der OBD-Dongle mal nicht steckt oder spinnt.

Ich habe auch mal mit einer Stromzange den Verbrauch vom OBD-Dongle gemessen, sieht gut aus. Entweder der Dongle schaltet sich ab oder mein Auto schaltet selbst die OBD ab.

Dadurch, dass der OBD-Dongle sehr alt ist, kann ich nur etwa alle 0,2s Daten kriegen und beim Hochfahren des Systems bin ich auch etwa 1 Minute blind, da der Stick erstmal verbinden muss und der GPS-Logger auch lange braucht.
Ich speichere aktuell auch keine Daten zwischen, ich versuche einfach per MQTT alles was anläuft, zu verschicken.

So richtig weiß ich auch noch nicht im Detail, wo ich damit hinwill. Sicherlich werde ich noch so etwas wie eine Art geofence einbauen und mir per Telegram eine Nachricht bei Durchfahren des Zauns eine Nachricht schicken (möglicher Diebstahl), ebenso ist eine "Wo habe ich nochmal geparkt" Funktion (also Basteln eines Map Links der letzten Position) oder eine "Ich komme grad nach Hause" Funktion, um dann gewisse Dinge zu regeln (zb. Alarmanlage aus).

Erstmal werde ich mich auf das Sammeln von Daten beschränken und dann stückchenweise kleinere Sachen dazu nehmen.

Wenn jemand Interesse hat, kann ich meinen Code noch anhängen, ist aber nix besonderes.

Damit es nicht ganz so nackig ist, mal ein Bild von einer Fahrt mit Grafana.
Zur Zeit logge ich per OBD folgende Größen mit

  • Geschwindigkeit
  • RPM
  • Luftdruck
  • Kühlmitteltemperatur
  • Tankfüllstand in %
  • Spannung (gemessen vom OBD-Dongle selbst)
Vom GPS-Modul dann noch die Anzahl der aktiven Satelliten, latitude und longitude. Ich könnte natürlich noch GPS-Höhe und GPS-Speed zb mit loggen.

Eine Liste mit theoretisch möglichen Variablen findet ihr hier: https://python-obd.readthedocs.io/en/latest/Command%20Tables/
Es ist allerdings nicht bei jedem Auto jede Variable abgreifbar.

EDIT: Grafana gefällt mir immer besser.