Document significant updates in version 6.0.0, including new features, changes to API call strategy (NVS storage implementation), UI behavior, and fixes for data display consistency.
6.8 KiB
Changelog
All notable changes to this project will be documented in this file.
This project follows a simple semantic versioning style:
MAJOR.MINOR.PATCH
[6.0.0] - 2026-01-27
Added
-
Daily fetch + NVS storage (ESP32‑C3 NVS)
- Introduced non‑volatile storage for daily price data using the existing
Preferences(NVS) subsystem under the"my-ticker"namespace. - Stored fields:
data_day,data_mon,data_year(calendar date of the data)data_prc(raw JSON returned from the Energy‑Charts API)data_last_store(UNIX timestamp of last successful store)
- On boot, after Wi‑Fi and NTP time sync:
- The ticker checks NVS for stored data.
- If the stored date matches today, the JSON is deserialized and used directly (no initial API call needed).
- If the stored date is not today (or invalid), the data is ignored and the ticker behaves as if no data is available yet.
- Introduced non‑volatile storage for daily price data using the existing
-
Midnight rollover + daily fetch logic
- The system now performs one daily fetch per day, instead of hourly:
- On boot: fetch only if NVS does not already contain valid data for today.
- After local midnight: invalidate the previous day’s data and trigger a new fetch for the new day.
- As soon as a local‑time day change is detected:
isTodayDataAvailableis set tofalse.- The display state is forced to
"No data for today"(NO_DATA_OFFSET). - The white LED is turned off (same behavior as “no data”).
- A midnight fetch phase is activated.
- The system now performs one daily fetch per day, instead of hourly:
-
Midnight fetch retry strategy
- When midnight is detected:
- First fetch is scheduled immediately.
- If it fails (HTTP error or JSON/“day mismatch”), the system stays in
"No data for today"and the LEDs remain off.
- Retry policy during midnight phase:
- Retry every 10 minutes, up to 5 attempts.
- If still unsuccessful, retry only once at the top of each following hour until fresh data for the new day is retrieved.
- As soon as a successful fetch for today is obtained:
isTodayDataAvailable = true.- The enforced
NO_DATA_OFFSETstate is cleared back toCURRENT_PRICES. - The white LED resumes indicating the current 15‑minute segment price.
- The entire successful JSON payload and metadata are saved back into NVS.
- When midnight is detected:
-
Improved resilience after power loss
- If the device reboots during the same day:
- It can restore and reuse the last successfully stored daily data from NVS.
- This avoids unnecessary API calls and gives a fast “warm start” after power outages.
- If the device reboots on the next day:
- Yesterday’s stored data is not used for display (to avoid confusion).
- The display starts in
"No data for today"until the first successful fetch.
- If the device reboots during the same day:
-
Extended secondary (info) menu
- The secondary info screen (reachable via double‑click on the button) is extended from 16 to 20 lines, still shown as 4‑line pages.
- Existing info retained:
- Current time and date.
- Last successful update timestamp.
- Daily average price.
- Wi‑Fi RSSI and device IP.
- API success ratio.
- Uptime.
- Credits and version information.
- New NVS status section (first defined around lines 12–15, later rearranged in your version):
- Shows:
- NVS data status (
NVS status:) - Stored data date (
Data day: DD.MM.YYYYorData day: none) - Last store timestamp (
Last save: DD.MM.YYorLast save: none) - Basic quick status:
NVS: OK (today)– valid data for today loaded from NVSNVS: old data– NVS has data, but not from today (ignored for display)NVS: empty– no stored price data present
- NVS data status (
- Shows:
Changed
-
API call strategy
- Removed regular top‑of‑hour automatic fetching.
- API calls now occur only:
- Once at boot (if NVS has no valid data for today).
- After midnight (with the retry strategy described above).
- On user‑initiated long‑press (manual refresh).
- This significantly reduces network load while keeping behavior safe and predictable.
-
UI & behavior around day boundaries
- At midnight / day change:
- Display is immediately set to:
- Line 0:
No data for today - Line 1:
Press & hold to - Line 2:
refresh manually
- Line 0:
- White LED is turned off (no price indication until new data arrives).
- Display is immediately set to:
- Once data for the new day is available:
- The ticker returns to the usual 15‑minute detail + hourly display mode.
- At midnight / day change:
-
Versioning and info screens
- Version bumped to v6.0 and reflected in:
- Source file header comment.
- Secondary menu text (
price ticker v6.0). - New version documentation (
VERSION.md/CHANGELOG.md/README.md).
- Version bumped to v6.0 and reflected in:
-
Long‑press threshold (in repository version)
- Long‑press detection threshold extended from 2s to 3s (in your repository copy) to avoid accidental manual refreshes.
Fixed / Ensured
- Yesterday’s data is never shown as if it were today’s:
- On boot: previous‑day NVS data is ignored for display.
- After midnight: in‑RAM data is invalidated and the UI explicitly shows
"No data for today"until fresh data is fetched.
- LED state is always consistent with the availability of today’s data:
- LED off → no today data (or negative price).
- LED patterns → valid today data and a positive price in the current 15‑minute interval.
[5.5.0] - 2025-10-27
First 15‑minute detail version and DST‑fixed base, which v6.0 builds upon.
Added
- 15‑minute detail mode:
- Primary display shows:
- Current hour average.
- Four 15‑minute prices in compact format (
XX XX XX XX). - Next 2 hours’ averages.
- LED behavior switched from hourly‑based to 15‑minute‑segment based.
- Primary display shows:
- Compact price format:
- 15‑minute values shown as 2‑digit hundredths (e.g.
+99 -07 24 11).
- 15‑minute values shown as 2‑digit hundredths (e.g.
- DST / timezone handling:
configTzTime()withTZ_CET_CESTfor automatic CET ↔ CEST switching.
- Aggressive retry and state enforcement:
- Improved logic for:
- Handling stale data.
- Enforcing
"No data for today"state when needed. - Aggressively retrying fetches after HTTP/JSON failures.
- Improved logic for:
- UI and usability tweaks:
- Button:
- Single click: scroll primary list (hourly view).
- Double click: switch primary/secondary list.
- Long press: manual refresh.
- Secondary info list:
- Date/time, last update, daily average, Wi‑Fi and API stats, uptime, credits.
- Button:
Older versions
Earlier versions (≤5.4) introduced the basic ticker behavior, LCD layout, Energy‑Charts API integration, and the initial presence sensor / backlight / LED logic.
Those versions are not fully documented here, but key user‑visible behavior is maintained in v6.0 unless explicitly noted in this changelog.