Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5d2b23129 | ||
|
|
2f3814c225 |
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.9.5] - 2026-05-18
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Temperature disappears permanently** (#9): After 3 consecutive API failures,
|
||||
the weather state machine was permanently locked — `weatherState` stayed `WEATHER_FAILED`
|
||||
and no new requests were ever made even after the API recovered. Fix: reset retry
|
||||
counter and state after max retries so periodic refresh resumes after next interval (30 min).
|
||||
|
||||
## [1.9.4] - 2026-05-14
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include <Arduino.h>
|
||||
|
||||
// Firmware version
|
||||
#define FIRMWARE_VERSION "1.9.4"
|
||||
#define FIRMWARE_VERSION "1.9.5"
|
||||
|
||||
// OLED I2C Configuration
|
||||
#define I2C_SDA 0 // GPIO0 (I2C Data) - SWAPPED!
|
||||
|
||||
@@ -96,7 +96,10 @@ void ICACHE_FLASH_ATTR onWeatherResponse(void* optParm, AsyncHTTPRequest* reques
|
||||
|
||||
weatherRetry.scheduleRetry();
|
||||
if (weatherRetry.maxRetriesReached()) {
|
||||
Serial.println("Weather max retries reached");
|
||||
// Reset so periodic refresh can retry after weatherInterval — prevents permanent lockup
|
||||
Serial.println("Weather max retries reached, resetting for next interval");
|
||||
weatherRetry.reset();
|
||||
weatherState = WEATHER_IDLE;
|
||||
} else {
|
||||
unsigned long backoff = weatherRetry.getBackoffDelay() / 1000;
|
||||
Serial.printf(" Retry scheduled in %lu seconds\n", backoff);
|
||||
@@ -113,7 +116,10 @@ void ICACHE_FLASH_ATTR onWeatherResponse(void* optParm, AsyncHTTPRequest* reques
|
||||
|
||||
weatherRetry.scheduleRetry();
|
||||
if (weatherRetry.maxRetriesReached()) {
|
||||
Serial.println("Weather max retries reached");
|
||||
// Reset so periodic refresh can retry after weatherInterval — prevents permanent lockup
|
||||
Serial.println("Weather max retries reached, resetting for next interval");
|
||||
weatherRetry.reset();
|
||||
weatherState = WEATHER_IDLE;
|
||||
} else {
|
||||
unsigned long backoff = weatherRetry.getBackoffDelay() / 1000;
|
||||
Serial.printf(" Retry scheduled in %lu seconds\n", backoff);
|
||||
|
||||
Reference in New Issue
Block a user