If you don't like paying any more for power than you have to, but like to keep your batteries topped up, then you may have looked at scheduled charging via ESS. Once you have tried it, you will realize that it has a major shortcoming - it will prevent your battery being drawn down until the end of the charging time even if the battery has reached desired SOC.
I will provide an overview of how I got around this but please do not expect a complete recipe as each person's situation is different.
My scenario is this: I want to charge my batteries via solar and only charge the batteries at the end of the day if the sun did not hold up its end of the bargain. That way, I will always go into the night with charged batteries. I keep 40% SOC reserved for power outages and generally use 40% SOC overnight. Thus I like to have at least 80% in my batteries. This allows me to wake up to a SOC no lower than around 40% if the grid failed early in the night - giving me time to sort out the problem or run up the generator after a coffee and decent breakfast.
I am using a Color Control GX to run the Victron side of the system but also have external home automation which I use for the majority of my measurement and control requirements. The main elements are (1) Home Assistant (2) Node Red and (3) MQTT server. These are all running on a device separate from the GX, though I understand that I could use the GX for all of these requirements.
I use Home Assistant (HA) to provide the user interface and much of the data management. I use Node Red (NR) for automation and some data manipulation. MQTT is used as a data interface and for triggering actions.
My key element of the solution is the use the ESS AC "Set Point" to control charging.
HOME ASSISTANT
In HA, I have a variable for SOC_target_percent (Charge Until) and a button to manually start a charge. The button triggers a flow in Node Red (explained later). Also in HA, I use the modbus integration to communicate with the GX device on TCP port 502 for control purposes. Turning the switch 'on' sets the AC "set point" to 3500W (a value I chose). Turning the button off, will change the AC "set point" to 10W - effectively stopping charging.
NODE RED
In NR, I have a flow that takes the button trigger from HA and translates that to the modbus messages that are needed to provide the desired outcome. This is fed back to HA to send via the modbus integration. (See note 1).
The current battery SOC% is monitored (from HA via MQTT) and if charging is underway, the current SOC% is compared to the target % and the charge cycle completed if the target is reached.
I also have a timer that triggers at 4pm and will start the 'manual' charge cycle with a target SOC% of 85% if the battery is not sufficiently charged.
RESULT
The result is that I will always have the batteries topped up to (at least) 85% at the end of the day. Solar panels provide the charge most days. On the rare day that we don't get enough sun, then the AC charger in the Multiplus2 tops up the batteries and I don't wait until the end of a "charging window" to start drawing down on the batteries.
I have provided the NR flows involved for reference (as a JSON text file). Note it relies on a "timerswitch" integration and a "home-assistant" integration.
NOTES
Note 1. Node Red has a modbus integration that can be used directly. However, I have found it to be unstable and am much more confident with the integration available in Home Assistant.
Note 2. All this could be avoided if the GX allowed you the option to 'complete' the charging cycle when SOC is reached, rather than keeping the charging window open until the scheduled amount of time has elapsed.