Seite 1 von 2
Verbrauch pro 100 km berechnen
Verfasst: 14. Jun 2020 22:23
von shuo
Hallo zusammen,
ich habe einen Zoe und kann bestimmte Werte erfolgreich an openhab - Items übergeben. Nun würde ich gerne den Verbrauch pro 100 km ermitteln.
Dazu stehen mir zwei entscheidende Items zur Verfügung:
- Aktueller Kilometerstand
- Verfügbare Energie
Ich stehe gerade bisschen auf dem Schlauch wie ich
- Den Kilomterstand alle 100km erkenne, unabhängig von irgendwelche Neustarts etc
- Die Differenz von der verfügbaren Energie. Hier kann es natürlich sein, dass zwischendurch ein Ladevorgang stattfinden kann. Das heißt das nach 100 gefahrenen Kilometer die verfügbare Energie größer ist als am Anfang
Hat jemand eine Idee wie ich das angehen könnte?
Re: Verbrauch pro 100 km berechnen
Verfasst: 14. Jun 2020 23:41
von udo1toni
Vermutlich ist es so, dass Du die Informationen nur im geparkten Zustand vor der Haustür bekommst, richtig? Und dann bekommst Du auch nur die Momentaufnahme, aber keinen Verlauf. Ich bezweifle, dass Du damit vollautomatisch und zuverlässig den Schnitt errechnen kannst. Mindestens müsstest Du openHAB irgendwie mitteilen, wenn das Fahrzeug geladen wurde. openHAB kann sicher anhand des Kilometerstands bei einer Änderung die gefahrenen Kilometer bestimmen. Ebenso kann es bei geändertem Ladestand die Differenz zum alten Ladestand erkennen. Aber danach kann openHAB allenfalls offensichtliche Fehler erkennen, aber nicht zuverlässig, ob (und vor allem wie viel) zwischenzeitlich geladen wurde. Beispiel:
Items:
Code: Alles auswählen
Number ZoeKM "Kilometer [%.1f km]"
Number ZoePower "Ladung [%.1f kWh]"
Number ZoeDiffKM "Differenz [%.1f km]"
Number ZoeDiffPower "Diff. Ladung [%.1f kWh]"
Number ZoeAVG "Schnitt [%.3f kWh/km]"
Rule:
Code: Alles auswählen
rule "Zoe km"
when
Item ZoeKM changed
then
ZoeDiffKM.postUpdate(newState - previousState)
end
rule "Zoe Ladung"
when
Item ZoePower changed
then
ZoeDiffPower.postUpdate(newState - previousState)
end
rule "Zoe Schnitt"
when
Item ZoeDiffKM received update
then
val wert = (ZoeDiffPower.state as Number)/(ZoeDiffKM.state as Number)
if(wert < 0) {
// es wurde sicher getankt; Tank voller als vor der Fahrt
return;
}
if(wert < (ZoeAVG.state as Number)*2/3 ) {
// so sparsam fährt niemand, vermutlich wurde getankt
return;
}
ZoeAVG.postUpdate(wert)
end
Die beiden ersten Rules bilden die Differenz zum letzten bekannten Wert. Die dritte Rule errechnet den Schnitt. Falls der Schnitt den letzten Schnitt um mehr als 33% unterschreitet, wird das Ergebnis verworfen.
Die Rules werden so sicher nicht auf Anhieb funktionieren, denn die Items müssen erst mal initialisiert werden. Insbesondere der Schnitt wird ja selbst zur Berechnung herangezogen, ist aber initial NULL, da knallt es dann. Und ob eine Abweichung von mehr als 33% nach unten ein sicheres Indiz ist, ist auch schwer abzuschätzen... Aber zumindest als grobe Idee könnte es ja helfen.

Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 12:25
von shuo
Hi Udo,
vielen Dank für den Vorschlag.
Grundsätzlich rufe ich alle Daten im Minuten-Takt ab. Sollte also "eigentlich" relativ genau funktioneren. Das Auto muss nicht dazu daheim sein.
Für mich noch nicht versändlich wie ich das mit dem "Tanken" umsetzen soll. Es muss quasi immer nur die "Abgänge" von der verfügbaren Energie berücksichtigt werden.
Bspw:
aktuelle verfügbare Energie 12 kw
vorherige verfügbare Energie 14 kw
Also 2 kw verbraucht auf Diffkm.
Wenn ich jetzt aber dazwischen tanke könnte es so aussehen:
aktuelle verfügbare Energie 52 kw
vorherige verfügbare Energie 12 kw
Der Betrag wären somit 40 was ja nicht dem Verbrauch entsprechen würde.
Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 14:41
von shuo
Um es besser zu veranschaulichen zeige ich hier mal einen typisch möglichen Verlauf der verfügbaren Energie:
remaining_energy.png
Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 14:54
von EmptySoft
Kann die Zoe Rekuperation? Falls nicht, kannst Du Werte wenn sie größer werden weglassen, sonst musst ein wenig mehr programmieren
Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 15:04
von shuo
ja, kann sie. Daher die Idee wenn der Wert größer wird, heißt es laden und für den Durchschnitt eben nur die Werte die weniger werden....
Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 15:24
von EmptySoft
Aber wenn Du länger bergab fährst, dann wird länger rückgewonnen (sieht aus wie laden) und Deine Werte stimmen nicht mehr. Wenn sich der Km Stand nicht verändert, aber die Kapazität erhöht, ladest Du, das würde ich miteinbauen
Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 15:47
von shuo
Guter Hinweis. Ich bin mir nur nicht sicher ob ich das so fein granular hinbekomme.
Derzeit noch am überlegen wie das mit der Energie-Differenz hinbekomme, wenn ein Ladevorgang dazwischen ist....
Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 16:04
von EmptySoft
Ich bin nicht so gut in Rules blind tippen (bin mehr der try and error Type)
Code: Alles auswählen
rule "Zoe km"
when
Item ZoeKM changed or
Item ZoePower changed
then
if(ZoePower.state == 0)
{
logInfo("Zoe.rules","Zoe bewegt sich nicht -> wird an Steckdose geladen")
} else {
logInfo("Zoe.rules","Zoe bewegt sich -> Verbrauch speichern")
var Entfernung = ZoeKM(newState - previousState)
logInfo("Zoe.rules","Entfernung: " + Entfernung)
var Verbrauch = ZoePower (newState - previousState)
logInfo("Zoe.rules","Verbrauch: " + Verbrauch)
var VerbrauchProKm=Verbrauch/Entfernung
logInfo("Zoe.rules","VerbrauchProKm: " + VerbrauchProKm)
}
end
Dann kannst Du die Werte in persistente MySQL speichern und nach allen gewünschten Arten auswerten
Re: Verbrauch pro 100 km berechnen
Verfasst: 15. Jun 2020 16:27
von udo1toni
An die Rekuperation hab ich gar nicht gedacht... (oller Dieselfahrer) [emoji6]
Aber wenn die Daten ohnehin quasi lückenlos zur Verfügung stehen (3 Minuten scheint mir da ein guter Kompromiss zu sein), kannst Du ja recht einfach rechnen. Wenn die Kapazität zunimmt, der km-Stand sich aber nicht ändert, lädt das Fahrzeug an einer Steckdose. Verändert sich der km-Stand, wird das Fahrzeug bewegt.
Ich würde versuchen, das über mehrere Rules zu erschlagen. Eine Rule für km changed. Die prüft, wann die letzte Änderung stattfand (.changedSince). Ist die letzte Änderung länger her, beginnt nun eine Fahrt. -> Startwert sichern. Ist die letzte Änderung erst vor kurzem erfolgt, fährt das Fahrzeug noch.
Eventuell müsste man in der Rule einem Timer auf 3 Minuten einbauen. Läuft der ab, wurde das Fahrzeug vermutlich geparkt. Die genauen Parameter muss man vermutlich noch etwas tunen, um Stau und sowas zu ignorieren.
Eine weitere Rule kann dann laufend den Schnitt berechnen, solange die Fahrt dauert. Wird die Fahrt beendet, wird auch die Berechnung des Schnitts beendet und der Start-Kilometerstand gelöscht.
Gesendet von meinem SM-G973F mit Tapatalk