Compare commits

..
16 Commits
Author SHA1 Message Date
Amir 0f6fadd1f8 Update README for version 6.2.4 release
Updated version number to 6.2.4 and added highlights for the new version, including a critical bug fix related to display refresh at exact hour boundaries.
2026-04-01 21:46:11 +02:00
Amir 28f7be344f Bump version to 6.2.4 and add release notes
Updated version from 6.2.3 to 6.2.4 and added highlights.
2026-04-01 21:44:28 +02:00
Amir 5c870f240c Add changelog entry for v6.2.4 bug fix
Documented the fix for the auto display refresh glitch that showed previous hour's data at the top of the hour. Updated the changelog with details about the problem and solution.
2026-04-01 21:42:40 +02:00
Amir 707ebcd99c Create ESP32_standalone_electricity_ticker_6_2_4.ino
Update to v6.2.3 - Top of the hour display previous hour display glitch fix
2026-04-01 21:37:17 +02:00
Amir 4e9b9495cd Update README for version 6.2.3 changes
Updated version number to 6.2.3 and added highlights for the new version.
2026-04-01 00:00:46 +02:00
Amir 1b17a7b80c Bump version to 6.2.3 and update release notes
Updated version to 6.2.3 with release date 2026-04-01. Added highlights for version 6.2.3 including a bug fix for state-based display refresh logic.
2026-03-31 23:59:01 +02:00
Amir 91dea24da8 Revise CHANGELOG for version 6.2.3 updates
Updated changelog to document the fix for state-based display refresh logic in version 6.2.3. The refresh logic now checks for hour changes instead of minute marks to ensure timely updates.
2026-03-31 23:55:27 +02:00
Amir 52c3727d39 Update to v6.2.3 - State-based display refresh logic
FIX: State-based display refresh logic
  - Problem: Screen would occasionally fail to update if the ESP32 was busy 
    (fetching data or reconnecting WiFi) during the exact 00/15/30/45 minute mark.
  - Fix: Switched from "Event-Based" (refresh only AT minute X) to "State-Based" 
    (refresh IF current time != last refresh time). This ensures the screen 
    updates immediately even if the device was busy during the transition.
  - Updated version strings throughout the UI.
2026-03-31 23:46:33 +02:00
Amir 824170a6d1 Update VERSION.md for version 6.2.2
Updated version information from 6.2.1 to 6.2.2, added highlights for the new version, and included bug fix details.
2026-03-31 21:38:45 +02:00
Amir dfb11004ba Update README for version 6.2.2 release
Updated version number to 6.2.2 and added highlights for the new version.
2026-03-31 21:36:15 +02:00
Amir 739b21609e Revise CHANGELOG for version 6.2.2 updates
Fixed a bug causing blank lines in the display for current prices and hour. Updated logic to ensure rows always show relevant information.
2026-03-31 21:32:19 +02:00
Amir 5ef53916ea Update to v6.2.2 - Screen blank lines issue fix
Update to v6.2.2 - Screen blank lines issue fix after v6.2.0 DST Fix

  - Problem: Sometimes rows 0 and 1 (current 15-min prices and current hour) were blank
  - Cause: The "hour suppression" logic was hiding the current hour unexpectedly
  - Fix: Row 1 (current hour) now ALWAYS shows - suppression logic only applies to rows 2-3
  - Row 0 (15-min details) also always shows for the current hour
