diff --git a/custom_components/tibber_prices/custom_translations/de.json b/custom_components/tibber_prices/custom_translations/de.json index 9720f04..ff1130e 100644 --- a/custom_components/tibber_prices/custom_translations/de.json +++ b/custom_components/tibber_prices/custom_translations/de.json @@ -451,8 +451,8 @@ }, "chart_metadata": { "description": "Leichtgewichtige Metadaten für Diagrammkonfiguration", - "long_description": "Liefert wesentliche Diagrammkonfigurationswerte als Sensor-Attribute. Nützlich für jede Diagrammkarte, die Y-Achsen-Grenzen oder Gradientenpositionierung benötigt. Der Sensor ruft get_chartdata im Nur-Metadaten-Modus auf (keine Datenverarbeitung) und extrahiert: yaxis_min, yaxis_max (vorgeschlagener Y-Achsenbereich) und gradient_stop (durchschnittliche Preisposition 0-100%). Der Status spiegelt das Service-Call-Ergebnis wider: 'ready' bei Erfolg, 'error' bei Fehler, 'pending' während der Initialisierung.", - "usage_tips": "Konfiguriere über configuration.yaml unter tibber_prices.chart_metadata_config (optional: day, minor_currency, resolution). Der Sensor aktualisiert sich automatisch bei Preisdatenänderungen. Greife auf Metadaten aus Attributen zu: yaxis_min, yaxis_max, gradient_stop. Verwende mit config-template-card oder jedem Tool, das Entity-Attribute liest - perfekt für dynamische Diagrammkonfiguration ohne manuelle Berechnungen." + "long_description": "Liefert wesentliche Diagrammkonfigurationswerte als Sensor-Attribute. Nützlich für jede Diagrammkarte, die Y-Achsen-Grenzen benötigt. Der Sensor ruft get_chartdata im Nur-Metadaten-Modus auf (keine Datenverarbeitung) und extrahiert: yaxis_min, yaxis_max (vorgeschlagener Y-Achsenbereich für optimale Skalierung). Der Status spiegelt das Service-Call-Ergebnis wider: 'ready' bei Erfolg, 'error' bei Fehler, 'pending' während der Initialisierung.", + "usage_tips": "Konfiguriere über configuration.yaml unter tibber_prices.chart_metadata_config (optional: day, minor_currency, resolution). Der Sensor aktualisiert sich automatisch bei Preisdatenänderungen. Greife auf Metadaten aus Attributen zu: yaxis_min, yaxis_max. Verwende mit config-template-card oder jedem Tool, das Entity-Attribute liest - perfekt für dynamische Diagrammkonfiguration ohne manuelle Berechnungen." } }, "binary_sensor": { diff --git a/custom_components/tibber_prices/custom_translations/en.json b/custom_components/tibber_prices/custom_translations/en.json index 1c4ae86..b8626d4 100644 --- a/custom_components/tibber_prices/custom_translations/en.json +++ b/custom_components/tibber_prices/custom_translations/en.json @@ -483,8 +483,8 @@ }, "chart_metadata": { "description": "Lightweight metadata for chart configuration", - "long_description": "Provides essential chart configuration values as sensor attributes. Useful for any chart card that needs Y-axis bounds or gradient positioning. The sensor calls get_chartdata with metadata-only mode (no data processing) and extracts: yaxis_min, yaxis_max (suggested Y-axis range), and gradient_stop (average price position 0-100%). The state reflects the service call result: 'ready' when successful, 'error' on failure, 'pending' during initialization.", - "usage_tips": "Configure via configuration.yaml under tibber_prices.chart_metadata_config (optional: day, minor_currency, resolution). The sensor automatically refreshes when price data updates. Access metadata from attributes: yaxis_min, yaxis_max, gradient_stop. Use with config-template-card or any tool that reads entity attributes - perfect for dynamic chart configuration without manual calculations." + "long_description": "Provides essential chart configuration values as sensor attributes. Useful for any chart card that needs Y-axis bounds. The sensor calls get_chartdata with metadata-only mode (no data processing) and extracts: yaxis_min, yaxis_max (suggested Y-axis range for optimal scaling). The state reflects the service call result: 'ready' when successful, 'error' on failure, 'pending' during initialization.", + "usage_tips": "Configure via configuration.yaml under tibber_prices.chart_metadata_config (optional: day, minor_currency, resolution). The sensor automatically refreshes when price data updates. Access metadata from attributes: yaxis_min, yaxis_max. Use with config-template-card or any tool that reads entity attributes - perfect for dynamic chart configuration without manual calculations." } }, "home_types": { diff --git a/custom_components/tibber_prices/custom_translations/nb.json b/custom_components/tibber_prices/custom_translations/nb.json index e947ed9..2cded91 100644 --- a/custom_components/tibber_prices/custom_translations/nb.json +++ b/custom_components/tibber_prices/custom_translations/nb.json @@ -451,8 +451,8 @@ }, "chart_metadata": { "description": "Lettvekts metadata for diagramkonfigurasjon", - "long_description": "Gir essensielle diagramkonfigurasjonsverdier som sensorattributter. Nyttig for ethvert diagramkort som trenger Y-aksegrenser eller gradientposisjonering. Sensoren kaller get_chartdata med kun-metadata-modus (ingen databehandling) og trekker ut: yaxis_min, yaxis_max (foreslått Y-akseområde) og gradient_stop (gjennomsnittlig prisposisjon 0-100%). Status reflekterer tjenestekallresultatet: 'ready' ved suksess, 'error' ved feil, 'pending' under initialisering.", - "usage_tips": "Konfigurer via configuration.yaml under tibber_prices.chart_metadata_config (valgfritt: day, minor_currency, resolution). Sensoren oppdateres automatisk når prisdata endres. Få tilgang til metadata fra attributter: yaxis_min, yaxis_max, gradient_stop. Bruk med config-template-card eller ethvert verktøy som leser entitetsattributter - perfekt for dynamisk diagramkonfigurasjon uten manuelle beregninger." + "long_description": "Gir essensielle diagramkonfigurasjonsverdier som sensorattributter. Nyttig for ethvert diagramkort som trenger Y-aksegrenser. Sensoren kaller get_chartdata med kun-metadata-modus (ingen databehandling) og trekker ut: yaxis_min, yaxis_max (foreslått Y-akseområde for optimal skalering). Status reflekterer tjenestekallresultatet: 'ready' ved suksess, 'error' ved feil, 'pending' under initialisering.", + "usage_tips": "Konfigurer via configuration.yaml under tibber_prices.chart_metadata_config (valgfritt: day, minor_currency, resolution). Sensoren oppdateres automatisk når prisdata endres. Få tilgang til metadata fra attributter: yaxis_min, yaxis_max. Bruk med config-template-card eller ethvert verktøy som leser entitetsattributter - perfekt for dynamisk diagramkonfigurasjon uten manuelle beregninger." } }, "binary_sensor": { diff --git a/custom_components/tibber_prices/custom_translations/nl.json b/custom_components/tibber_prices/custom_translations/nl.json index a91e26a..f2fa510 100644 --- a/custom_components/tibber_prices/custom_translations/nl.json +++ b/custom_components/tibber_prices/custom_translations/nl.json @@ -451,8 +451,8 @@ }, "chart_metadata": { "description": "Lichtgewicht metadata voor diagramconfiguratie", - "long_description": "Biedt essentiële diagramconfiguratiewaarden als sensorattributen. Nuttig voor elke grafiekkaart die Y-as-grenzen of gradiëntpositionering nodig heeft. De sensor roept get_chartdata aan in alleen-metadata-modus (geen dataverwerking) en extraheert: yaxis_min, yaxis_max (gesuggereerd Y-asbereik) en gradient_stop (gemiddelde prijspositie 0-100%). De status weerspiegelt het service-aanroepresultaat: 'ready' bij succes, 'error' bij fouten, 'pending' tijdens initialisatie.", - "usage_tips": "Configureer via configuration.yaml onder tibber_prices.chart_metadata_config (optioneel: day, minor_currency, resolution). De sensor wordt automatisch bijgewerkt bij prijsgegevenswijzigingen. Krijg toegang tot metadata vanuit attributen: yaxis_min, yaxis_max, gradient_stop. Gebruik met config-template-card of elk hulpmiddel dat entiteitsattributen leest - perfect voor dynamische diagramconfiguratie zonder handmatige berekeningen." + "long_description": "Biedt essentiële diagramconfiguratiewaarden als sensorattributen. Nuttig voor elke grafiekkaart die Y-as-grenzen nodig heeft. De sensor roept get_chartdata aan in alleen-metadata-modus (geen dataverwerking) en extraheert: yaxis_min, yaxis_max (gesuggereerd Y-asbereik voor optimale schaling). De status weerspiegelt het service-aanroepresultaat: 'ready' bij succes, 'error' bij fouten, 'pending' tijdens initialisatie.", + "usage_tips": "Configureer via configuration.yaml onder tibber_prices.chart_metadata_config (optioneel: day, minor_currency, resolution). De sensor wordt automatisch bijgewerkt bij prijsgegevenswijzigingen. Krijg toegang tot metadata vanuit attributen: yaxis_min, yaxis_max. Gebruik met config-template-card of elk hulpmiddel dat entiteitsattributen leest - perfect voor dynamische diagramconfiguratie zonder handmatige berekeningen." } }, "binary_sensor": { diff --git a/custom_components/tibber_prices/custom_translations/sv.json b/custom_components/tibber_prices/custom_translations/sv.json index 926800f..960e5f5 100644 --- a/custom_components/tibber_prices/custom_translations/sv.json +++ b/custom_components/tibber_prices/custom_translations/sv.json @@ -451,8 +451,8 @@ }, "chart_metadata": { "description": "Lättviktig metadata för diagramkonfiguration", - "long_description": "Tillhandahåller väsentliga diagramkonfigurationsvärden som sensorattribut. Användbart för vilket diagramkort som helst som behöver Y-axelgränser eller gradientpositionering. Sensorn anropar get_chartdata med endast-metadata-läge (ingen databehandling) och extraherar: yaxis_min, yaxis_max (föreslagen Y-axelomfång) och gradient_stop (genomsnittlig prisposition 0-100%). Statusen återspeglar tjänstanropsresultatet: 'ready' vid framgång, 'error' vid fel, 'pending' under initialisering.", - "usage_tips": "Konfigurera via configuration.yaml under tibber_prices.chart_metadata_config (valfritt: day, minor_currency, resolution). Sensorn uppdateras automatiskt vid pris dataändringar. Få tillgång till metadata från attribut: yaxis_min, yaxis_max, gradient_stop. Använd med config-template-card eller vilket verktyg som helst som läser entitetsattribut - perfekt för dynamisk diagramkonfiguration utan manuella beräkningar." + "long_description": "Tillhandahåller väsentliga diagramkonfigurationsvärden som sensorattribut. Användbart för vilket diagramkort som helst som behöver Y-axelgränser. Sensorn anropar get_chartdata med endast-metadata-läge (ingen databehandling) och extraherar: yaxis_min, yaxis_max (föreslagen Y-axelomfång för optimal skalning). Statusen återspeglar tjänstanropsresultatet: 'ready' vid framgång, 'error' vid fel, 'pending' under initialisering.", + "usage_tips": "Konfigurera via configuration.yaml under tibber_prices.chart_metadata_config (valfritt: day, minor_currency, resolution). Sensorn uppdateras automatiskt vid pris dataändringar. Få tillgång till metadata från attribut: yaxis_min, yaxis_max. Använd med config-template-card eller vilket verktyg som helst som läser entitetsattribut - perfekt för dynamisk diagramkonfiguration utan manuella beräkningar." } }, "binary_sensor": { diff --git a/custom_components/tibber_prices/sensor/chart_metadata.py b/custom_components/tibber_prices/sensor/chart_metadata.py index 2da1499..72956b3 100644 --- a/custom_components/tibber_prices/sensor/chart_metadata.py +++ b/custom_components/tibber_prices/sensor/chart_metadata.py @@ -124,8 +124,6 @@ def build_chart_metadata_attributes( # These are the universal chart metadata fields useful for any chart card if metadata: yaxis_suggested = metadata.get("yaxis_suggested", {}) - price_stats = metadata.get("price_stats", {}) - combined_stats = price_stats.get("combined", {}) # Add yaxis bounds (useful for all chart cards) if "min" in yaxis_suggested: @@ -133,11 +131,6 @@ def build_chart_metadata_attributes( if "max" in yaxis_suggested: attributes["yaxis_max"] = yaxis_suggested["max"] - # Add gradient stop position (useful for gradient-based charts) - if "avg_position" in combined_stats: - avg_position = combined_stats["avg_position"] - attributes["gradient_stop"] = round(avg_position * 100) - # Add currency info (useful for labeling) if "currency" in metadata: attributes["currency"] = metadata["currency"] diff --git a/custom_components/tibber_prices/services/get_apexcharts_yaml.py b/custom_components/tibber_prices/services/get_apexcharts_yaml.py index 29c889d..332b167 100644 --- a/custom_components/tibber_prices/services/get_apexcharts_yaml.py +++ b/custom_components/tibber_prices/services/get_apexcharts_yaml.py @@ -662,10 +662,11 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: # Sensor not found - will show notification metadata_warning = True + # Fixed gradient stop at 50% (visual appeal, no semantic meaning) + gradient_stops = [50, 100] + # Set fallback values if sensor not used if not use_sensor_metadata: - gradient_stop = 50 - # Build yaxis config (only include min/max if not None) yaxis_price_config = { "id": "price", @@ -677,7 +678,6 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: }, } - gradient_stops = [gradient_stop, 100] entities_list = trigger_entities else: # Use template variables to read sensor dynamically @@ -697,8 +697,6 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: }, } - gradient_stops = ["${v_gradient_stop}", 100] - # Build variables dict variables_dict = {"v_graph_span": template_graph_span} if use_sensor_metadata: @@ -707,7 +705,6 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: { "v_yaxis_min": f"states['{chart_metadata_sensor}'].attributes.yaxis_min", "v_yaxis_max": f"states['{chart_metadata_sensor}'].attributes.yaxis_max", - "v_gradient_stop": f"states['{chart_metadata_sensor}'].attributes.gradient_stop", } ) @@ -828,10 +825,11 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: # Sensor not found - will show notification metadata_warning = True + # Fixed gradient stop at 50% (visual appeal, no semantic meaning) + gradient_stops = [50, 100] + # Set fallback values if sensor not used if not use_sensor_metadata: - gradient_stop = 50 - # Build yaxis config (only include min/max if not None) yaxis_price_config = { "id": "price", @@ -843,7 +841,6 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: }, } - gradient_stops = [gradient_stop, 100] entities_list = [tomorrow_data_sensor] else: # Use template variables to read sensor dynamically @@ -863,8 +860,6 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: }, } - gradient_stops = ["${v_gradient_stop}", 100] - # Build variables dict variables_dict = {"v_offset": template_value} if use_sensor_metadata: @@ -873,7 +868,6 @@ async def handle_apexcharts_yaml(call: ServiceCall) -> dict[str, Any]: # noqa: { "v_yaxis_min": f"states['{chart_metadata_sensor}'].attributes.yaxis_min", "v_yaxis_max": f"states['{chart_metadata_sensor}'].attributes.yaxis_max", - "v_gradient_stop": f"states['{chart_metadata_sensor}'].attributes.gradient_stop", } )