diff --git a/src/ESPNetwork.cpp b/src/ESPNetwork.cpp index 3abdc90..ccd6b99 100644 --- a/src/ESPNetwork.cpp +++ b/src/ESPNetwork.cpp @@ -32,8 +32,6 @@ extern SomfyShadeController somfy; static unsigned long _lastHeapEmit = 0; static bool _apScanning = false; -static uint32_t _lastMaxHeap = 0; -static uint32_t _lastHeap = 0; int connectRetries = 0; void ESPNetwork::end() { SSDP.end(); @@ -673,20 +671,12 @@ void ESPNetwork::networkEvent(WiFiEvent_t event) { } } void ESPNetwork::emitHeap(uint8_t num) { - bool bEmit = false; - bool bTimeEmit = millis() - _lastHeapEmit > 15000; - bool bRoomEmit = false; - bool bValEmit = false; - if(num != 255 || this->needsBroadcast) bEmit = true; - if(millis() - _lastHeapEmit > 15000) bTimeEmit = true; uint32_t freeHeap = ESP.getFreeHeap(); uint32_t maxHeap = ESP.getMaxAllocHeap(); uint32_t minHeap = ESP.getMinFreeHeap(); - if(abs((int)(freeHeap - _lastHeap)) > 1500) bValEmit = true; - if(abs((int)(maxHeap - _lastMaxHeap)) > 1500) bValEmit = true; - bRoomEmit = sockEmit.activeClients(0) > 0; - if(bValEmit) bTimeEmit = millis() - _lastHeapEmit > 7000; - if(bEmit || bTimeEmit || bRoomEmit || bValEmit) { + const bool bBroadcast = num == 255 && millis() - _lastHeapEmit >= HEAP_EMIT_MS; + const bool bRoomEmit = sockEmit.activeClients(0) > 0; + if(num != 255 || bBroadcast || bRoomEmit) { JsonSockEvent *json = sockEmit.beginEmit("memStatus"); json->beginObject(); json->addElem("max", maxHeap); @@ -695,20 +685,11 @@ void ESPNetwork::emitHeap(uint8_t num) { json->addElem("total", ESP.getHeapSize()); json->addElem("uptime", (uint64_t)millis()); json->endObject(); - if(num == 255 && bTimeEmit && bValEmit) { + if(bBroadcast) { sockEmit.endEmit(num); _lastHeapEmit = millis(); - _lastHeap = freeHeap; - _lastMaxHeap = maxHeap; - //Serial.printf("BROAD HEAP: Emit:%d TimeEmit:%d ValEmit:%d\n", bEmit, bTimeEmit, bValEmit); - } - else if(num != 255) { - sockEmit.endEmit(num); - //Serial.printf("TARGET HEAP %d: Emit:%d TimeEmit:%d ValEmit:%d\n", num, bEmit, bTimeEmit, bValEmit); - } - else if(bRoomEmit) { - sockEmit.endEmitRoom(0); - //Serial.printf("ROOM HEAP: Emit:%d TimeEmit:%d ValEmit:%d\n", bEmit, bTimeEmit, bValEmit); } + else if(num != 255) sockEmit.endEmit(num); + else sockEmit.endEmitRoom(0); } } diff --git a/src/ESPNetwork.h b/src/ESPNetwork.h index 08cd562..bb0bdc6 100644 --- a/src/ESPNetwork.h +++ b/src/ESPNetwork.h @@ -12,6 +12,9 @@ // changes and not more often than this. #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 // A roaming scan only moves to another AP this much stronger. #define ROAM_MIN_GAIN_DB 6 class ESPNetwork {