Closed StefanKie closed 1 year ago
Hallo, den ganzen loop an die bedingung des heap zu hängen halte ich nicht für den besten weg. websocket clients sollten automatisch bereinigt werden, die lassen den heap schrumpfen, das ist in der aktuellen version vorhanden. wenn sollte man die anzahl der ajax requests begrenzen. das ganze ist eigentlich auch nicht dafür gedacht das man das webUI so oft aktualisiert bis der webserver abstürzt
das sorgt dafür das wenn der heap kleiner 3300 ist keine daten an das webUI geliefert werden womit das hängt und ggf in ein timeout läuft
void onEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len)
{
if (ESP.getFreeHeap() > 33000)
{
switch (type)
{
case WS_EVT_CONNECT:
wsClient = client;
getJsonDevice();
getJsonData();
notifyClients();
break;
case WS_EVT_DISCONNECT:
wsClient = nullptr;
break;
case WS_EVT_DATA:
handleWebSocketMessage(arg, data, len);
break;
case WS_EVT_PONG:
case WS_EVT_ERROR:
break;
}
}
den ganzen loop auszuhelbeln ist denkbar schlecht, wenn aus irgendeinem grund der heap sinkt, funktioniert kein failsave, relais, etc mehr
void loop()
{
// Make sure wifi is in the right mode
if (WiFi.status() == WL_CONNECTED)
{
if (ESP.getFreeHeap() > 33000)
{
-->> hier die komplette LOOP
EDIT: hab das gerade mal versucht nachzustellen, der ESP stürzt nicht ab egal wie oft und schnell man das webUi aktualisiert
This issue is stale because it has been open for 30 days with no activity.
This issue was closed because it has been inactive for 14 days since being marked as stale.
Is there an existing issue for this?
Used Hardware?
Wemos D1 Mini
What happened?
öfters sporadische restart nach --> sending several AJAX requests at once from the frontend can cause the overload.
To see whether this is the case, try printing the result of ESP.getFreeHeap() at various points in your loop. If it falls much below 10kb, there is a risk that another request will drive it over the edge. Das habe ich behoben durch: void notifyClients() { if (wsClient != nullptr && wsClient->canSend()) { if (ESP.getFreeHeap() > 33000) // { DEBUG_PRINT(F("Info: Data sent to WebSocket... ")); char data[JSON_BUFFER]; size_t len = serializeJson(bmsJson, data); wsClient->text(data, len); DEBUG_PRINT(F("Done\n")); } } }
void onEvent(AsyncWebSocket server, AsyncWebSocketClient client, AwsEventType type, void arg, uint8_t data, size_t len) { if (ESP.getFreeHeap() > 33000) { switch (type) { case WS_EVT_CONNECT: wsClient = client; getJsonDevice(); getJsonData(); notifyClients(); break; case WS_EVT_DISCONNECT: wsClient = nullptr; break; case WS_EVT_DATA: handleWebSocketMessage(arg, data, len); break; case WS_EVT_PONG: case WS_EVT_ERROR: break; } }
void loop() { // Make sure wifi is in the right mode if (WiFi.status() == WL_CONNECTED) { if (ESP.getFreeHeap() > 33000) { -->> hier die komplette LOOP
Screenshots / Fotos
.
Steps To Reproduce
.
Version
2.x.x and above
Relevant livejson output
Which BMS is connected?
200A
What browsers are you seeing the problem on?
Chrome