That’s the answer, and the gateway flagged it for us: Heap min watermark 7.9 KB, in red. That’s the lowest free memory it has ever seen, and 7.9 KB is right at the edge of out-of-memory. When free heap dips that low, a larger allocation like the buffer for an HTTP response simply fails, and the browser reports it as “Failed to fetch”. That’s your outage, and why the HA integration (which fetches over the same HTTP) drops at the same instant.
The rest of the panel confirms what it isn’t: it’s not rebooting (your prior-boot history shows uptimes over a day, and BLE/MQTT/WiFi reconnects this boot are all 0), and it’s not a connection drop (BLE is solid at -66 dBm, and those prior BLE blips are hours apart and a few seconds each, nothing like the 15-minute pattern). So it’s purely memory.
The 15-minute clockwork is almost certainly a periodic heavier request: the HA integration polls a few larger endpoints (sessions / charge log / schedules) on a slower cadence, and building one of those responses momentarily spikes memory. With headroom that’s a non-event; on the AtomS3U, which has no PSRAM, it tips over the edge.
So the real conclusion is that the AtomS3U is just too tight for this. A 7.9 KB low-water mark leaves no margin. A board with PSRAM (the S3-DevKitC-1 or S3-WROOM-1U-N16R8 in the README) has megabytes of spare heap and this disappears, and if the POE/Ethernet board you were eyeing is a PSRAM variant (most S3-ETH boards are, worth checking the model) it solves the memory headroom and frees the radio in one go.
I can also look at trimming the peak memory of those heavier endpoints on the firmware side, which might buy enough margin to keep the AtomS3U usable, but on a 7.9 KB watermark that’s a band-aid, PSRAM is the reliable fix. If you want to pin the exact trigger first, a serial log at 115200 across one outage will show the allocation failure and which operation was in flight.
And lol, yes, there is a human here. I built the gateway, own the charger and hardware and make calls on what ships, etc.
Thaks for all the testing and getting us to a fix.