Depending on the power of the heaters, there might be a relatively cost-effective solution:
In my ess-extension, I’ve included a Service called SolarOverhead Distributer. It calculates (in Grid-Tie-Situations) how much excess solar is available and therefore can generated “allowances” for subscribing consumers.
A tiny extra feature (“NPC Consumer”) is that it is able to control devices through http-calls directly, without the need to implement external control-logic. (On / off, based on priority and configured power)
This could be used along with shelly devices, so, if a single shelly would be enough for one heater, could be used.
Also a battery reservation can be configured, so you can say “chargerate should be 4000 Watts, before additional consumers are turned on” (can even be an equation based on SoC)
If you want to check it out, see here and follow the link to the documentation / examples on github.