Beim Schreiben des Beitrags kam mir noch eine Idee, wie man das Problem umgehen könnte. Und ich glaube, es könnte so funktionieren.
Mein Workaround für die komische SetVarOnce-Logik:
Ich nutze stattdessen SetVar und lasse den Wert nur in einem sehr kleinen Fenster der zurückgelegten Strecke (0,1–0,2 km) setzen, über eine If-Abfrage. So wird der Startwert einmal „eingefangen“, und danach nur noch gelesen. Damit bekomme ich erstmals plausible Werte, die wie ein realistischer Durchschnittsverbrauch für die Fahrt aussehen.
Gerne ausprobieren und rückmelden, ob die Werte bei euch auch sinnvoll aussehen.
Die Formeln:
Consumption_Helper
if({zurückgelegte Strecke}>0.1 && {zurückgelegte Strecke}<0.2, SetVar(1, {[BMS] Traction battery Actual Energy}), GetVar(1, 0))
Consumption
((GetVar(1,0) - {[BMS] Traction battery Actual Energy}) / 1000 / {zurückgelegte Strecke}) * 100
Alles anzeigen
Ich darf meinen Hut ganz tief vor Dir ziehen!
Du hast es mit diesen Formeln tatsächlich geschafft, die Variablen-Geheimnisse zu entschlüsseln!
Ja, es funktioniert hervorragend und zuverlässig - und meine oben beschriebenen Ideen sind völlig unnötig, mittels "Trennen" und dann wieder "Verbinden" startet die Berechnung neu (ganz ohne Aktions-PIDs)!
Der Wert ist auch plausibel, und mathematisch korrekt.
Inhaltlich stimmt er aus meiner Sicht trotzdem noch nicht so ganz, weil Du ja den anfänglichen Batterie-Füllstand sicherst und dann mit dem jeweils aktuellen Füllststand in Beziehung setzt.
Problem dabei: Die jeweils angezeigten kWh sind nicht fixe, absolute Werte (wie es z.B. "Liter" im Benzintank sind), sondern zumindest temperaturabhängig (sieht man daran, dass der "Capacity"-Wert (also der "Höchstfüllstand" der Batterie mit der Temperatur (und evtl. noch weiteren Parametern) signifikant volatil ist.
Er steigt mit steigender Batterietemperatur.
Wenn nun der Wagen heute morgen bei -10 Grad startete, und hierbei die aktuellen kWh der Batterie speicherte, und die während der Fahrt dann um 18 Kelvin anstieg (damit das Batterievolumen "größer" wurde), dann spiegelt die Differenz zwischen Start-kWh und aktueller kWh nicht den Verbrauch wieder, sondern täuscht einen zu niedrigen Verbrauch vor.
Ich überlege noch, wie man das korrigieren könnte: Evtl. indem man nicht den Absolutwert bei Start speichert, sondern das Verhältnis von "Capacity" zu "Actual" - also eine Art SoC.
Und während der Fahrt, bei steigender "Capacity", aus dem anfänglichen Verhältnis und dem aktuellen Verhältnis die inzwischen "fehlenden" kWh errechnet?
Wie auch immer: Ganz großes Kino, was Du da herausgefunden hast!!