hass.tibber_prices/custom_components/tibber_prices
Julian Pawlowski a010ccd290 fix(interval_pool): use tz-aware datetime comparison at resolution boundary
RESOLUTION_CHANGE_ISO was a naive ISO string ("2025-10-01T00:00:00").
_split_at_resolution_boundary compared it against timezone-aware interval
strings via plain string ordering, which is unreliable when the strings
carry different UTC offsets (e.g. +02:00 vs +00:00).  More critically,
the naive string was then split into ranges such as ("...", "2025-10-01T00:00:00")
which were parsed back to naive datetime objects in fetch_missing_ranges.
When routing.py then compared those naive objects against the tz-aware
boundary datetime, Python raised TypeError: can't compare offset-naive
and offset-aware datetimes.

Fix:
- Remove RESOLUTION_CHANGE_ISO; derive the boundary ISO string at
  runtime from RESOLUTION_CHANGE_DATETIME.isoformat(), which produces
  the UTC-normalised string "2025-10-01T00:00:00+00:00".
- Rewrite _split_at_resolution_boundary to parse each range's start/end
  to datetime objects, normalise any defensively-naive values to UTC,
  and compare against the RESOLUTION_CHANGE_DATETIME constant directly.
- Use the tz-aware boundary_iso string as the split point so downstream
  fromisoformat() calls always return tz-aware datetime objects.

Impact: Ranges spanning 2025-10-01T00:00:00 UTC are now split correctly
regardless of the UTC offset carried by the original interval strings,
and no TypeError is raised when routing.py compares the boundary
endpoints to its own tz-aware boundary calculation.
2026-04-06 14:08:27 +00:00
..
api fix(api): handle None values in API responses to prevent AttributeError 2025-12-13 14:02:30 +00:00
binary_sensor refactor(entities): remove redundant name= from all entity descriptions 2026-04-06 13:16:07 +00:00
config_flow_handlers fix(translations): update API token instructions to use placeholder for Tibber URL 2026-03-29 18:19:42 +00:00
coordinator fix(coordinator): preserve currency and home_id in re-transform calls 2026-04-06 13:51:59 +00:00
custom_translations feat(config_flow): show override warnings when config entities control settings 2026-01-21 17:36:51 +00:00
entity_utils fix(sensor): best price calculation on v-shaped days 2026-04-06 11:13:09 +00:00
interval_pool fix(interval_pool): use tz-aware datetime comparison at resolution boundary 2026-04-06 14:08:27 +00:00
number refactor(entities): remove redundant name= from all entity descriptions 2026-04-06 13:16:07 +00:00
sensor refactor(entities): remove redundant name= from all entity descriptions 2026-04-06 13:16:07 +00:00
services fix(sensor): best price calculation on v-shaped days 2026-04-06 11:13:09 +00:00
switch refactor(entities): remove redundant name= from all entity descriptions 2026-04-06 13:16:07 +00:00
translations fix(translations): update API token instructions to use placeholder for Tibber URL 2026-03-29 18:19:42 +00:00
utils feat(sensors): add 5-level price trend scale with configurable thresholds 2026-01-20 13:36:01 +00:00
__init__.py feat(config_flow): show override warnings when config entities control settings 2026-01-21 17:36:51 +00:00
config_flow.py feat(config_flow): add price level gap tolerance for Tibber API level field 2025-12-22 20:25:30 +00:00
const.py feat(sensors): add 5-level price trend scale with configurable thresholds 2026-01-20 13:36:01 +00:00
data.py feat(interval-pool): add intelligent interval caching and memory optimization 2025-11-25 20:44:39 +00:00
diagnostics.py refactor(lifecycle): integrate with Pool for sensor metrics 2025-12-23 14:13:34 +00:00
entity.py fix(sensor): best price calculation on v-shaped days 2026-04-06 11:13:09 +00:00
icons.json feat(services): add hourly resolution option for chart data services 2026-01-20 15:51:34 +00:00
manifest.json chore(release): bump version to 0.27.0 2026-03-29 18:49:21 +00:00
services.yaml feat(services): add hourly resolution option for chart data services 2026-01-20 15:51:34 +00:00