2026-03-31 21:13:57 +02:00
Amir b55a7b4945 Update README for version 6.2.1 and highlights
Updated version number to 6.2.1 and added highlights for the latest change: a critical fix for current interval display issues.
2026-03-29 18:49:43 +02:00
Amir d7e27b4f56 Bump version to 6.2.1 and update highlights
Updated version from 6.2.0 to 6.2.1 and added highlights for the new version.
2026-03-29 18:44:33 +02:00
Amir 614be25a1f Revise CHANGELOG for version 6.2.1 updates
Fixed a bug in the price display by correcting the function to find the current 15-minute interval instead of the next one.
2026-03-29 18:43:05 +02:00
Amir 1e5fa661f0 Update to v6.2.1 - Screen refresh issue fix after v6.2.0 DST Fix
Fixed a bug where the display was showing prices one hour ahead of the current time.
2026-03-29 18:39:06 +02:00
7 changed files with 7480 additions and 10 deletions
+87
View File
@@ -2,6 +2,93 @@
All notable changes to this project are documented here.
## v6.2.4 - Exact-boundary display refresh bug (2026-04-01):
**Summary**
Top of the hour auto display refresh glitch fix where display automatically refreshed but showed the PREVIOUS hour's data.
### Problem:
- At the exact top of the hour (e.g., 20:00:00), the display automatically refreshed but showed the PREVIOUS hour's data (19:00). This happened because the "next-boundary" rounding logic in findCurrentPriceIndex() incorrectly excluded the current interval if the time was exactly on the boundary.
### Solution:
- Simplified findCurrentPriceIndex() to use a robust "last entry <= now" comparison. This ensures the display transitions to the new hour instantaneously at XX:00:00.
---
## v6.2.3 - State-based display refresh logic fix (2026-04-01):
**Summary**
The refresh logic should be "State-Based" rather than "Event-Based." Instead of checking if the minute is zero, it should check if the current hour is different from the last recorded hour.
### Problem: Screen would occasionally fail to update if the ESP32 was busy
- fetching data or reconnecting WiFi) during the exact 00/15/30/45 minute mark.
### Solution: Switched from "Event-Based" (refresh only AT minute X) to "State-Based"
(refresh IF current time != last refresh time).
- This ensures the screen updates immediately even if the device was busy during the transition.
---
## v6.2.2 - Display blank lines issue fix (2026-03-31):
**Summary**
Fixed a bug where the display was showing blank lines
### Problem: Sometimes rows 0 and 1 (current 15-min prices and current hour) were blank
**Cause:** The "hour suppression" logic was hiding the current hour unexpectedly
### Solution:
- Row 1 (current hour) now ALWAYS shows - suppression logic only applies to rows 2-3
- Row 0 (15-min details) also always shows for the current hour
---
## v6.2.1 Current Interval Fix (20260329)
**Summary**
Fixed a bug where the display was showing prices one hour ahead of the current time.
### Problem: Display Showing Next Hour Instead of Current
**Root Cause:**
The `findCurrentPriceIndex()` function was finding the **next** 15-minute interval (first entry with timestamp >= now), but it should find the **current** interval (the one we're currently IN).
For example, at 17:57:
- The current 15-minute interval is **17:45-18:00** (price indexed at 17:45)
- The **next** interval is 18:00-18:15 (price indexed at 18:00)
- The buggy function returned the index for **18:00** instead of **17:45**
- Result: Display showed hour **18** instead of hour **17**
### Solution
The fix calculates the **next 15-minute boundary** and finds the last entry **strictly before** that boundary:
```cpp
// Calculate the next 15-minute boundary
const int QUARTER_SECONDS = 15 * 60; // 900 seconds
time_t nextQuarter = ((now + QUARTER_SECONDS - 1) / QUARTER_SECONDS) * QUARTER_SECONDS;
// Find the last entry strictly before nextQuarter
for (size_t i = unixSeconds.size(); i > 0; i--) {
if ((time_t)unixTime < nextQuarter) {
return (int)(i - 1);
}
}
```
**Example:**
- At 17:57: nextQuarter = 18:00, finds last entry < 18:00 = 17:45 ✅
- At 18:00: nextQuarter = 18:15, finds last entry < 18:15 = 18:00 ✅
- At 18:46: nextQuarter = 19:00, finds last entry < 19:00 = 18:45 ✅
---
## v6.2.0 DST (Daylight Saving Time) Handling Fixed (20260329)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+27 -2
View File
@@ -5,13 +5,38 @@
This project is an ArduinoIDEfriendly firmware for the **Seeed XIAO ESP32C3** that:
- Connects to WiFi.
- Fetches **dayahead electricity prices** from [EnergyCharts.info](https://energy-charts.info) (Bundesnetzagentur / SMARD.de).
- Fetches **dayahead electricity prices** from [EnergyCharts.info](https://energy-charts.info).
- Computes final consumer prices (including configurable powercompany fee + VAT).
- Displays current and upcoming prices on a **20x4 I²C 2004 LCD**.
- Uses a white LED and an optional presence sensor to give quick visual feedback.
- Stores daily price data in **NVS** to survive reboots and reduce API calls.
The latest sketch implements **Version 6.2.0**, focusing on:
The latest sketch implements **Version 6.2.4**.
---
## Version Highlights
### v6.2.4 - Exact-boundary display refresh bug (critical fix of v6.2.3 update)
- Problem: At the exact top of the hour (e.g., 20:00:00), the display automatically refreshed but showed the PREVIOUS hour's data (19:00). This happened because the "next-boundary" rounding logic in findCurrentPriceIndex() incorrectly excluded the current interval if the time was exactly on the boundary.
- Fix: Simplified findCurrentPriceIndex() to use a robust "last entry <= now" comparison. This ensures the display transitions to the new hour instantaneously at XX:00:00.
### v6.2.3 - State-based display refresh logic (critical fix of v6.2.2 update)
- Problem: Screen would occasionally fail to update if the ESP32 was busy (fetching data or reconnecting WiFi) during the exact 00/15/30/45 minute mark.
- Fix: Switched from "Event-Based" (refresh only AT minute X) to "State-Based" (refresh IF current time != last refresh time). This ensures the screen updates immediately even if the device was busy during the transition.
### v6.2.2 - Display Blank Lines Issue Fix (critical fix of v6.2.1 update)
- Problem: Sometimes rows 0 and 1 (current 15-min prices and current hour) were blank.
- Cause: The "hour suppression" logic was hiding the current hour unexpectedly.
- Fix:
- Row 1 (current hour) now ALWAYS shows - suppression logic only applies to rows 2-3.
- Row 0 (15-min details) also always shows for the current hour.
### v6.2.1 Current Interval Fix (critical fix of v6.2.0 update)
- Fixed display showing prices one hour ahead of the current time.
- `findCurrentPriceIndex()` now correctly returns the current 15-minute interval.
Major update sketch implements **Version 6.2.0**, focusing on:
- **Version 6.2.0 FIX**: **DST (Daylight Saving Time) handling fully fixed** the ticker now works correctly on ALL days including DST switch days (spring forward and fall back). Uses timestamp-based price lookups instead of arithmetic calculations.
- Version 6.1.2 fix: restore correct **white LED indicator** behavior (ESP32 PWM fix; no dim glow when off).
+33 -8
View File
@@ -2,13 +2,40 @@
## Current firmware
- **Version:** 6.2.0
- **Release date:** 2026-03-29
- **Version:** 6.2.4
- **Release date:** 2026-04-01
- **Target MCU:** Seeed XIAO ESP32C3
- **Display:** 20x4 I²C LCD (PCF8574, default address `0x27`)
- **API endpoint:** `https://api.energy-charts.info/price?bzn=SI`
- **Resolution:** 15minute intervals, hourly averages for overview
## Highlights of v6.2.4
- **BUG FIX:** Exact-boundary display refresh bug
- Problem: At the exact top of the hour (e.g., 20:00:00), the display automatically refreshed but showed the PREVIOUS hour's data (19:00). This happened because the "next-boundary" rounding logic in findCurrentPriceIndex() incorrectly excluded the current interval if the time was exactly on the boundary.
- Fix: Simplified findCurrentPriceIndex() to use a robust "last entry <= now" comparison. This ensures the display transitions to the new hour instantaneously at XX:00:00.
## Highlights of v6.2.3
- **BUG FIX**: State-based display refresh logic
- Problem: Screen would occasionally fail to update if the ESP32 was busy (fetching data or reconnecting WiFi) during the exact 00/15/30/45 minute mark.
- Fix: Switched from "Event-Based" (refresh only AT minute X) to "State-Based" (refresh IF current time != last refresh time). This ensures the screen updates immediately even if the device was busy during the transition.
## Highlights of v6.2.2
- **BUG FIX**: Display blank lines issue
- Problem: Sometimes rows 0 and 1 (current 15-min prices and current hour) were blank
- Cause: The "hour suppression" logic was hiding the current hour unexpectedly
- Fix:
- Row 1 (current hour) now ALWAYS shows - suppression logic only applies to rows 2-3
- Row 0 (15-min details) also always shows for the current hour
## Highlights of v6.2.1
- **BUG FIX**: Fixed `findCurrentPriceIndex()` to return the correct current interval.
- Problem: At 17:57, it returned index for 18:00 instead of 17:45, causing display to show hour 18 instead of hour 17.
- Fix: Now calculates next 15-minute boundary and finds the last entry before that boundary.
## Highlights of v6.2.0
- **CRITICAL FIX**: DST (Daylight Saving Time) handling is now fully fixed for all days.
@@ -21,11 +48,6 @@
- The ticker now works correctly on all days, including DST switch days, with no manual intervention.
- **Future-proof**: If EU cancels DST, only the `TZ_CET_CEST` string needs updating (one line of code).
For full details, see:
- [CHANGELOG.md](./CHANGELOG.md)
- [README.md](./README.md)
## Previous firmware
- **Version:** 6.1.2
@@ -43,4 +65,7 @@ For full details, see:
- **Version:** 6.1.0 (2026-01-30) Midnight fetch and market day detection fixes
- **Version:** 6.0.0 (2026-01-27) NVS storage and daily fetch
For detailed history, see [CHANGELOG.md](./CHANGELOG.md).
For full details, see:
- [CHANGELOG.md](./CHANGELOG.md)
- [README.md](./README.md)