mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-05-28 18:43:40 +00:00
_resolve_time_with_day_offset() was calling dt_util.now() internally instead of using the injected now parameter. This caused incorrect date calculations in tests and any caller that passes a specific reference time. Also add missing price_rank_* sensor keys to TIME_SENSITIVE_ENTITY_KEYS in coordinator/constants.py so quarter-hour refresh is registered for all 11 price rank sensors (current/next/previous interval and hour variants). Rename dt as dt_utils → dt as dt_util (ICN001) across 11 files to follow the project-wide import alias convention. Apply ruff auto-fixes for import ordering and collapsing single-item imports throughout the codebase. Released-Bug: no
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
"""Helper functions for sensor attributes."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
if TYPE_CHECKING:
|
|
from custom_components.tibber_prices.data import TibberPricesConfigEntry
|
|
|
|
|
|
def add_alternate_average_attribute(
|
|
attributes: dict,
|
|
cached_data: dict,
|
|
base_key: str,
|
|
*,
|
|
config_entry: TibberPricesConfigEntry,
|
|
) -> None:
|
|
"""
|
|
Add both average values (mean and median) as attributes.
|
|
|
|
This ensures automations work consistently regardless of which value
|
|
is displayed in the state. Both values are always available as attributes.
|
|
|
|
Note: To avoid duplicate recording, the value used as state should be
|
|
excluded from recorder via dynamic _unrecorded_attributes in sensor core.
|
|
|
|
Args:
|
|
attributes: Dictionary to add attribute to
|
|
cached_data: Cached calculation data containing mean/median values
|
|
base_key: Base key for cached values (e.g., "average_price_today", "rolling_hour_0")
|
|
config_entry: Config entry for user preferences (used to determine which value is in state)
|
|
|
|
"""
|
|
# Always add both mean and median values as attributes
|
|
mean_value = cached_data.get(f"{base_key}_mean")
|
|
if mean_value is not None:
|
|
attributes["price_mean"] = mean_value
|
|
|
|
median_value = cached_data.get(f"{base_key}_median")
|
|
if median_value is not None:
|
|
attributes["price_median"] = median_value
|