From f04e15f5d0a4a6f25d46b86d233da34f864e3c81 Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Wed, 8 Nov 2023 18:40:37 +0100 Subject: [PATCH] Limit buffer size on ESP8266 to avoid reboots --- lib/AmsConfiguration/src/AmsConfiguration.cpp | 1 + src/AmsToMqttBridge.cpp | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/AmsConfiguration/src/AmsConfiguration.cpp b/lib/AmsConfiguration/src/AmsConfiguration.cpp index 24b0a2da..1202ba7c 100644 --- a/lib/AmsConfiguration/src/AmsConfiguration.cpp +++ b/lib/AmsConfiguration/src/AmsConfiguration.cpp @@ -1249,6 +1249,7 @@ void AmsConfiguration::print(Print* debugger) debugger->printf_P(PSTR("Baud: %i\r\n"), meter.baud); debugger->printf_P(PSTR("Parity: %i\r\n"), meter.parity); debugger->printf_P(PSTR("Invert serial: %s\r\n"), meter.invert ? "Yes" : "No"); + debugger->printf_P(PSTR("Buffer size: %i\r\n"), meter.bufferSize * 64); debugger->printf_P(PSTR("Distribution system: %i\r\n"), meter.distributionSystem); debugger->printf_P(PSTR("Main fuse: %i\r\n"), meter.mainFuse); debugger->printf_P(PSTR("Production Capacity: %i\r\n"), meter.productionCapacity); diff --git a/src/AmsToMqttBridge.cpp b/src/AmsToMqttBridge.cpp index e642fb2d..8c691b7d 100644 --- a/src/AmsToMqttBridge.cpp +++ b/src/AmsToMqttBridge.cpp @@ -727,9 +727,19 @@ void handleSystem(unsigned long now) { // After one hour, adjust buffer size to match the largest payload if(!maxDetectPayloadDetectDone && now > 3600000) { if(maxDetectedPayloadSize * 1.5 > meterConfig.bufferSize * 64) { - meterConfig.bufferSize = min((double) 64, ceil((maxDetectedPayloadSize * 1.5) / 64)); - debugI_P(PSTR("Increasing RX buffer to %d bytes"), meterConfig.bufferSize * 64); - config.setMeterConfig(meterConfig); + int bufferSize = min((double) 64, ceil((maxDetectedPayloadSize * 1.5) / 64)); + #if defined(ESP8266) + if(gpioConfig.hanPin != 3 && gpioConfig.hanPin != 113) { + bufferSize = min(bufferSize, 2); + } else { + bufferSize = min(bufferSize, 8); + } + #endif + if(bufferSize != meterConfig.bufferSize) { + debugI_P(PSTR("Increasing RX buffer to %d bytes"), bufferSize * 64); + meterConfig.bufferSize = bufferSize; + config.setMeterConfig(meterConfig); + } } maxDetectPayloadDetectDone = true; } @@ -1035,6 +1045,9 @@ void setupHanPort(GpioConfig& gpioConfig, uint32_t baud, uint8_t parityOrdinal, break; } + #if defined(ESP8266) + if(meterConfig.bufferSize > 2) meterConfig.bufferSize = 2; + #endif swSerial->begin(baud, serialConfig, pin, -1, invert, meterConfig.bufferSize * 64); hanSerial = swSerial;