You’re correct – the scan interval should be used to switch it to lower than 30 seconds, which is the default. I can’t find the official documentation that it is 30s, but this basically says the scan_interval is 30s by default for most sensors.
So I doubt the 30s delay comes from the GX side, probably from the Home Assistant’s side.
Note you can’t go lower than 5 seconds – see the Modbus section under “Other breaking changes” in the latest release’s change log: 2021.6: A little bit of everything - Home Assistant (home-assistant.io)
That being said, I’m not sure I would trust HA for that high level of availability, especially if you’re running a bunch of other things too. I know some guys have 2 home assistant instances – one running critical parts with high performance and reliability, the other running “nice to haves”.
In @justinschoeman 's case, what about keeping your geyser switch on the Arduino (simplifying the functionality to basically become a Wifi switch but keep some safety logic), but adding some additional code to interface it with Home Assistant? That way you can keep the low latency response on the geyser, but also have all the nice things in Home Assistant (and easier expandability).
I’ve actually thought of doing something similar on my geyser – but in my case, the problem is that the Sonoff controlling the contactor tended to drop off the network at certain times, and thus ends up never receiving the “turn off” MQTT message and running waayy too long (I have it run at 15 min intervals when my batteries are fully charged to help boost the temperature). Then again, I switched to the CBI Astute and seems better now.