From 9e4bb56dfbf48023d099c9b1e74bdc18ff213af4 Mon Sep 17 00:00:00 2001 From: nick Date: Thu, 4 Jun 2026 17:15:04 -0600 Subject: [PATCH] Revert "Add conservative BMS reconnect backoff" This reverts commit decbd655bb1e8ad388e8b646f7bdd70999b912ff. --- firmware/esp32/overland-controller/bms.cpp | 69 +++++++++++++++------- 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/firmware/esp32/overland-controller/bms.cpp b/firmware/esp32/overland-controller/bms.cpp index bc76d6c..86fdda1 100644 --- a/firmware/esp32/overland-controller/bms.cpp +++ b/firmware/esp32/overland-controller/bms.cpp @@ -511,31 +511,58 @@ void initBms() { } void updateBms() { - if (bmsSetupMode) { + if (!appConfig.bms.enabled || appConfig.bms.address.length() == 0) { + bmsData.connected = false; return; } - if ((long)(bmsReconnectPausedUntil - millis()) > 0) { + unsigned long now = millis(); + + if (!client || !client->isConnected()) { + bmsData.connected = false; + + if (now - lastBmsAttemptMs < bmsRetryIntervalMs) { + return; + } + + lastBmsAttemptMs = now; + + if (!connectBms()) { + consecutiveBmsFailures++; + + if (consecutiveBmsFailures >= 3) { + bmsRetryIntervalMs = BMS_RETRY_INTERVAL_LONG_FAIL_MS; + } else { + bmsRetryIntervalMs = BMS_RETRY_INTERVAL_FAILED_MS; + } + + return; + } + + consecutiveBmsFailures = 0; + bmsRetryIntervalMs = BMS_RETRY_INTERVAL_CONNECTED_MS; + } + + if (!requestBmsData()) { + bmsData.connected = false; + consecutiveBmsFailures++; + + if (client) { + client->disconnect(); + } + + if (consecutiveBmsFailures >= 3) { + bmsRetryIntervalMs = BMS_RETRY_INTERVAL_LONG_FAIL_MS; + } else { + bmsRetryIntervalMs = BMS_RETRY_INTERVAL_FAILED_MS; + } + + lastBmsAttemptMs = now; return; } - if (millis() - lastReadAttempt < READ_INTERVAL_MS) { - return; - } - - lastReadAttempt = millis(); - - if (!connectBms()) { - return; - } - - if (requestPacket(JBD_STATUS_REQUEST, sizeof(JBD_STATUS_REQUEST))) { - parseBasicInfo(); - } - - delay(100); - - if (requestPacket(JBD_CELL_REQUEST, sizeof(JBD_CELL_REQUEST))) { - parseCellVoltages(); - } + consecutiveBmsFailures = 0; + bmsRetryIntervalMs = BMS_RETRY_INTERVAL_CONNECTED_MS; + bmsData.connected = true; } +