From ef1a81ccc1155cd0a70239ef7767493fe30c2109 Mon Sep 17 00:00:00 2001 From: Julian Pawlowski Date: Thu, 6 Nov 2025 22:36:12 +0000 Subject: [PATCH] Refactor translations for electricity prices in multiple languages - Updated keys from "cents" to more user-friendly terms for current, next, and previous prices. - Added state descriptions for price levels and ratings, including categories like "very cheap," "cheap," "normal," "expensive," and "very expensive." - Introduced new average price sensors for the next 1 to 12 hours. - Added price trend sensors for 1 to 12 hours with states indicating rising, falling, or stable trends. - Ensured consistency in naming conventions across English, Norwegian, Dutch, and Swedish translations. --- custom_components/tibber_prices/const.py | 31 +- .../tibber_prices/custom_translations/de.json | 204 ++++---- .../tibber_prices/custom_translations/en.json | 200 ++++---- .../tibber_prices/custom_translations/nb.json | 172 ++++--- .../tibber_prices/custom_translations/nl.json | 155 +++--- .../tibber_prices/custom_translations/sv.json | 157 +++--- .../tibber_prices/price_utils.py | 43 +- custom_components/tibber_prices/sensor.py | 445 +++++++++++++++--- .../tibber_prices/translations/de.json | 202 ++++++-- .../tibber_prices/translations/en.json | 202 ++++++-- .../tibber_prices/translations/nb.json | 236 ++++++++-- .../tibber_prices/translations/nl.json | 236 ++++++++-- .../tibber_prices/translations/sv.json | 236 ++++++++-- 13 files changed, 1834 insertions(+), 685 deletions(-) diff --git a/custom_components/tibber_prices/const.py b/custom_components/tibber_prices/const.py index eddd8d4..0928f1e 100644 --- a/custom_components/tibber_prices/const.py +++ b/custom_components/tibber_prices/const.py @@ -114,13 +114,33 @@ def format_price_unit_minor(currency_code: str | None) -> str: return f"{minor_symbol}/{UnitOfPower.KILO_WATT}{UnitOfTime.HOURS}" -# Price level constants -PRICE_LEVEL_NORMAL = "NORMAL" -PRICE_LEVEL_CHEAP = "CHEAP" +# Price level constants from Tibber API PRICE_LEVEL_VERY_CHEAP = "VERY_CHEAP" +PRICE_LEVEL_CHEAP = "CHEAP" +PRICE_LEVEL_NORMAL = "NORMAL" PRICE_LEVEL_EXPENSIVE = "EXPENSIVE" PRICE_LEVEL_VERY_EXPENSIVE = "VERY_EXPENSIVE" +# Price rating constants (calculated values) +PRICE_RATING_LOW = "LOW" +PRICE_RATING_NORMAL = "NORMAL" +PRICE_RATING_HIGH = "HIGH" + +# Sensor options (lowercase versions for ENUM device class) +PRICE_LEVEL_OPTIONS = [ + PRICE_LEVEL_VERY_CHEAP.lower(), + PRICE_LEVEL_CHEAP.lower(), + PRICE_LEVEL_NORMAL.lower(), + PRICE_LEVEL_EXPENSIVE.lower(), + PRICE_LEVEL_VERY_EXPENSIVE.lower(), +] + +PRICE_RATING_OPTIONS = [ + PRICE_RATING_LOW.lower(), + PRICE_RATING_NORMAL.lower(), + PRICE_RATING_HIGH.lower(), +] + # Mapping for comparing price levels (used for sorting) PRICE_LEVEL_MAPPING = { PRICE_LEVEL_VERY_CHEAP: -2, @@ -130,11 +150,6 @@ PRICE_LEVEL_MAPPING = { PRICE_LEVEL_VERY_EXPENSIVE: 2, } -# Price rating constants -PRICE_RATING_NORMAL = "NORMAL" -PRICE_RATING_LOW = "LOW" -PRICE_RATING_HIGH = "HIGH" - # Mapping for comparing price ratings (used for sorting) PRICE_RATING_MAPPING = { PRICE_RATING_LOW: -1, diff --git a/custom_components/tibber_prices/custom_translations/de.json b/custom_components/tibber_prices/custom_translations/de.json index 4a5b08b..10cd117 100644 --- a/custom_components/tibber_prices/custom_translations/de.json +++ b/custom_components/tibber_prices/custom_translations/de.json @@ -85,38 +85,7 @@ "long_description": "Zeigt den höchsten Preis pro kWh für die nächsten 24 Stunden (vorlaufendes Maximum) von deinem Tibber-Abonnement an. Dies bietet den höchsten erwarteten Preis in den nächsten 24 Stunden basierend auf Prognosedaten.", "usage_tips": "Nutze dies, um den Betrieb von Geräten während kommender Spitzenpreiszeiten zu vermeiden." }, - "current_price_cents": { - "name": "Aktueller Strompreis", - "description": "Der aktuelle Strompreis pro kWh", - "long_description": "Zeigt den aktuellen Preis pro kWh von deinem Tibber-Abonnement an", - "usage_tips": "Nutze dies, um Preise zu verfolgen oder Automatisierungen zu erstellen, die bei günstigem Strom ausgeführt werden" - }, - "next_interval_price_cents": { - "name": "Nächster Preis", - "description": "Der Strompreis für das nächste 15-Minuten-Intervall pro kWh", - "long_description": "Zeigt den Preis für das nächste 15-Minuten-Intervall von deinem Tibber-Abonnement an", - "usage_tips": "Nutze dies, um dich auf kommende Preisänderungen vorzubereiten oder Geräte während günstigerer Intervalle zu planen" - }, - "previous_interval_price_cents": { - "name": "Vorheriger Preis", - "description": "Der Strompreis für das vorherige 15-Minuten-Intervall pro kWh", - "long_description": "Zeigt den Preis für das vorherige 15-Minuten-Intervall von deinem Tibber-Abonnement an", - "usage_tips": "Nutze dies, um vergangene Preisänderungen zu überprüfen oder den Preisverlauf zu verfolgen" - }, - "current_hour_average_cents": { - "name": "Aktueller Stunden-Durchschnittspreis", - "description": "Gleitender 5-Intervall-Durchschnittspreis pro kWh", - "long_description": "Zeigt den durchschnittlichen Preis pro kWh berechnet aus 5 Intervallen: 2 vorherige, aktuelles und 2 nächste Intervalle (ca. 75 Minuten insgesamt). Dies bietet einen geglätteten 'Stundenpreis', der sich mit der Zeit anpasst, anstatt an feste Uhrzeiten gebunden zu sein.", - "usage_tips": "Nutze dies für einen stabileren Preisindikator, der kurzfristige Schwankungen glättet und dennoch auf Preisänderungen reagiert. Besser als feste Stundenpreise für Verbrauchsentscheidungen." - }, - "next_hour_average_cents": { - "name": "Nächster Stunden-Durchschnittspreis", - "description": "Gleitender 5-Intervall-Durchschnittspreis für nächste Stunde pro kWh", - "long_description": "Zeigt den durchschnittlichen Preis pro kWh berechnet aus 5 Intervallen, die eine Stunde voraus zentriert sind: ungefähr Intervalle +2 bis +6 von jetzt (Minuten +30 bis +105 abdeckend). Dies bietet einen vorausschauenden geglätteten 'Stundenpreis' zur Verbrauchsplanung.", - "usage_tips": "Nutze dies, um Preisänderungen in der nächsten Stunde vorherzusehen. Hilfreich für die Planung von verbrauchsintensiven Aktivitäten wie Elektrofahrzeug-Laden, Geschirrspüler oder Heizsysteme." - }, "price_level": { - "name": "Aktuelles Preisniveau", "description": "Die aktuelle Preislevelklassifikation", "long_description": "Zeigt die Klassifizierung von Tibber für den aktuellen Preis im Vergleich zu historischen Preisen an", "usage_tips": "Nutze dies, um Automatisierungen auf Basis des relativen Preisniveaus anstelle der absoluten Preise zu erstellen", @@ -129,103 +98,26 @@ } }, "next_interval_price_level": { - "name": "Nächstes Preisniveau", "description": "Preisniveau für das nächste 15-Minuten-Intervall", "long_description": "Zeigt die Preisniveau-Klassifizierung für das kommende Intervall an. Hilft bei der Antizipation kurzfristiger Preisänderungen für sofortige Planung.", "usage_tips": "Nutze dies für schnelle Entscheidungen über das Starten oder Stoppen von Hochleistungsgeräten in den nächsten Minuten." }, "previous_interval_price_level": { - "name": "Vorheriges Preisniveau", "description": "Preisniveau für das vorherige 15-Minuten-Intervall", "long_description": "Zeigt die Preisniveau-Klassifizierung für das letzte Intervall an. Nützlich für historische Vergleiche und das Verständnis jüngster Preistrends.", "usage_tips": "Nutze dies, um aktuelle mit kürzlichen Preisniveaus zu vergleichen oder Verbrauchsmuster gegen historische Preise zu analysieren." }, "current_hour_price_level": { - "name": "Aktuells Stunden-Preisniveau", "description": "Aggregiertes Preisniveau für aktuelle gleitende Stunde (5 Intervalle)", "long_description": "Zeigt das mediane Preisniveau über 5 Intervalle (2 vorherige, aktuelles, 2 nächste) mit ca. 75 Minuten Abdeckung. Bietet einen stabileren Preisniveau-Indikator, der kurzfristige Schwankungen glättet.", "usage_tips": "Nutze dies für mittelfristige Planungsentscheidungen, wenn du nicht auf kurze Preisspitzen oder -einbrüche reagieren möchtest." }, "next_hour_price_level": { - "name": "Nächstes Stunden-Preisniveau", "description": "Aggregiertes Preisniveau für nächste gleitende Stunde (5 Intervalle voraus)", "long_description": "Zeigt das mediane Preisniveau über 5 Intervalle, die eine Stunde voraus zentriert sind. Hilft bei der Verbrauchsplanung basierend auf kommenden Preistrends statt momentanen zukünftigen Preisen.", "usage_tips": "Nutze dies, um Aktivitäten für die nächste Stunde basierend auf einer geglätteten Preisniveau-Prognose zu planen." }, - "lowest_price_today_cents": { - "name": "Mindestpreis heute", - "description": "Der niedrigste Strompreis für heute pro kWh", - "long_description": "Zeigt den niedrigsten Preis pro kWh für den aktuellen Tag von deinem Tibber-Abonnement an", - "usage_tips": "Nutze dies, um aktuelle Preise mit der günstigsten Zeit des Tages zu vergleichen" - }, - "highest_price_today_cents": { - "name": "Höchstpreis heute", - "description": "Der höchste Strompreis für heute pro kWh", - "long_description": "Zeigt den höchsten Preis pro kWh für den aktuellen Tag von deinem Tibber-Abonnement an", - "usage_tips": "Nutze dies, um den Betrieb von Geräten während Spitzenpreiszeiten zu vermeiden" - }, - "average_price_today_cents": { - "name": "Durchschnittspreis heute", - "description": "Der durchschnittliche Strompreis für heute pro kWh", - "long_description": "Zeigt den durchschnittlichen Preis pro kWh für den aktuellen Tag von deinem Tibber-Abonnement an", - "usage_tips": "Nutze dies als Grundlage für den Vergleich mit aktuellen Preisen" - }, - "lowest_price_tomorrow_cents": { - "name": "Mindestpreis morgen", - "description": "Der niedrigste Strompreis für morgen pro kWh", - "long_description": "Zeigt den niedrigsten Preis pro kWh für den morgigen Tag von deinem Tibber-Abonnement an. Dieser Sensor wird nicht verfügbar, bis die Preise für morgen von Tibber veröffentlicht werden (typischerweise zwischen 13:00 und 14:00 Uhr MEZ).", - "usage_tips": "Nutze dies zur Planung energieintensiver Aktivitäten wie das Laden von Elektrofahrzeugen oder das Aufheizen von Warmwasserspeichern für morgen. Wenn der morgige Mindestpreis deutlich niedriger ist als der heutige, kannst du den Verbrauch verschieben." - }, - "highest_price_tomorrow_cents": { - "name": "Höchstpreis morgen", - "description": "Der höchste Strompreis für morgen pro kWh", - "long_description": "Zeigt den höchsten Preis pro kWh für den morgigen Tag von deinem Tibber-Abonnement an. Dieser Sensor wird nicht verfügbar, bis die Preise für morgen von Tibber veröffentlicht werden (typischerweise zwischen 13:00 und 14:00 Uhr MEZ).", - "usage_tips": "Nutze dies, um den Betrieb von Geräten während der teuersten Stunden morgen zu vermeiden. Plane nicht-essentielle Lasten außerhalb dieser Spitzenpreiszeiten." - }, - "average_price_tomorrow_cents": { - "name": "Durchschnittspreis morgen", - "description": "Der durchschnittliche Strompreis für morgen pro kWh", - "long_description": "Zeigt den durchschnittlichen Preis pro kWh für den morgigen Tag von deinem Tibber-Abonnement an. Dieser Sensor wird nicht verfügbar, bis die Preise für morgen von Tibber veröffentlicht werden (typischerweise zwischen 13:00 und 14:00 Uhr MEZ).", - "usage_tips": "Nutze dies als Grundlage für den Vergleich der morgigen Preise mit dem heutigen Durchschnitt. Wenn der morgige Durchschnitt niedriger ist, kann es besser sein, energieintensive Aufgaben bis morgen zu verschieben." - }, - "trailing_price_average_cents": { - "name": "Nachlaufender 24h-Durchschnittspreis", - "description": "Der durchschnittliche Strompreis der letzten 24 Stunden pro kWh", - "long_description": "Zeigt den durchschnittlichen Preis pro kWh berechnet aus den letzten 24 Stunden (nachlaufender Durchschnitt) von deinem Tibber-Abonnement an. Dies bietet einen rollierenden Durchschnitt, der alle 15 Minuten auf Basis historischer Daten aktualisiert wird.", - "usage_tips": "Nutze dies, um aktuelle Preise mit aktuellen Trends zu vergleichen. Ein aktueller Preis, der deutlich über diesem Durchschnitt liegt, kann ein guter Zeitpunkt sein, den Verbrauch zu reduzieren." - }, - "leading_price_average_cents": { - "name": "Vorlaufender 24h-Durchschnittspreis", - "description": "Der durchschnittliche Strompreis für die nächsten 24 Stunden pro kWh", - "long_description": "Zeigt den durchschnittlichen Preis pro kWh berechnet aus den nächsten 24 Stunden (vorlaufender Durchschnitt) von deinem Tibber-Abonnement an. Dies bietet einen zukunftsgerichteten Durchschnitt basierend auf verfügbaren Prognosedaten.", - "usage_tips": "Nutze dies zur Planung des Energieverbrauchs. Wenn der aktuelle Preis unter dem vorlaufenden Durchschnitt liegt, kann es ein guter Zeitpunkt sein, energieintensive Geräte zu betreiben." - }, - "trailing_price_min_cents": { - "name": "Nachlaufender 24h-Mindestpreis", - "description": "Der minimale Strompreis der letzten 24 Stunden pro kWh", - "long_description": "Zeigt den minimalen Preis pro kWh aus den letzten 24 Stunden (nachlaufendes Minimum) von deinem Tibber-Abonnement an. Dies zeigt den niedrigsten Preis der letzten 24 Stunden.", - "usage_tips": "Nutze dies, um die beste Preisgelegenheit der letzten 24 Stunden zu sehen und mit aktuellen Preisen zu vergleichen." - }, - "trailing_price_max_cents": { - "name": "Nachlaufender 24h-Höchstpreis", - "description": "Der maximale Strompreis der letzten 24 Stunden pro kWh", - "long_description": "Zeigt den maximalen Preis pro kWh aus den letzten 24 Stunden (nachlaufendes Maximum) von deinem Tibber-Abonnement an. Dies zeigt den höchsten Preis der letzten 24 Stunden.", - "usage_tips": "Nutze dies, um den Spitzenpreis der letzten 24 Stunden zu sehen und die Preisvolatilität zu bewerten." - }, - "leading_price_min_cents": { - "name": "Vorlaufender 24h-Mindestpreis", - "description": "Der minimale Strompreis für die nächsten 24 Stunden pro kWh", - "long_description": "Zeigt den minimalen Preis pro kWh für die nächsten 24 Stunden (vorlaufendes Minimum) von deinem Tibber-Abonnement an. Dies zeigt den niedrigsten erwarteten Preis der nächsten 24 Stunden basierend auf Prognosedaten.", - "usage_tips": "Nutze dies, um die beste kommende Preisgelegenheit zu identifizieren und energieintensive Aufgaben entsprechend zu planen." - }, - "leading_price_max_cents": { - "name": "Vorlaufender 24h-Höchstpreis", - "description": "Der maximale Strompreis für die nächsten 24 Stunden pro kWh", - "long_description": "Zeigt den maximalen Preis pro kWh für die nächsten 24 Stunden (vorlaufendes Maximum) von deinem Tibber-Abonnement an. Dies zeigt den höchsten erwarteten Preis der nächsten 24 Stunden basierend auf Prognosedaten.", - "usage_tips": "Nutze dies, um den Betrieb von Geräten während kommender Spitzenpreiszeiten zu vermeiden." - }, "price_rating": { - "name": "Aktuelle Preisbewertung", "description": "Wie sich der Preis des aktuellen Intervalls mit historischen Daten vergleicht", "long_description": "Zeigt, wie sich der Preis des aktuellen Intervalls im Vergleich zu historischen Preisdaten als Prozentsatz verhält", "usage_tips": "Ein positiver Prozentsatz bedeutet, dass der aktuelle Preis überdurchschnittlich ist, negativ bedeutet unterdurchschnittlich", @@ -236,48 +128,120 @@ } }, "next_interval_price_rating": { - "name": "Nächste Preisbewertung", "description": "Preisbewertung für das nächste 15-Minuten-Intervall", "long_description": "Zeigt, wie sich der Preis des nächsten Intervalls im Vergleich zum gleitenden 24-Stunden-Durchschnitt verhält. Hilft vorherzusehen, ob kommende Preise über oder unter dem jüngsten Trend liegen.", "usage_tips": "Nutze dies für schnelle Entscheidungen über das Starten von Aktivitäten im nächsten Intervall basierend auf der relativen Preisposition." }, "previous_interval_price_rating": { - "name": "Vorherige Preisbewertung", "description": "Preisbewertung für das vorherige 15-Minuten-Intervall", "long_description": "Zeigt, wie sich der Preis des letzten Intervalls im Vergleich zum gleitenden Durchschnitt verhielt. Nützlich für das Verständnis des jüngsten Preisverhaltens.", "usage_tips": "Nutze dies zur Analyse, wie sich Preisbewertungen im Laufe der Zeit verändert haben oder um vergangene Verbrauchsentscheidungen zu validieren." }, "current_hour_price_rating": { - "name": "Aktuelle Stunden-Preisbewertung", "description": "Aggregierte Preisbewertung für aktuelle gleitende Stunde (5 Intervalle)", "long_description": "Zeigt die durchschnittliche Bewertung über 5 Intervalle (2 vorherige, aktuelles, 2 nächste). Basierend auf der durchschnittlichen prozentualen Abweichung vom gleitenden 24h-Durchschnitt, bietet dies einen geglätteten Bewertungsindikator.", "usage_tips": "Nutze dies für stabile mittelfristige Preisbewertung, die nicht auf kurze Preisanomalien überreagiert." }, "next_hour_price_rating": { - "name": "Nächste Stunden-Preisbewertung", "description": "Aggregierte Preisbewertung für nächste gleitende Stunde (5 Intervalle voraus)", "long_description": "Zeigt die gemittelte Bewertung für 5 Intervalle, die eine Stunde voraus zentriert sind. Hilft zu verstehen, ob die nächste Stunde generell über oder unter durchschnittlicher Preisgestaltung liegen wird.", "usage_tips": "Nutze dies, um zu entscheiden, ob du eine Stunde warten solltest, bevor du verbrauchsintensive Aktivitäten startest." }, + "next_avg_1h": { + "description": "Durchschnittspreis für die nächste 1 Stunde (vorwärts-blickend ab nächstem Intervall)", + "long_description": "Vorwärts-blickender Durchschnitt: Zeigt den Durchschnitt der nächsten 4 Intervalle (1 Stunde) beginnend ab dem NÄCHSTEN 15-Minuten-Intervall (aktuelles nicht inkludiert). Unterscheidet sich von current_hour_average, das vergangene Intervalle einbezieht. Nutze dies für absolute Preisschwellen-Planung.", + "usage_tips": "Absolute Preisschwelle: Starte Geräte nur, wenn der Durchschnitt unter deinem maximal akzeptablen Preis bleibt (z.B. unter 0,25 EUR/kWh). Kombiniere mit Trend-Sensor für optimales Timing. Hinweis: Dies ist KEIN Ersatz für Stundenpreise - nutze current_hour_average dafür." + }, + "next_avg_2h": { + "description": "Durchschnittspreis für die nächsten 2 Stunden", + "long_description": "Zeigt den Durchschnittspreis für die nächsten 8 Intervalle (2 Stunden) beginnend ab dem nächsten 15-Minuten-Intervall.", + "usage_tips": "Absolute Preisschwelle: Lege einen maximal akzeptablen Durchschnittspreis für Standard-Geräte wie Waschmaschinen fest. Stellt sicher, dass du nie mehr als dein Limit zahlst." + }, + "next_avg_3h": { + "description": "Durchschnittspreis für die nächsten 3 Stunden", + "long_description": "Zeigt den Durchschnittspreis für die nächsten 12 Intervalle (3 Stunden) beginnend ab dem nächsten 15-Minuten-Intervall.", + "usage_tips": "Absolute Preisschwelle: Für EU Eco-Programme (Spülmaschinen, 3-4h Laufzeit). Starte nur, wenn der 3h-Durchschnitt unter deinem Preislimit liegt. Nutze mit Trend-Sensor um den besten Moment im akzeptablen Preisbereich zu finden." + }, + "next_avg_4h": { + "description": "Durchschnittspreis für die nächsten 4 Stunden", + "long_description": "Zeigt den Durchschnittspreis für die nächsten 16 Intervalle (4 Stunden) beginnend ab dem nächsten 15-Minuten-Intervall.", + "usage_tips": "Absolute Preisschwelle: Lege maximal akzeptablen Preis für Wärmepumpen oder Warmwasserbereiter fest. Verhindert Betrieb während teurer Perioden unabhängig von relativen Trends." + }, + "next_avg_5h": { + "description": "Durchschnittspreis für die nächsten 5 Stunden", + "long_description": "Zeigt den Durchschnittspreis für die nächsten 20 Intervalle (5 Stunden) beginnend ab dem nächsten 15-Minuten-Intervall.", + "usage_tips": "Absolute Preisschwelle: Brücke zwischen kurz- und langfristiger Planung. Nutze für erweiterte Zyklen mit harten Preislimits (z.B. Pool-Pumpen, verlängerte Heizzyklen)." + }, + "next_avg_6h": { + "description": "Durchschnittspreis für die nächsten 6 Stunden", + "long_description": "Zeigt den Durchschnittspreis für die nächsten 24 Intervalle (6 Stunden) beginnend ab dem nächsten 15-Minuten-Intervall.", + "usage_tips": "Absolute Preisschwelle: Abendplanung mit Preisobergrenzen. Plane Aufgaben nur, wenn der 6h-Durchschnitt unter deinen maximal akzeptablen Kosten bleibt." + }, + "next_avg_8h": { + "description": "Durchschnittspreis für die nächsten 8 Stunden", + "long_description": "Zeigt den Durchschnittspreis für die nächsten 32 Intervalle (8 Stunden) beginnend ab dem nächsten 15-Minuten-Intervall.", + "usage_tips": "Absolute Preisschwelle: Entscheidungen für Nachtbetrieb. Lege harte Preislimits für Nachtlasten fest (Batterieladung, Wärmespeicher). Überschreite niemals dein Budget." + }, + "next_avg_12h": { + "description": "Durchschnittspreis für die nächsten 12 Stunden", + "long_description": "Zeigt den Durchschnittspreis für die nächsten 48 Intervalle (12 Stunden) beginnend ab dem nächsten 15-Minuten-Intervall.", + "usage_tips": "Absolute Preisschwelle: Strategische Entscheidungen mit Preisobergrenzen. Fahre nur fort, wenn der 12h-Durchschnitt unter deinem maximal akzeptablen Preis liegt. Gut für verschiebbare Großlasten." + }, + "price_trend_1h": { + "description": "Preistrend für die nächste Stunde: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 1 Stunde (4 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: 'fallend' = warten, Preise sinken. 'steigend' = jetzt handeln oder du zahlst mehr. 'stabil' = Preis spielt gerade keine große Rolle. Funktioniert unabhängig vom absoluten Preisniveau." + }, + "price_trend_2h": { + "description": "Preistrend für die nächsten 2 Stunden: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 2 Stunden (8 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: Ideal für Haushaltsgeräte. 'fallend' bedeutet bessere Preise kommen in 2h - verschiebe wenn möglich. Findet bestes Timing in deinem verfügbaren Zeitfenster, unabhängig von der Saison." + }, + "price_trend_3h": { + "description": "Preistrend für die nächsten 3 Stunden: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 3 Stunden (12 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: Für Eco-Programme. 'fallend' bedeutet Preise sinken >5% - lohnt sich zu warten. Funktioniert in jeder Saison. Kombiniere mit avg-Sensor für Preisobergrenze: nur wenn avg < dein Limit UND Trend nicht 'fallend'." + }, + "price_trend_4h": { + "description": "Preistrend für die nächsten 4 Stunden: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 4 Stunden (16 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: Wärmepumpen/Batterie-Entscheidungen. 'fallend' bedeutet besseres Ladefenster kommt. Findet immer relative beste Zeit - ob Preise 10 Cent oder 50 Cent sind. Nutze avg-Sensor für absolute Grenze." + }, + "price_trend_5h": { + "description": "Preistrend für die nächsten 5 Stunden: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 5 Stunden (20 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: Erweiterte Betriebszyklen. Passt sich dem Markt an - findet bestes relatives Timing in jedem Preisumfeld. 'stabil/steigend' = guter Zeitpunkt zum Starten in deinem Planungsfenster." + }, + "price_trend_6h": { + "description": "Preistrend für die nächsten 6 Stunden: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 6 Stunden (24 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: Abendentscheidungen. 'fallend' = Preise verbessern sich deutlich wenn du wartest. Keine festen Schwellenwerte nötig - passt sich automatisch an Winter/Sommer-Preisniveaus an." + }, + "price_trend_8h": { + "description": "Preistrend für die nächsten 8 Stunden: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 8 Stunden (32 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: Nachtplanung. 'fallend' bedeutet Warten auf Nacht lohnt sich (>5% günstiger). Funktioniert ganzjährig ohne manuelle Schwellenwert-Anpassungen. Starte wenn 'stabil' oder 'steigend'." + }, + "price_trend_12h": { + "description": "Preistrend für die nächsten 12 Stunden: steigend, fallend oder stabil", + "long_description": "Vergleicht aktuellen Intervallpreis mit Durchschnitt der nächsten 12 Stunden (48 Intervalle). Steigend wenn Zukunft >5% höher, fallend wenn >5% niedriger, sonst stabil.", + "usage_tips": "Relative Optimierung: Langfristige strategische Entscheidungen. 'fallend' = deutlich bessere Preise kommen heute Nacht/morgen. Findet optimales Timing in jeder Marktsituation. Am besten kombiniert mit avg-Sensor Preisobergrenze." + }, "daily_rating": { - "name": "Tägliche Preisbewertung", "description": "Wie sich die heutigen Preise mit historischen Daten vergleichen", - "long_description": "Zeigt, wie sich die heutigen Preise im Vergleich zu historischen Preisdaten als Prozentsatz verhällt", + "long_description": "Zeigt, wie sich die heutigen Preise im Vergleich zu historischen Preisdaten als Prozentsatz verhält", "usage_tips": "Ein positiver Prozentsatz bedeutet, dass die heutigen Preise überdurchschnittlich sind, negativ bedeutet unterdurchschnittlich" }, "monthly_rating": { - "name": "Monatliche Preisbewertung", "description": "Wie sich die Preise dieses Monats mit historischen Daten vergleichen", - "long_description": "Zeigt, wie sich die Preise dieses Monats im Vergleich zu historischen Preisdaten als Prozentsatz verhällt", + "long_description": "Zeigt, wie sich die Preise dieses Monats im Vergleich zu historischen Preisdaten als Prozentsatz verhält", "usage_tips": "Ein positiver Prozentsatz bedeutet, dass die Preise dieses Monats überdurchschnittlich sind, negativ bedeutet unterdurchschnittlich" }, "data_timestamp": { - "name": "Ablauf der Preisdaten", "description": "Zeitstempel des letzten verfügbaren Preisintervalls", "long_description": "Zeigt den Zeitstempel des letzten verfügbaren Preisintervalls von deinem Tibber-Abonnement an" }, "price_forecast": { - "name": "Preisprognose", "description": "Prognose der kommenden Strompreise", "long_description": "Zeigt kommende Strompreise für zukünftige Intervalle in einem Format an, das leicht in Dashboards verwendet werden kann", "usage_tips": "Verwende die Attribute dieser Entität, um bevorstehende Preise in Diagrammen oder benutzerdefinierten Karten anzuzeigen. Greife entweder auf 'intervals' für alle zukünftigen Intervalle oder auf 'hours' für stündliche Zusammenfassungen zu." @@ -285,25 +249,21 @@ }, "binary_sensor": { "tomorrow_data_available": { - "name": "Datenstatus für morgen", "description": "Ob Preisdaten für morgen verfügbar sind", "long_description": "Gibt an, ob Preisdaten für den folgenden Tag von Tibber empfangen wurden", "usage_tips": "Nutze dies, um zu überprüfen, ob die Preise für morgen für die Planung verfügbar sind" }, "peak_price_period": { - "name": "Spitzenpreis-Periode", "description": "Ob das aktuelle Intervall zu den teuersten des Tages gehört", "long_description": "Wird aktiviert, wenn der aktuelle Preis in den oberen 20% der heutigen Preise liegt", "usage_tips": "Nutze dies, um den Betrieb von Geräten mit hohem Verbrauch während teurer Intervalle zu vermeiden" }, "best_price_period": { - "name": "Bestpreis-Periode", "description": "Ob das aktuelle Intervall zu den günstigsten des Tages gehört", "long_description": "Wird aktiviert, wenn der aktuelle Preis in den unteren 20% der heutigen Preise liegt", "usage_tips": "Nutze dies, um Geräte mit hohem Verbrauch während der günstigsten Intervalle zu betreiben" }, "connection": { - "name": "Tibber API-Verbindung", "description": "Ob die Verbindung zur Tibber API funktioniert", "long_description": "Zeigt an, ob die Integration erfolgreich eine Verbindung zur Tibber API herstellen kann", "usage_tips": "Nutze dies, um den Verbindungsstatus zur Tibber API zu überwachen" diff --git a/custom_components/tibber_prices/custom_translations/en.json b/custom_components/tibber_prices/custom_translations/en.json index 486d321..7e16c6c 100644 --- a/custom_components/tibber_prices/custom_translations/en.json +++ b/custom_components/tibber_prices/custom_translations/en.json @@ -85,38 +85,7 @@ "long_description": "Shows the maximum price per kWh from the next 24 hours (leading maximum) from your Tibber subscription. This provides the highest price expected in the next 24 hours based on forecast data.", "usage_tips": "Use this to avoid running appliances during upcoming peak price periods." }, - "current_price_cents": { - "name": "Current Electricity Price", - "description": "The current electricity price per kWh", - "long_description": "Shows the current price per kWh from your Tibber subscription", - "usage_tips": "Use this to track prices or to create automations that run when electricity is cheap" - }, - "next_interval_price_cents": { - "name": "Next Price", - "description": "The next interval electricity price per kWh", - "long_description": "Shows the price for the next 15-minute interval from your Tibber subscription", - "usage_tips": "Use this to prepare for upcoming price changes or to schedule devices to run during cheaper intervals" - }, - "previous_interval_price_cents": { - "name": "Previous Electricity Price", - "description": "The previous interval electricity price per kWh", - "long_description": "Shows the price for the previous 15-minute interval from your Tibber subscription", - "usage_tips": "Use this to review past price changes or track price history" - }, - "current_hour_average_cents": { - "name": "Current Hour Average Price", - "description": "Rolling 5-interval average price per kWh", - "long_description": "Shows the average price per kWh calculated from 5 intervals: 2 previous, current, and 2 next intervals (approximately 75 minutes total). This provides a smoothed 'hour price' that adapts as time moves, rather than being fixed to clock hours.", - "usage_tips": "Use this for a more stable price indicator that smooths out short-term fluctuations while still being responsive to price changes. Better than fixed hourly prices for making consumption decisions." - }, - "next_hour_average_cents": { - "name": "Next Hour Average Price", - "description": "Rolling 5-interval average price for next hour per kWh", - "long_description": "Shows the average price per kWh calculated from 5 intervals centered one hour ahead: approximately intervals +2 through +6 from now (covering minutes +30 to +105). This provides a forward-looking smoothed 'hour price' for planning consumption.", - "usage_tips": "Use this to anticipate price changes in the next hour. Helpful for scheduling high-consumption activities like charging electric vehicles, running dishwashers, or heating systems." - }, "price_level": { - "name": "Current Price Level", "description": "The current price level classification", "long_description": "Shows Tibber's classification of the current price compared to historical prices", "usage_tips": "Use this to create automations based on relative price levels rather than absolute prices", @@ -129,103 +98,26 @@ } }, "next_interval_price_level": { - "name": "Next Price Level", "description": "Price level for the next 15-minute interval", "long_description": "Shows the price level classification for the upcoming interval. Helps anticipate short-term price changes for immediate planning.", "usage_tips": "Use for quick decisions about starting or stopping high-power devices in the next few minutes." }, "previous_interval_price_level": { - "name": "Previous Price Level", "description": "Price level for the previous 15-minute interval", "long_description": "Shows the price level classification for the last interval. Useful for historical comparison and understanding recent price trends.", "usage_tips": "Use to compare current vs recent price levels or analyze consumption patterns against historical prices." }, "current_hour_price_level": { - "name": "Current Hour Price Level", "description": "Aggregated price level for current rolling hour (5 intervals)", "long_description": "Shows the median price level across 5 intervals (2 before, current, 2 after) covering approximately 75 minutes. Provides a more stable price level indicator that smooths out short-term fluctuations.", "usage_tips": "Use for medium-term planning decisions where you want to avoid reacting to brief price spikes or dips." }, "next_hour_price_level": { - "name": "Next Hour Price Level", "description": "Aggregated price level for next rolling hour (5 intervals ahead)", "long_description": "Shows the median price level across 5 intervals centered one hour ahead. Helps plan consumption based on upcoming price trends rather than instantaneous future prices.", "usage_tips": "Use to schedule activities for the next hour based on a smoothed price level forecast." }, - "lowest_price_today_cents": { - "name": "Today's Lowest Price", - "description": "The lowest electricity price for today per kWh", - "long_description": "Shows the lowest price per kWh for the current day from your Tibber subscription", - "usage_tips": "Use this to compare current prices to the cheapest time of the day" - }, - "highest_price_today_cents": { - "name": "Today's Highest Price", - "description": "The highest electricity price for today per kWh", - "long_description": "Shows the highest price per kWh for the current day from your Tibber subscription", - "usage_tips": "Use this to avoid running appliances during peak price times" - }, - "average_price_today_cents": { - "name": "Today's Average Price", - "description": "The average electricity price for today per kWh", - "long_description": "Shows the average price per kWh for the current day from your Tibber subscription", - "usage_tips": "Use this as a baseline for comparing current prices" - }, - "lowest_price_tomorrow_cents": { - "name": "Tomorrow's Lowest Price", - "description": "The lowest electricity price for tomorrow per kWh", - "long_description": "Shows the lowest price per kWh for tomorrow from your Tibber subscription. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).", - "usage_tips": "Use this to plan energy-intensive activities for tomorrow's cheapest time. Perfect for pre-scheduling heating, EV charging, or appliances." - }, - "highest_price_tomorrow_cents": { - "name": "Tomorrow's Highest Price", - "description": "The highest electricity price for tomorrow per kWh", - "long_description": "Shows the highest price per kWh for tomorrow from your Tibber subscription. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).", - "usage_tips": "Use this to avoid running appliances during tomorrow's peak price times. Helpful for planning around expensive periods." - }, - "average_price_tomorrow_cents": { - "name": "Tomorrow's Average Price", - "description": "The average electricity price for tomorrow per kWh", - "long_description": "Shows the average price per kWh for tomorrow from your Tibber subscription. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).", - "usage_tips": "Use this as a baseline for comparing tomorrow's prices and planning consumption. Compare with today's average to see if tomorrow will be more or less expensive overall." - }, - "trailing_price_average_cents": { - "name": "Trailing 24h Average Price", - "description": "The average electricity price for the past 24 hours per kWh", - "long_description": "Shows the average price per kWh calculated from the past 24 hours (trailing average) from your Tibber subscription. This provides a rolling average that updates every 15 minutes based on historical data.", - "usage_tips": "Use this to compare current prices against recent trends. A current price significantly above this average may indicate a good time to reduce consumption." - }, - "leading_price_average_cents": { - "name": "Leading 24h Average Price", - "description": "The average electricity price for the next 24 hours per kWh", - "long_description": "Shows the average price per kWh calculated from the next 24 hours (leading average) from your Tibber subscription. This provides a forward-looking average based on available forecast data.", - "usage_tips": "Use this to plan energy usage. If the current price is below the leading average, it may be a good time to run energy-intensive appliances." - }, - "trailing_price_min_cents": { - "name": "Trailing 24h Minimum Price", - "description": "The minimum electricity price for the past 24 hours per kWh", - "long_description": "Shows the minimum price per kWh from the past 24 hours (trailing minimum) from your Tibber subscription. This provides the lowest price seen in the last 24 hours.", - "usage_tips": "Use this to see the best price opportunity you had in the past 24 hours and compare it with current prices." - }, - "trailing_price_max_cents": { - "name": "Trailing 24h Maximum Price", - "description": "The maximum electricity price for the past 24 hours per kWh", - "long_description": "Shows the maximum price per kWh from the past 24 hours (trailing maximum) from your Tibber subscription. This provides the highest price seen in the last 24 hours.", - "usage_tips": "Use this to see the peak price in the past 24 hours and assess price volatility." - }, - "leading_price_min_cents": { - "name": "Leading 24h Minimum Price", - "description": "The minimum electricity price for the next 24 hours per kWh", - "long_description": "Shows the minimum price per kWh from the next 24 hours (leading minimum) from your Tibber subscription. This provides the lowest price expected in the next 24 hours based on forecast data.", - "usage_tips": "Use this to identify the best price opportunity coming up and schedule energy-intensive tasks accordingly." - }, - "leading_price_max_cents": { - "name": "Leading 24h Maximum Price", - "description": "The maximum electricity price for the next 24 hours per kWh", - "long_description": "Shows the maximum price per kWh from the next 24 hours (leading maximum) from your Tibber subscription. This provides the highest price expected in the next 24 hours based on forecast data.", - "usage_tips": "Use this to avoid running appliances during upcoming peak price periods." - }, "price_rating": { - "name": "Current Price Rating", "description": "How the current interval's price compares to historical data", "long_description": "Shows how the current interval's price compares to historical price data as a percentage", "usage_tips": "A positive percentage means the current price is above average, negative means below average", @@ -236,48 +128,120 @@ } }, "next_interval_price_rating": { - "name": "Next Price Rating", "description": "Price rating for the next 15-minute interval", "long_description": "Shows how the next interval's price compares to the rolling 24-hour average. Helps anticipate if upcoming prices are above or below the recent trend.", "usage_tips": "Use to make quick decisions about starting activities in the next interval based on relative price position." }, "previous_interval_price_rating": { - "name": "Previous Price Rating", "description": "Price rating for the previous 15-minute interval", "long_description": "Shows how the last interval's price compared to the rolling average. Useful for understanding recent price behavior.", "usage_tips": "Use for analyzing how price ratings changed over time or validating past consumption decisions." }, "current_hour_price_rating": { - "name": "Current Hour Price Rating", "description": "Aggregated price rating for current rolling hour (5 intervals)", "long_description": "Shows the average rating across 5 intervals (2 before, current, 2 after). Based on the average percentage difference from rolling 24h average, providing a smoothed rating indicator.", "usage_tips": "Use for stable medium-term price assessment that doesn't overreact to brief price anomalies." }, "next_hour_price_rating": { - "name": "Next Hour Price Rating", "description": "Aggregated price rating for next rolling hour (5 intervals ahead)", "long_description": "Shows the averaged rating for 5 intervals centered one hour ahead. Helps understand if the next hour will generally be above or below average pricing.", "usage_tips": "Use to decide if you should wait an hour before starting high-consumption activities." }, + "next_avg_1h": { + "description": "Average price for the next 1 hour (forward-only from next interval)", + "long_description": "Forward-looking average: Shows average of next 4 intervals (1 hour) starting from the NEXT 15-minute interval (not including current). Different from current_hour_average which includes past intervals. Use for absolute price threshold planning.", + "usage_tips": "Absolute price threshold: Only start appliances when average stays below your maximum acceptable price (e.g., below 0.25 EUR/kWh). Combine with trend sensor for optimal timing. Note: This is NOT a replacement for hourly prices - use current_hour_average for that." + }, + "next_avg_2h": { + "description": "Average price for the next 2 hours", + "long_description": "Shows the average price for the next 8 intervals (2 hours) starting from the next 15-minute interval.", + "usage_tips": "Absolute price threshold: Set a maximum acceptable average price for standard appliances like washing machines. Ensures you never pay more than your limit." + }, + "next_avg_3h": { + "description": "Average price for the next 3 hours", + "long_description": "Shows the average price for the next 12 intervals (3 hours) starting from the next 15-minute interval.", + "usage_tips": "Absolute price threshold: For EU Eco programs (dishwashers, 3-4h runtime). Only start when 3h average is below your price limit. Use with trend sensor to find best moment within acceptable price range." + }, + "next_avg_4h": { + "description": "Average price for the next 4 hours", + "long_description": "Shows the average price for the next 16 intervals (4 hours) starting from the next 15-minute interval.", + "usage_tips": "Absolute price threshold: Set maximum acceptable price for heat pumps or water heaters. Prevents operation during expensive periods regardless of relative trends." + }, + "next_avg_5h": { + "description": "Average price for the next 5 hours", + "long_description": "Shows the average price for the next 20 intervals (5 hours) starting from the next 15-minute interval.", + "usage_tips": "Absolute price threshold: Bridge between short and long-term planning. Use for extended cycles with hard price limits (e.g., pool pumps, extended heating cycles)." + }, + "next_avg_6h": { + "description": "Average price for the next 6 hours", + "long_description": "Shows the average price for the next 24 intervals (6 hours) starting from the next 15-minute interval.", + "usage_tips": "Absolute price threshold: Evening planning with price caps. Only schedule tasks if 6h average stays below your maximum acceptable cost." + }, + "next_avg_8h": { + "description": "Average price for the next 8 hours", + "long_description": "Shows the average price for the next 32 intervals (8 hours) starting from the next 15-minute interval.", + "usage_tips": "Absolute price threshold: Overnight operation decisions. Set hard price limits for night loads (battery charging, thermal storage). Never exceed your budget." + }, + "next_avg_12h": { + "description": "Average price for the next 12 hours", + "long_description": "Shows the average price for the next 48 intervals (12 hours) starting from the next 15-minute interval.", + "usage_tips": "Absolute price threshold: Strategic decisions with price caps. Only proceed if 12h average is below your maximum acceptable price. Good for postponable large loads." + }, + "price_trend_1h": { + "description": "Price trend for the next hour: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 1 hour (4 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: 'falling' = wait, prices dropping. 'rising' = act now or you'll pay more. 'stable' = price doesn't matter much now. Works independent of absolute price level." + }, + "price_trend_2h": { + "description": "Price trend for the next 2 hours: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 2 hours (8 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: Ideal for appliances. 'falling' means better prices coming in 2h - postpone if possible. Finds best timing within your available window, regardless of season." + }, + "price_trend_3h": { + "description": "Price trend for the next 3 hours: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 3 hours (12 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: For Eco programs. 'falling' means prices dropping >5% - worth waiting. Works in any season. Combine with avg sensor for price cap: only when avg < your limit AND trend not 'falling'." + }, + "price_trend_4h": { + "description": "Price trend for the next 4 hours: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 4 hours (16 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: Heat pump/battery decisions. 'falling' means better charging window coming. Always finds relative best time - whether prices are 10 cents or 50 cents. Use avg sensor for absolute limit." + }, + "price_trend_5h": { + "description": "Price trend for the next 5 hours: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 5 hours (20 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: Extended operations. Adapts to market - finds best relative timing in any price environment. 'stable/rising' = good time to start within your planning window." + }, + "price_trend_6h": { + "description": "Price trend for the next 6 hours: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 6 hours (24 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: Evening decisions. 'falling' = prices improve significantly if you wait. No fixed thresholds needed - automatically adjusts to winter/summer price levels." + }, + "price_trend_8h": { + "description": "Price trend for the next 8 hours: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 8 hours (32 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: Night planning. 'falling' means waiting for night pays off (>5% cheaper). Works year-round without manual threshold adjustments. Start when 'stable' or 'rising'." + }, + "price_trend_12h": { + "description": "Price trend for the next 12 hours: rising, falling, or stable", + "long_description": "Compares current interval price with average of next 12 hours (48 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.", + "usage_tips": "Relative optimization: Long-term strategic decisions. 'falling' = significantly better prices coming tonight/tomorrow. Finds optimal timing in any market condition. Best combined with avg sensor price cap." + }, "daily_rating": { - "name": "Daily Price Rating", "description": "How today's prices compare to historical data", "long_description": "Shows how today's prices compare to historical price data as a percentage", "usage_tips": "A positive percentage means today's prices are above average, negative means below average" }, "monthly_rating": { - "name": "Monthly Price Rating", "description": "How this month's prices compare to historical data", "long_description": "Shows how this month's prices compare to historical price data as a percentage", "usage_tips": "A positive percentage means this month's prices are above average, negative means below average" }, "data_timestamp": { - "name": "Price Data Expiration", "description": "Timestamp of the latest available price data interval", "long_description": "Shows the timestamp of the latest available price data interval from your Tibber subscription" }, "price_forecast": { - "name": "Price Forecast", "description": "Forecast of upcoming electricity prices", "long_description": "Shows upcoming electricity prices for future intervals in a format that's easy to use in dashboards", "usage_tips": "Use this entity's attributes to display upcoming prices in charts or custom cards. Access either 'intervals' for all future intervals or 'hours' for hourly summaries." @@ -285,25 +249,21 @@ }, "binary_sensor": { "tomorrow_data_available": { - "name": "Tomorrow's Data Status", "description": "Whether price data for tomorrow is available", "long_description": "Indicates if price data for the following day has been received from Tibber", "usage_tips": "Use this to check if tomorrow's prices are available for planning" }, "peak_price_period": { - "name": "Peak Price Periode", "description": "Whether the current interval is among the most expensive of the day", "long_description": "Turns on when the current price is in the top 20% of today's prices", "usage_tips": "Use this to avoid running high-consumption appliances during expensive intervals" }, "best_price_period": { - "name": "Best Price Periode", "description": "Whether the current interval is among the cheapest of the day", "long_description": "Turns on when the current price is in the bottom 20% of today's prices", "usage_tips": "Use this to run high-consumption appliances during the cheapest intervals" }, "connection": { - "name": "Tibber API Connection", "description": "Whether the connection to the Tibber API is working", "long_description": "Indicates if the integration can successfully connect to the Tibber API", "usage_tips": "Use this to monitor the connection status to the Tibber API" diff --git a/custom_components/tibber_prices/custom_translations/nb.json b/custom_components/tibber_prices/custom_translations/nb.json index da52fbf..ae499cf 100644 --- a/custom_components/tibber_prices/custom_translations/nb.json +++ b/custom_components/tibber_prices/custom_translations/nb.json @@ -85,38 +85,17 @@ "long_description": "Viser maksimumspris per kWh fra de neste 24 timene (fremtidig maksimum) fra Tibber-abonnementet ditt. Dette gir den høyeste forventede prisen i de neste 24 timene basert på prognosedata.", "usage_tips": "Bruk dette til å unngå å kjøre apparater under kommende toppriser." }, - "current_price_cents": { - "name": "Gjeldende Strømpris", - "description": "Gjeldende strømpris per kWh", - "long_description": "Viser gjeldende pris per kWh fra Tibber-abonnementet ditt", - "usage_tips": "Bruk dette til å følge priser eller lage automatiseringer som kjører når strømmen er billig" - }, - "next_interval_price_cents": { - "name": "Neste Pris", - "description": "Strømpris for neste intervall per kWh", - "long_description": "Viser prisen for neste 15-minutters intervall fra Tibber-abonnementet ditt", - "usage_tips": "Bruk dette til å forberede deg på kommende prisendringer eller planlegge enheter til å kjøre under billigere intervaller" - }, - "previous_interval_price_cents": { - "name": "Forrige Strømpris", - "description": "Strømpris for forrige intervall per kWh", - "long_description": "Viser prisen for forrige 15-minutters intervall fra Tibber-abonnementet ditt", - "usage_tips": "Bruk dette til å gjennomgå tidligere prisendringer eller spore prishistorikk" - }, "current_hour_average_cents": { - "name": "Gjeldende Time Gjennomsnittspris", - "description": "Rullerende 5-intervall gjennomsnittspris per kWh", - "long_description": "Viser gjennomsnittsprisen per kWh beregnet fra 5 intervaller: 2 tidligere, gjeldende og 2 neste intervaller (omtrent 75 minutter totalt). Dette gir en jevnere 'timepris' som tilpasser seg etter hvert som tiden går, i stedet for å være fast til klokkeslett.", - "usage_tips": "Bruk dette for en mer stabil prisindikator som jevner ut kortsiktige svingninger samtidig som den fortsatt responderer på prisendringer. Bedre enn faste timepriser for forbruksbeslutninger." + "description": "Rullerende 5-intervall gjennomsnittspris (bakover + fremover skuende)", + "long_description": "Kompatibilitetserstatning for timepriser: Gjennomsnittet av 5 intervaller (2 før, nåværende, 2 etter ≈ 75 min). Oppdateres hvert 15. minutt med rullerende vindu sentrert på nåværende intervall. I motsetning til next_avg_* sensorer som kun ser fremover, gir dette en balansert visning av den omliggende timen.", + "usage_tips": "Migrering fra time- til kvarterstimepriser: Bruk som direkte erstatning for gamle timepris-sensorer. Gir stabil prisindikator som endres gradvis hvert 15. minutt i stedet for å hoppe ved hele timer." }, "next_hour_average_cents": { - "name": "Neste Time Gjennomsnittspris", - "description": "Rullerende 5-intervall gjennomsnittspris for neste time per kWh", - "long_description": "Viser gjennomsnittsprisen per kWh beregnet fra 5 intervaller sentrert én time frem: omtrent intervaller +2 til +6 fra nå (dekker minutter +30 til +105). Dette gir en fremoverskuende jevnet 'timepris' for forbruksplanlegging.", - "usage_tips": "Bruk dette til å forutse prisendringer i neste time. Nyttig for å planlegge høyforbruksaktiviteter som lading av elbiler, kjøring av oppvaskmaskiner eller varmesystemer." + "description": "Rullerende 5-intervall gjennomsnitt for neste time (bakover + fremover skuende)", + "long_description": "Kompatibilitetserstatning for 'neste timepris': Gjennomsnittet av 5 intervaller sentrert én time frem (intervaller +2 til +6, dekker ~30-105 min frem). I motsetning til next_avg_1h som starter fra neste intervall, gir dette en balansert visning rundt timemerket.", + "usage_tips": "Migrering fra timepriser: Bruk som erstatning for 'neste timepris'. Sammenlign med current_hour_average for å avgjøre om det lønner seg å vente én time. Forskjellig fra next_avg_1h som kun ser på den umiddelbare neste timen fremover." }, "price_level": { - "name": "Gjeldende Prisnivå", "description": "Gjeldende prisnivåklassifisering", "long_description": "Viser Tibbers klassifisering av gjeldende pris sammenlignet med historiske priser", "usage_tips": "Bruk dette til å lage automatiseringer basert på relative prisnivåer i stedet for absolutte priser", @@ -129,103 +108,86 @@ } }, "next_interval_price_level": { - "name": "Neste Prisnivå", "description": "Prisnivå for neste 15-minutters intervall", "long_description": "Viser prisnivåklassifiseringen for kommende intervall. Hjelper med å forutse kortsiktige prisendringer for umiddelbar planlegging.", "usage_tips": "Bruk for raske beslutninger om å starte eller stoppe høyeffektenheter i de neste få minuttene." }, "previous_interval_price_level": { - "name": "Forrige Prisnivå", "description": "Prisnivå for forrige 15-minutters intervall", "long_description": "Viser prisnivåklassifiseringen for siste intervall. Nyttig for historisk sammenligning og forståelse av nylige pristrender.", "usage_tips": "Bruk for å sammenligne gjeldende vs nylige prisnivåer eller analysere forbruksmønstre mot historiske priser." }, "current_hour_price_level": { - "name": "Gjeldende Time Prisnivå", "description": "Aggregert prisnivå for gjeldende rullerende time (5 intervaller)", "long_description": "Viser median prisnivå på tvers av 5 intervaller (2 før, gjeldende, 2 etter) som dekker omtrent 75 minutter. Gir en mer stabil prisnivåindikator som jevner ut kortsiktige svingninger.", "usage_tips": "Bruk for mellomlangsiktige planleggingsbeslutninger hvor du vil unngå å reagere på korte pristopper eller fall." }, "next_hour_price_level": { - "name": "Neste Time Prisnivå", "description": "Aggregert prisnivå for neste rullerende time (5 intervaller frem)", "long_description": "Viser median prisnivå på tvers av 5 intervaller sentrert én time frem. Hjelper med å planlegge forbruk basert på kommende pristrender i stedet for øyeblikkelige fremtidige priser.", "usage_tips": "Bruk for å planlegge aktiviteter for neste time basert på en jevnet prisnivåprognose." }, "lowest_price_today_cents": { - "name": "Laveste Pris I Dag", "description": "Laveste strømpris i dag per kWh", "long_description": "Viser laveste pris per kWh for gjeldende dag fra Tibber-abonnementet ditt", "usage_tips": "Bruk dette til å sammenligne gjeldende priser med den billigste tiden på dagen" }, "highest_price_today_cents": { - "name": "Høyeste Pris I Dag", "description": "Høyeste strømpris i dag per kWh", "long_description": "Viser høyeste pris per kWh for gjeldende dag fra Tibber-abonnementet ditt", "usage_tips": "Bruk dette til å unngå å kjøre apparater under toppriser" }, "average_price_today_cents": { - "name": "Gjennomsnittspris I Dag", "description": "Gjennomsnittlig strømpris i dag per kWh", "long_description": "Viser gjennomsnittspris per kWh for gjeldende dag fra Tibber-abonnementet ditt", "usage_tips": "Bruk dette som referanse for å sammenligne gjeldende priser" }, "lowest_price_tomorrow_cents": { - "name": "Laveste Pris I Morgen", "description": "Laveste strømpris i morgen per kWh", "long_description": "Viser laveste pris per kWh for i morgen fra Tibber-abonnementet ditt. Denne sensoren blir utilgjengelig til morgendagens data publiseres av Tibber (vanligvis rundt 13:00-14:00 CET).", "usage_tips": "Bruk dette til å planlegge energikrevende aktiviteter for morgendagens billigste tid. Perfekt for forhåndsplanlegging av oppvarming, EV-lading eller apparater." }, "highest_price_tomorrow_cents": { - "name": "Høyeste Pris I Morgen", "description": "Høyeste strømpris i morgen per kWh", "long_description": "Viser høyeste pris per kWh for i morgen fra Tibber-abonnementet ditt. Denne sensoren blir utilgjengelig til morgendagens data publiseres av Tibber (vanligvis rundt 13:00-14:00 CET).", "usage_tips": "Bruk dette til å unngå å kjøre apparater under morgendagens toppriser. Nyttig for planlegging rundt dyre perioder." }, "average_price_tomorrow_cents": { - "name": "Gjennomsnittspris I Morgen", "description": "Gjennomsnittlig strømpris i morgen per kWh", "long_description": "Viser gjennomsnittspris per kWh for i morgen fra Tibber-abonnementet ditt. Denne sensoren blir utilgjengelig til morgendagens data publiseres av Tibber (vanligvis rundt 13:00-14:00 CET).", "usage_tips": "Bruk dette som referanse for å sammenligne morgendagens priser og planlegge forbruk. Sammenlign med dagens gjennomsnitt for å se om i morgen vil være dyrere eller billigere totalt sett." }, "trailing_price_average_cents": { - "name": "Rullerende 24t Gjennomsnittspris", "description": "Gjennomsnittlig strømpris for de siste 24 timene per kWh", "long_description": "Viser gjennomsnittspris per kWh beregnet fra de siste 24 timene (rullerende gjennomsnitt) fra Tibber-abonnementet ditt. Dette gir et rullerende gjennomsnitt som oppdateres hvert 15. minutt basert på historiske data.", "usage_tips": "Bruk dette til å sammenligne gjeldende priser mot nylige trender. En gjeldende pris betydelig over dette gjennomsnittet kan indikere et godt tidspunkt å redusere forbruket." }, "leading_price_average_cents": { - "name": "Fremtidig 24t Gjennomsnittspris", - "description": "Gjennomsnittlig strømpris for de neste 24 timene per kWh", - "long_description": "Viser gjennomsnittspris per kWh beregnet fra de neste 24 timene (fremtidig gjennomsnitt) fra Tibber-abonnementet ditt. Dette gir et fremoverskuende gjennomsnitt basert på tilgjengelige prognosedata.", - "usage_tips": "Bruk dette til å planlegge energibruk. Hvis gjeldende pris er under det fremtidige gjennomsnittet, kan det være et godt tidspunkt å kjøre energikrevende apparater." + "description": "Gjennomsnittlig strømpris for neste 24 timer per kWh (starter fra nåværende intervall)", + "long_description": "Rullende 24t fremoverrettet gjennomsnitt: Viser gjennomsnittlig pris fra nåværende intervall gjennom neste 24 timer. Oppdateres hvert 15. minutt ettersom 'nå' beveger seg. Forskjellig fra next_avg_* sensorer som starter fra NESTE intervall (ekskluderer nåværende). Bruk for langsiktig priskontekst.", + "usage_tips": "Sammenlign nåværende pris med dette for å vurdere om nå er relativt billig/dyrt i 24t-vinduet. For spesifikke planleggingsvinduer (1-12t), bruk next_avg_*t sensorer som ekskluderer nåværende intervall." }, "trailing_price_min_cents": { - "name": "Rullerende 24t Minimumspris", - "description": "Minimumspris for de siste 24 timene per kWh", - "long_description": "Viser minimumspris per kWh fra de siste 24 timene (rullerende minimum) fra Tibber-abonnementet ditt. Dette gir den laveste prisen sett i de siste 24 timene.", - "usage_tips": "Bruk dette til å se den beste prismuligheten du hadde de siste 24 timene og sammenlign med gjeldende priser." + "description": "Laveste strømpris for de siste 24 timene per kWh", + "long_description": "Viser minimumsprisen per kWh fra de siste 24 timene (etterfølgende minimum) fra ditt Tibber-abonnement. Dette gir den laveste prisen sett i de siste 24 timene.", + "usage_tips": "Bruk dette for å se den beste prismuligheten du hadde de siste 24 timene og sammenlign med nåværende priser." }, "trailing_price_max_cents": { - "name": "Rullerende 24t Maksimumspris", - "description": "Maksimumspris for de siste 24 timene per kWh", - "long_description": "Viser maksimumspris per kWh fra de siste 24 timene (rullerende maksimum) fra Tibber-abonnementet ditt. Dette gir den høyeste prisen sett i de siste 24 timene.", - "usage_tips": "Bruk dette til å se toppprisen de siste 24 timene og vurdere prisvolatilitet." + "description": "Høyeste strømpris for de siste 24 timene per kWh", + "long_description": "Viser maksimumsprisen per kWh fra de siste 24 timene (etterfølgende maksimum) fra ditt Tibber-abonnement. Dette gir den høyeste prisen sett i de siste 24 timene.", + "usage_tips": "Bruk dette for å se toppprisen de siste 24 timene og vurdere prisvolatilitet." }, "leading_price_min_cents": { - "name": "Fremtidig 24t Minimumspris", - "description": "Minimumspris for de neste 24 timene per kWh", - "long_description": "Viser minimumspris per kWh fra de neste 24 timene (fremtidig minimum) fra Tibber-abonnementet ditt. Dette gir den laveste forventede prisen i de neste 24 timene basert på prognosedata.", - "usage_tips": "Bruk dette til å identifisere den beste prismuligheten som kommer og planlegge energikrevende oppgaver deretter." + "description": "Laveste strømpris for neste 24 timer per kWh (starter fra nåværende intervall)", + "long_description": "Rullende 24t fremoverrettet minimum: Viser laveste pris fra nåværende intervall gjennom neste 24 timer. Oppdateres hvert 15. minutt. Bruk til å identifisere det absolutt billigste øyeblikket neste dag. Forskjellig fra next_avg_* som beregner gjennomsnitt for spesifikke planleggingsvinduer.", + "usage_tips": "Bruk dette for å finne den absolutt beste prismuligheten de neste 24t. For planlegging av oppgaver med spesifikke varigheter (1-12t), bruk next_avg_*t sensorer for å sjekke om gjennomsnittet holder seg innenfor prisgrensen din." }, "leading_price_max_cents": { - "name": "Fremtidig 24t Maksimumspris", - "description": "Maksimumspris for de neste 24 timene per kWh", - "long_description": "Viser maksimumspris per kWh fra de neste 24 timene (fremtidig maksimum) fra Tibber-abonnementet ditt. Dette gir den høyeste forventede prisen i de neste 24 timene basert på prognosedata.", - "usage_tips": "Bruk dette til å unngå å kjøre apparater under kommende toppriser." + "description": "Høyeste strømpris for neste 24 timer per kWh (starter fra nåværende intervall)", + "long_description": "Rullende 24t fremoverrettet maksimum: Viser høyeste pris fra nåværende intervall gjennom neste 24 timer. Oppdateres hvert 15. minutt. Bruk til å identifisere topp-prisperioder som bør unngås. Forskjellig fra next_avg_* som beregner gjennomsnitt for spesifikke planleggingsvinduer.", + "usage_tips": "Bruk dette for å unngå topp-prisperioder de neste 24t. For planlegging av spesifikke oppgavevarigheter (1-12t) med pristak, bruk next_avg_*t sensorer for å sikre at gjennomsnittet holder seg under maksimalt akseptabel pris." }, "price_rating": { - "name": "Gjeldende Prisvurdering", "description": "Hvordan gjeldende intervalls pris sammenlignes med historiske data", "long_description": "Viser hvordan gjeldende intervalls pris sammenlignes med historiske prisdata som en prosentandel", "usage_tips": "En positiv prosentandel betyr at gjeldende pris er over gjennomsnitt, negativ betyr under gjennomsnitt", @@ -236,48 +198,120 @@ } }, "next_interval_price_rating": { - "name": "Neste Prisvurdering", "description": "Prisvurdering for neste 15-minutters intervall", "long_description": "Viser hvordan neste intervalls pris sammenlignes med rullerende 24-timers gjennomsnitt. Hjelper med å forutse om kommende priser er over eller under den nylige trenden.", "usage_tips": "Bruk for å ta raske beslutninger om å starte aktiviteter i neste intervall basert på relativ prisposisjon." }, "previous_interval_price_rating": { - "name": "Forrige Prisvurdering", "description": "Prisvurdering for forrige 15-minutters intervall", "long_description": "Viser hvordan siste intervalls pris sammenlignet med rullerende gjennomsnitt. Nyttig for å forstå nylig prisatferd.", "usage_tips": "Bruk for å analysere hvordan prisvurderinger endret seg over tid eller validere tidligere forbruksbeslutninger." }, "current_hour_price_rating": { - "name": "Gjeldende Time Prisvurdering", "description": "Aggregert prisvurdering for gjeldende rullerende time (5 intervaller)", "long_description": "Viser gjennomsnittlig vurdering på tvers av 5 intervaller (2 før, gjeldende, 2 etter). Basert på gjennomsnittlig prosentvis forskjell fra rullerende 24-timers gjennomsnitt, som gir en jevnet vurderingsindikator.", "usage_tips": "Bruk for stabil mellomlangsiktig prisvurdering som ikke overreagerer på korte prisavvik." }, "next_hour_price_rating": { - "name": "Neste Time Prisvurdering", "description": "Aggregert prisvurdering for neste rullerende time (5 intervaller frem)", "long_description": "Viser gjennomsnittlig vurdering for 5 intervaller sentrert én time frem. Hjelper med å forstå om neste time generelt vil være over eller under gjennomsnittsprising.", "usage_tips": "Bruk for å bestemme om du bør vente en time før du starter høyforbruksaktiviteter." }, + "next_avg_1h": { + "description": "Gjennomsnittspris for neste time (kun fremover fra neste intervall)", + "long_description": "Fremoverrettet gjennomsnitt: Viser gjennomsnittet av neste 4 intervaller (1 time) fra NESTE 15-minutters intervall (ikke inkludert nåværende). Forskjellig fra current_hour_average som inkluderer tidligere intervaller. Bruk for absolutt pristerskel-planlegging.", + "usage_tips": "Absolutt pristerskel: Start kun apparater når gjennomsnittet holder seg under maksimum akseptabel pris (f.eks. under 0,25 EUR/kWh). Kombiner med trendsensor for optimal timing. Merk: Dette er IKKE en erstatning for timepriser - bruk current_hour_average til det." + }, + "next_avg_2h": { + "description": "Gjennomsnittspris for neste 2 timer", + "long_description": "Viser gjennomsnittsprisen for de neste 8 intervallene (2 timer) fra neste 15-minutters intervall.", + "usage_tips": "Absolutt pristerskel: Sett en maksimal akseptabel gjennomsnittspris for standard apparater som vaskemaskiner. Sikrer at du aldri betaler mer enn grensen din." + }, + "next_avg_3h": { + "description": "Gjennomsnittspris for neste 3 timer", + "long_description": "Viser gjennomsnittsprisen for de neste 12 intervallene (3 timer) fra neste 15-minutters intervall.", + "usage_tips": "Absolutt pristerskel: For EU Eco-programmer (oppvaskmaskiner, 3-4t kjøretid). Start kun når 3t-gjennomsnitt er under prisgrensen. Bruk med trendsensor for å finne beste tidspunkt innen akseptabelt prisområde." + }, + "next_avg_4h": { + "description": "Gjennomsnittspris for neste 4 timer", + "long_description": "Viser gjennomsnittsprisen for de neste 16 intervallene (4 timer) fra neste 15-minutters intervall.", + "usage_tips": "Absolutt pristerskel: Sett maksimal akseptabel pris for varmepumper eller varmtvannsberedere. Forhindrer drift i dyre perioder uavhengig av relative trender." + }, + "next_avg_5h": { + "description": "Gjennomsnittspris for neste 5 timer", + "long_description": "Viser gjennomsnittsprisen for de neste 20 intervallene (5 timer) fra neste 15-minutters intervall.", + "usage_tips": "Absolutt pristerskel: Bro mellom kort- og langsiktig planlegging. Bruk for utvidede sykluser med harde prisgrenser (f.eks. bassengpumper, utvidede oppvarmingssykluser)." + }, + "next_avg_6h": { + "description": "Gjennomsnittspris for neste 6 timer", + "long_description": "Viser gjennomsnittsprisen for de neste 24 intervallene (6 timer) fra neste 15-minutters intervall.", + "usage_tips": "Absolutt pristerskel: Kveldsplanlegging med pristak. Planlegg kun oppgaver hvis 6t-gjennomsnitt holder seg under maksimum akseptabel kostnad." + }, + "next_avg_8h": { + "description": "Gjennomsnittspris for neste 8 timer", + "long_description": "Viser gjennomsnittsprisen for de neste 32 intervallene (8 timer) fra neste 15-minutters intervall.", + "usage_tips": "Absolutt pristerskel: Beslutninger om nattdrift. Sett harde prisgrenser for nattlaster (batterilading, varmelager). Overskrid aldri budsjettet ditt." + }, + "next_avg_12h": { + "description": "Gjennomsnittspris for neste 12 timer", + "long_description": "Viser gjennomsnittsprisen for de neste 48 intervallene (12 timer) fra neste 15-minutters intervall.", + "usage_tips": "Absolutt pristerskel: Strategiske beslutninger med pristak. Fortsett kun hvis 12t-gjennomsnitt er under maksimum akseptabel pris. Godt for utsettbare store laster." + }, + "price_trend_1h": { + "description": "Pristrend for neste time", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste time. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: 'fallende' = vent, prisene synker. 'stigende' = handle nå eller betal mer. 'stabil' = pris spiller ingen rolle nå. Fungerer uavhengig av absolutt prisnivå." + }, + "price_trend_2h": { + "description": "Pristrend for neste 2 timer", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste 2 timer. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: Ideelt for apparater. 'fallende' betyr bedre priser om 2t - utsett hvis mulig. Finner beste timing innen tilgjengelig vindu, uavhengig av sesong." + }, + "price_trend_3h": { + "description": "Pristrend for neste 3 timer", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste 3 timer. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: For Eco-programmer. 'fallende' betyr prisene faller >5% - verdt å vente. Fungerer i enhver sesong. Kombiner med avg-sensor for pristak: kun når avg < grensen DIN OG trend ikke 'fallende'." + }, + "price_trend_4h": { + "description": "Pristrend for neste 4 timer", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste 4 timer. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: Varmepumpe/batteri-beslutninger. 'fallende' betyr bedre ladevindu kommer. Finner alltid relativ beste tid - enten prisene er 10 cent eller 50 cent. Bruk avg-sensor for absolutt grense." + }, + "price_trend_5h": { + "description": "Pristrend for neste 5 timer", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste 5 timer. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: Utvidede operasjoner. Tilpasser seg markedet - finner beste relative timing i ethvert prismiljø. 'stabil/stigende' = godt tidspunkt å starte innen planleggingsvinduet." + }, + "price_trend_6h": { + "description": "Pristrend for neste 6 timer", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste 6 timer. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: Kveldsbeslutninger. 'fallende' = prisene blir betydelig bedre hvis du venter. Ingen faste terskler nødvendig - justeres automatisk til vinter-/sommerpriser." + }, + "price_trend_8h": { + "description": "Pristrend for neste 8 timer", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste 8 timer. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: Nattplanlegging. 'fallende' betyr venting til natten lønner seg (>5% billigere). Fungerer året rundt uten manuelle terskel-justeringer. Start når 'stabil' eller 'stigende'." + }, + "price_trend_12h": { + "description": "Pristrend for neste 12 timer", + "long_description": "Sammenligner nåværende pris med gjennomsnitt for neste 12 timer. Viser 'stigende' (+5% eller mer), 'fallende' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimalisering: Langsiktige strategiske beslutninger. 'fallende' = betydelig bedre priser kommer i kveld/i morgen. Finner optimal timing i enhver markedstilstand. Best kombinert med avg-sensor pristak." + }, "daily_rating": { - "name": "Daglig Prisvurdering", "description": "Hvordan dagens priser sammenlignes med historiske data", "long_description": "Viser hvordan dagens priser sammenlignes med historiske prisdata som en prosentandel", "usage_tips": "En positiv prosentandel betyr at dagens priser er over gjennomsnitt, negativ betyr under gjennomsnitt" }, "monthly_rating": { - "name": "Månedlig Prisvurdering", "description": "Hvordan denne månedens priser sammenlignes med historiske data", "long_description": "Viser hvordan denne månedens priser sammenlignes med historiske prisdata som en prosentandel", "usage_tips": "En positiv prosentandel betyr at denne månedens priser er over gjennomsnitt, negativ betyr under gjennomsnitt" }, "data_timestamp": { - "name": "Prisdata Utløpsdato", "description": "Tidsstempel for siste tilgjengelige prisdataintervall", "long_description": "Viser tidsstempelet for siste tilgjengelige prisdataintervall fra Tibber-abonnementet ditt" }, "price_forecast": { - "name": "Prisprognose", "description": "Prognose for kommende strømpriser", "long_description": "Viser kommende strømpriser for fremtidige intervaller i et format som er enkelt å bruke i dashbord", "usage_tips": "Bruk denne enhetens attributter for å vise kommende priser i diagrammer eller tilpassede kort. Få tilgang til enten 'intervals' for alle fremtidige intervaller eller 'hours' for timesammendrag." @@ -285,25 +319,21 @@ }, "binary_sensor": { "tomorrow_data_available": { - "name": "Status for Data I Morgen", "description": "Om prisdata for i morgen er tilgjengelig", "long_description": "Indikerer om prisdata for neste dag er mottatt fra Tibber", "usage_tips": "Bruk dette for å sjekke om morgendagens priser er tilgjengelige for planlegging" }, "peak_price_period": { - "name": "Topprisperiode", "description": "Om gjeldende intervall er blant de dyreste på dagen", "long_description": "Slår på når gjeldende pris er i topp 20% av dagens priser", "usage_tips": "Bruk dette for å unngå å kjøre høyforbruksapparater under dyre intervaller" }, "best_price_period": { - "name": "Beste Prisperiode", "description": "Om gjeldende intervall er blant de billigste på dagen", "long_description": "Slår på når gjeldende pris er i bunn 20% av dagens priser", "usage_tips": "Bruk dette for å kjøre høyforbruksapparater under de billigste intervallene" }, "connection": { - "name": "Tibber API-tilkobling", "description": "Om tilkoblingen til Tibber API fungerer", "long_description": "Indikerer om integrasjonen kan koble til Tibber API", "usage_tips": "Bruk dette for å overvåke tilkoblingsstatusen til Tibber API" diff --git a/custom_components/tibber_prices/custom_translations/nl.json b/custom_components/tibber_prices/custom_translations/nl.json index bf1f72d..4356b67 100644 --- a/custom_components/tibber_prices/custom_translations/nl.json +++ b/custom_components/tibber_prices/custom_translations/nl.json @@ -86,37 +86,31 @@ "usage_tips": "Gebruik dit om te voorkomen dat je apparaten tijdens aankomende piekprijsperioden laat draaien." }, "current_price_cents": { - "name": "Huidige Elektriciteitsprijs", "description": "De huidige elektriciteitsprijs per kWh", "long_description": "Toont de huidige prijs per kWh van je Tibber-abonnement", "usage_tips": "Gebruik dit om prijzen te volgen of om automatiseringen te maken die draaien wanneer elektriciteit goedkoop is" }, "next_interval_price_cents": { - "name": "Volgende Prijs", "description": "De elektriciteitsprijs voor het volgende interval per kWh", "long_description": "Toont de prijs voor het volgende 15-minuten interval van je Tibber-abonnement", "usage_tips": "Gebruik dit om je voor te bereiden op aankomende prijswijzigingen of om apparaten te plannen tijdens goedkopere intervallen" }, "previous_interval_price_cents": { - "name": "Vorige Elektriciteitsprijs", "description": "De elektriciteitsprijs voor het vorige interval per kWh", "long_description": "Toont de prijs voor het vorige 15-minuten interval van je Tibber-abonnement", "usage_tips": "Gebruik dit om prijswijzigingen uit het verleden te bekijken of prijsgeschiedenis te volgen" }, "current_hour_average_cents": { - "name": "Huidige Uur Gemiddelde Prijs", - "description": "Voortschrijdend 5-interval gemiddelde prijs per kWh", - "long_description": "Toont de gemiddelde prijs per kWh berekend over 5 intervallen: 2 vorige, huidige en 2 volgende intervallen (ongeveer 75 minuten totaal). Dit geeft een vloeiende 'uurprijs' die zich aanpast naarmate de tijd verstrijkt, in plaats van vast te zitten aan klokuren.", - "usage_tips": "Gebruik dit voor een stabielere prijsindicator die korte-termijn schommelingen afvlakt terwijl het nog steeds reageert op prijswijzigingen. Beter dan vaste uurprijzen voor verbruiksbeslissingen." + "description": "Voortschrijdend 5-interval gemiddelde (achteruit + vooruit kijkend)", + "long_description": "Compatibiliteitsvervanging voor uurprijzen: Gemiddelde van 5 intervallen (2 ervoor, huidig, 2 erna ≈ 75 min). Werkt elke 15 minuten bij met voortschrijdend venster gecentreerd op huidig interval. Anders dan next_avg_* sensoren die alleen vooruit kijken, biedt dit een gebalanceerde kijk op het omringende uur.", + "usage_tips": "Migratie van uurlijkse naar kwartier-prijzen: Gebruik als directe vervanging voor oude uurprijs-sensoren. Biedt stabiele prijsindicator die geleidelijk elke 15 minuten verandert in plaats van te springen bij hele uren." }, "next_hour_average_cents": { - "name": "Volgende Uur Gemiddelde Prijs", - "description": "Voortschrijdend 5-interval gemiddelde prijs voor volgend uur per kWh", - "long_description": "Toont de gemiddelde prijs per kWh berekend over 5 intervallen gecentreerd één uur vooruit: ongeveer intervallen +2 tot en met +6 vanaf nu (omvattend minuten +30 tot +105). Dit geeft een vooruitkijkende vloeiende 'uurprijs' voor verbruiksplanning.", - "usage_tips": "Gebruik dit om prijswijzigingen in het volgende uur te anticiperen. Handig voor het plannen van hoogverbruikactiviteiten zoals het opladen van elektrische voertuigen, het draaien van vaatwassers of verwarmingssystemen." + "description": "Voortschrijdend 5-interval gemiddelde voor volgend uur (achteruit + vooruit kijkend)", + "long_description": "Compatibiliteitsvervanging voor 'volgende uurprijs': Gemiddelde van 5 intervallen gecentreerd één uur vooruit (intervallen +2 t/m +6, omvat ~30-105 min vooruit). Anders dan next_avg_1h die start vanaf volgend interval, biedt dit een gebalanceerde kijk rond het uurmerk.", + "usage_tips": "Migratie van uurprijzen: Gebruik als vervanging voor 'volgende uurprijs'. Vergelijk met current_hour_average om te beslissen of een uur wachten loont. Verschilt van next_avg_1h die alleen het direct volgende uur vooruit bekijkt." }, "price_level": { - "name": "Huidig Prijsniveau", "description": "De huidige classificatie van het prijsniveau", "long_description": "Toont Tibber's classificatie van de huidige prijs vergeleken met historische prijzen", "usage_tips": "Gebruik dit om automatiseringen te maken op basis van relatieve prijsniveaus in plaats van absolute prijzen", @@ -129,103 +123,86 @@ } }, "next_interval_price_level": { - "name": "Volgend Prijsniveau", "description": "Prijsniveau voor het volgende 15-minuten interval", "long_description": "Toont de classificatie van het prijsniveau voor het komende interval. Helpt bij het anticiperen op korte-termijn prijswijzigingen voor directe planning.", "usage_tips": "Gebruik voor snelle beslissingen over het starten of stoppen van hoogvermogen apparaten in de volgende paar minuten." }, "previous_interval_price_level": { - "name": "Vorig Prijsniveau", "description": "Prijsniveau voor het vorige 15-minuten interval", "long_description": "Toont de classificatie van het prijsniveau voor het laatste interval. Nuttig voor historische vergelijking en het begrijpen van recente prijstrends.", "usage_tips": "Gebruik om huidige versus recente prijsniveaus te vergelijken of verbruikspatronen te analyseren tegen historische prijzen." }, "current_hour_price_level": { - "name": "Huidig Uur Prijsniveau", "description": "Geaggregeerd prijsniveau voor huidig voortschrijdend uur (5 intervallen)", "long_description": "Toont het mediane prijsniveau over 5 intervallen (2 ervoor, huidig, 2 erna) dat ongeveer 75 minuten beslaat. Geeft een stabielere prijsniveauindicator die korte-termijn schommelingen afvlakt.", "usage_tips": "Gebruik voor middellange-termijn planningsbeslissingen waarbij je wilt voorkomen dat je reageert op korte prijspieken of dalingen." }, "next_hour_price_level": { - "name": "Volgend Uur Prijsniveau", "description": "Geaggregeerd prijsniveau voor volgend voortschrijdend uur (5 intervallen vooruit)", "long_description": "Toont het mediane prijsniveau over 5 intervallen gecentreerd één uur vooruit. Helpt bij het plannen van verbruik op basis van aankomende prijstrends in plaats van momentane toekomstige prijzen.", "usage_tips": "Gebruik om activiteiten voor het volgende uur in te plannen op basis van een vloeiende prijsniveauprognose." }, "lowest_price_today_cents": { - "name": "Laagste Prijs Vandaag", "description": "De laagste elektriciteitsprijs van vandaag per kWh", "long_description": "Toont de laagste prijs per kWh voor de huidige dag van je Tibber-abonnement", "usage_tips": "Gebruik dit om huidige prijzen te vergelijken met het goedkoopste moment van de dag" }, "highest_price_today_cents": { - "name": "Hoogste Prijs Vandaag", "description": "De hoogste elektriciteitsprijs van vandaag per kWh", "long_description": "Toont de hoogste prijs per kWh voor de huidige dag van je Tibber-abonnement", "usage_tips": "Gebruik dit om te voorkomen dat je apparaten tijdens piekprijstijden laat draaien" }, "average_price_today_cents": { - "name": "Gemiddelde Prijs Vandaag", "description": "De gemiddelde elektriciteitsprijs van vandaag per kWh", "long_description": "Toont de gemiddelde prijs per kWh voor de huidige dag van je Tibber-abonnement", "usage_tips": "Gebruik dit als referentie voor het vergelijken van huidige prijzen" }, "lowest_price_tomorrow_cents": { - "name": "Laagste Prijs Morgen", "description": "De laagste elektriciteitsprijs van morgen per kWh", "long_description": "Toont de laagste prijs per kWh voor morgen van je Tibber-abonnement. Deze sensor wordt niet beschikbaar totdat de gegevens voor morgen door Tibber zijn gepubliceerd (meestal rond 13:00-14:00 CET).", "usage_tips": "Gebruik dit om energie-intensieve activiteiten te plannen voor het goedkoopste moment van morgen. Perfect voor het vooraf plannen van verwarming, EV-laden of apparaten." }, "highest_price_tomorrow_cents": { - "name": "Hoogste Prijs Morgen", "description": "De hoogste elektriciteitsprijs van morgen per kWh", "long_description": "Toont de hoogste prijs per kWh voor morgen van je Tibber-abonnement. Deze sensor wordt niet beschikbaar totdat de gegevens voor morgen door Tibber zijn gepubliceerd (meestal rond 13:00-14:00 CET).", "usage_tips": "Gebruik dit om te voorkomen dat je apparaten tijdens piekprijstijden van morgen laat draaien. Handig voor het plannen rond dure perioden." }, "average_price_tomorrow_cents": { - "name": "Gemiddelde Prijs Morgen", "description": "De gemiddelde elektriciteitsprijs van morgen per kWh", "long_description": "Toont de gemiddelde prijs per kWh voor morgen van je Tibber-abonnement. Deze sensor wordt niet beschikbaar totdat de gegevens voor morgen door Tibber zijn gepubliceerd (meestal rond 13:00-14:00 CET).", "usage_tips": "Gebruik dit als referentie voor het vergelijken van prijzen voor morgen en het plannen van verbruik. Vergelijk met het gemiddelde van vandaag om te zien of morgen over het algemeen duurder of goedkoper zal zijn." }, "trailing_price_average_cents": { - "name": "Voortschrijdend 24u Gemiddelde Prijs", "description": "De gemiddelde elektriciteitsprijs van de afgelopen 24 uur per kWh", "long_description": "Toont de gemiddelde prijs per kWh berekend over de afgelopen 24 uur (voortschrijdend gemiddelde) van je Tibber-abonnement. Dit geeft een voortschrijdend gemiddelde dat elke 15 minuten wordt bijgewerkt op basis van historische gegevens.", "usage_tips": "Gebruik dit om huidige prijzen te vergelijken met recente trends. Een huidige prijs significant boven dit gemiddelde kan een goed moment zijn om het verbruik te verminderen." }, "leading_price_average_cents": { - "name": "Vooruitlopend 24u Gemiddelde Prijs", - "description": "De gemiddelde elektriciteitsprijs van de komende 24 uur per kWh", - "long_description": "Toont de gemiddelde prijs per kWh berekend over de komende 24 uur (vooruitlopend gemiddelde) van je Tibber-abonnement. Dit geeft een vooruitkijkend gemiddelde op basis van beschikbare prognosegegevens.", - "usage_tips": "Gebruik dit om energieverbruik te plannen. Als de huidige prijs onder het vooruitlopende gemiddelde ligt, is het misschien een goed moment om energie-intensieve apparaten te gebruiken." + "description": "Gemiddelde elektriciteitsprijs voor de komende 24 uur per kWh (vanaf huidig interval)", + "long_description": "Rollend 24u vooruitkijkend gemiddelde: Toont gemiddelde prijs vanaf huidig interval gedurende komende 24 uur. Wordt elke 15 minuten bijgewerkt terwijl 'nu' beweegt. Anders dan next_avg_* sensoren die vanaf VOLGEND interval starten (huidig uitgesloten). Gebruik voor lange-termijn prijscontext.", + "usage_tips": "Vergelijk huidige prijs hiermee om te beoordelen of nu relatief goedkoop/duur is in het 24u-venster. Voor specifieke planningsvensters (1-12u) gebruik next_avg_*u sensoren die het huidige interval uitsluiten." }, "trailing_price_min_cents": { - "name": "Voortschrijdend 24u Minimumprijs", - "description": "De minimale elektriciteitsprijs van de afgelopen 24 uur per kWh", - "long_description": "Toont de minimumprijs per kWh van de afgelopen 24 uur (voortschrijdend minimum) van je Tibber-abonnement. Dit geeft de laagste prijs die in de laatste 24 uur werd gezien.", - "usage_tips": "Gebruik dit om de beste prijskans te zien die je de afgelopen 24 uur had en vergelijk deze met huidige prijzen." + "description": "Laagste elektriciteitsprijs voor de afgelopen 24 uur per kWh", + "long_description": "Toont de minimumprijs per kWh van de afgelopen 24 uur (terugkijkend minimum) van je Tibber-abonnement. Dit geeft de laagste prijs gezien in de afgelopen 24 uur.", + "usage_tips": "Gebruik dit om de beste prijskans die je had in de afgelopen 24 uur te zien en te vergelijken met huidige prijzen." }, "trailing_price_max_cents": { - "name": "Voortschrijdend 24u Maximumprijs", - "description": "De maximale elektriciteitsprijs van de afgelopen 24 uur per kWh", - "long_description": "Toont de maximumprijs per kWh van de afgelopen 24 uur (voortschrijdend maximum) van je Tibber-abonnement. Dit geeft de hoogste prijs die in de laatste 24 uur werd gezien.", + "description": "Hoogste elektriciteitsprijs voor de afgelopen 24 uur per kWh", + "long_description": "Toont de maximumprijs per kWh van de afgelopen 24 uur (terugkijkend maximum) van je Tibber-abonnement. Dit geeft de hoogste prijs gezien in de afgelopen 24 uur.", "usage_tips": "Gebruik dit om de piekprijs in de afgelopen 24 uur te zien en prijsvolatiliteit te beoordelen." }, "leading_price_min_cents": { - "name": "Vooruitlopend 24u Minimumprijs", - "description": "De minimale elektriciteitsprijs van de komende 24 uur per kWh", - "long_description": "Toont de minimumprijs per kWh van de komende 24 uur (vooruitlopend minimum) van je Tibber-abonnement. Dit geeft de laagste verwachte prijs in de komende 24 uur op basis van prognosegegevens.", - "usage_tips": "Gebruik dit om de beste prijskans die eraan komt te identificeren en energie-intensieve taken dienovereenkomstig in te plannen." + "description": "Laagste elektriciteitsprijs voor de komende 24 uur per kWh (vanaf huidig interval)", + "long_description": "Rollend 24u vooruitkijkend minimum: Toont laagste prijs vanaf huidig interval gedurende komende 24 uur. Wordt elke 15 minuten bijgewerkt. Gebruik om het absoluut goedkoopste moment van de volgende dag te identificeren. Anders dan next_avg_* die gemiddelden berekenen voor specifieke planningsvensters.", + "usage_tips": "Gebruik dit om de absoluut beste prijskans in de komende 24u te vinden. Voor planning van taken met specifieke looptijden (1-12u) gebruik next_avg_*u sensoren om te controleren of gemiddelde binnen je prijsdrempel blijft." }, "leading_price_max_cents": { - "name": "Vooruitlopend 24u Maximumprijs", - "description": "De maximale elektriciteitsprijs van de komende 24 uur per kWh", - "long_description": "Toont de maximumprijs per kWh van de komende 24 uur (vooruitlopend maximum) van je Tibber-abonnement. Dit geeft de hoogste verwachte prijs in de komende 24 uur op basis van prognosegegevens.", - "usage_tips": "Gebruik dit om te voorkomen dat je apparaten tijdens aankomende piekprijsperioden laat draaien." + "description": "Hoogste elektriciteitsprijs voor de komende 24 uur per kWh (vanaf huidig interval)", + "long_description": "Rollend 24u vooruitkijkend maximum: Toont hoogste prijs vanaf huidig interval gedurende komende 24 uur. Wordt elke 15 minuten bijgewerkt. Gebruik om piekprijsperiodes te identificeren die vermeden moeten worden. Anders dan next_avg_* die gemiddelden berekenen voor specifieke planningsvensters.", + "usage_tips": "Gebruik dit om piekprijsperiodes in de komende 24u te vermijden. Voor planning van specifieke taakduren (1-12u) met prijslimieten gebruik next_avg_*u sensoren om te waarborgen dat gemiddelde onder je maximaal acceptabele prijs blijft." }, "price_rating": { - "name": "Huidige Prijsbeoordeling", "description": "Hoe de prijs van het huidige interval zich verhoudt tot historische gegevens", "long_description": "Toont hoe de prijs van het huidige interval zich verhoudt tot historische prijsgegevens als een percentage", "usage_tips": "Een positief percentage betekent dat de huidige prijs boven gemiddeld ligt, negatief betekent onder gemiddeld", @@ -236,48 +213,120 @@ } }, "next_interval_price_rating": { - "name": "Volgende Prijsbeoordeling", "description": "Prijsbeoordeling voor het volgende 15-minuten interval", "long_description": "Toont hoe de prijs van het volgende interval zich verhoudt tot het voortschrijdend 24-uurs gemiddelde. Helpt bij het anticiperen of aankomende prijzen boven of onder de recente trend liggen.", "usage_tips": "Gebruik om snelle beslissingen te maken over het starten van activiteiten in het volgende interval op basis van relatieve prijspositie." }, "previous_interval_price_rating": { - "name": "Vorige Prijsbeoordeling", "description": "Prijsbeoordeling voor het vorige 15-minuten interval", "long_description": "Toont hoe de prijs van het laatste interval zich verhoudt tot het voortschrijdend gemiddelde. Nuttig voor het begrijpen van recent prijsgedrag.", "usage_tips": "Gebruik voor het analyseren hoe prijsbeoordelingen in de loop van de tijd veranderden of het valideren van verbruiksbeslissingen uit het verleden." }, "current_hour_price_rating": { - "name": "Huidig Uur Prijsbeoordeling", "description": "Geaggregeerde prijsbeoordeling voor huidig voortschrijdend uur (5 intervallen)", "long_description": "Toont de gemiddelde beoordeling over 5 intervallen (2 ervoor, huidig, 2 erna). Gebaseerd op het gemiddelde procentuele verschil met het voortschrijdend 24-uurs gemiddelde, wat een vloeiende beoordelingsindicator geeft.", "usage_tips": "Gebruik voor stabiele middellange-termijn prijsbeoordeling die niet overreageert op korte prijsafwijkingen." }, "next_hour_price_rating": { - "name": "Volgend Uur Prijsbeoordeling", "description": "Geaggregeerde prijsbeoordeling voor volgend voortschrijdend uur (5 intervallen vooruit)", "long_description": "Toont de gemiddelde beoordeling voor 5 intervallen gecentreerd één uur vooruit. Helpt begrijpen of het volgende uur over het algemeen boven of onder gemiddelde prijzen zal liggen.", "usage_tips": "Gebruik om te beslissen of je een uur moet wachten voordat je hoogverbruikactiviteiten start." }, + "next_avg_1h": { + "description": "Gemiddelde prijs voor het volgende uur (alleen vooruit vanaf volgend interval)", + "long_description": "Vooruitkijkend gemiddelde: Toont gemiddelde van volgende 4 intervallen (1 uur) vanaf het VOLGENDE 15-minuten interval (niet inclusief huidig). Verschilt van current_hour_average dat eerdere intervallen omvat. Gebruik voor absolute prijsdrempel-planning.", + "usage_tips": "Absolute prijsdrempel: Start apparaten alleen wanneer gemiddelde onder uw maximum blijft (bijv. onder 0,25 EUR/kWh). Combineer met trendsensor voor optimale timing. Let op: Dit is GEEN vervanging voor uurprijzen - gebruik current_hour_average daarvoor." + }, + "next_avg_2h": { + "description": "Gemiddelde prijs voor de volgende 2 uur", + "long_description": "Toont de gemiddelde prijs voor de volgende 8 intervallen (2 uur) vanaf het volgende 15-minuten interval.", + "usage_tips": "Absolute prijsdrempel: Stel een maximaal acceptabele gemiddelde prijs in voor standaard apparaten zoals wasmachines. Zorgt dat u nooit meer betaalt dan uw limiet." + }, + "next_avg_3h": { + "description": "Gemiddelde prijs voor de volgende 3 uur", + "long_description": "Toont de gemiddelde prijs voor de volgende 12 intervallen (3 uur) vanaf het volgende 15-minuten interval.", + "usage_tips": "Absolute prijsdrempel: Voor EU Eco-programma's (vaatwassers, 3-4u looptijd). Start alleen als 3u-gemiddelde onder prijslimiet ligt. Combineer met trendsensor voor beste moment binnen acceptabel prijsbereik." + }, + "next_avg_4h": { + "description": "Gemiddelde prijs voor de volgende 4 uur", + "long_description": "Toont de gemiddelde prijs voor de volgende 16 intervallen (4 uur) vanaf het volgende 15-minuten interval.", + "usage_tips": "Absolute prijsdrempel: Stel maximale acceptabele prijs in voor warmtepompen of warmwaterboilers. Voorkomt gebruik tijdens dure periodes ongeacht relatieve trends." + }, + "next_avg_5h": { + "description": "Gemiddelde prijs voor de volgende 5 uur", + "long_description": "Toont de gemiddelde prijs voor de volgende 20 intervallen (5 uur) vanaf het volgende 15-minuten interval.", + "usage_tips": "Absolute prijsdrempel: Brug tussen korte- en langetermijnplanning. Voor uitgebreide cycli met harde prijslimieten (bijv. zwembadpompen, uitgebreide verwarmingscycli)." + }, + "next_avg_6h": { + "description": "Gemiddelde prijs voor de volgende 6 uur", + "long_description": "Toont de gemiddelde prijs voor de volgende 24 intervallen (6 uur) vanaf het volgende 15-minuten interval.", + "usage_tips": "Absolute prijsdrempel: Avondplanning met prijsplafond. Plan taken alleen als 6u-gemiddelde onder uw maximaal acceptabele kosten blijft." + }, + "next_avg_8h": { + "description": "Gemiddelde prijs voor de volgende 8 uur", + "long_description": "Toont de gemiddelde prijs voor de volgende 32 intervallen (8 uur) vanaf het volgende 15-minuten interval.", + "usage_tips": "Absolute prijsdrempel: Nachtbedrijf-beslissingen. Stel harde prijslimieten in voor nachtlasten (batterijladen, warmteopslag). Overschrijd nooit uw budget." + }, + "next_avg_12h": { + "description": "Gemiddelde prijs voor de volgende 12 uur", + "long_description": "Toont de gemiddelde prijs voor de volgende 48 intervallen (12 uur) vanaf het volgende 15-minuten interval.", + "usage_tips": "Absolute prijsdrempel: Strategische beslissingen met prijsplafond. Ga alleen door als 12u-gemiddelde onder uw maximaal acceptabele prijs ligt. Goed voor uitstelbaregrotelasting." + }, + "price_trend_1h": { + "description": "Prijstrend voor het volgende uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgend uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: 'dalend' = wachten, prijzen dalen. 'stijgend' = nu handelen of meer betalen. 'stabiel' = prijs maakt nu niet uit. Werkt onafhankelijk van absoluut prijsniveau." + }, + "price_trend_2h": { + "description": "Prijstrend voor de volgende 2 uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgende 2 uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: Ideaal voor apparaten. 'dalend' betekent betere prijzen over 2u - uitstellen indien mogelijk. Vindt beste timing binnen beschikbaar venster, ongeacht seizoen." + }, + "price_trend_3h": { + "description": "Prijstrend voor de volgende 3 uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgende 3 uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: Voor Eco-programma's. 'dalend' betekent prijzen dalen >5% - wachten loont. Werkt elk seizoen. Combineer met avg-sensor voor prijsplafond: alleen wanneer avg < uw limiet EN trend niet 'dalend'." + }, + "price_trend_4h": { + "description": "Prijstrend voor de volgende 4 uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgende 4 uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: Warmtepomp/accu-beslissingen. 'dalend' betekent beter laadvenster komt. Vindt altijd relatief beste tijd - of prijzen 10 of 50 cent zijn. Gebruik avg-sensor voor absolute grens." + }, + "price_trend_5h": { + "description": "Prijstrend voor de volgende 5 uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgende 5 uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: Uitgebreide operaties. Past zich aan markt aan - vindt beste relatieve timing in elk prijsklimaat. 'stabiel/stijgend' = goed moment om te starten binnen planningsvenster." + }, + "price_trend_6h": { + "description": "Prijstrend voor de volgende 6 uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgende 6 uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: Avondbeslissingen. 'dalend' = prijzen verbeteren aanzienlijk bij wachten. Geen vaste drempels nodig - past automatisch aan winter-/zomerprijzen aan." + }, + "price_trend_8h": { + "description": "Prijstrend voor de volgende 8 uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgende 8 uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: Nachtplanning. 'dalend' betekent wachten tot nacht loont (>5% goedkoper). Werkt jaarrond zonder handmatige drempelaanpassingen. Start bij 'stabiel' of 'stijgend'." + }, + "price_trend_12h": { + "description": "Prijstrend voor de volgende 12 uur", + "long_description": "Vergelijkt huidige prijs met gemiddelde van volgende 12 uur. Toont 'stijgend' (+5% of meer), 'dalend' (-5% of minder) of 'stabiel'.", + "usage_tips": "Relatieve optimalisatie: Langetermijn strategische beslissingen. 'dalend' = aanzienlijk betere prijzen komen vanavond/morgen. Vindt optimale timing in elke marktsituatie. Best gecombineerd met avg-sensor prijsplafond." + }, "daily_rating": { - "name": "Dagelijkse Prijsbeoordeling", "description": "Hoe de prijzen van vandaag zich verhouden tot historische gegevens", "long_description": "Toont hoe de prijzen van vandaag zich verhouden tot historische prijsgegevens als een percentage", "usage_tips": "Een positief percentage betekent dat de prijzen van vandaag boven gemiddeld liggen, negatief betekent onder gemiddeld" }, "monthly_rating": { - "name": "Maandelijkse Prijsbeoordeling", "description": "Hoe de prijzen van deze maand zich verhouden tot historische gegevens", "long_description": "Toont hoe de prijzen van deze maand zich verhouden tot historische prijsgegevens als een percentage", "usage_tips": "Een positief percentage betekent dat de prijzen van deze maand boven gemiddeld liggen, negatief betekent onder gemiddeld" }, "data_timestamp": { - "name": "Prijsdata Vervaldatum", "description": "Tijdstempel van het laatste beschikbare prijsdata-interval", "long_description": "Toont de tijdstempel van het laatste beschikbare prijsdata-interval van je Tibber-abonnement" }, "price_forecast": { - "name": "Prijsvoorspelling", "description": "Voorspelling van aankomende elektriciteitsprijzen", "long_description": "Toont aankomende elektriciteitsprijzen voor toekomstige intervallen in een formaat dat gemakkelijk te gebruiken is in dashboards", "usage_tips": "Gebruik de attributen van deze entiteit om aankomende prijzen weer te geven in grafieken of aangepaste kaarten. Toegang tot 'intervals' voor alle toekomstige intervallen of 'hours' voor uur samenvattingen." @@ -285,25 +334,21 @@ }, "binary_sensor": { "tomorrow_data_available": { - "name": "Status Gegevens Morgen", "description": "Of prijsgegevens voor morgen beschikbaar zijn", "long_description": "Geeft aan of prijsgegevens voor de volgende dag zijn ontvangen van Tibber", "usage_tips": "Gebruik dit om te controleren of prijzen voor morgen beschikbaar zijn voor planning" }, "peak_price_period": { - "name": "Piekprijsperiode", "description": "Of het huidige interval tot de duurste van de dag behoort", "long_description": "Wordt ingeschakeld wanneer de huidige prijs in de top 20% van de prijzen van vandaag valt", "usage_tips": "Gebruik dit om hoogverbruik apparaten tijdens dure intervallen te vermijden" }, "best_price_period": { - "name": "Beste Prijsperiode", "description": "Of het huidige interval tot de goedkoopste van de dag behoort", "long_description": "Wordt ingeschakeld wanneer de huidige prijs in de laagste 20% van de prijzen van vandaag valt", "usage_tips": "Gebruik dit om hoogverbruik apparaten tijdens de goedkoopste intervallen te laten draaien" }, "connection": { - "name": "Tibber API Verbinding", "description": "Of de verbinding met de Tibber API werkt", "long_description": "Geeft aan of de integratie succesvol verbinding kan maken met de Tibber API", "usage_tips": "Gebruik dit om de verbindingsstatus met de Tibber API te monitoren" diff --git a/custom_components/tibber_prices/custom_translations/sv.json b/custom_components/tibber_prices/custom_translations/sv.json index 3b15711..b4e9630 100644 --- a/custom_components/tibber_prices/custom_translations/sv.json +++ b/custom_components/tibber_prices/custom_translations/sv.json @@ -86,37 +86,31 @@ "usage_tips": "Använd detta för att undvika att köra apparater under kommande toppriser." }, "current_price_cents": { - "name": "Aktuellt Elpris", "description": "Aktuellt elpris per kWh", "long_description": "Visar aktuellt pris per kWh från ditt Tibber-abonnemang", "usage_tips": "Använd detta för att följa priser eller skapa automationer som körs när elen är billig" }, "next_interval_price_cents": { - "name": "Nästa Pris", "description": "Elpris för nästa intervall per kWh", "long_description": "Visar priset för nästa 15-minutersintervall från ditt Tibber-abonnemang", "usage_tips": "Använd detta för att förbereda dig för kommande prisförändringar eller schemalägga enheter att köra under billigare intervall" }, "previous_interval_price_cents": { - "name": "Föregående Elpris", "description": "Elpris för föregående intervall per kWh", "long_description": "Visar priset för föregående 15-minutersintervall från ditt Tibber-abonnemang", "usage_tips": "Använd detta för att granska tidigare prisförändringar eller spåra prishistorik" }, "current_hour_average_cents": { - "name": "Aktuell Timme Genomsnittspris", - "description": "Rullande 5-intervall genomsnittspris per kWh", - "long_description": "Visar genomsnittspriset per kWh beräknat från 5 intervall: 2 föregående, aktuellt och 2 nästa intervall (cirka 75 minuter totalt). Detta ger ett jämnare 'timpris' som anpassar sig allt eftersom tiden går, istället för att vara fast till klocktimmar.", - "usage_tips": "Använd detta för en mer stabil prisindikator som jämnar ut kortsiktiga fluktuationer samtidigt som den fortfarande svarar på prisförändringar. Bättre än fasta timpriser för förbrukningsbeslut." + "description": "Rullande 5-intervall genomsnitt (bakåt + framåt blickande)", + "long_description": "Kompatibilitetsersättning för timpriser: Genomsnitt av 5 intervall (2 före, aktuell, 2 efter ≈ 75 min). Uppdateras varje 15:e minut med rullande fönster centrerat på aktuellt intervall. Till skillnad från next_avg_* sensorer som endast ser framåt, ger detta en balanserad vy av den omgivande timmen.", + "usage_tips": "Migrering från tim- till kvarterstimpriser: Använd som direkt ersättning för gamla timpris-sensorer. Ger stabil prisindikator som ändras gradvis varje 15:e minut istället för att hoppa vid hela timmar." }, "next_hour_average_cents": { - "name": "Nästa Timme Genomsnittspris", - "description": "Rullande 5-intervall genomsnittspris för nästa timme per kWh", - "long_description": "Visar genomsnittspriset per kWh beräknat från 5 intervall centrerade en timme framåt: cirka intervall +2 till +6 från nu (täcker minuter +30 till +105). Detta ger ett framåtblickande jämnat 'timpris' för förbruksplanering.", - "usage_tips": "Använd detta för att förutse prisförändringar nästa timme. Användbart för att schemalägga högförbruksaktiviteter som laddning av elbilar, körning av diskmaskiner eller värmesystem." + "description": "Rullande 5-intervall genomsnitt för nästa timme (bakåt + framåt blickande)", + "long_description": "Kompatibilitetsersättning för 'nästa timpris': Genomsnitt av 5 intervall centrerade en timme framåt (intervall +2 till +6, täcker ~30-105 min framåt). Till skillnad från next_avg_1h som startar från nästa intervall, ger detta en balanserad vy runt timmarkeringen.", + "usage_tips": "Migrering från timpriser: Använd som ersättning för 'nästa timpris'. Jämför med current_hour_average för att avgöra om det lönar sig att vänta en timme. Skiljer sig från next_avg_1h som endast ser på den omedelbara nästa timmen framåt." }, "price_level": { - "name": "Aktuell Prisnivå", "description": "Aktuell prisnivåklassificering", "long_description": "Visar Tibbers klassificering av aktuellt pris jämfört med historiska priser", "usage_tips": "Använd detta för att skapa automationer baserade på relativa prisnivåer istället för absoluta priser", @@ -129,103 +123,86 @@ } }, "next_interval_price_level": { - "name": "Nästa Prisnivå", "description": "Prisnivå för nästa 15-minutersintervall", "long_description": "Visar prisnivåklassificeringen för kommande intervall. Hjälper till att förutse kortsiktiga prisförändringar för omedelbar planering.", "usage_tips": "Använd för snabba beslut om att starta eller stoppa högeffektenheter under de närmaste minuterna." }, "previous_interval_price_level": { - "name": "Föregående Prisnivå", "description": "Prisnivå för föregående 15-minutersintervall", "long_description": "Visar prisnivåklassificeringen för senaste intervallet. Användbart för historisk jämförelse och förståelse av senaste pristrender.", "usage_tips": "Använd för att jämföra aktuell vs senaste prisnivåer eller analysera förbrukningsmönster mot historiska priser." }, "current_hour_price_level": { - "name": "Aktuell Timme Prisnivå", "description": "Aggregerad prisnivå för aktuell rullande timme (5 intervall)", "long_description": "Visar median prisnivå över 5 intervall (2 före, aktuellt, 2 efter) som täcker cirka 75 minuter. Ger en mer stabil prisnivåindikator som jämnar ut kortsiktiga fluktuationer.", "usage_tips": "Använd för medellångsiktiga planeringsbeslut där du vill undvika att reagera på korta pristoppar eller fall." }, "next_hour_price_level": { - "name": "Nästa Timme Prisnivå", "description": "Aggregerad prisnivå för nästa rullande timme (5 intervall framåt)", "long_description": "Visar median prisnivå över 5 intervall centrerade en timme framåt. Hjälper till att planera förbrukning baserat på kommande pristrender istället för momentana framtida priser.", "usage_tips": "Använd för att schemalägga aktiviteter för nästa timme baserat på en jämnad prisnivåprognos." }, "lowest_price_today_cents": { - "name": "Lägsta Pris Idag", "description": "Lägsta elpris idag per kWh", "long_description": "Visar lägsta pris per kWh för aktuell dag från ditt Tibber-abonnemang", "usage_tips": "Använd detta för att jämföra aktuella priser med den billigaste tiden på dagen" }, "highest_price_today_cents": { - "name": "Högsta Pris Idag", "description": "Högsta elpris idag per kWh", "long_description": "Visar högsta pris per kWh för aktuell dag från ditt Tibber-abonnemang", "usage_tips": "Använd detta för att undvika att köra apparater under toppriser" }, "average_price_today_cents": { - "name": "Genomsnittspris Idag", "description": "Genomsnittligt elpris idag per kWh", "long_description": "Visar genomsnittspris per kWh för aktuell dag från ditt Tibber-abonnemang", "usage_tips": "Använd detta som referens för att jämföra aktuella priser" }, "lowest_price_tomorrow_cents": { - "name": "Lägsta Pris Imorgon", "description": "Lägsta elpris imorgon per kWh", "long_description": "Visar lägsta pris per kWh för imorgon från ditt Tibber-abonnemang. Denna sensor blir otillgänglig tills morgondagens data publiceras av Tibber (vanligtvis runt 13:00-14:00 CET).", "usage_tips": "Använd detta för att planera energikrävande aktiviteter för morgondagens billigaste tid. Perfekt för förhandsplanering av uppvärmning, EV-laddning eller apparater." }, "highest_price_tomorrow_cents": { - "name": "Högsta Pris Imorgon", "description": "Högsta elpris imorgon per kWh", "long_description": "Visar högsta pris per kWh för imorgon från ditt Tibber-abonnemang. Denna sensor blir otillgänglig tills morgondagens data publiceras av Tibber (vanligtvis runt 13:00-14:00 CET).", "usage_tips": "Använd detta för att undvika att köra apparater under morgondagens toppriser. Användbart för planering runt dyra perioder." }, "average_price_tomorrow_cents": { - "name": "Genomsnittspris Imorgon", "description": "Genomsnittligt elpris imorgon per kWh", "long_description": "Visar genomsnittspris per kWh för imorgon från ditt Tibber-abonnemang. Denna sensor blir otillgänglig tills morgondagens data publiceras av Tibber (vanligtvis runt 13:00-14:00 CET).", "usage_tips": "Använd detta som referens för att jämföra morgondagens priser och planera förbrukning. Jämför med dagens genomsnitt för att se om imorgon kommer vara dyrare eller billigare totalt sett." }, "trailing_price_average_cents": { - "name": "Rullande 24t Genomsnittspris", "description": "Genomsnittligt elpris för de senaste 24 timmarna per kWh", "long_description": "Visar genomsnittspris per kWh beräknat från de senaste 24 timmarna (rullande genomsnitt) från ditt Tibber-abonnemang. Detta ger ett rullande genomsnitt som uppdateras var 15:e minut baserat på historiska data.", "usage_tips": "Använd detta för att jämföra aktuella priser mot senaste trender. Ett aktuellt pris betydligt över detta genomsnitt kan indikera ett bra tillfälle att minska förbrukningen." }, "leading_price_average_cents": { - "name": "Framåtblickande 24t Genomsnittspris", - "description": "Genomsnittligt elpris för de nästa 24 timmarna per kWh", - "long_description": "Visar genomsnittspris per kWh beräknat från de nästa 24 timmarna (framåtblickande genomsnitt) från ditt Tibber-abonnemang. Detta ger ett framåtblickande genomsnitt baserat på tillgängliga prognosdata.", - "usage_tips": "Använd detta för att planera energianvändning. Om aktuellt pris är under det framåtblickande genomsnittet kan det vara ett bra tillfälle att köra energikrävande apparater." + "description": "Genomsnittligt elpris för kommande 24 timmar per kWh (från nuvarande intervall)", + "long_description": "Rullande 24t framåtblickande genomsnitt: Visar genomsnittligt pris från nuvarande intervall genom nästa 24 timmar. Uppdateras var 15:e minut när 'nu' flyttas. Skiljer sig från next_avg_* sensorer som startar från NÄSTA intervall (exkluderar nuvarande). Använd för långsiktig priskontext.", + "usage_tips": "Jämför nuvarande pris med detta för att bedöma om nu är relativt billigt/dyrt i 24t-fönstret. För specifika planeringsfönster (1-12t) använd next_avg_*t sensorer som exkluderar nuvarande intervall." }, "trailing_price_min_cents": { - "name": "Rullande 24t Minimumpris", - "description": "Minimumpris för de senaste 24 timmarna per kWh", - "long_description": "Visar minimumpris per kWh från de senaste 24 timmarna (rullande minimum) från ditt Tibber-abonnemang. Detta ger det lägsta priset sett under de senaste 24 timmarna.", - "usage_tips": "Använd detta för att se den bästa prismöjligheten du hade de senaste 24 timmarna och jämför med aktuella priser." + "description": "Lägsta elpriset för senaste 24 timmarna per kWh", + "long_description": "Visar minimipriset per kWh från senaste 24 timmarna (bakåtblickande minimum) från ditt Tibber-abonnemang. Detta ger det lägsta priset sett under senaste 24 timmarna.", + "usage_tips": "Använd detta för att se det bästa pristillfället du hade under senaste 24 timmarna och jämför med nuvarande priser." }, "trailing_price_max_cents": { - "name": "Rullande 24t Maximumpris", - "description": "Maximumpris för de senaste 24 timmarna per kWh", - "long_description": "Visar maximumpris per kWh från de senaste 24 timmarna (rullande maximum) från ditt Tibber-abonnemang. Detta ger det högsta priset sett under de senaste 24 timmarna.", - "usage_tips": "Använd detta för att se topppriset de senaste 24 timmarna och bedöma prisvolatilitet." + "description": "Högsta elpriset för senaste 24 timmarna per kWh", + "long_description": "Visar maximipriset per kWh från senaste 24 timmarna (bakåtblickande maximum) från ditt Tibber-abonnemang. Detta ger det högsta priset sett under senaste 24 timmarna.", + "usage_tips": "Använd detta för att se toppriset under senaste 24 timmarna och bedöma prisvolatilitet." }, "leading_price_min_cents": { - "name": "Framåtblickande 24t Minimumpris", - "description": "Minimumpris för de nästa 24 timmarna per kWh", - "long_description": "Visar minimumpris per kWh från de nästa 24 timmarna (framåtblickande minimum) från ditt Tibber-abonnemang. Detta ger det lägsta förväntade priset under de nästa 24 timmarna baserat på prognosdata.", - "usage_tips": "Använd detta för att identifiera den bästa prismöjligheten som kommer och schemalägga energikrävande uppgifter därefter." + "description": "Lägsta elpriset för kommande 24 timmar per kWh (från nuvarande intervall)", + "long_description": "Rullande 24t framåtblickande minimum: Visar lägsta pris från nuvarande intervall genom nästa 24 timmar. Uppdateras var 15:e minut. Använd för att identifiera det absolut billigaste ögonblicket nästa dag. Skiljer sig från next_avg_* som beräknar genomsnitt för specifika planeringsfönster.", + "usage_tips": "Använd detta för att hitta det absolut bästa pristillfället kommande 24t. För planering av uppgifter med specifika varaktigheter (1-12t) använd next_avg_*t sensorer för att kontrollera om genomsnittet håller sig inom din priströskel." }, "leading_price_max_cents": { - "name": "Framåtblickande 24t Maximumpris", - "description": "Maximumpris för de nästa 24 timmarna per kWh", - "long_description": "Visar maximumpris per kWh från de nästa 24 timmarna (framåtblickande maximum) från ditt Tibber-abonnemang. Detta ger det högsta förväntade priset under de nästa 24 timmarna baserat på prognosdata.", - "usage_tips": "Använd detta för att undvika att köra apparater under kommande toppriser." + "description": "Högsta elpriset för kommande 24 timmar per kWh (från nuvarande intervall)", + "long_description": "Rullande 24t framåtblickande maximum: Visar högsta pris från nuvarande intervall genom nästa 24 timmar. Uppdateras var 15:e minut. Använd för att identifiera toppprisperioder som bör undvikas. Skiljer sig från next_avg_* som beräknar genomsnitt för specifika planeringsfönster.", + "usage_tips": "Använd detta för att undvika toppprisperioder kommande 24t. För planering av specifika uppgiftsvaraktigheter (1-12t) med prisgränser använd next_avg_*t sensorer för att säkerställa att genomsnittet håller sig under ditt maximalt acceptabla pris." }, "price_rating": { - "name": "Aktuellt Prisbetyg", "description": "Hur aktuellt intervalls pris jämförs med historiska data", "long_description": "Visar hur aktuellt intervalls pris jämförs med historiska prisdata som en procentandel", "usage_tips": "En positiv procentandel betyder att aktuellt pris är över genomsnittet, negativ betyder under genomsnittet", @@ -236,48 +213,120 @@ } }, "next_interval_price_rating": { - "name": "Nästa Prisbetyg", "description": "Prisbetyg för nästa 15-minutersintervall", "long_description": "Visar hur nästa intervalls pris jämförs med rullande 24-timmars genomsnitt. Hjälper till att förutse om kommande priser är över eller under den senaste trenden.", "usage_tips": "Använd för att ta snabba beslut om att starta aktiviteter under nästa intervall baserat på relativ prisposition." }, "previous_interval_price_rating": { - "name": "Föregående Prisbetyg", "description": "Prisbetyg för föregående 15-minutersintervall", "long_description": "Visar hur senaste intervallets pris jämförde med rullande genomsnitt. Användbart för att förstå senaste prisbeteende.", "usage_tips": "Använd för att analysera hur prisbetyg förändrades över tid eller validera tidigare förbrukningsbeslut." }, "current_hour_price_rating": { - "name": "Aktuell Timme Prisbetyg", "description": "Aggregerat prisbetyg för aktuell rullande timme (5 intervall)", "long_description": "Visar genomsnittligt betyg över 5 intervall (2 före, aktuellt, 2 efter). Baserat på genomsnittlig procentuell skillnad från rullande 24-timmars genomsnitt, vilket ger en jämnad betygsindikator.", "usage_tips": "Använd för stabil medellångsiktig prisbedömning som inte överreagerar på korta prisavvikelser." }, "next_hour_price_rating": { - "name": "Nästa Timme Prisbetyg", "description": "Aggregerat prisbetyg för nästa rullande timme (5 intervall framåt)", "long_description": "Visar genomsnittligt betyg för 5 intervall centrerade en timme framåt. Hjälper till att förstå om nästa timme generellt kommer vara över eller under genomsnittlig prissättning.", "usage_tips": "Använd för att bestämma om du ska vänta en timme innan du startar högförbruksaktiviteter." }, + "next_avg_1h": { + "description": "Genomsnittspris för nästa timme (endast framåt från nästa intervall)", + "long_description": "Framåtriktat genomsnitt: Visar genomsnittet av nästa 4 intervall (1 timme) från NÄSTA 15-minutersintervall (inte inklusive aktuell). Skiljer sig från current_hour_average som inkluderar tidigare intervall. Använd för absolut priströskel-planering.", + "usage_tips": "Absolut priströskel: Starta endast apparater när genomsnittet håller sig under ditt maximum acceptabla pris (t.ex. under 0,25 EUR/kWh). Kombinera med trendsensor för optimal timing. Obs: Detta är INTE en ersättning för timpriser - använd current_hour_average för det." + }, + "next_avg_2h": { + "description": "Genomsnittspris för nästa 2 timmar", + "long_description": "Visar genomsnittspriset för de kommande 8 intervallen (2 timmar) från nästa 15-minutersintervall.", + "usage_tips": "Absolut priströskel: Sätt ett maximalt acceptabelt genomsnittspris för standardapparater som tvättmaskiner. Säkerställer att du aldrig betalar mer än din gräns." + }, + "next_avg_3h": { + "description": "Genomsnittspris för nästa 3 timmar", + "long_description": "Visar genomsnittspriset för de kommande 12 intervallen (3 timmar) från nästa 15-minutersintervall.", + "usage_tips": "Absolut priströskel: För EU Eco-program (diskmaskiner, 3-4h körtid). Starta endast när 3h-genomsnitt är under prisgränsen. Använd med trendsensor för att hitta bästa tidpunkt inom acceptabelt prisområde." + }, + "next_avg_4h": { + "description": "Genomsnittspris för nästa 4 timmar", + "long_description": "Visar genomsnittspriset för de kommande 16 intervallen (4 timmar) från nästa 15-minutersintervall.", + "usage_tips": "Absolut priströskel: Sätt maximalt acceptabelt pris för värmepumpar eller varmvattenberedare. Förhindrar drift under dyra perioder oberoende av relativa trender." + }, + "next_avg_5h": { + "description": "Genomsnittspris för nästa 5 timmar", + "long_description": "Visar genomsnittspriset för de kommande 20 intervallen (5 timmar) från nästa 15-minutersintervall.", + "usage_tips": "Absolut priströskel: Brygga mellan kort- och långsiktig planering. Använd för utökade cykler med hårda prisgränser (t.ex. poolpumpar, utökade uppvärmningscykler)." + }, + "next_avg_6h": { + "description": "Genomsnittspris för nästa 6 timmar", + "long_description": "Visar genomsnittspriset för de kommande 24 intervallen (6 timmar) från nästa 15-minutersintervall.", + "usage_tips": "Absolut priströskel: Kvällsplanering med pristak. Planera endast uppgifter om 6h-genomsnitt håller sig under din maximalt acceptabla kostnad." + }, + "next_avg_8h": { + "description": "Genomsnittspris för nästa 8 timmar", + "long_description": "Visar genomsnittspriset för de kommande 32 intervallen (8 timmar) från nästa 15-minutersintervall.", + "usage_tips": "Absolut priströskel: Nattdrift-beslut. Sätt hårda prisgränser för nattlaster (batteriladdning, värmelagring). Överskridenaldrig din budget." + }, + "next_avg_12h": { + "description": "Genomsnittspris för nästa 12 timmar", + "long_description": "Visar genomsnittspriset för de kommande 48 intervallen (12 timmar) från nästa 15-minutersintervall.", + "usage_tips": "Absolut priströskel: Strategiska beslut med pristak. Fortsätt endast om 12h-genomsnitt är under ditt maximalt acceptabla pris. Bra för uppskjutbara stora laster." + }, + "price_trend_1h": { + "description": "Pristrend för nästa timme", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa timme. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: 'fallande' = vänta, priserna sjunker. 'stigande' = agera nu eller betala mer. 'stabil' = pris spelar ingen roll nu. Fungerar oberoende av absolut prisnivå." + }, + "price_trend_2h": { + "description": "Pristrend för nästa 2 timmar", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa 2 timmar. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: Idealt för apparater. 'fallande' betyder bättre priser om 2h - skjut upp om möjligt. Hittar bästa timing inom tillgängligt fönster, oavsett säsong." + }, + "price_trend_3h": { + "description": "Pristrend för nästa 3 timmar", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa 3 timmar. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: För Eco-program. 'fallande' betyder priserna faller >5% - värt att vänta. Fungerar varje säsong. Kombinera med avg-sensor för pristak: endast när avg < din gräns OCH trend inte 'fallande'." + }, + "price_trend_4h": { + "description": "Pristrend för nästa 4 timmar", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa 4 timmar. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: Värmepump/batteri-beslut. 'fallande' betyder bättre laddningsfönster kommer. Hittar alltid relativ bästa tid - oavsett om priserna är 10 cent eller 50 cent. Använd avg-sensor för absolut gräns." + }, + "price_trend_5h": { + "description": "Pristrend för nästa 5 timmar", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa 5 timmar. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: Utökade operationer. Anpassar sig till marknaden - hittar bästa relativa timing i alla prismiljöer. 'stabil/stigande' = bra tid att starta inom planeringsfönstret." + }, + "price_trend_6h": { + "description": "Pristrend för nästa 6 timmar", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa 6 timmar. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: Kvällsbeslut. 'fallande' = priserna förbättras betydligt om du väntar. Inga fasta trösklar behövs - justeras automatiskt till vinter-/sommarpriser." + }, + "price_trend_8h": { + "description": "Pristrend för nästa 8 timmar", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa 8 timmar. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: Nattplanering. 'fallande' betyder väntan till natten lönar sig (>5% billigare). Fungerar året runt utan manuella tröskel-justeringar. Starta när 'stabil' eller 'stigande'." + }, + "price_trend_12h": { + "description": "Pristrend för nästa 12 timmar", + "long_description": "Jämför nuvarande pris med genomsnittet för nästa 12 timmar. Visar 'stigande' (+5% eller mer), 'fallande' (-5% eller mindre) eller 'stabil'.", + "usage_tips": "Relativ optimering: Långsiktiga strategiska beslut. 'fallande' = betydligt bättre priser kommer ikväll/imorgon. Hittar optimal timing i alla marknadsförhållanden. Bäst kombinerat med avg-sensor pristak." + }, "daily_rating": { - "name": "Dagligt Prisbetyg", "description": "Hur dagens priser jämförs med historiska data", "long_description": "Visar hur dagens priser jämförs med historiska prisdata som en procentandel", "usage_tips": "En positiv procentandel betyder att dagens priser är över genomsnittet, negativ betyder under genomsnittet" }, "monthly_rating": { - "name": "Månatligt Prisbetyg", "description": "Hur denna månads priser jämförs med historiska data", "long_description": "Visar hur denna månads priser jämförs med historiska prisdata som en procentandel", "usage_tips": "En positiv procentandel betyder att denna månads priser är över genomsnittet, negativ betyder under genomsnittet" }, "data_timestamp": { - "name": "Prisdata Utgångsdatum", "description": "Tidsstämpel för senaste tillgängliga prisdataintervall", "long_description": "Visar tidsstämpeln för senaste tillgängliga prisdataintervall från ditt Tibber-abonnemang" }, "price_forecast": { - "name": "Prisprognos", "description": "Prognos för kommande elpriser", "long_description": "Visar kommande elpriser för framtida intervall i ett format som är enkelt att använda i instrumentpaneler", "usage_tips": "Använd denna entitets attribut för att visa kommande priser i diagram eller anpassade kort. Få tillgång till antingen 'intervals' för alla framtida intervall eller 'hours' för timsammanfattningar." @@ -285,25 +334,21 @@ }, "binary_sensor": { "tomorrow_data_available": { - "name": "Status för Data Imorgon", "description": "Om prisdata för imorgon är tillgänglig", "long_description": "Indikerar om prisdata för nästa dag har mottagits från Tibber", "usage_tips": "Använd detta för att kontrollera om morgondagens priser är tillgängliga för planering" }, "peak_price_period": { - "name": "Topprisperiod", "description": "Om aktuellt intervall är bland de dyraste på dagen", "long_description": "Slår på när aktuellt pris är i topp 20% av dagens priser", "usage_tips": "Använd detta för att undvika att köra högförbruksapparater under dyra intervall" }, "best_price_period": { - "name": "Bästa Prisperiod", "description": "Om aktuellt intervall är bland de billigaste på dagen", "long_description": "Slår på när aktuellt pris är i botten 20% av dagens priser", "usage_tips": "Använd detta för att köra högförbruksapparater under de billigaste intervallen" }, "connection": { - "name": "Tibber API-anslutning", "description": "Om anslutningen till Tibber API fungerar", "long_description": "Indikerar om integrationen kan ansluta till Tibber API", "usage_tips": "Använd detta för att övervaka anslutningsstatusen till Tibber API" diff --git a/custom_components/tibber_prices/price_utils.py b/custom_components/tibber_prices/price_utils.py index 6444fc1..af169cd 100644 --- a/custom_components/tibber_prices/price_utils.py +++ b/custom_components/tibber_prices/price_utils.py @@ -124,7 +124,7 @@ def calculate_rating_level( # If difference falls in both ranges (shouldn't normally happen), return NORMAL if difference <= threshold_low and difference >= threshold_high: - return "NORMAL" + return PRICE_RATING_NORMAL # Classify based on thresholds if difference <= threshold_low: @@ -133,7 +133,7 @@ def calculate_rating_level( if difference >= threshold_high: return "HIGH" - return "NORMAL" + return PRICE_RATING_NORMAL def _process_price_interval( @@ -288,7 +288,7 @@ def aggregate_price_levels(levels: list[str]) -> str: levels: List of price level strings from intervals Returns: - The median price level string, or "NORMAL" if input is empty + The median price level string, or PRICE_LEVEL_NORMAL if input is empty """ if not levels: @@ -343,3 +343,40 @@ def aggregate_price_rating(differences: list[float], threshold_low: float, thres rating_level = calculate_rating_level(avg_difference, threshold_low, threshold_high) return rating_level or PRICE_RATING_NORMAL, avg_difference + + +def calculate_price_trend( + current_price: float, + future_average: float, + threshold_pct: float = 5.0, +) -> tuple[str, float]: + """ + Calculate price trend by comparing current price with future average. + + Args: + current_price: Current interval price + future_average: Average price of future intervals + threshold_pct: Percentage threshold for stable vs rising/falling (default 5%) + + Returns: + Tuple of (trend_state, difference_percentage) + trend_state: "rising" | "falling" | "stable" + difference_percentage: % change from current to future ((future - current) / current * 100) + + """ + if current_price == 0: + # Avoid division by zero + return "stable", 0.0 + + # Calculate percentage difference from current to future + diff_pct = ((future_average - current_price) / current_price) * 100 + + # Determine trend based on threshold + if diff_pct > threshold_pct: + trend = "rising" + elif diff_pct < -threshold_pct: + trend = "falling" + else: + trend = "stable" + + return trend, diff_pct diff --git a/custom_components/tibber_prices/sensor.py b/custom_components/tibber_prices/sensor.py index 03ef836..2be2090 100644 --- a/custom_components/tibber_prices/sensor.py +++ b/custom_components/tibber_prices/sensor.py @@ -22,6 +22,7 @@ from .average_utils import ( calculate_current_trailing_max, calculate_current_trailing_min, calculate_next_hour_rolling_5interval_avg, + calculate_next_n_hours_avg, ) from .const import ( CONF_EXTENDED_DESCRIPTIONS, @@ -32,7 +33,9 @@ from .const import ( DEFAULT_PRICE_RATING_THRESHOLD_LOW, DOMAIN, PRICE_LEVEL_MAPPING, + PRICE_LEVEL_OPTIONS, PRICE_RATING_MAPPING, + PRICE_RATING_OPTIONS, async_get_entity_description, format_price_unit_minor, get_entity_description, @@ -43,6 +46,7 @@ from .price_utils import ( MINUTES_PER_INTERVAL, aggregate_price_levels, aggregate_price_rating, + calculate_price_trend, find_price_data_for_interval, ) @@ -59,12 +63,13 @@ HOURS_IN_DAY = 24 LAST_HOUR_OF_DAY = 23 INTERVALS_PER_HOUR = 4 # 15-minute intervals MAX_FORECAST_INTERVALS = 8 # Show up to 8 future intervals (2 hours with 15-min intervals) +MIN_HOURS_FOR_LATER_HALF = 3 # Minimum hours needed to calculate later half average # Main price sensors that users will typically use in automations PRICE_SENSORS = ( SensorEntityDescription( key="current_price", - translation_key="current_price_cents", + translation_key="current_price", name="Current Electricity Price", icon="mdi:cash", device_class=SensorDeviceClass.MONETARY, @@ -72,7 +77,7 @@ PRICE_SENSORS = ( ), SensorEntityDescription( key="next_interval_price", - translation_key="next_interval_price_cents", + translation_key="next_interval_price", name="Next Price", icon="mdi:clock-fast", device_class=SensorDeviceClass.MONETARY, @@ -80,7 +85,7 @@ PRICE_SENSORS = ( ), SensorEntityDescription( key="previous_interval_price", - translation_key="previous_interval_price_cents", + translation_key="previous_interval_price", name="Previous Electricity Price", icon="mdi:history", device_class=SensorDeviceClass.MONETARY, @@ -89,7 +94,7 @@ PRICE_SENSORS = ( ), SensorEntityDescription( key="current_hour_average", - translation_key="current_hour_average_cents", + translation_key="current_hour_average", name="Current Hour Average Price", icon="mdi:cash", device_class=SensorDeviceClass.MONETARY, @@ -97,7 +102,7 @@ PRICE_SENSORS = ( ), SensorEntityDescription( key="next_hour_average", - translation_key="next_hour_average_cents", + translation_key="next_hour_average", name="Next Hour Average Price", icon="mdi:clock-fast", device_class=SensorDeviceClass.MONETARY, @@ -108,12 +113,16 @@ PRICE_SENSORS = ( translation_key="price_level", name="Current Price Level", icon="mdi:gauge", + device_class=SensorDeviceClass.ENUM, + options=PRICE_LEVEL_OPTIONS, ), SensorEntityDescription( key="next_interval_price_level", translation_key="next_interval_price_level", name="Next Price Level", icon="mdi:gauge-empty", + device_class=SensorDeviceClass.ENUM, + options=PRICE_LEVEL_OPTIONS, ), SensorEntityDescription( key="previous_interval_price_level", @@ -121,18 +130,24 @@ PRICE_SENSORS = ( name="Previous Price Level", icon="mdi:gauge-empty", entity_registry_enabled_default=False, + device_class=SensorDeviceClass.ENUM, + options=PRICE_LEVEL_OPTIONS, ), SensorEntityDescription( key="current_hour_price_level", translation_key="current_hour_price_level", name="Current Hour Price Level", icon="mdi:gauge", + device_class=SensorDeviceClass.ENUM, + options=PRICE_LEVEL_OPTIONS, ), SensorEntityDescription( key="next_hour_price_level", translation_key="next_hour_price_level", name="Next Hour Price Level", icon="mdi:gauge-empty", + device_class=SensorDeviceClass.ENUM, + options=PRICE_LEVEL_OPTIONS, ), ) @@ -140,7 +155,7 @@ PRICE_SENSORS = ( STATISTICS_SENSORS = ( SensorEntityDescription( key="lowest_price_today", - translation_key="lowest_price_today_cents", + translation_key="lowest_price_today", name="Today's Lowest Price", icon="mdi:arrow-collapse-down", device_class=SensorDeviceClass.MONETARY, @@ -148,7 +163,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="highest_price_today", - translation_key="highest_price_today_cents", + translation_key="highest_price_today", name="Today's Highest Price", icon="mdi:arrow-collapse-up", device_class=SensorDeviceClass.MONETARY, @@ -156,7 +171,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="average_price_today", - translation_key="average_price_today_cents", + translation_key="average_price_today", name="Today's Average Price", icon="mdi:chart-line", device_class=SensorDeviceClass.MONETARY, @@ -164,7 +179,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="lowest_price_tomorrow", - translation_key="lowest_price_tomorrow_cents", + translation_key="lowest_price_tomorrow", name="Tomorrow's Lowest Price", icon="mdi:arrow-collapse-down", device_class=SensorDeviceClass.MONETARY, @@ -172,7 +187,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="highest_price_tomorrow", - translation_key="highest_price_tomorrow_cents", + translation_key="highest_price_tomorrow", name="Tomorrow's Highest Price", icon="mdi:arrow-collapse-up", device_class=SensorDeviceClass.MONETARY, @@ -180,7 +195,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="average_price_tomorrow", - translation_key="average_price_tomorrow_cents", + translation_key="average_price_tomorrow", name="Tomorrow's Average Price", icon="mdi:chart-line", device_class=SensorDeviceClass.MONETARY, @@ -188,7 +203,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="trailing_price_average", - translation_key="trailing_price_average_cents", + translation_key="trailing_price_average", name="Trailing 24h Average Price", icon="mdi:chart-line", device_class=SensorDeviceClass.MONETARY, @@ -197,7 +212,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="leading_price_average", - translation_key="leading_price_average_cents", + translation_key="leading_price_average", name="Leading 24h Average Price", icon="mdi:chart-line-variant", device_class=SensorDeviceClass.MONETARY, @@ -205,7 +220,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="trailing_price_min", - translation_key="trailing_price_min_cents", + translation_key="trailing_price_min", name="Trailing 24h Minimum Price", icon="mdi:arrow-collapse-down", device_class=SensorDeviceClass.MONETARY, @@ -214,7 +229,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="trailing_price_max", - translation_key="trailing_price_max_cents", + translation_key="trailing_price_max", name="Trailing 24h Maximum Price", icon="mdi:arrow-collapse-up", device_class=SensorDeviceClass.MONETARY, @@ -223,7 +238,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="leading_price_min", - translation_key="leading_price_min_cents", + translation_key="leading_price_min", name="Leading 24h Minimum Price", icon="mdi:arrow-collapse-down", device_class=SensorDeviceClass.MONETARY, @@ -231,7 +246,7 @@ STATISTICS_SENSORS = ( ), SensorEntityDescription( key="leading_price_max", - translation_key="leading_price_max_cents", + translation_key="leading_price_max", name="Leading 24h Maximum Price", icon="mdi:arrow-collapse-up", device_class=SensorDeviceClass.MONETARY, @@ -246,12 +261,16 @@ RATING_SENSORS = ( translation_key="price_rating", name="Current Price Rating", icon="mdi:star-outline", + device_class=SensorDeviceClass.ENUM, + options=PRICE_RATING_OPTIONS, ), SensorEntityDescription( key="next_interval_price_rating", translation_key="next_interval_price_rating", name="Next Price Rating", icon="mdi:star-half-full", + device_class=SensorDeviceClass.ENUM, + options=PRICE_RATING_OPTIONS, ), SensorEntityDescription( key="previous_interval_price_rating", @@ -259,18 +278,180 @@ RATING_SENSORS = ( name="Previous Price Rating", icon="mdi:star-half-full", entity_registry_enabled_default=False, + device_class=SensorDeviceClass.ENUM, + options=PRICE_RATING_OPTIONS, ), SensorEntityDescription( key="current_hour_price_rating", translation_key="current_hour_price_rating", name="Current Hour Price Rating", icon="mdi:star-outline", + device_class=SensorDeviceClass.ENUM, + options=PRICE_RATING_OPTIONS, ), SensorEntityDescription( key="next_hour_price_rating", translation_key="next_hour_price_rating", name="Next Hour Price Rating", icon="mdi:star-half-full", + device_class=SensorDeviceClass.ENUM, + options=PRICE_RATING_OPTIONS, + ), +) + +# Future average sensors (rolling N-hour windows from next interval) +FUTURE_AVERAGE_SENSORS = ( + # Default enabled: 1h-5h + SensorEntityDescription( + key="next_avg_1h", + translation_key="next_avg_1h", + name="Next 1h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="next_avg_2h", + translation_key="next_avg_2h", + name="Next 2h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="next_avg_3h", + translation_key="next_avg_3h", + name="Next 3h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="next_avg_4h", + translation_key="next_avg_4h", + name="Next 4h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="next_avg_5h", + translation_key="next_avg_5h", + name="Next 5h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=True, + ), + # Disabled by default: 6h, 8h, 12h (advanced use cases) + SensorEntityDescription( + key="next_avg_6h", + translation_key="next_avg_6h", + name="Next 6h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=False, + ), + SensorEntityDescription( + key="next_avg_8h", + translation_key="next_avg_8h", + name="Next 8h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=False, + ), + SensorEntityDescription( + key="next_avg_12h", + translation_key="next_avg_12h", + name="Next 12h Average Price", + icon="mdi:chart-line", + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + entity_registry_enabled_default=False, + ), +) + +# Price trend sensors +TREND_SENSORS = ( + # Default enabled: 1h-5h + SensorEntityDescription( + key="price_trend_1h", + translation_key="price_trend_1h", + name="Price Trend (1h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="price_trend_2h", + translation_key="price_trend_2h", + name="Price Trend (2h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="price_trend_3h", + translation_key="price_trend_3h", + name="Price Trend (3h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="price_trend_4h", + translation_key="price_trend_4h", + name="Price Trend (4h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=True, + ), + SensorEntityDescription( + key="price_trend_5h", + translation_key="price_trend_5h", + name="Price Trend (5h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=True, + ), + # Disabled by default: 6h, 8h, 12h + SensorEntityDescription( + key="price_trend_6h", + translation_key="price_trend_6h", + name="Price Trend (6h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=False, + ), + SensorEntityDescription( + key="price_trend_8h", + translation_key="price_trend_8h", + name="Price Trend (8h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=False, + ), + SensorEntityDescription( + key="price_trend_12h", + translation_key="price_trend_12h", + name="Price Trend (12h)", + icon="mdi:trending-up", + device_class=SensorDeviceClass.ENUM, + options=["rising", "falling", "stable"], + entity_registry_enabled_default=False, ), ) @@ -298,6 +479,8 @@ ENTITY_DESCRIPTIONS = ( *PRICE_SENSORS, *STATISTICS_SENSORS, *RATING_SENSORS, + *FUTURE_AVERAGE_SENSORS, + *TREND_SENSORS, *DIAGNOSTIC_SENSORS, ) @@ -416,6 +599,24 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): "previous_interval_price_rating": lambda: self._get_interval_rating_value(interval_offset=-1), "current_hour_price_rating": lambda: self._get_rolling_hour_rating_value(hour_offset=0), "next_hour_price_rating": lambda: self._get_rolling_hour_rating_value(hour_offset=1), + # Future average sensors (next N hours from next interval) + "next_avg_1h": lambda: self._get_next_avg_n_hours_value(hours=1), + "next_avg_2h": lambda: self._get_next_avg_n_hours_value(hours=2), + "next_avg_3h": lambda: self._get_next_avg_n_hours_value(hours=3), + "next_avg_4h": lambda: self._get_next_avg_n_hours_value(hours=4), + "next_avg_5h": lambda: self._get_next_avg_n_hours_value(hours=5), + "next_avg_6h": lambda: self._get_next_avg_n_hours_value(hours=6), + "next_avg_8h": lambda: self._get_next_avg_n_hours_value(hours=8), + "next_avg_12h": lambda: self._get_next_avg_n_hours_value(hours=12), + # Price trend sensors + "price_trend_1h": lambda: self._get_price_trend_value(hours=1), + "price_trend_2h": lambda: self._get_price_trend_value(hours=2), + "price_trend_3h": lambda: self._get_price_trend_value(hours=3), + "price_trend_4h": lambda: self._get_price_trend_value(hours=4), + "price_trend_5h": lambda: self._get_price_trend_value(hours=5), + "price_trend_6h": lambda: self._get_price_trend_value(hours=6), + "price_trend_8h": lambda: self._get_price_trend_value(hours=8), + "price_trend_12h": lambda: self._get_price_trend_value(hours=12), # Diagnostic sensors "data_timestamp": self._get_data_timestamp, # Price forecast sensor @@ -429,23 +630,14 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): return self.coordinator.get_current_interval() def _get_price_level_value(self) -> str | None: - """Get the current price level value as a translated string for the state.""" + """Get the current price level value as enum string for the state.""" current_interval_data = self._get_current_interval_data() if not current_interval_data or "level" not in current_interval_data: return None level = current_interval_data["level"] self._last_price_level = level - # Use the translation helper for price level, fallback to English if needed - if self.hass: - language = self.hass.config.language or "en" - translated = get_price_level_translation(level, language) - if translated: - return translated - if language != "en": - fallback = get_price_level_translation(level, "en") - if fallback: - return fallback - return level + # Convert API level (e.g., "NORMAL") to lowercase enum value (e.g., "normal") + return level.lower() if level else None def _get_interval_level_value(self, *, interval_offset: int) -> str | None: """Get price level for an interval with offset (e.g., next or previous interval).""" @@ -461,17 +653,8 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): return None level = interval_data["level"] - # Translate the level - if self.hass: - language = self.hass.config.language or "en" - translated = get_price_level_translation(level, language) - if translated: - return translated - if language != "en": - fallback = get_price_level_translation(level, "en") - if fallback: - return fallback - return level + # Convert API level to lowercase enum value + return level.lower() if level else None def _get_rolling_hour_level_value(self, *, hour_offset: int) -> str | None: """Get aggregated price level for a 5-interval rolling window.""" @@ -496,7 +679,8 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): return None aggregated_level = aggregate_price_levels(levels) - return self._translate_level(aggregated_level) + # Convert API level to lowercase enum value + return aggregated_level.lower() if aggregated_level else None def _find_rolling_hour_center_index(self, all_prices: list, hour_offset: int) -> int | None: """Find the center index for the rolling hour window.""" @@ -851,7 +1035,7 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): """ Get the price rating level from the current price interval in priceInfo. - Returns the translated rating level as the main status, and stores the original + Returns the rating level enum value, and stores the original level and percentage difference as attributes. """ if not self.coordinator.data or rating_type != "current": @@ -869,7 +1053,8 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): if rating_level is not None: self._last_rating_difference = float(difference) if difference is not None else None self._last_rating_level = rating_level - return self._translate_rating_level(rating_level) + # Convert API rating (e.g., "NORMAL") to lowercase enum value (e.g., "normal") + return rating_level.lower() if rating_level else None self._last_rating_difference = None self._last_rating_level = None @@ -889,9 +1074,8 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): return None rating_level = interval_data.get("rating_level") - if rating_level is not None: - return self._translate_rating_level(rating_level) - return None + # Convert API rating to lowercase enum value + return rating_level.lower() if rating_level else None def _get_rolling_hour_rating_value(self, *, hour_offset: int) -> str | None: """Get aggregated price rating for a 5-interval rolling window.""" @@ -953,7 +1137,136 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): # Aggregate using average difference aggregated_rating, _avg_diff = aggregate_price_rating(differences, threshold_low, threshold_high) - return self._translate_rating_level(aggregated_rating) + # Convert API rating to lowercase enum value + return aggregated_rating.lower() if aggregated_rating else None + + def _get_next_avg_n_hours_value(self, *, hours: int) -> float | None: + """ + Get average price for next N hours starting from next interval. + + Args: + hours: Number of hours to look ahead (1, 2, 3, 4, 5, 6, 8, 12) + + Returns: + Average price in minor currency units (e.g., cents), or None if unavailable + + """ + avg_price = calculate_next_n_hours_avg(self.coordinator.data, hours) + if avg_price is None: + return None + + # Convert from major to minor currency units (e.g., EUR to cents) + return round(avg_price * 100, 2) + + def _get_price_trend_value(self, *, hours: int) -> str | None: + """ + Calculate price trend comparing current interval vs next N hours average. + + Args: + hours: Number of hours to look ahead for trend calculation + + Returns: + Trend state: "rising" | "falling" | "stable", or None if unavailable + + """ + if not self.coordinator.data: + return None + + # Get current interval price and timestamp + current_interval = self._get_current_interval_data() + if not current_interval or "total" not in current_interval: + return None + + current_price = float(current_interval["total"]) + current_starts_at = dt_util.parse_datetime(current_interval["startsAt"]) + if current_starts_at is None: + return None + current_starts_at = dt_util.as_local(current_starts_at) + + # Get next interval timestamp (basis for calculation) + next_interval_start = current_starts_at + timedelta(minutes=MINUTES_PER_INTERVAL) + + # Get future average price and detailed interval data + future_avg = calculate_next_n_hours_avg(self.coordinator.data, hours) + if future_avg is None: + return None + + # Calculate trend with 5% threshold + trend_state, diff_pct = calculate_price_trend(current_price, future_avg, threshold_pct=5.0) + + # Store attributes for extra_state_attributes + if not hasattr(self, "_attr_extra_state_attributes") or self._attr_extra_state_attributes is None: + self._attr_extra_state_attributes = {} + + # Core attributes + self._attr_extra_state_attributes["timestamp"] = next_interval_start.isoformat() + self._attr_extra_state_attributes[f"trend_{hours}h_percentage"] = round(diff_pct, 1) + self._attr_extra_state_attributes[f"future_avg_{hours}h"] = round(future_avg * 100, 2) + self._attr_extra_state_attributes["intervals_analyzed"] = hours * 4 + + # Calculate additional attributes for better granularity + if hours > MIN_HOURS_FOR_LATER_HALF: + # Get second half average for longer periods + later_half_avg = self._calculate_later_half_average(hours, next_interval_start) + if later_half_avg is not None: + self._attr_extra_state_attributes[f"later_half_avg_{hours}h"] = round(later_half_avg * 100, 2) + + # Calculate incremental change: how much does the later half differ from current? + if current_price > 0: + incremental_diff = ((later_half_avg - current_price) / current_price) * 100 + self._attr_extra_state_attributes["incremental_change"] = round(incremental_diff, 1) + + return trend_state + + def _calculate_later_half_average(self, hours: int, next_interval_start: datetime) -> float | None: + """ + Calculate average price for the later half of the future time window. + + This provides additional granularity by showing what happens in the second half + of the prediction window, helping distinguish between near-term and far-term trends. + + Args: + hours: Total hours in the prediction window + next_interval_start: Start timestamp of the next interval + + Returns: + Average price for the later half intervals, or None if insufficient data + + """ + if not self.coordinator.data: + return None + + price_info = self.coordinator.data.get("priceInfo", {}) + today_prices = price_info.get("today", []) + tomorrow_prices = price_info.get("tomorrow", []) + all_prices = today_prices + tomorrow_prices + + if not all_prices: + return None + + # Calculate which intervals belong to the later half + total_intervals = hours * 4 + first_half_intervals = total_intervals // 2 + later_half_start = next_interval_start + timedelta(minutes=MINUTES_PER_INTERVAL * first_half_intervals) + later_half_end = next_interval_start + timedelta(minutes=MINUTES_PER_INTERVAL * total_intervals) + + # Collect prices in the later half + later_prices = [] + for price_data in all_prices: + starts_at = dt_util.parse_datetime(price_data["startsAt"]) + if starts_at is None: + continue + starts_at = dt_util.as_local(starts_at) + + if later_half_start <= starts_at < later_half_end: + price = price_data.get("total") + if price is not None: + later_prices.append(float(price)) + + if later_prices: + return sum(later_prices) / len(later_prices) + + return None def _get_data_timestamp(self) -> datetime | None: """Get the latest data timestamp.""" @@ -1101,9 +1414,8 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): prices = [interval["price"] for interval in hour_data["intervals"]] if prices: hour_data["avg_price"] = sum(prices) / len(prices) - hour_data["avg_price_cents"] = hour_data["avg_price"] * 100 - hour_data["min_price_cents"] = hour_data["min_price"] * 100 - hour_data["max_price_cents"] = hour_data["max_price"] * 100 + hour_data["min_price"] = hour_data["min_price"] + hour_data["max_price"] = hour_data["max_price"] # Calculate average rating if ratings are available if hour_data["ratings_available"]: @@ -1157,15 +1469,13 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): # Add description from the custom translations file if self.entity_description.translation_key and self.hass is not None: - # Extract the base key (without _cents suffix if present) - base_key = self.entity_description.translation_key - base_key = base_key.removesuffix("_cents") - # Get user's language preference language = self.hass.config.language if self.hass.config.language else "en" # Add basic description - description = await async_get_entity_description(self.hass, "sensor", base_key, language, "description") + description = await async_get_entity_description( + self.hass, "sensor", self.entity_description.translation_key, language, "description" + ) if description: attributes["description"] = description @@ -1179,13 +1489,15 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): if extended_descriptions: # Add long description if available long_desc = await async_get_entity_description( - self.hass, "sensor", base_key, language, "long_description" + self.hass, "sensor", self.entity_description.translation_key, language, "long_description" ) if long_desc: attributes["long_description"] = long_desc # Add usage tips if available - usage_tips = await async_get_entity_description(self.hass, "sensor", base_key, language, "usage_tips") + usage_tips = await async_get_entity_description( + self.hass, "sensor", self.entity_description.translation_key, language, "usage_tips" + ) if usage_tips: attributes["usage_tips"] = usage_tips @@ -1208,15 +1520,12 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): # Add descriptions from the cache if available (non-blocking) if self.entity_description.translation_key and self.hass is not None: - # Extract the base key (without _cents suffix if present) - base_key = self.entity_description.translation_key - base_key = base_key.removesuffix("_cents") - # Get user's language preference language = self.hass.config.language if self.hass.config.language else "en" + translation_key = self.entity_description.translation_key # Add basic description from cache - description = get_entity_description("sensor", base_key, language, "description") + description = get_entity_description("sensor", translation_key, language, "description") if description: attributes["description"] = description @@ -1229,12 +1538,12 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): # Add extended descriptions if enabled (from cache only) if extended_descriptions: # Add long description if available in cache - long_desc = get_entity_description("sensor", base_key, language, "long_description") + long_desc = get_entity_description("sensor", translation_key, language, "long_description") if long_desc: attributes["long_description"] = long_desc # Add usage tips if available in cache - usage_tips = get_entity_description("sensor", base_key, language, "usage_tips") + usage_tips = get_entity_description("sensor", translation_key, language, "usage_tips") if usage_tips: attributes["usage_tips"] = usage_tips @@ -1249,6 +1558,14 @@ class TibberPricesSensor(TibberPricesEntity, SensorEntity): key = self.entity_description.key attributes = {} + # For trend sensors, merge _attr_extra_state_attributes first + if ( + key.startswith("price_trend_") + and hasattr(self, "_attr_extra_state_attributes") + and self._attr_extra_state_attributes + ): + attributes.update(self._attr_extra_state_attributes) + # Group sensors by type and delegate to specific handlers if key in [ "current_price", diff --git a/custom_components/tibber_prices/translations/de.json b/custom_components/tibber_prices/translations/de.json index b32cebe..6d7a853 100644 --- a/custom_components/tibber_prices/translations/de.json +++ b/custom_components/tibber_prices/translations/de.json @@ -127,86 +127,234 @@ }, "entity": { "sensor": { - "current_price_cents": { + "current_price": { "name": "Aktueller Strompreis" }, - "next_interval_price_cents": { + "next_interval_price": { "name": "Nächster Preis" }, - "previous_interval_price_cents": { + "previous_interval_price": { "name": "Vorheriger Preis" }, - "current_hour_average_cents": { + "current_hour_average": { "name": "Aktueller Stunden-Durchschnittspreis" }, - "next_hour_average_cents": { + "next_hour_average": { "name": "Nächster Stunden-Durchschnittspreis" }, "price_level": { - "name": "Aktuelles Preisniveau" + "name": "Aktuelles Preisniveau", + "state": { + "very_cheap": "Sehr günstig", + "cheap": "Günstig", + "normal": "Normal", + "expensive": "Teuer", + "very_expensive": "Sehr teuer" + } }, "next_interval_price_level": { - "name": "Nächstes Preisniveau" + "name": "Nächstes Preisniveau", + "state": { + "very_cheap": "Sehr günstig", + "cheap": "Günstig", + "normal": "Normal", + "expensive": "Teuer", + "very_expensive": "Sehr teuer" + } }, "previous_interval_price_level": { - "name": "Vorheriges Preisniveau" + "name": "Vorheriges Preisniveau", + "state": { + "very_cheap": "Sehr günstig", + "cheap": "Günstig", + "normal": "Normal", + "expensive": "Teuer", + "very_expensive": "Sehr teuer" + } }, "current_hour_price_level": { - "name": "Aktuelles Stunden-Preisniveau" + "name": "Aktuelles Stunden-Preisniveau", + "state": { + "very_cheap": "Sehr günstig", + "cheap": "Günstig", + "normal": "Normal", + "expensive": "Teuer", + "very_expensive": "Sehr teuer" + } }, "next_hour_price_level": { - "name": "Nächstes Stunden-Preisniveau" + "name": "Nächstes Stunden-Preisniveau", + "state": { + "very_cheap": "Sehr günstig", + "cheap": "Günstig", + "normal": "Normal", + "expensive": "Teuer", + "very_expensive": "Sehr teuer" + } }, - "lowest_price_today_cents": { + "lowest_price_today": { "name": "Mindestpreis heute" }, - "highest_price_today_cents": { + "highest_price_today": { "name": "Höchstpreis heute" }, - "average_price_today_cents": { + "average_price_today": { "name": "Durchschnittspreis heute" }, - "lowest_price_tomorrow_cents": { + "lowest_price_tomorrow": { "name": "Mindestpreis morgen" }, - "highest_price_tomorrow_cents": { + "highest_price_tomorrow": { "name": "Höchstpreis morgen" }, - "average_price_tomorrow_cents": { + "average_price_tomorrow": { "name": "Durchschnittspreis morgen" }, - "trailing_price_average_cents": { + "trailing_price_average": { "name": "Nachlaufender 24h-Durchschnittspreis" }, - "leading_price_average_cents": { + "leading_price_average": { "name": "Vorlaufender 24h-Durchschnittspreis" }, - "trailing_price_min_cents": { + "trailing_price_min": { "name": "Nachlaufender 24h-Mindestpreis" }, - "trailing_price_max_cents": { + "trailing_price_max": { "name": "Nachlaufender 24h-Höchstpreis" }, - "leading_price_min_cents": { + "leading_price_min": { "name": "Vorlaufender 24h-Mindestpreis" }, - "leading_price_max_cents": { + "leading_price_max": { "name": "Vorlaufender 24h-Höchstpreis" }, "price_rating": { - "name": "Aktuelle Preisbewertung" + "name": "Aktuelle Preisbewertung", + "state": { + "low": "Niedrig", + "normal": "Normal", + "high": "Hoch" + } }, "next_interval_price_rating": { - "name": "Nächste Preisbewertung" + "name": "Nächste Preisbewertung", + "state": { + "low": "Niedrig", + "normal": "Normal", + "high": "Hoch" + } }, "previous_interval_price_rating": { - "name": "Vorherige Preisbewertung" + "name": "Vorherige Preisbewertung", + "state": { + "low": "Niedrig", + "normal": "Normal", + "high": "Hoch" + } }, "current_hour_price_rating": { - "name": "Aktuelle Stunden-Preisbewertung" + "name": "Aktuelle Stunden-Preisbewertung", + "state": { + "low": "Niedrig", + "normal": "Normal", + "high": "Hoch" + } }, "next_hour_price_rating": { - "name": "Nächste Stunden-Preisbewertung" + "name": "Nächste Stunden-Preisbewertung", + "state": { + "low": "Niedrig", + "normal": "Normal", + "high": "Hoch" + } + }, + "next_avg_1h": { + "name": "Durchschnittspreis nächste 1h" + }, + "next_avg_2h": { + "name": "Durchschnittspreis nächste 2h" + }, + "next_avg_3h": { + "name": "Durchschnittspreis nächste 3h" + }, + "next_avg_4h": { + "name": "Durchschnittspreis nächste 4h" + }, + "next_avg_5h": { + "name": "Durchschnittspreis nächste 5h" + }, + "next_avg_6h": { + "name": "Durchschnittspreis nächste 6h" + }, + "next_avg_8h": { + "name": "Durchschnittspreis nächste 8h" + }, + "next_avg_12h": { + "name": "Durchschnittspreis nächste 12h" + }, + "price_trend_1h": { + "name": "Preistrend (1h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } + }, + "price_trend_2h": { + "name": "Preistrend (2h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } + }, + "price_trend_3h": { + "name": "Preistrend (3h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } + }, + "price_trend_4h": { + "name": "Preistrend (4h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } + }, + "price_trend_5h": { + "name": "Preistrend (5h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } + }, + "price_trend_6h": { + "name": "Preistrend (6h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } + }, + "price_trend_8h": { + "name": "Preistrend (8h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } + }, + "price_trend_12h": { + "name": "Preistrend (12h)", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "stable": "Stabil" + } }, "daily_rating": { "name": "Tägliche Preisbewertung" diff --git a/custom_components/tibber_prices/translations/en.json b/custom_components/tibber_prices/translations/en.json index 1f738d2..3b9a265 100644 --- a/custom_components/tibber_prices/translations/en.json +++ b/custom_components/tibber_prices/translations/en.json @@ -123,86 +123,234 @@ }, "entity": { "sensor": { - "current_price_cents": { + "current_price": { "name": "Current Electricity Price" }, - "next_interval_price_cents": { + "next_interval_price": { "name": "Next Price" }, - "previous_interval_price_cents": { + "previous_interval_price": { "name": "Previous Electricity Price" }, - "current_hour_average_cents": { + "current_hour_average": { "name": "Current Hour Average Price" }, - "next_hour_average_cents": { + "next_hour_average": { "name": "Next Hour Average Price" }, "price_level": { - "name": "Current Price Level" + "name": "Current Price Level", + "state": { + "very_cheap": "Very Cheap", + "cheap": "Cheap", + "normal": "Normal", + "expensive": "Expensive", + "very_expensive": "Very Expensive" + } }, "next_interval_price_level": { - "name": "Next Price Level" + "name": "Next Price Level", + "state": { + "very_cheap": "Very Cheap", + "cheap": "Cheap", + "normal": "Normal", + "expensive": "Expensive", + "very_expensive": "Very Expensive" + } }, "previous_interval_price_level": { - "name": "Previous Price Level" + "name": "Previous Price Level", + "state": { + "very_cheap": "Very Cheap", + "cheap": "Cheap", + "normal": "Normal", + "expensive": "Expensive", + "very_expensive": "Very Expensive" + } }, "current_hour_price_level": { - "name": "Current Hour Price Level" + "name": "Current Hour Price Level", + "state": { + "very_cheap": "Very Cheap", + "cheap": "Cheap", + "normal": "Normal", + "expensive": "Expensive", + "very_expensive": "Very Expensive" + } }, "next_hour_price_level": { - "name": "Next Hour Price Level" + "name": "Next Hour Price Level", + "state": { + "very_cheap": "Very Cheap", + "cheap": "Cheap", + "normal": "Normal", + "expensive": "Expensive", + "very_expensive": "Very Expensive" + } }, - "lowest_price_today_cents": { + "lowest_price_today": { "name": "Today's Lowest Price" }, - "highest_price_today_cents": { + "highest_price_today": { "name": "Today's Highest Price" }, - "average_price_today_cents": { + "average_price_today": { "name": "Today's Average Price" }, - "lowest_price_tomorrow_cents": { + "lowest_price_tomorrow": { "name": "Tomorrow's Lowest Price" }, - "highest_price_tomorrow_cents": { + "highest_price_tomorrow": { "name": "Tomorrow's Highest Price" }, - "average_price_tomorrow_cents": { + "average_price_tomorrow": { "name": "Tomorrow's Average Price" }, - "trailing_price_average_cents": { + "trailing_price_average": { "name": "Trailing 24h Average Price" }, - "leading_price_average_cents": { + "leading_price_average": { "name": "Leading 24h Average Price" }, - "trailing_price_min_cents": { + "trailing_price_min": { "name": "Trailing 24h Minimum Price" }, - "trailing_price_max_cents": { + "trailing_price_max": { "name": "Trailing 24h Maximum Price" }, - "leading_price_min_cents": { + "leading_price_min": { "name": "Leading 24h Minimum Price" }, - "leading_price_max_cents": { + "leading_price_max": { "name": "Leading 24h Maximum Price" }, "price_rating": { - "name": "Current Price Rating" + "name": "Current Price Rating", + "state": { + "low": "Low", + "normal": "Normal", + "high": "High" + } }, "next_interval_price_rating": { - "name": "Next Price Rating" + "name": "Next Price Rating", + "state": { + "low": "Low", + "normal": "Normal", + "high": "High" + } }, "previous_interval_price_rating": { - "name": "Previous Price Rating" + "name": "Previous Price Rating", + "state": { + "low": "Low", + "normal": "Normal", + "high": "High" + } }, "current_hour_price_rating": { - "name": "Current Hour Price Rating" + "name": "Current Hour Price Rating", + "state": { + "low": "Low", + "normal": "Normal", + "high": "High" + } }, "next_hour_price_rating": { - "name": "Next Hour Price Rating" + "name": "Next Hour Price Rating", + "state": { + "low": "Low", + "normal": "Normal", + "high": "High" + } + }, + "next_avg_1h": { + "name": "Next 1h Average Price" + }, + "next_avg_2h": { + "name": "Next 2h Average Price" + }, + "next_avg_3h": { + "name": "Next 3h Average Price" + }, + "next_avg_4h": { + "name": "Next 4h Average Price" + }, + "next_avg_5h": { + "name": "Next 5h Average Price" + }, + "next_avg_6h": { + "name": "Next 6h Average Price" + }, + "next_avg_8h": { + "name": "Next 8h Average Price" + }, + "next_avg_12h": { + "name": "Next 12h Average Price" + }, + "price_trend_1h": { + "name": "Price Trend (1h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } + }, + "price_trend_2h": { + "name": "Price Trend (2h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } + }, + "price_trend_3h": { + "name": "Price Trend (3h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } + }, + "price_trend_4h": { + "name": "Price Trend (4h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } + }, + "price_trend_5h": { + "name": "Price Trend (5h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } + }, + "price_trend_6h": { + "name": "Price Trend (6h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } + }, + "price_trend_8h": { + "name": "Price Trend (8h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } + }, + "price_trend_12h": { + "name": "Price Trend (12h)", + "state": { + "rising": "Rising", + "falling": "Falling", + "stable": "Stable" + } }, "daily_rating": { "name": "Daily Price Rating" diff --git a/custom_components/tibber_prices/translations/nb.json b/custom_components/tibber_prices/translations/nb.json index 4da4495..82b3690 100644 --- a/custom_components/tibber_prices/translations/nb.json +++ b/custom_components/tibber_prices/translations/nb.json @@ -123,86 +123,234 @@ }, "entity": { "sensor": { - "current_price_cents": { - "name": "Gjeldende Strømpris" + "current_price": { + "name": "Gjeldende strømpris" }, - "next_interval_price_cents": { - "name": "Neste Pris" + "next_interval_price": { + "name": "Neste pris" }, - "previous_interval_price_cents": { - "name": "Forrige Strømpris" + "previous_interval_price": { + "name": "Forrige pris" }, - "current_hour_average_cents": { - "name": "Gjeldende Time Gjennomsnittspris" + "current_hour_average": { + "name": "Gjeldende time gjennomsnittspris" }, - "next_hour_average_cents": { - "name": "Neste Time Gjennomsnittspris" + "next_hour_average": { + "name": "Neste time gjennomsnittspris" }, "price_level": { - "name": "Gjeldende Prisnivå" + "name": "Gjeldende Prisnivå", + "state": { + "very_cheap": "Veldig billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Veldig dyr" + } }, "next_interval_price_level": { - "name": "Neste Prisnivå" + "name": "Neste Prisnivå", + "state": { + "very_cheap": "Veldig billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Veldig dyr" + } }, "previous_interval_price_level": { - "name": "Forrige Prisnivå" + "name": "Forrige Prisnivå", + "state": { + "very_cheap": "Veldig billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Veldig dyr" + } }, "current_hour_price_level": { - "name": "Gjeldende Time Prisnivå" + "name": "Gjeldende Time Prisnivå", + "state": { + "very_cheap": "Veldig billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Veldig dyr" + } }, "next_hour_price_level": { - "name": "Neste Time Prisnivå" + "name": "Neste Time Prisnivå", + "state": { + "very_cheap": "Veldig billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Veldig dyr" + } }, - "lowest_price_today_cents": { - "name": "Laveste Pris I Dag" + "lowest_price_today": { + "name": "Laveste pris i dag" }, - "highest_price_today_cents": { - "name": "Høyeste Pris I Dag" + "highest_price_today": { + "name": "Høyeste pris i dag" }, - "average_price_today_cents": { - "name": "Gjennomsnittspris I Dag" + "average_price_today": { + "name": "Gjennomsnittspris i dag" }, - "lowest_price_tomorrow_cents": { - "name": "Laveste Pris I Morgen" + "lowest_price_tomorrow": { + "name": "Laveste pris i morgen" }, - "highest_price_tomorrow_cents": { - "name": "Høyeste Pris I Morgen" + "highest_price_tomorrow": { + "name": "Høyeste pris i morgen" }, - "average_price_tomorrow_cents": { - "name": "Gjennomsnittspris I Morgen" + "average_price_tomorrow": { + "name": "Gjennomsnittspris i morgen" }, - "trailing_price_average_cents": { - "name": "Rullerende 24t Gjennomsnittspris" + "trailing_price_average": { + "name": "Etterfølgende 24t gjennomsnittspris" }, - "leading_price_average_cents": { - "name": "Fremtidig 24t Gjennomsnittspris" + "leading_price_average": { + "name": "Fremadrettede 24t gjennomsnittspris" }, - "trailing_price_min_cents": { - "name": "Rullerende 24t Minimumspris" + "trailing_price_min": { + "name": "Etterfølgende 24t minimumspris" }, - "trailing_price_max_cents": { - "name": "Rullerende 24t Maksimumspris" + "trailing_price_max": { + "name": "Etterfølgende 24t maksimumspris" }, - "leading_price_min_cents": { - "name": "Fremtidig 24t Minimumspris" + "leading_price_min": { + "name": "Fremadrettede 24t minimumspris" }, - "leading_price_max_cents": { - "name": "Fremtidig 24t Maksimumspris" + "leading_price_max": { + "name": "Fremadrettede 24t maksimumspris" }, "price_rating": { - "name": "Gjeldende Prisvurdering" + "name": "Gjeldende Prisvurdering", + "state": { + "low": "Lav", + "normal": "Normal", + "high": "Høy" + } }, "next_interval_price_rating": { - "name": "Neste Prisvurdering" + "name": "Neste Prisvurdering", + "state": { + "low": "Lav", + "normal": "Normal", + "high": "Høy" + } }, "previous_interval_price_rating": { - "name": "Forrige Prisvurdering" + "name": "Forrige Prisvurdering", + "state": { + "low": "Lav", + "normal": "Normal", + "high": "Høy" + } }, "current_hour_price_rating": { - "name": "Gjeldende Time Prisvurdering" + "name": "Gjeldende Time Prisvurdering", + "state": { + "low": "Lav", + "normal": "Normal", + "high": "Høy" + } }, "next_hour_price_rating": { - "name": "Neste Time Prisvurdering" + "name": "Neste Time Prisvurdering", + "state": { + "low": "Lav", + "normal": "Normal", + "high": "Høy" + } + }, + "next_avg_1h": { + "name": "Gjennomsnittspris neste 1t" + }, + "next_avg_2h": { + "name": "Gjennomsnittspris neste 2t" + }, + "next_avg_3h": { + "name": "Gjennomsnittspris neste 3t" + }, + "next_avg_4h": { + "name": "Gjennomsnittspris neste 4t" + }, + "next_avg_5h": { + "name": "Gjennomsnittspris neste 5t" + }, + "next_avg_6h": { + "name": "Gjennomsnittspris neste 6t" + }, + "next_avg_8h": { + "name": "Gjennomsnittspris neste 8t" + }, + "next_avg_12h": { + "name": "Gjennomsnittspris neste 12t" + }, + "price_trend_1h": { + "name": "Pristrend (1t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } + }, + "price_trend_2h": { + "name": "Pristrend (2t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } + }, + "price_trend_3h": { + "name": "Pristrend (3t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } + }, + "price_trend_4h": { + "name": "Pristrend (4t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } + }, + "price_trend_5h": { + "name": "Pristrend (5t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } + }, + "price_trend_6h": { + "name": "Pristrend (6t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } + }, + "price_trend_8h": { + "name": "Pristrend (8t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } + }, + "price_trend_12h": { + "name": "Pristrend (12t)", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "stable": "Stabil" + } }, "daily_rating": { "name": "Daglig Prisvurdering" diff --git a/custom_components/tibber_prices/translations/nl.json b/custom_components/tibber_prices/translations/nl.json index fcf8838..72bd0ce 100644 --- a/custom_components/tibber_prices/translations/nl.json +++ b/custom_components/tibber_prices/translations/nl.json @@ -123,86 +123,234 @@ }, "entity": { "sensor": { - "current_price_cents": { - "name": "Huidige Elektriciteitsprijs" + "current_price": { + "name": "Huidige elektriciteitsprijs" }, - "next_interval_price_cents": { - "name": "Volgende Prijs" + "next_interval_price": { + "name": "Volgende prijs" }, - "previous_interval_price_cents": { - "name": "Vorige Elektriciteitsprijs" + "previous_interval_price": { + "name": "Vorige prijs" }, - "current_hour_average_cents": { - "name": "Huidige Uur Gemiddelde Prijs" + "current_hour_average": { + "name": "Huidige uur gemiddelde prijs" }, - "next_hour_average_cents": { - "name": "Volgende Uur Gemiddelde Prijs" + "next_hour_average": { + "name": "Volgend uur gemiddelde prijs" }, "price_level": { - "name": "Huidig Prijsniveau" + "name": "Huidig Prijsniveau", + "state": { + "very_cheap": "Zeer goedkoop", + "cheap": "Goedkoop", + "normal": "Normaal", + "expensive": "Duur", + "very_expensive": "Zeer duur" + } }, "next_interval_price_level": { - "name": "Volgend Prijsniveau" + "name": "Volgend Prijsniveau", + "state": { + "very_cheap": "Zeer goedkoop", + "cheap": "Goedkoop", + "normal": "Normaal", + "expensive": "Duur", + "very_expensive": "Zeer duur" + } }, "previous_interval_price_level": { - "name": "Vorig Prijsniveau" + "name": "Vorig Prijsniveau", + "state": { + "very_cheap": "Zeer goedkoop", + "cheap": "Goedkoop", + "normal": "Normaal", + "expensive": "Duur", + "very_expensive": "Zeer duur" + } }, "current_hour_price_level": { - "name": "Huidig Uur Prijsniveau" + "name": "Huidig Uur Prijsniveau", + "state": { + "very_cheap": "Zeer goedkoop", + "cheap": "Goedkoop", + "normal": "Normaal", + "expensive": "Duur", + "very_expensive": "Zeer duur" + } }, "next_hour_price_level": { - "name": "Volgend Uur Prijsniveau" + "name": "Volgend Uur Prijsniveau", + "state": { + "very_cheap": "Zeer goedkoop", + "cheap": "Goedkoop", + "normal": "Normaal", + "expensive": "Duur", + "very_expensive": "Zeer duur" + } }, - "lowest_price_today_cents": { - "name": "Laagste Prijs Vandaag" + "lowest_price_today": { + "name": "Laagste prijs vandaag" }, - "highest_price_today_cents": { - "name": "Hoogste Prijs Vandaag" + "highest_price_today": { + "name": "Hoogste prijs vandaag" }, - "average_price_today_cents": { - "name": "Gemiddelde Prijs Vandaag" + "average_price_today": { + "name": "Gemiddelde prijs vandaag" }, - "lowest_price_tomorrow_cents": { - "name": "Laagste Prijs Morgen" + "lowest_price_tomorrow": { + "name": "Laagste prijs morgen" }, - "highest_price_tomorrow_cents": { - "name": "Hoogste Prijs Morgen" + "highest_price_tomorrow": { + "name": "Hoogste prijs morgen" }, - "average_price_tomorrow_cents": { - "name": "Gemiddelde Prijs Morgen" + "average_price_tomorrow": { + "name": "Gemiddelde prijs morgen" }, - "trailing_price_average_cents": { - "name": "Voortschrijdend 24u Gemiddelde Prijs" + "trailing_price_average": { + "name": "Volgend 24u gemiddelde prijs" }, - "leading_price_average_cents": { - "name": "Vooruitlopend 24u Gemiddelde Prijs" + "leading_price_average": { + "name": "Toonaangevend 24u gemiddelde prijs" }, - "trailing_price_min_cents": { - "name": "Voortschrijdend 24u Minimumprijs" + "trailing_price_min": { + "name": "Volgend 24u minimumprijs" }, - "trailing_price_max_cents": { - "name": "Voortschrijdend 24u Maximumprijs" + "trailing_price_max": { + "name": "Volgend 24u maximumprijs" }, - "leading_price_min_cents": { - "name": "Vooruitlopend 24u Minimumprijs" + "leading_price_min": { + "name": "Toonaangevend 24u minimumprijs" }, - "leading_price_max_cents": { - "name": "Vooruitlopend 24u Maximumprijs" + "leading_price_max": { + "name": "Toonaangevend 24u maximumprijs" }, "price_rating": { - "name": "Huidige Prijsbeoordeling" + "name": "Huidige Prijsbeoordeling", + "state": { + "low": "Laag", + "normal": "Normaal", + "high": "Hoog" + } }, "next_interval_price_rating": { - "name": "Volgende Prijsbeoordeling" + "name": "Volgende Prijsbeoordeling", + "state": { + "low": "Laag", + "normal": "Normaal", + "high": "Hoog" + } }, "previous_interval_price_rating": { - "name": "Vorige Prijsbeoordeling" + "name": "Vorige Prijsbeoordeling", + "state": { + "low": "Laag", + "normal": "Normaal", + "high": "Hoog" + } }, "current_hour_price_rating": { - "name": "Huidig Uur Prijsbeoordeling" + "name": "Huidig Uur Prijsbeoordeling", + "state": { + "low": "Laag", + "normal": "Normaal", + "high": "Hoog" + } }, "next_hour_price_rating": { - "name": "Volgend Uur Prijsbeoordeling" + "name": "Volgend Uur Prijsbeoordeling", + "state": { + "low": "Laag", + "normal": "Normaal", + "high": "Hoog" + } + }, + "next_avg_1h": { + "name": "Gemiddelde Prijs Volgende 1u" + }, + "next_avg_2h": { + "name": "Gemiddelde Prijs Volgende 2u" + }, + "next_avg_3h": { + "name": "Gemiddelde Prijs Volgende 3u" + }, + "next_avg_4h": { + "name": "Gemiddelde Prijs Volgende 4u" + }, + "next_avg_5h": { + "name": "Gemiddelde Prijs Volgende 5u" + }, + "next_avg_6h": { + "name": "Gemiddelde Prijs Volgende 6u" + }, + "next_avg_8h": { + "name": "Gemiddelde Prijs Volgende 8u" + }, + "next_avg_12h": { + "name": "Gemiddelde Prijs Volgende 12u" + }, + "price_trend_1h": { + "name": "Prijstrend (1u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } + }, + "price_trend_2h": { + "name": "Prijstrend (2u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } + }, + "price_trend_3h": { + "name": "Prijstrend (3u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } + }, + "price_trend_4h": { + "name": "Prijstrend (4u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } + }, + "price_trend_5h": { + "name": "Prijstrend (5u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } + }, + "price_trend_6h": { + "name": "Prijstrend (6u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } + }, + "price_trend_8h": { + "name": "Prijstrend (8u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } + }, + "price_trend_12h": { + "name": "Prijstrend (12u)", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "stable": "Stabiel" + } }, "daily_rating": { "name": "Dagelijkse Prijsbeoordeling" diff --git a/custom_components/tibber_prices/translations/sv.json b/custom_components/tibber_prices/translations/sv.json index 8b269fa..ed0ed3e 100644 --- a/custom_components/tibber_prices/translations/sv.json +++ b/custom_components/tibber_prices/translations/sv.json @@ -123,86 +123,234 @@ }, "entity": { "sensor": { - "current_price_cents": { - "name": "Aktuellt Elpris" + "current_price": { + "name": "Aktuellt elpris" }, - "next_interval_price_cents": { - "name": "Nästa Pris" + "next_interval_price": { + "name": "Nästa pris" }, - "previous_interval_price_cents": { - "name": "Föregående Elpris" + "previous_interval_price": { + "name": "Föregående pris" }, - "current_hour_average_cents": { - "name": "Aktuell Timme Genomsnittspris" + "current_hour_average": { + "name": "Aktuellt tim-genomsnittspris" }, - "next_hour_average_cents": { - "name": "Nästa Timme Genomsnittspris" + "next_hour_average": { + "name": "Nästa tim-genomsnittspris" }, "price_level": { - "name": "Aktuell Prisnivå" + "name": "Aktuell Prisnivå", + "state": { + "very_cheap": "Mycket billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Mycket dyr" + } }, "next_interval_price_level": { - "name": "Nästa Prisnivå" + "name": "Nästa Prisnivå", + "state": { + "very_cheap": "Mycket billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Mycket dyr" + } }, "previous_interval_price_level": { - "name": "Föregående Prisnivå" + "name": "Föregående Prisnivå", + "state": { + "very_cheap": "Mycket billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Mycket dyr" + } }, "current_hour_price_level": { - "name": "Aktuell Timme Prisnivå" + "name": "Aktuell Timme Prisnivå", + "state": { + "very_cheap": "Mycket billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Mycket dyr" + } }, "next_hour_price_level": { - "name": "Nästa Timme Prisnivå" + "name": "Nästa Timme Prisnivå", + "state": { + "very_cheap": "Mycket billig", + "cheap": "Billig", + "normal": "Normal", + "expensive": "Dyr", + "very_expensive": "Mycket dyr" + } }, - "lowest_price_today_cents": { - "name": "Lägsta Pris Idag" + "lowest_price_today": { + "name": "Lägsta pris idag" }, - "highest_price_today_cents": { - "name": "Högsta Pris Idag" + "highest_price_today": { + "name": "Högsta pris idag" }, - "average_price_today_cents": { - "name": "Genomsnittspris Idag" + "average_price_today": { + "name": "Genomsnittspris idag" }, - "lowest_price_tomorrow_cents": { - "name": "Lägsta Pris Imorgon" + "lowest_price_tomorrow": { + "name": "Lägsta pris imorgon" }, - "highest_price_tomorrow_cents": { - "name": "Högsta Pris Imorgon" + "highest_price_tomorrow": { + "name": "Högsta pris imorgon" }, - "average_price_tomorrow_cents": { - "name": "Genomsnittspris Imorgon" + "average_price_tomorrow": { + "name": "Genomsnittspris imorgon" }, - "trailing_price_average_cents": { - "name": "Rullande 24t Genomsnittspris" + "trailing_price_average": { + "name": "Efterföljande 24t genomsnittspris" }, - "leading_price_average_cents": { - "name": "Framåtblickande 24t Genomsnittspris" + "leading_price_average": { + "name": "Framåtriktad 24t genomsnittspris" }, - "trailing_price_min_cents": { - "name": "Rullande 24t Minimumpris" + "trailing_price_min": { + "name": "Efterföljande 24t minimumpris" }, - "trailing_price_max_cents": { - "name": "Rullande 24t Maximumpris" + "trailing_price_max": { + "name": "Efterföljande 24t maximumpris" }, - "leading_price_min_cents": { - "name": "Framåtblickande 24t Minimumpris" + "leading_price_min": { + "name": "Framåtriktad 24t minimumpris" }, - "leading_price_max_cents": { - "name": "Framåtblickande 24t Maximumpris" + "leading_price_max": { + "name": "Framåtriktad 24t maximumpris" }, "price_rating": { - "name": "Aktuellt Prisbetyg" + "name": "Aktuellt Prisbetyg", + "state": { + "low": "Låg", + "normal": "Normal", + "high": "Hög" + } }, "next_interval_price_rating": { - "name": "Nästa Prisbetyg" + "name": "Nästa Prisbetyg", + "state": { + "low": "Låg", + "normal": "Normal", + "high": "Hög" + } }, "previous_interval_price_rating": { - "name": "Föregående Prisbetyg" + "name": "Föregående Prisbetyg", + "state": { + "low": "Låg", + "normal": "Normal", + "high": "Hög" + } }, "current_hour_price_rating": { - "name": "Aktuell Timme Prisbetyg" + "name": "Aktuell Timme Prisbetyg", + "state": { + "low": "Låg", + "normal": "Normal", + "high": "Hög" + } }, "next_hour_price_rating": { - "name": "Nästa Timme Prisbetyg" + "name": "Nästa Timme Prisbetyg", + "state": { + "low": "Låg", + "normal": "Normal", + "high": "Hög" + } + }, + "next_avg_1h": { + "name": "Genomsnittspris Nästa 1h" + }, + "next_avg_2h": { + "name": "Genomsnittspris Nästa 2h" + }, + "next_avg_3h": { + "name": "Genomsnittspris Nästa 3h" + }, + "next_avg_4h": { + "name": "Genomsnittspris Nästa 4h" + }, + "next_avg_5h": { + "name": "Genomsnittspris Nästa 5h" + }, + "next_avg_6h": { + "name": "Genomsnittspris Nästa 6h" + }, + "next_avg_8h": { + "name": "Genomsnittspris Nästa 8h" + }, + "next_avg_12h": { + "name": "Genomsnittspris Nästa 12h" + }, + "price_trend_1h": { + "name": "Pristrend (1h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } + }, + "price_trend_2h": { + "name": "Pristrend (2h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } + }, + "price_trend_3h": { + "name": "Pristrend (3h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } + }, + "price_trend_4h": { + "name": "Pristrend (4h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } + }, + "price_trend_5h": { + "name": "Pristrend (5h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } + }, + "price_trend_6h": { + "name": "Pristrend (6h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } + }, + "price_trend_8h": { + "name": "Pristrend (8h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } + }, + "price_trend_12h": { + "name": "Pristrend (12h)", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "stable": "Stabil" + } }, "daily_rating": { "name": "Dagligt Prisbetyg"