Android Autoradio mit Torque Fahrzeugdiagnose

  • Hallo zusammen,

    eigentlich wollte ich mit meinem Beitrag noch etwas warten, bis ich die Torque-Konfiguration etwas besser hinbekommen habe. Da ich das Autoradio aber gerade neu einrichten muss, ergreife ich die Gelegenheit und teile meine bisherigen Erkenntnisse, mit denen ich ja jetzt auch schon eine Weile unterwegs bin.


    Ich habe in unserer 159 das Autoradio gegen ein Android Autoradio getauscht, ein Wechsel den ich nicht wirklich bereue.

    Dann habe ich das Autoradio via USB OBDLink mit der OBD Schnittstelle verbunden und mir eine Torque-Lizenz geleistet.

    Warum USB? Die Verbindung über Bluetooth hat zwei Nachteile: 1. ist das Autoradio dann Bluetooth-Master und man kann es nicht mehr als Freisprechgerät oder Audio-Wiedergabegerät für sein Handy verwenden und 2. ist die Verbindung via Bluetooth nicht die stabilste und bei Verbindungsabbrüchen kommt die Software regelmäßig ins Schwimmen.
    Die Alternative über WLAN hat ebenfalls den Nachteil, dass man sich nicht mehr via 3G Stick mit dem Internet verbinden kann.


    Nun kann Torque von Werk aus schon einige Dinge aus der Schnittstelle auslesen, jedoch nur die Standardisierten Optionen. Das ist leider nicht sonderlich viel und an die ganzen Alfa Romeo spezifischen PIDs kommt man nicht ohne Weiteres heran.


    Hier eine kleine Anleitung, wie man das mit nur wenigen Abstrichen an bereits vorhandene Torque-Funktionen so einrichten kann, dass auch die Alfa-Romeo spezifischen Daten ausgelesen werden können:


    1. ihr müsst ein entsprechendes Fahrzeugprofil anlegen. Wenn ihr hier die Daten einigermaßen richtig eingebt, kann Torque auch ungefähr berechnen, wieviel Leistung das Auto gerade umsetzt und so weiter.


    Bei mir sieht das so aus:

    • Hubraum (Liter): 2.4
    • Komplettes Fahrzeuggewicht inkl. Fahrer, Tankinhalt etc.: 1800
    • Treibstoffart: Diesel
    • Maximal möglicher Tankinhalt: 70
    • Aktueller Tankinhalt: 50% (Anmerkung: Nein, ich stelle das nicht immer neu ein, um die Leistungs-Berechnung korrekt zu halten;))
    • Maximal mögliche Umdrehungen/Minute: 4600
    • Spritpreis: 1.12
    • Verbrauch anpassen: 1.0 (hier habe ich noch nicht mit herumgespielt, da ich mir die Verbrauchskalkulation von Torque noch nie angeschaut habe)

    Ab hier wird es spannend:

    • Bevorzugtes OBD2 Protokoll: ISO-14230-4 (fast init, 10.4k baud)
    • ELM 327 mit geänderter Konfiguration starten: ATIB10\nATSP5\nATL0\nATS0\nATSH8110F1\nATAL\n1A97\n8301\n1A971\n1081

    Als ich den Kram eingerichtet habe, wusste ich auch noch, was die ganzen Kommandos machen, jetzt müsste ich das auch nochmal neu nachlesen. Für die meisten ist das aber vermutlich weniger interessant als zu wissen, was man jetzt damit machen kann :joint:


    Man kann bzw. muss jetzt unter Einstellungen -> Zusätzliche PIDs/Sensoren die fahrzeugspezifsichen PIDs konfigurieren.

    Sämtliche Standard PIDs können mit dem neuen Connection-String nicht mehr abgefragt werden, also funktioniert in Torque so gut wie gar nichts mehr.


    Hier ein paar wichtige PIDs, damit ihr Torque wieder nutzen könnt:


    NamePIDEinheitMin - MaxFormel
    Air Temperature (AFM)215e°C-40.0 - 215.0((A+(B/128))*5)-40
    Engine Speed2130rpm0.0 - 6000.0(A*256+B)/4
    Intake Air Quantity215bg/s0.0 - 35000.0((A*255+B)/2)-200
    Treibstoffstand2143%0.0 - 100.0(A*255+B)/655.35
    Vehicle Speed2131km/h0.0 - 250.0(A*255 + B)/128


    All diese PIDs könne Torque-interne PIDs überschreiben und somit kann Torque dann wieder munter seine Berechnungen durchführen.


    Nun kommt der Grund, warum ich all den Aufwand betrieben habe:

    Mir ging es im wesentlichen darum, den DPF Füllstand auslesen zu können sowie die DPF Temperatur und somit zusätzliche Indikatoren zu haben, wenn das Auto den DPF freibrennt (Meiner Frau zu erklären, dass sie auf den Ladedruck und das Auspuffbrummen hören soll, war nur bedingt von Erfolg gekrönt).

    Dazu hat Torque noch zwei weitere coole Features: Man kann aus bestehenden PIDs neue Werte berechnen und man kann in Torque PID-abhängige Alarme auslösen lassen. Das habe ich entsprechend genutzt und bekomme jetzt eine Warnmeldung im Auto, wenn der DPF Füllstand die 70%, die 80% und die 90% Marke überschreitet. Dann bekomme ich einen Alarm im Auto, wenn die Drehzahl oder der Ladedruck einen gewissen Grenzwert überschreite, ohne dass der Wagen auf Betriebstemperatur ist, genauso gibt es einen Hinweis, wenn der Wagen Betriebstemperatur erreicht hat.

    Dann ist auch noch eine Meldung konfiguriert, die darüber informieren soll, dass der Wagen gerade mit der DPF Regeneration begonnen hat und eine, die darüber informieren soll, dass die DPF Regeneration beendet ist.

    Leider funktionieren zumindest die letzten beiden Meldungen noch relativ unzuverlässig, da wollte ich irgendwann nochmal mehr Zeit reinstecken und ggf. die Formeln überarbeiten, so dass da mehr Toleranz drin ist.


    Hier erstmal eine Liste der nützlichen PIDs:

    NamePIDEinheitMin - MaxFormel
    Boost Pressure2159mbar0.0 - 65535.0A*255+B
    DPF Clogging21cd%0.0 - 100.0(A*255+B)/65.535
    DPF Distance Last Regeneration21d4km0.0 - 1000.0(A*65535+B*255+C)/10
    DPF Regeneration Progress21d9%0.0 - 100.0(A*255+B)/65.535
    DPF Temperature21c9°C-40.0 - 700.0(((A*255)+B)/50)-40
    DpfStatusRaw21ce0.0 - 64.0A
    Engine Temperature2150°C-40.0 - 215.0((A+(B/128))*5)-40
    Oil Degradation Level21e0%0.0 - 100.0(A*255+B)/655.35


    Damit lassen sich einige Werte ausrechnen, welche man dann als Anzeigen im Dashboard platzieren kann oder als Widget auf den Home Screen holen kann:

    Name/BeschreibungEinheitMin - MaxFormel
    Boost Pressure Display
    Bei meinem Wagen weichen die von Torque ausgelesenen Werte ein wenig von der
    Anzeige im Armaturenbrett ab. Dies habe ich mit diesem Wert hier korrigiert und
    die Einheit direkt in bar umgerechnet
    bar0.0 - 2.0(VAL{Boost Pressure}-979)/1000
    DPF Clogging Calculated
    Dieser Wert rechnet während der Regeneration den Füllstand wieder runter, so
    dass man eine Anzeige für den Füllstand zwischen den Regenerationen und
    während der Regeneration kominiert hat.
    Die 20.8 ist bei mir der Füllstand des DPF, wenn die Regeneration beendet ist.
    %0.0 - 100.0VAL{DPF Clogging}-((VAL{DPF Regeneration Progress}/100)*(VAL{DPF Clogging} - 20.8))
    DPF Clogging per km
    Dies berechnet mir, wieviel der DPF pro km zugesaut wird. Das gibt einen
    guten Indikator dafür, wieviel der Wagen so gerade am rußen ist.
    %0.0 - 100.0(VAL{DPF Clogging}-20.8)/VAL{DPF Distance Last Regeneration}
    DPF Status
    Dies überzetzt den Zahlenwert, welcher aus der PID zurückkommt in einen
    lesbaren Text
    0.0 - 64.0LOOKUP(VAL{DpfStatusRaw}:VAL{DpfStatusRaw}:1='Broken':2='Empty':4='Normal'
    :8='Clogged':16='Regeneration incomplete':32='Full':64='Regeneration interrupted')


    Dazu habe ich dann folgende Werte als Alarm-Trigger programmiert.

    Bei Torque ist es leider so, dass man nur einen Alarm einrichten kann, wenn ein Wert einen gewissen Schwellwert über- oder unterschreitet. Der Alarm wird dann so lange ausgelöst, wie der Wert oberhalb oder unterhalb des Schwellwertes ist. Damit kommt der Alarm aber unentwegt, wobei für meinen Anwendungsfall eine einmalige Benachrichtigung ausreicht.

    Mit ein wenig Hirnschmalz, der Funktion von Torque mit vergangenen Werten zu rechnen und Rechenleistung seitens Android ist das aber trotzdem lösbar:

    NameMin - MaxFormel
    _AlarmTriggerDpf700.0 - 1.0CLOSEST(VAL{DPF Clogging}:0:0=0:140=1)-CLOSEST(RDLY(10:VAL{DPF Clogging}):0:0=0:140=1)-VAL{_AlarmTriggerDpf80}-VAL{_AlarmTriggerDpf90}
    _AlarmTriggerDpf800.0 - 1.0CLOSEST(VAL{DPF Clogging}:0:0=0:160=1)-CLOSEST(RDLY(10:VAL{DPF Clogging}):0:0=0:160=1)-VAL{_AlarmTriggerDpf90}
    _AlarmTriggerDpf900.0 - 1.0CLOSEST(VAL{DPF Clogging}:0:0=0:180=1)-CLOSEST(RDLY(10:VAL{DPF Clogging}):0:0=0:180=1)
    _AlarmTriggerDpfRegFinished0.0 - 1.0BIT(VAL{DpfStatusRaw}:2)-BIT(RDLY(10:VAL{DpfStatusRaw}):2)
    _AlarmTriggerDpfRegStarted-1.0 - 1.0CLOSEST(VAL{DPF Temperature}:0:200=0:600=1)-CLOSEST(RDLY(10:VAL{DPF Temperature}):0:200=0:600=1)
    _AlarmTriggerEngineTempLow0.0 - 2.0LOOKUP(VAL{Engine Temperature}:0:0~70=1:71~140=0)*(CLOSEST(VAL{Boost Pressure}:1:0=0:3880=1)+CLOSEST(VAL{Engine Speed}:1:0=0:5000=1))
    _AlarmTriggerEngineTempOk-1.0 - 1.0CLOSEST(VAL{Engine Temperature}:0:50=0:90=1)-CLOSEST(RDLY(10:VAL{Engine Temperature})0:50=0:90=1)


    Der Trigger _AlarmTriggerDpfRegStartet funktioniert nicht immer, der löst gerne mal gar nicht aus. Auch löst er ab und zu mit einem false positive aus, wenn z.B. der Wagen gerade einen Berg hoch getreten wird, dann steigt die Temperatur im DPF auch gerne über den Schwellwert.

    Der Trigger _AlarmTriggerDpfRegFinished funktioniert soweit ich mich erinnern kann überhaupt nicht, das liegt aber vermutlich daran, dass der DpfStatusRaw irgendwie nie richtig aktualisiert wird, da steht glaube ich selten etwas anderes drin als "Empty"...


    So,

    wer bis hierhin mit lesen durchgehalten hat, den kann ich noch beruhigen: Die ganzen PIDs und Formeln brauchen nicht abgetippt zu werden. Torque verfügt nämlich über eine Funktion zum importieren von PIDs und ich habe meine komplette Liste exportiert und als Anhang angefügt (ggf. müsst ihr die Dateiendung noch in .csv ändern).


    Wenn jemand Fragen hat oder Anregungen, darf er sie gerne teilen :popcorn: