diff --git a/custom_components/tibber_prices/coordinator/data_fetching.py b/custom_components/tibber_prices/coordinator/data_fetching.py index 3fd0700..2fd84f5 100644 --- a/custom_components/tibber_prices/coordinator/data_fetching.py +++ b/custom_components/tibber_prices/coordinator/data_fetching.py @@ -93,8 +93,14 @@ class TibberPricesDataFetcher: ) await cache.save_cache(self._store, cache_data, self._log_prefix) - async def update_user_data_if_needed(self, current_time: datetime) -> None: - """Update user data if needed (daily check).""" + async def update_user_data_if_needed(self, current_time: datetime) -> bool: + """ + Update user data if needed (daily check). + + Returns: + True if user data was updated, False otherwise + + """ if self._last_user_update is None or current_time - self._last_user_update >= self._user_update_interval: try: self._log("debug", "Updating user data") @@ -107,6 +113,10 @@ class TibberPricesDataFetcher: TibberPricesApiClientCommunicationError, ) as ex: self._log("warning", "Failed to update user data: %s", ex) + return False # Update failed + else: + return True # User data was updated + return False # No update needed @callback def should_update_price_data(self, current_time: datetime) -> bool | str: @@ -209,7 +219,7 @@ class TibberPricesDataFetcher: ) -> dict[str, Any]: """Handle update for main entry - fetch data for all homes.""" # Update user data if needed (daily check) - await self.update_user_data_if_needed(current_time) + user_data_updated = await self.update_user_data_if_needed(current_time) # Check if we need to update price data should_update = self.should_update_price_data(current_time) @@ -239,7 +249,12 @@ class TibberPricesDataFetcher: # Use cached data if available if self._cached_price_data is not None: - self._log("debug", "Using cached price data (no API call needed)") + # If user data was updated, we need to return transformed data to trigger entity updates + # This ensures diagnostic sensors (home_type, grid_company, etc.) get refreshed + if user_data_updated: + self._log("debug", "User data updated - returning transformed data to update diagnostic sensors") + else: + self._log("debug", "Using cached price data (no API call needed)") return transform_fn(self._cached_price_data) # Fallback: no cache and no update needed (shouldn't happen) diff --git a/custom_components/tibber_prices/sensor/core.py b/custom_components/tibber_prices/sensor/core.py index 6a702c3..b1b2736 100644 --- a/custom_components/tibber_prices/sensor/core.py +++ b/custom_components/tibber_prices/sensor/core.py @@ -188,6 +188,12 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): # Clear cached trend values when coordinator data changes if self.entity_description.key.startswith("price_trend_"): self._trend_calculator.clear_trend_cache() + + # Refresh chart data when coordinator updates (new price data or user data) + if self.entity_description.key == "chart_data_export": + # Schedule async refresh as a task (we're in a callback) + self.hass.async_create_task(self._refresh_chart_data()) + super()._handle_coordinator_update() def _get_value_getter(self) -> Callable | None: