mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-29 21:03:40 +00:00
Implement gap tolerance smoothing for Tibber's price level classification (VERY_CHEAP/CHEAP/NORMAL/EXPENSIVE/VERY_EXPENSIVE), separate from the existing rating_level gap tolerance (LOW/NORMAL/HIGH). New feature: - Add CONF_PRICE_LEVEL_GAP_TOLERANCE config option with separate UI step - Implement _apply_level_gap_tolerance() using same bidirectional gravitational pull algorithm as rating gap tolerance - Add _build_level_blocks() and _merge_small_level_blocks() helper functions Config flow changes: - Add new "price_level" options step with dedicated schema - Add menu entry "🏷️ Preisniveau" / "🏷️ Price Level" - Include translations for all 5 languages (de, en, nb, nl, sv) Bug fixes: - Use copy.deepcopy() for price intervals before enrichment to prevent in-place modification of cached raw API data, which caused gap tolerance changes to not take effect when reverting settings - Clear transformation cache in invalidate_config_cache() to ensure re-enrichment with new settings Logging improvements: - Reduce options update handler from 4 INFO messages to 1 DEBUG message - Move level_filtering and period_overlap debug logs to .details logger for granular control via configuration.yaml Technical details: - level_gap_tolerance is tracked separately in transformation config hash - Algorithm: Identifies small blocks (≤ tolerance) and merges them into the larger neighboring block using gravitational pull calculation - Default: 1 (smooth single isolated intervals), Range: 0-4 Impact: Users can now stabilize Tibber's price level classification independently from the internal rating_level calculation. Prevents automation flickering caused by brief price level changes in Tibber's API.
54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
"""
|
|
Config flow for Tibber Prices integration.
|
|
|
|
This module serves as the entry point for Home Assistant's config flow discovery.
|
|
The actual implementation is in the config_flow_handlers package.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .config_flow_handlers.options_flow import (
|
|
TibberPricesOptionsFlowHandler as OptionsFlowHandler,
|
|
)
|
|
from .config_flow_handlers.schemas import (
|
|
get_best_price_schema,
|
|
get_options_init_schema,
|
|
get_peak_price_schema,
|
|
get_price_level_schema,
|
|
get_price_rating_schema,
|
|
get_price_trend_schema,
|
|
get_reauth_confirm_schema,
|
|
get_select_home_schema,
|
|
get_subentry_init_schema,
|
|
get_user_schema,
|
|
get_volatility_schema,
|
|
)
|
|
from .config_flow_handlers.subentry_flow import (
|
|
TibberPricesSubentryFlowHandler as SubentryFlowHandler,
|
|
)
|
|
from .config_flow_handlers.user_flow import TibberPricesConfigFlowHandler as ConfigFlow
|
|
from .config_flow_handlers.validators import (
|
|
TibberPricesCannotConnectError,
|
|
TibberPricesInvalidAuthError,
|
|
validate_api_token,
|
|
)
|
|
|
|
__all__ = [
|
|
"ConfigFlow",
|
|
"OptionsFlowHandler",
|
|
"SubentryFlowHandler",
|
|
"TibberPricesCannotConnectError",
|
|
"TibberPricesInvalidAuthError",
|
|
"get_best_price_schema",
|
|
"get_options_init_schema",
|
|
"get_peak_price_schema",
|
|
"get_price_level_schema",
|
|
"get_price_rating_schema",
|
|
"get_price_trend_schema",
|
|
"get_reauth_confirm_schema",
|
|
"get_select_home_schema",
|
|
"get_subentry_init_schema",
|
|
"get_user_schema",
|
|
"get_volatility_schema",
|
|
"validate_api_token",
|
|
]
|