I built my own power diverter so that excess solar is sent to my immersion heater through a PWM controller.
If you already have a water heater load that accurately adjusts power to just use the excess solar power, then the other loads (ie. chargers) don't need to adjust power accurately, because the water heater controller will slow down / step up to to fill the power gap.
I'd recommend using several 500W chargers. Makes programming easier, simple to see that's going on, and no need shuffle relays to get the desired load. Cheap and quick to find replacements, too.
What I found extremely important while building my system was to have a crystal clear plan on what you want the system to do.
Assuming the priorities are 1) not draw from the grid, and 2) charging batteries, last) heat water:
You're going to need to measure how much power you're EXporting and how much power the water HEater is using.
Whenever EX+HE goes above 650W, you turn on another one of your 500W chargers.
Whenever EX+HE goes below 50W, you turn off one of your 500W chargers.
You'll want to keep a certain power buffer, so that the devices aren't switched on/off too frequently.
I also keep a table with timestamps of when they last switched, total runtime, etc, and then activate the relay that has had sufficient cooldown time and the least runtime.
If you want to smartly use off-peak power, then you're going to want more data to make decisions: expected energy generation estimate, battery charge status, and water temperature. Then use off-peak power as required, but leave enough space in the battery / water tank to absorb potential excess energy generated during the day.
Zero experience with "Shelly", but I can send you some of my python code to query the IoTaWatt power meter and SmartPlug control script.