Seite 5 von 23
Re: Support: Manuell + Berechnung
Verfasst: Do Sep 23, 2021 5:52 pm
von philipp123
turbowheeler hat geschrieben: ↑Do Sep 16, 2021 12:54 pm
Bei mir leider keine Verbesserung. Das Zurücksetzen des Soc bei Ladeunterbrechung ist bei mir nicht behoben. Das Modul "manuell+Berechnung" ist so für mich leider unbrauchbar. installierte Version: 1.9.248 (2021-09-10 18:30:27 +0200 [3b33da8d] )
Ich hatte heute dasselbe Verhalten. Sogar während des Ladens ist plötzlich der SOC zurückgesprungen, obwohl das Auto nicht mal abgesteckt war. Ich habe jetzt mal Debug-Level auf 2 gesetzt. Vielleicht finde ich dann beim nächsten mal was raus. Das mit CurrentMeter behalte ich mal im Hinterkopf.
Re: Support: Manuell + Berechnung
Verfasst: Do Sep 23, 2021 6:00 pm
von HSC
...hab hier noch die 1.9.248 (2021-08-31 19:00:19 drauf und kann das Verhalten nicht bestätigen.
Egal wann die Ladevorgänge starten, wird fein weitergezählt. Ob ich den Wert anfangs neu eingebe oder den alten belasse, es passt.
mag gar nicht updaten..
VG
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 8:24 am
von philipp123
turbowheeler hat geschrieben: ↑Do Sep 16, 2021 12:54 pm
Bei mir leider keine Verbesserung. Das Zurücksetzen des Soc bei Ladeunterbrechung ist bei mir nicht behoben. Das Modul "manuell+Berechnung" ist so für mich leider unbrauchbar. installierte Version: 1.9.248 (2021-09-10 18:30:27 +0200 [3b33da8d] )
Hast du eine Box mit Support oder kannst du Code-Änderungen testen?
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 9:22 am
von turbowheeler
Hallo, ich habe die OpenWB auf einem Raspberry Pi 3 Model B Rev 1.2. Kernel: Linux 4.19.97-v7+ GNU/Linux
openWB Version: 1.9.249 (2021-09-27 13:10:52 +0200 [072bfeb0] ). Mein Ladepunkt ist ein EVSE-WiFi Version: 2.2.4.
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 11:37 am
von philipp123
turbowheeler hat geschrieben: ↑Mi Sep 29, 2021 9:22 am
Hallo, ich habe die OpenWB auf einem Raspberry Pi 3 Model B Rev 1.2. Kernel: Linux 4.19.97-v7+ GNU/Linux
openWB Version: 1.9.249 (2021-09-27 13:10:52 +0200 [072bfeb0] ). Mein Ladepunkt ist ein EVSE-WiFi Version: 2.2.4.
OK, das hört sich ja so an, dass du Codeänderungen testen kannst?
Die Ursache ist mir nach wie vor Unklar. Meine Vermutung ist, dass aus irgend einem Grund die Ramdist/manual_soc_lp1 neuer als die Ramdisk/manual_soc_meter_lp1 ist. In der Konstellation kommt es laut Code genau zu dem Verhalten (Und nur in dem Fall). Das Verhalten tritt zumindest bei mir spontan und ohne Regel/Reproduzierbarkeit auf. Das einzige was mir einfällt: Ich habe ja den manuellen SOC für den Fall eines Reboots in die Initramdisk aufgenommen. Aber mir wäre neu, dass die außer beim Reboot nochmals ausgeführt wird?
Aber ich habe einen Ansatz wie man das vermutlich abfangen kann:
Für Ladepunkt 1 muss in die Datei /var/www/html/openWB/modules/soc_manual/main.sh in Zeile 98
Code: Alles auswählen
# There are cases the else arrives without entering new Man. SOC. Reason unknown. In this case current soc and man soc is different.
# Without the next row every time this happens SOC jumps back to last entered man. soc.
currentSoc=$(<$socFile)
echo $currentSoc > $manualSocFile
Das ergibt dann
Code: Alles auswählen
# read manualMeterFile if file exists and manualMeterFile is newer than manualSocFile
if [[ -f "$manualMeterFile" ]] && [ "$manualMeterFile" -nt "$manualSocFile" ]; then
manualMeter=$(<$manualMeterFile)
else
# There are cases the else arrives without entering new Man. SOC. Reason unknown. In this case current soc and man soc is different.
# Without the next row every time this happens SOC jumps back to last entered man. soc.
currentSoc=$(<$socFile)
echo $currentSoc > $manualSocFile
# manualMeterFile does not exist or is outdated
# update manualMeter with currentMeter
manualMeter=$currentMeter
echo $manualMeter > $manualMeterFile
fi
Der Code macht nichts anderes, als in dem Fall, wo die Rechengrundlage manualMeterFile zurückgesetzt wird, den manuellen SOC auf den zu dem Zeitpunkt berechneten SOC zu setzen.
Seit ich die Codenanpassung bei mir gemacht habe, hatte ich aber den Fall nicht mehr. Daher konnte ich es bisher nicht ausreichend testen.
EDIT: ACHTUNG: Es gab oben nochmals eine Korrektur im Code!
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 11:54 am
von philipp123
Hatte einen Fehler im Code. Ist oben als Edit geändert.
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 11:56 am
von turbowheeler
Danke das probiere ich aus und melde mich dann.
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 12:16 pm
von philipp123
Hab gerade nochmals über den Code geschaut. Sauber wäre so:
Code: Alles auswählen
#!/bin/bash
OPENWBBASEDIR=$(cd `dirname $0`/../../ && pwd)
RAMDISKDIR="$OPENWBBASEDIR/ramdisk"
MODULEDIR=$(cd `dirname $0` && pwd)
DMOD="EVSOC"
CHARGEPOINT=$1
# check if config file is already in env
if [[ -z "$debug" ]]; then
echo "soc_manual: Seems like openwb.conf is not loaded. Reading file."
# try to load config
. $OPENWBBASEDIR/loadconfig.sh
# load helperFunctions
. $OPENWBBASEDIR/helperFunctions.sh
fi
case $CHARGEPOINT in
2)
# second charge point
manualSocFile="$RAMDISKDIR/manual_soc_lp2"
manualMeterFile="$RAMDISKDIR/manual_soc_meter_lp2"
socFile="$RAMDISKDIR/soc1"
soctimerfile="$RAMDISKDIR/soctimer1"
socIntervall=1 # update every minute if script is called every 10 seconds
meterFile="$RAMDISKDIR/llkwhs1"
akkug=$akkuglp2
efficiency=$wirkungsgradlp2
;;
*)
# defaults to first charge point for backward compatibility
# set CHARGEPOINT in case it is empty (needed for logging)
CHARGEPOINT=1
manualSocFile="$RAMDISKDIR/manual_soc_lp1"
manualMeterFile="$RAMDISKDIR/manual_soc_meter_lp1"
socFile="$RAMDISKDIR/soc"
soctimerfile="$RAMDISKDIR/soctimer"
socIntervall=1 # update every minute if script is called every 10 seconds
meterFile="$RAMDISKDIR/llkwh"
akkug=$akkuglp1
efficiency=$wirkungsgradlp1
;;
esac
incrementTimer(){
case $dspeed in
1)
# Regelgeschwindigkeit 10 Sekunden
ticksize=1
;;
2)
# Regelgeschwindigkeit 20 Sekunden
ticksize=2
;;
3)
# Regelgeschwindigkeit 60 Sekunden
ticksize=1
;;
*)
# Regelgeschwindigkeit unbekannt
ticksize=1
;;
esac
soctimer=$((soctimer+$ticksize))
echo $soctimer > $soctimerfile
}
soctimer=$(<$soctimerfile)
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: timer = $soctimer"
if (( soctimer < socIntervall )); then
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: Nothing to do yet. Incrementing timer."
incrementTimer
else
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: Calculating manual SoC"
# reset timer
echo 0 > $soctimerfile
# read current meter
if [[ -f "$meterFile" ]]; then
currentMeter=$(<$meterFile)
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: currentMeter: $currentMeter"
# read manual Soc
if [[ -f "$manualSocFile" ]]; then
manualSoc=$(<$manualSocFile)
else
# set manualSoc to 0 as a starting point
manualSoc=0
echo $manualSoc > $manualSocFile
fi
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: manual SoC: $manualSoc"
# read current soc
if [[ -f "$socFile" ]]; then
currentSoc=$(<$socFile)
else
currentSoc=$manualSoc
echo $currentSoc > $socFile
fi
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: currentSoc: $currentSoc"
# read manualMeterFile if file exists and manualMeterFile is newer than manualSocFile
if [[ -f "$manualMeterFile" ]] && [ "$manualMeterFile" -nt "$manualSocFile" ]; then
manualMeter=$(<$manualMeterFile)
else
# There are cases the else arrives without entering new Man. SOC. Reason unknown. In this case current soc and man soc is different.
# Without the next row every time this happens SOC jumps back to last entered man. soc.
echo $currentSoc > $manualSocFile
# manualMeterFile does not exist or is outdated
# update manualMeter with currentMeter
manualMeter=$currentMeter
echo $manualMeter > $manualMeterFile
fi
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: manualMeter: $manualMeter"
# calculate newSoc
currentMeterDiff=$(echo "scale=5;$currentMeter - $manualMeter" | bc)
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: currentMeterDiff: $currentMeterDiff"
currentEffectiveMeterDiff=$(echo "scale=5;$currentMeterDiff * $efficiency / 100" | bc)
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: currentEffectiveMeterDiff: $currentEffectiveMeterDiff ($efficiency %)"
currentSocDiff=$(echo "scale=5;100 / $akkug * $currentEffectiveMeterDiff" | bc | awk '{printf"%d\n",$1}')
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: currentSocDiff: $currentSocDiff"
newSoc=$(echo "$manualSoc + $currentSocDiff" | bc)
if (( newSoc > 100 )); then
newSoc=100
fi
if (( newSoc < 0 )); then
newSoc=0
fi
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: newSoc: $newSoc"
echo $newSoc > $socFile
else
# no current meter value for calculation -> Exit
openwbDebugLog ${DMOD} 0 "Lp$CHARGEPOINT: ERROR: no meter value for calculation! ($meterFile)"
fi
fi
openwbDebugLog ${DMOD} 1 "Lp$CHARGEPOINT: --- Manual SoC end ---"
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 2:44 pm
von turbowheeler
OK, habe den neuen Code in die Datei main.sh kopiert. Zum testen brauche ich etwas Sonne,... sieht gerade schlecht aus. Also wird morgen getestet
Re: Support: Manuell + Berechnung
Verfasst: Mi Sep 29, 2021 2:47 pm
von turbowheeler
Soviele kann ich jetzt schon sagen sagen, es sieht nicht optimal aus: