Support: Manuell + Berechnung

Alles rund um SoC (Ladezustand des Fahrzeuges). Probleme, Fragen, Fehlfunktionen gehören hier hin
philipp123
Beiträge: 1032
Registriert: Mi Jul 21, 2021 3:00 pm

Re: Support: Manuell + Berechnung

Beitrag 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.
Screenshot_20210923-195018_Chrome.jpg
LP1: openWB series2 custom mit Phasenumschaltung
LP2: go-e V2
Kostal Plenticore Plus
e-up BJ 2021, SOC mit OVMS
EQB 250 BJ 2023, SOC mit Mercedes ME über Home Assistant
EVU mit Tasmato-Lesekopf auf SmartMeter
9 x Smarthome mit Shellys
HSC
Beiträge: 3941
Registriert: So Jan 10, 2021 8:49 am

Re: Support: Manuell + Berechnung

Beitrag 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
philipp123
Beiträge: 1032
Registriert: Mi Jul 21, 2021 3:00 pm

Re: Support: Manuell + Berechnung

Beitrag 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?
LP1: openWB series2 custom mit Phasenumschaltung
LP2: go-e V2
Kostal Plenticore Plus
e-up BJ 2021, SOC mit OVMS
EQB 250 BJ 2023, SOC mit Mercedes ME über Home Assistant
EVU mit Tasmato-Lesekopf auf SmartMeter
9 x Smarthome mit Shellys
turbowheeler
Beiträge: 27
Registriert: Mi Feb 26, 2020 8:21 am

Re: Support: Manuell + Berechnung

Beitrag 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.
philipp123
Beiträge: 1032
Registriert: Mi Jul 21, 2021 3:00 pm

Re: Support: Manuell + Berechnung

Beitrag 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!
Zuletzt geändert von philipp123 am Mi Sep 29, 2021 11:56 am, insgesamt 1-mal geändert.
LP1: openWB series2 custom mit Phasenumschaltung
LP2: go-e V2
Kostal Plenticore Plus
e-up BJ 2021, SOC mit OVMS
EQB 250 BJ 2023, SOC mit Mercedes ME über Home Assistant
EVU mit Tasmato-Lesekopf auf SmartMeter
9 x Smarthome mit Shellys
philipp123
Beiträge: 1032
Registriert: Mi Jul 21, 2021 3:00 pm

Re: Support: Manuell + Berechnung

Beitrag von philipp123 »

Hatte einen Fehler im Code. Ist oben als Edit geändert.
LP1: openWB series2 custom mit Phasenumschaltung
LP2: go-e V2
Kostal Plenticore Plus
e-up BJ 2021, SOC mit OVMS
EQB 250 BJ 2023, SOC mit Mercedes ME über Home Assistant
EVU mit Tasmato-Lesekopf auf SmartMeter
9 x Smarthome mit Shellys
turbowheeler
Beiträge: 27
Registriert: Mi Feb 26, 2020 8:21 am

Re: Support: Manuell + Berechnung

Beitrag von turbowheeler »

Danke das probiere ich aus und melde mich dann.
philipp123
Beiträge: 1032
Registriert: Mi Jul 21, 2021 3:00 pm

Re: Support: Manuell + Berechnung

Beitrag 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 ---"
LP1: openWB series2 custom mit Phasenumschaltung
LP2: go-e V2
Kostal Plenticore Plus
e-up BJ 2021, SOC mit OVMS
EQB 250 BJ 2023, SOC mit Mercedes ME über Home Assistant
EVU mit Tasmato-Lesekopf auf SmartMeter
9 x Smarthome mit Shellys
turbowheeler
Beiträge: 27
Registriert: Mi Feb 26, 2020 8:21 am

Re: Support: Manuell + Berechnung

Beitrag 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 ;)
turbowheeler
Beiträge: 27
Registriert: Mi Feb 26, 2020 8:21 am

Re: Support: Manuell + Berechnung

Beitrag von turbowheeler »

Soviele kann ich jetzt schon sagen sagen, es sieht nicht optimal aus:
Bildschirmfoto vom 2021-09-29 16-46-05.png
Antworten