mirror of
https://github.com/Legolas-2025/EPrices.git
synced 2026-08-18 12:44:51 +02:00
Add files via upload
This commit is contained in:
+129
@@ -0,0 +1,129 @@
|
||||
# EPrices v1.0 – Changelog
|
||||
|
||||
## v1.0 — 2026-04-05
|
||||
|
||||
Initial release of EPrices.
|
||||
|
||||
---
|
||||
|
||||
### Project & device renames
|
||||
|
||||
| Item | Value |
|
||||
|---|---|
|
||||
| ESPHome node name | `eprices` |
|
||||
| Friendly name | `EPrices` |
|
||||
| Helper file | `eprices_nvs.h` |
|
||||
| C++ namespace | `eprices_nvs` |
|
||||
| NVS partition namespace | `eprices` |
|
||||
| Secret key prefix | `eprices_` |
|
||||
|
||||
---
|
||||
|
||||
### Secrets file keys
|
||||
|
||||
```yaml
|
||||
wifi_ssid
|
||||
wifi_password
|
||||
eprices_fallback_ap_ssid
|
||||
eprices_fallback_ap_password
|
||||
eprices_api_encryption_key
|
||||
eprices_timezone # e.g. "Europe/Ljubljana"
|
||||
eprices_country_bzn # e.g. "SI"
|
||||
eprices_prov_fee # e.g. "0.12" (provider fee as decimal multiplier)
|
||||
eprices_vat_rate # e.g. "0.22" (VAT rate as decimal multiplier)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Sensors
|
||||
|
||||
#### Numeric sensors (`sensor:`)
|
||||
|
||||
| Name | Entity ID | Notes |
|
||||
|---|---|---|
|
||||
| Today Current Price | `sensor.eprices_today_current_price` | |
|
||||
| Today Next Price | `sensor.eprices_today_next_price` | |
|
||||
| Today Average Price | `sensor.eprices_today_average_price` | |
|
||||
| Today Highest Price | `sensor.eprices_today_highest_price` | |
|
||||
| Today Lowest Price | `sensor.eprices_today_lowest_price` | |
|
||||
| Today Current Hourly Price | `sensor.eprices_today_current_hourly_price` | |
|
||||
| Today Next Hourly Price | `sensor.eprices_today_next_hourly_price` | |
|
||||
| Today Highest Hourly Price | `sensor.eprices_today_highest_hourly_price` | |
|
||||
| Today Lowest Hourly Price | `sensor.eprices_today_lowest_hourly_price` | |
|
||||
| Today Current Max Hourly Price Percentage | `sensor.eprices_today_current_max_hourly_price_percentage` | |
|
||||
| Tomorrow Current Price | `sensor.eprices_tomorrow_current_price` | Evaluates at now + 86400s |
|
||||
| Tomorrow Next Price | `sensor.eprices_tomorrow_next_price` | Evaluates at now + 86400s |
|
||||
| Tomorrow Average Price | `sensor.eprices_tomorrow_average_price` | |
|
||||
| Tomorrow Highest Price | `sensor.eprices_tomorrow_highest_price` | |
|
||||
| Tomorrow Lowest Price | `sensor.eprices_tomorrow_lowest_price` | |
|
||||
| Tomorrow Current Hourly Price | `sensor.eprices_tomorrow_current_hourly_price` | Evaluates at now + 86400s |
|
||||
| Tomorrow Next Hourly Price | `sensor.eprices_tomorrow_next_hourly_price` | Evaluates at now + 86400s |
|
||||
| Tomorrow Highest Hourly Price | `sensor.eprices_tomorrow_highest_hourly_price` | |
|
||||
| Tomorrow Lowest Hourly Price | `sensor.eprices_tomorrow_lowest_hourly_price` | |
|
||||
| Tomorrow Current Max Hourly Price Percentage | `sensor.eprices_tomorrow_current_max_hourly_price_percentage` | Evaluates at now + 86400s |
|
||||
| WiFi Signal | `sensor.eprices_wifi_signal` | dBm, diagnostic |
|
||||
| Uptime | `sensor.eprices_uptime` | Human-readable string, diagnostic |
|
||||
|
||||
#### Text sensors (`text_sensor:`)
|
||||
|
||||
| Name | Entity ID | Notes |
|
||||
|---|---|---|
|
||||
| Today JSON Hourly Prices EUR⁄kWh | `sensor.eprices_today_json_hourly_prices_eur_kwh` | JSON array, 24 values |
|
||||
| Today JSON 15-Min Prices EUR⁄kWh (P1 00:00-07:45) | `sensor.eprices_today_json_15_min_prices_eur_kwh_p1_00_00_07_45` | JSON array, 32 values |
|
||||
| Today JSON 15-Min Prices EUR⁄kWh (P2 08:00-15:45) | `sensor.eprices_today_json_15_min_prices_eur_kwh_p2_08_00_15_45` | JSON array, 32 values |
|
||||
| Today JSON 15-Min Prices EUR⁄kWh (P3 16:00-23:45) | `sensor.eprices_today_json_15_min_prices_eur_kwh_p3_16_00_23_45` | JSON array, 32 values |
|
||||
| Today Highest Price Time | `sensor.eprices_today_highest_price_time` | HH:MM |
|
||||
| Today Lowest Price Time | `sensor.eprices_today_lowest_price_time` | HH:MM |
|
||||
| Today Highest Hourly Price Time | `sensor.eprices_today_highest_hourly_price_time` | HH:00 |
|
||||
| Today Lowest Hourly Price Time | `sensor.eprices_today_lowest_hourly_price_time` | HH:00 |
|
||||
| Today Current Price Status | `sensor.eprices_today_current_price_status` | `Valid` / `Missing` / `Stale` |
|
||||
| Today Data Loaded Time | `sensor.eprices_today_data_loaded_time` | Stamped on NVS load and HTTP fetch |
|
||||
| Today Last API Fetch Time | `sensor.eprices_today_last_api_fetch_time` | Stamped on HTTP fetch only; `Never` if NVS only; diagnostic |
|
||||
| Today Price Update Status | `sensor.eprices_today_price_update_status` | `SUCCESS` / `FAILED/WAITING`; diagnostic |
|
||||
| Today Price Update Status Message | `sensor.eprices_today_price_update_status_message` | Detailed status string; diagnostic |
|
||||
| Today API Fetch Attempts | `sensor.eprices_today_api_fetch_attempts` | HTTP fetch count; resets at midnight; diagnostic |
|
||||
| Today Entry Count | `sensor.eprices_today_entry_count` | Number of stored price points; diagnostic |
|
||||
| Tomorrow JSON Hourly Prices EUR⁄kWh | `sensor.eprices_tomorrow_json_hourly_prices_eur_kwh` | JSON array, 24 values |
|
||||
| Tomorrow JSON 15-Min Prices EUR⁄kWh (P1 00:00-07:45) | `sensor.eprices_tomorrow_json_15_min_prices_eur_kwh_p1_00_00_07_45` | JSON array, 32 values |
|
||||
| Tomorrow JSON 15-Min Prices EUR⁄kWh (P2 08:00-15:45) | `sensor.eprices_tomorrow_json_15_min_prices_eur_kwh_p2_08_00_15_45` | JSON array, 32 values |
|
||||
| Tomorrow JSON 15-Min Prices EUR⁄kWh (P3 16:00-23:45) | `sensor.eprices_tomorrow_json_15_min_prices_eur_kwh_p3_16_00_23_45` | JSON array, 32 values |
|
||||
| Tomorrow Highest Price Time | `sensor.eprices_tomorrow_highest_price_time` | HH:MM |
|
||||
| Tomorrow Lowest Price Time | `sensor.eprices_tomorrow_lowest_price_time` | HH:MM |
|
||||
| Tomorrow Highest Hourly Price Time | `sensor.eprices_tomorrow_highest_hourly_price_time` | HH:00 |
|
||||
| Tomorrow Lowest Hourly Price Time | `sensor.eprices_tomorrow_lowest_hourly_price_time` | HH:00 |
|
||||
| Tomorrow Current Price Status | `sensor.eprices_tomorrow_current_price_status` | `Valid` / `Missing` / `Waiting...` |
|
||||
| Tomorrow Data Loaded Time | `sensor.eprices_tomorrow_data_loaded_time` | Stamped on NVS load and HTTP fetch; `Outside fetch window` before 13:20 |
|
||||
| Tomorrow Last API Fetch Time | `sensor.eprices_tomorrow_last_api_fetch_time` | Stamped on HTTP fetch only; `Never` if NVS only; diagnostic |
|
||||
| Tomorrow Price Update Status | `sensor.eprices_tomorrow_price_update_status` | `SUCCESS` / `FAILED/WAITING`; diagnostic |
|
||||
| Tomorrow Price Update Status Message | `sensor.eprices_tomorrow_price_update_status_message` | Detailed status string; diagnostic |
|
||||
| Tomorrow API Fetch Attempts | `sensor.eprices_tomorrow_api_fetch_attempts` | HTTP fetch count; resets at 13:25; diagnostic |
|
||||
| Tomorrow Entry Count | `sensor.eprices_tomorrow_entry_count` | Number of stored price points; diagnostic |
|
||||
| Last Reboot | `sensor.eprices_last_reboot` | Boot timestamp; diagnostic |
|
||||
| Last Update Source | `sensor.eprices_last_update_source` | `NVS_boot` / `HTTP_today` / `midnight_bridge` etc.; diagnostic |
|
||||
| Today NVS Status | `sensor.eprices_today_nvs_status` | NVS load/store result; diagnostic |
|
||||
| Tomorrow NVS Status | `sensor.eprices_tomorrow_nvs_status` | NVS load/store result; diagnostic |
|
||||
| Today Data Date | `sensor.eprices_today_data_date` | Date of stored today data; diagnostic |
|
||||
| Tomorrow Data Date | `sensor.eprices_tomorrow_data_date` | Date of stored tomorrow data; diagnostic |
|
||||
|
||||
#### Buttons
|
||||
|
||||
| Name | Entity ID |
|
||||
|---|---|
|
||||
| Force Today's Update | `button.eprices_force_today_s_update` |
|
||||
| Force Tomorrow's Update | `button.eprices_force_tomorrow_s_update` |
|
||||
| Reboot Device | `button.eprices_reboot_device` |
|
||||
|
||||
---
|
||||
|
||||
### Key behaviours
|
||||
|
||||
- **Price calculation:** `price_eur_kwh = (raw_eur_mwh / 1000) × (1 + prov_fee) × (1 + vat_rate)`
|
||||
- **Negative prices:** formatted as `%.3f` (3 decimal places) to stay within the 255-character HA text sensor state limit; positive prices use `%.4f`
|
||||
- **DST-safe:** all price indexing uses UNIX timestamps and binary search — no hour-slot arithmetic
|
||||
- **NVS persistence:** prices survive reboots; stale data (date mismatch) is discarded and triggers a fresh HTTP fetch
|
||||
- **Today Current Price Status** shows `Stale` if stored date does not match today's date
|
||||
- **Tomorrow live sensors** evaluate at `now + 86400s` so they reflect tomorrow at the same local time
|
||||
- **Tomorrow Data Loaded Time** shows `Outside fetch window` when device boots before 13:20
|
||||
- **API fetch times** reset to `Never` at midnight bridge and on `clear_tomorrow_prices`
|
||||
- **API fetch attempt counters** reset to `0` at midnight and publish `0` immediately on boot
|
||||
- **Uptime** displayed as human-readable string: `45 s` / `5 min` / `3 h 22 min` / `12 d 4 h` / `4 months 12 d`
|
||||
Reference in New Issue
Block a user