Add conservative BMS reconnect backoff

This commit is contained in:
2026-06-04 17:07:09 -06:00
parent fa96a327a6
commit decbd655bb
+12 -39
View File
@@ -511,58 +511,31 @@ void initBms() {
} }
void updateBms() { void updateBms() {
if (!appConfig.bms.enabled || appConfig.bms.address.length() == 0) { if (bmsSetupMode) {
bmsData.connected = false;
return; return;
} }
unsigned long now = millis(); if ((long)(bmsReconnectPausedUntil - millis()) > 0) {
if (!client || !client->isConnected()) {
bmsData.connected = false;
if (now - lastBmsAttemptMs < bmsRetryIntervalMs) {
return; return;
} }
lastBmsAttemptMs = now; if (millis() - lastReadAttempt < READ_INTERVAL_MS) {
return;
}
lastReadAttempt = millis();
if (!connectBms()) { if (!connectBms()) {
consecutiveBmsFailures++;
if (consecutiveBmsFailures >= 3) {
bmsRetryIntervalMs = BMS_RETRY_INTERVAL_LONG_FAIL_MS;
} else {
bmsRetryIntervalMs = BMS_RETRY_INTERVAL_FAILED_MS;
}
return; return;
} }
consecutiveBmsFailures = 0; if (requestPacket(JBD_STATUS_REQUEST, sizeof(JBD_STATUS_REQUEST))) {
bmsRetryIntervalMs = BMS_RETRY_INTERVAL_CONNECTED_MS; parseBasicInfo();
} }
if (!requestBmsData()) { delay(100);
bmsData.connected = false;
consecutiveBmsFailures++;
if (client) { if (requestPacket(JBD_CELL_REQUEST, sizeof(JBD_CELL_REQUEST))) {
client->disconnect(); parseCellVoltages();
} }
if (consecutiveBmsFailures >= 3) {
bmsRetryIntervalMs = BMS_RETRY_INTERVAL_LONG_FAIL_MS;
} else {
bmsRetryIntervalMs = BMS_RETRY_INTERVAL_FAILED_MS;
}
lastBmsAttemptMs = now;
return;
}
consecutiveBmsFailures = 0;
bmsRetryIntervalMs = BMS_RETRY_INTERVAL_CONNECTED_MS;
bmsData.connected = true;
} }