mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2026-10-31 22:02:17 +01:00
fix: send socket events only from loop()
Every socket event is formatted into one static buffer by one shared formatter. setConnected() runs on the WiFi/Ethernet event task and sent memStatus, wifiStrength and ethernet, then ran sockEmit.loop(), while loop() could be building its own event. _safecat() checks the room and then writes at _len, so another task moving _len in between could write past the end of g_response. setConnected() now sends nothing. loop() broadcasts the status every STATUS_EMIT_MS (30 s): memStatus, then ethernet, or wifiStrength when it moved 3 dBm or changed channel. A client that connects still gets all of it at once from initClients(), so needsBroadcast and the 1.5 s tick go, and so does the 1.5 s memStatus for the config panel. SocketEmitter records loop()'s task in begin(). Off it, beginEmit() logs and hands out a formatter that writes nothing, and endEmit(), endEmitRoom() and loop() do nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
474c7c0f42
commit
25d548ef07
11 changed files with 153 additions and 117 deletions
|
|
@ -10,12 +10,13 @@
|
|||
#define CONNECT_TIMEOUT 20000
|
||||
#define SSID_SCAN_INTERVAL 600000
|
||||
// A weak signal moves a dBm or two all the time, so only broadcast real
|
||||
// changes and not more often than this.
|
||||
// changes.
|
||||
#define RSSI_EMIT_MIN_DBM 3
|
||||
#define RSSI_EMIT_MIN_MS 10000
|
||||
// How often memStatus is broadcast. It is also the one event that is always
|
||||
// sent, so it must stay well under Home Assistant's 60s receive timeout.
|
||||
#define HEAP_EMIT_MS 30000
|
||||
// How often loop() broadcasts the status: memStatus, then wifiStrength or
|
||||
// ethernet. memStatus is the one event that is always sent, so this must stay
|
||||
// well under Home Assistant's 60s receive timeout. A client that connects gets
|
||||
// all of it straight away from SocketEmitter::initClients().
|
||||
#define STATUS_EMIT_MS 30000
|
||||
// A roaming scan only moves to another AP at least this much stronger.
|
||||
#define ROAM_MIN_GAIN_DB 6
|
||||
class ESPNetwork {
|
||||
|
|
@ -31,7 +32,6 @@ class ESPNetwork {
|
|||
bool wifiFallback = false;
|
||||
bool softAPOpened = false;
|
||||
bool openingSoftAP = false;
|
||||
bool needsBroadcast = true;
|
||||
conn_types_t connType = conn_types_t::unset;
|
||||
conn_types_t connTarget = conn_types_t::unset;
|
||||
bool connected();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue