DESS has great potential if it is redesigned and reimplemented.
At the moment it can only be used with @dognose HACK and even there are still many small inconsistencies.
One of these is the self-consumption of the system which is not taken into account. This leads to two bugs.
-
The system gets stuck if the battery charge level falls below the set DESS minimum charge level.
-
The system recharges electricity from the grid at regular intervals to maintain the set DESS minimum state of charge, this happens in 5% steps, e.g. 15% → 20%.
Of course, any storage of electricity is less efficient than direct use. Each system has an individual round trip efficiency, which depends on the size of the system and the user behavior. With a round trip efficiency of 50%, which is not unusual, you need twice as much electricity if you store it in the battery.
In order to work a little more efficiently, I have developed the following workaround: Every 15 minutes, the DESS minimum charge level is adjusted to the current battery charge level, so the system does not charge the battery from grid anymore. This is done via a small shell script, which is started via the crontab.
Here is a screenshot with two days without the workaround and 12 days with the workaround. You can clearly see that almost 5kWh were saved in a two day period (Solar + from grid - Consumption - to grid). The workaround was activated on 16.12.2024. You can also see nightly EV charging at low prices.
You need basic knowledge of the editor “vi”, as well as “ssh” access to the CerboGX and minimal Linux knowledge to implement this.
crontab entry:
root@cerbogx:~# crontab -l
# minute stunde day_of_the_month month day_of_the_week (UTC time)
0,15,30,45 * * * * /home/root/bin/DynamicEss_selfconsume_SOC.sh
helper script:
root@cerbogx:~# cat /home/root/bin/DynamicEss_selfconsume_SOC.sh
#!/bin/bash
### adjust DESS MinimumSocLimit to actual SOC to reflect self consumption of inverters (0,75% per hour in my case)
### this prevents pulling energy from grid to charge battery modulo 5%. (for example charging from 15% to 20%)
### even if charging from grid is disallowed.
# set SOC below this script works
my_min_SOC=30
# read Battery SOC and convert to Integer
SOC=`/usr/bin/dbus -y com.victronenergy.system /Dc/Battery/Soc GetValue |awk '{printf ("%.0f" ,$1)}'`
# read DESS MinimumSocLimit and convert to Integer
min_SOC=`/usr/bin/dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/MinimumSocLimit GetValue |awk '{printf ("%.0f" ,$1)}'`
if [ ${SOC} -gt 2 -a ${SOC} -le ${my_min_SOC} -a ${SOC} -lt ${min_SOC} ]
then
# echo "set DynamicEss_MaxTargetSocForIdle to actual battery ${SOC}%"
/usr/bin/dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/MinimumSocLimit SetValue ${SOC} >/dev/null
fi
if [ ${SOC} -gt ${my_min_SOC} -a ${min_SOC} -ne ${my_min_SOC} ]
then
# echo "set DynamicEss_MaxTargetSocForIdle to ${my_min_SOC}% (reset settings while charging from PV)"
/usr/bin/dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/MinimumSocLimit SetValue ${my_min_SOC} >/dev/null
fi
my System:
v3.51~3 + @dognose HACK
3x Quattro 48/10000/140-2x100 + cerboGX
go-eCharger with nodeRED PV sureplus charging