diff --git a/custom_components/tibber_prices/custom_translations/de.json b/custom_components/tibber_prices/custom_translations/de.json
index 2c68e71..309b48a 100644
--- a/custom_components/tibber_prices/custom_translations/de.json
+++ b/custom_components/tibber_prices/custom_translations/de.json
@@ -274,32 +274,32 @@
},
"price_trajectory_3h": {
"description": "Preisverlauf innerhalb des nächsten 3-Stunden-Fensters",
- "long_description": "Compares the average of the first 1.5 hours with the average of the second 1.5 hours within the next 3-hour window. 'rising' = prices are climbing over the 3h window; 'falling' = prices are dropping. Reveals the direction of price movement independent of the current price level. Rising/falling at ±3%, strongly at ±9% (configurable, volatility-adaptive).",
+ "long_description": "Vergleicht den Durchschnitt der ersten 1,5 Stunden mit dem Durchschnitt der zweiten 1,5 Stunden innerhalb des nächsten 3-Stunden-Fensters. 'rising' = die Preise steigen über das 3-Stunden-Fenster; 'falling' = die Preise fallen. Zeigt die Richtung der Preisbewegung unabhängig vom aktuellen Preisniveau. Steigend/fallend bei ±3 %, stark bei ±9 % (konfigurierbar, volatilitätsabhängig).",
"usage_tips": "Appliance timing: 'outlook: strongly_falling + trajectory: rising' = you're at or past the minimum, the window average is low but prices are already recovering — start now."
},
"price_trajectory_4h": {
"description": "Preisverlauf innerhalb des nächsten 4-Stunden-Fensters",
- "long_description": "Compares the average of the first 2 hours with the average of the second 2 hours within the next 4-hour window. 'rising' = prices are climbing over the 4h window; 'falling' = prices are dropping. Complementary to price_outlook_4h: outlook answers 'is NOW cheap vs the window average?', trajectory answers 'are prices rising or falling within the window?'. Rising/falling at ±3%, strongly at ±9% (configurable, volatility-adaptive).",
+ "long_description": "Vergleicht den Durchschnitt der ersten 2 Stunden mit dem Durchschnitt der zweiten 2 Stunden innerhalb des nächsten 4-Stunden-Fensters. 'rising' = die Preise steigen über das 4-Stunden-Fenster; 'falling' = die Preise fallen. Ergänzend zu price_outlook_4h: outlook beantwortet 'ist JETZT günstig gegenüber dem Fensterdurchschnitt?', trajectory beantwortet 'steigen oder fallen die Preise innerhalb des Fensters?'. Steigend/fallend bei ±3 %, stark bei ±9 % (konfigurierbar, volatilitätsabhängig).",
"usage_tips": "Heat pump charging: 'rising' = first half window is cheaper, charge now before prices climb. 'falling' = second half window is cheaper, wait if you can. Combine with outlook: if both rising, very strong signal to act now."
},
"price_trajectory_5h": {
"description": "Preisverlauf innerhalb des nächsten 5-Stunden-Fensters",
- "long_description": "Compares the average of the first 2.5 hours with the average of the second 2.5 hours within the next 5-hour window. 'rising' = prices are climbing over the 5h window; 'falling' = prices are dropping. Rising/falling at ±3%, strongly at ±9% (configurable, volatility-adaptive).",
+ "long_description": "Vergleicht den Durchschnitt der ersten 2,5 Stunden mit dem Durchschnitt der zweiten 2,5 Stunden innerhalb des nächsten 5-Stunden-Fensters. 'rising' = die Preise steigen über das 5-Stunden-Fenster; 'falling' = die Preise fallen. Steigend/fallend bei ±3 %, stark bei ±9 % (konfigurierbar, volatilitätsabhängig).",
"usage_tips": "Eco/long cycles: 'outlook: rising + trajectory: rising' = clear signal to start now. 'outlook: falling + trajectory: rising' = you're near the bottom, good time to start before costs climb."
},
"price_trajectory_6h": {
"description": "Preisverlauf innerhalb des nächsten 6-Stunden-Fensters",
- "long_description": "Compares the average of the first 3 hours with the average of the second 3 hours within the next 6-hour window. 'rising' = prices are climbing over the 6h window; 'falling' = prices are dropping. Rising/falling at ±3%, strongly at ±9% (configurable, volatility-adaptive).",
+ "long_description": "Vergleicht den Durchschnitt der ersten 3 Stunden mit dem Durchschnitt der zweiten 3 Stunden innerhalb des nächsten 6-Stunden-Fensters. 'rising' = die Preise steigen über das 6-Stunden-Fenster; 'falling' = die Preise fallen. Steigend/fallend bei ±3 %, stark bei ±9 % (konfigurierbar, volatilitätsabhängig).",
"usage_tips": "Evening/overnight planning: 'falling' at evening peak = overnight will be cheaper, postpone. 'rising' in the morning = current morning prices are the day's low — good time for high consumption."
},
"price_trajectory_8h": {
"description": "Preisverlauf innerhalb des nächsten 8-Stunden-Fensters",
- "long_description": "Compares the average of the first 4 hours with the average of the second 4 hours within the next 8-hour window. 'rising' = prices are climbing over the 8h window; 'falling' = prices are dropping. Rising/falling at ±3%, strongly at ±9% (configurable, volatility-adaptive).",
+ "long_description": "Vergleicht den Durchschnitt der ersten 4 Stunden mit dem Durchschnitt der zweiten 4 Stunden innerhalb des nächsten 8-Stunden-Fensters. 'rising' = die Preise steigen über das 8-Stunden-Fenster; 'falling' = die Preise fallen. Steigend/fallend bei ±3 %, stark bei ±9 % (konfigurierbar, volatilitätsabhängig).",
"usage_tips": "Overnight charging: 'rising' during evening = first half of night is cheapest, start charging earlier. 'falling' = second half of night will be cheapest, delay start."
},
"price_trajectory_12h": {
"description": "Preisverlauf innerhalb des nächsten 12-Stunden-Fensters",
- "long_description": "Compares the average of the first 6 hours with the average of the second 6 hours within the next 12-hour window. 'rising' = prices are climbing over the 12h window; 'falling' = prices are dropping. Rising/falling at ±3%, strongly at ±9% (configurable, volatility-adaptive).",
+ "long_description": "Vergleicht den Durchschnitt der ersten 6 Stunden mit dem Durchschnitt der zweiten 6 Stunden innerhalb des nächsten 12-Stunden-Fensters. 'rising' = die Preise steigen über das 12-Stunden-Fenster; 'falling' = die Preise fallen. Steigend/fallend bei ±3 %, stark bei ±9 % (konfigurierbar, volatilitätsabhängig).",
"usage_tips": "Day-ahead planning: 'rising' at midnight = first half of day is cheaper, schedule morning loads. 'falling' = prices drop in the second part of the day, afternoon/evening scheduling is better."
},
"current_price_trend": {
@@ -512,54 +512,54 @@
"usage_tips": "Nutzen in Automationen: 'Wenn next_price_phase = steigend und next_price_phase.start in weniger als 1 Stunde, Waschmaschine jetzt starten'. Oder kombiniere mit current_price_phase: 'Wenn current_price_phase = fallend und next_price_phase = flach, nähern wir uns dem Tagestiefpunkt – guter Zeitpunkt für flexible Lasten'. Das Attribut start ist besonders wertvoll: Automationen können exakt dann ausgelöst werden, wenn die nächste Phase beginnt."
},
"current_price_phase_end_time": {
- "description": "When the current intra-day price phase ends",
- "long_description": "Shows the exact timestamp when the currently active rising, falling, or flat price phase will end and transition to the next phase.",
- "usage_tips": "Use in automations to schedule tasks that must finish before prices change."
+ "description": "Wann die aktuelle Preisphase endet",
+ "long_description": "Zeigt den genauen Zeitstempel, wann die aktuell aktive steigende, fallende oder flache Preisphase endet und in die nächste Phase übergeht. Wird nicht verfügbar, wenn keine Segmentdaten vorliegen. Aktualisiert sich an Intervallgrenzen (alle 15 Minuten). Kombiniere mit current_price_phase, um sowohl die aktuelle Phase als auch deren Ende zu kennen.",
+ "usage_tips": "Nutze es in Automationen, um Aufgaben zu planen, die vor einer Preisänderung abgeschlossen sein müssen: 'Starte die Waschmaschine, wenn current_price_phase = falling und current_price_phase_end_time mehr als 2 Stunden entfernt ist'. Oder um zu warnen, wenn eine günstige Phase bald endet."
},
"current_price_phase_remaining_minutes": {
- "description": "Minutes remaining in the current price phase",
- "long_description": "Shows how many minutes are left in the current intra-day price phase. Updates every minute.",
- "usage_tips": "Use in automations: 'If current_price_phase = falling and remaining < 30, start the dishwasher now'."
+ "description": "Verbleibende Minuten in der aktuellen Preisphase",
+ "long_description": "Zeigt, wie viele Minuten in der aktuellen Preisphase (steigend, fallend oder flach) noch übrig sind. Aktualisiert sich jede Minute für präzise Countdowns. Gibt 0 zurück, wenn keine Segmentdaten vorliegen. Das Attribut remaining_minutes spiegelt den Sensorwert in ganzen Minuten für einfachere Automations-Templates wider.",
+ "usage_tips": "Nutze es in Automationen: 'Wenn current_price_phase = falling und current_price_phase_remaining_minutes < 30, starte jetzt den Geschirrspüler, bevor sich die Preise stabilisieren'. Auch nützlich für Dashboard-Karten mit einem Countdown-Balken bis zum Phasenwechsel."
},
"current_price_phase_duration": {
- "description": "Total duration of the current price phase",
- "long_description": "Shows the total length of the currently active price phase in hours.",
- "usage_tips": "Combine with remaining minutes to understand how far through the phase you are."
+ "description": "Gesamtdauer der aktuellen Preisphase",
+ "long_description": "Zeigt die Gesamtlänge der aktuell aktiven Preisphase in Stunden (intern in Minuten ausgedrückt). Aktualisiert sich an Intervallgrenzen. Das zeigt dir, wie lange das aktuelle Trendsegment insgesamt dauert — nützlich, um zu verstehen, ob es eine kurze Schwankung oder eine längere Phase steigender oder fallender Preise ist.",
+ "usage_tips": "Kombiniere mit current_price_phase_remaining_minutes, um abzuschätzen, wie weit du in der Phase bist, oder vergleiche mit current_price_phase_progress, um das Zeitprofil des aktuellen Trends zu verstehen."
},
"current_price_phase_progress": {
- "description": "How far through the current price phase we are",
- "long_description": "Shows the percentage of the current intra-day price phase that has elapsed (0–100%). Updates every minute.",
- "usage_tips": "Use in dashboard cards to display a visual progress bar for the current price phase."
+ "description": "Wie weit die aktuelle Preisphase fortgeschritten ist",
+ "long_description": "Zeigt den Prozentsatz der aktuellen Preisphase, der bereits verstrichen ist (0–100 %). Aktualisiert sich jede Minute. Ein Wert nahe 0 % bedeutet, dass die Phase gerade begonnen hat; nahe 100 % bedeutet, dass sie bald endet. Gibt 0 zurück, wenn keine Segmentdaten vorliegen.",
+ "usage_tips": "Nutze es in Dashboard-Karten, um einen visuellen Fortschrittsbalken für die aktuelle Preisphase anzuzeigen. In Automationen: 'Wenn current_price_phase = falling und current_price_phase_progress > 80, sind die günstigsten Preise nah — bereite jetzt flexible Verbraucher vor'."
},
"next_rising_phase_start_time": {
- "description": "When the next rising price phase begins",
- "long_description": "Shows the timestamp of the next upcoming rising price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to schedule loads before prices start rising again."
+ "description": "Wann die nächste steigende Preisphase beginnt",
+ "long_description": "Zeigt den Zeitstempel des nächsten anstehenden steigenden Preissegments über die verbleibenden Phasen von heute und die Phasen von morgen. Gibt 'nicht verfügbar' zurück, wenn in den Daten von heute oder morgen keine steigenden Phasen mehr existieren. Aktualisiert sich an Intervallgrenzen (alle 15 Minuten).",
+ "usage_tips": "Nutze in_falling_price_phase und next_rising_phase_start_time, um flexible Verbraucher zu planen: Lass sie jetzt laufen, solange die Preise fallen, und beende sie vor dem nächsten Anstieg. 'Wenn in_falling_price_phase ON ist und next_rising_phase_start_time weniger als 1 Stunde entfernt ist, starte die Waschmaschine sofort'."
},
"next_falling_phase_start_time": {
- "description": "When the next falling price phase begins",
- "long_description": "Shows the timestamp of the next upcoming falling price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to delay flexible loads until the next price drop starts."
+ "description": "Wann die nächste fallende Preisphase beginnt",
+ "long_description": "Zeigt den Zeitstempel des nächsten anstehenden fallenden Preissegments über die verbleibenden Phasen von heute und die Phasen von morgen. Gibt 'nicht verfügbar' zurück, wenn in den Daten von heute oder morgen keine fallenden Phasen mehr existieren. Aktualisiert sich an Intervallgrenzen (alle 15 Minuten).",
+ "usage_tips": "Nutze es, um flexible Verbraucher bis zum nächsten Preisrückgang zu verzögern. 'Wenn next_falling_phase_start_time innerhalb von 2 Stunden liegt, warte ggf., bevor du den Geschirrspüler oder die Wärmepumpe startest'."
},
"next_flat_phase_start_time": {
- "description": "When the next flat (stable) price phase begins",
- "long_description": "Shows the timestamp of the next upcoming flat price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use for scheduling loads that need predictable costs over time."
+ "description": "Wann die nächste flache (stabile) Preisphase beginnt",
+ "long_description": "Zeigt den Zeitstempel des nächsten anstehenden flachen Preissegments (in dem die Preise kaum variieren) über die verbleibenden Phasen von heute und die Phasen von morgen. Gibt 'nicht verfügbar' zurück, wenn in den verfügbaren Daten keine flachen Phasen mehr existieren. Aktualisiert sich an Intervallgrenzen (alle 15 Minuten).",
+ "usage_tips": "Flache Phasen deuten auf Preisstabilität hin — nützlich, um Verbraucher mit über die Zeit vorhersehbaren Kosten zu planen. 'Wenn next_flat_phase_start_time innerhalb von 30 Minuten liegt und current_price_phase = rising, ist die Preisspitze fast vorbei'."
},
"next_rising_phase_in_minutes": {
- "description": "Minutes until the next rising price phase begins",
- "long_description": "Shows how many minutes until the next rising price phase starts. Updates every minute.",
- "usage_tips": "Use in countdown automations to alert before the next price rise."
+ "description": "Minuten bis die nächste steigende Preisphase beginnt",
+ "long_description": "Zeigt, wie viele Minuten bis zum Beginn der nächsten steigenden Preisphase verbleiben. Aktualisiert sich jede Minute. Gibt 'nicht verfügbar' zurück, wenn in den Daten von heute oder morgen keine steigenden Phasen mehr existieren. Das Attribut next_in_minutes spiegelt den Sensorwert in ganzen Minuten für Automations-Templates wider.",
+ "usage_tips": "Nutze es in Countdown-Automationen: 'Benachrichtige mich 15 Minuten vor dem nächsten Preisanstieg, damit ich flexible Verbraucher verzögern kann'. Kombiniere mit in_falling_price_phase: Wenn die Preise gerade fallen und ein Anstieg bevorsteht, handle, bevor die Preise zu klettern beginnen."
},
"next_falling_phase_in_minutes": {
- "description": "Minutes until the next falling price phase begins",
- "long_description": "Shows how many minutes until the next falling price phase starts. Updates every minute.",
- "usage_tips": "Use to time flexible loads: delay until the upcoming price drop."
+ "description": "Minuten bis die nächste fallende Preisphase beginnt",
+ "long_description": "Zeigt, wie viele Minuten bis zum Beginn der nächsten fallenden Preisphase verbleiben. Aktualisiert sich jede Minute. Gibt 'nicht verfügbar' zurück, wenn in den Daten von heute oder morgen keine fallenden Phasen mehr existieren. Das Attribut next_in_minutes spiegelt den Sensorwert in ganzen Minuten für Automations-Templates wider.",
+ "usage_tips": "Nutze es, um flexible Verbraucher optimal zu timen: 'Wenn next_falling_phase_in_minutes < 60, verzögere den Start der Waschmaschine, um vom kommenden Preisrückgang zu profitieren'."
},
"next_flat_phase_in_minutes": {
- "description": "Minutes until the next flat (stable) price phase begins",
- "long_description": "Shows how many minutes until the next flat price phase starts. Updates every minute.",
- "usage_tips": "Use to anticipate price stabilisation after a volatile phase."
+ "description": "Minuten bis die nächste flache (stabile) Preisphase beginnt",
+ "long_description": "Zeigt, wie viele Minuten bis zum Beginn der nächsten flachen Preisphase verbleiben. Aktualisiert sich jede Minute. Gibt 'nicht verfügbar' zurück, wenn in den Daten von heute oder morgen keine flachen Phasen mehr existieren. Das Attribut next_in_minutes spiegelt den Sensorwert in ganzen Minuten wider.",
+ "usage_tips": "Nutze es, um eine Preisstabilisierung nach einer volatilen Phase vorauszusehen. 'Wenn next_flat_phase_in_minutes < 30 und current_price_phase = rising, wird die Preisspitze bald abflachen — erwäge, Verbraucher bis dahin zu verzögern'."
},
"chart_data_export": {
"description": "Datenexport für Dashboard-Integrationen",
@@ -644,19 +644,19 @@
"usage_tips": "Nutze dies, um Geräte mit hohem Verbrauch während der günstigsten Intervalle zu betreiben"
},
"in_rising_price_phase": {
- "description": "Whether prices are currently in a rising phase",
- "long_description": "Turns ON when the current intra-day price phase is rising.",
- "usage_tips": "Use in automations to delay or avoid running flexible loads during rising prices."
+ "description": "Ob die Preise aktuell in einer steigenden Phase sind",
+ "long_description": "Schaltet auf ON, wenn die aktuelle Preisphase steigend ist — d. h. die Preise steigen seit dem letzten Phasenwechsel. Genau eines von in_rising_price_phase, in_falling_price_phase und in_flat_price_phase ist zu jedem Zeitpunkt ON. Wird nicht verfügbar, wenn keine Segmentdaten vorliegen.",
+ "usage_tips": "Nutze es in Automationen, um flexible Verbraucher zu verzögern oder zu vermeiden: 'Wenn in_rising_price_phase ON ist, verschiebe den Geschirrspüler'. Kombiniere mit next_falling_phase_start_time, um zu wissen, wann die Preise wieder zu fallen beginnen."
},
"in_falling_price_phase": {
- "description": "Whether prices are currently in a falling phase",
- "long_description": "Turns ON when the current intra-day price phase is falling.",
- "usage_tips": "Use in automations to take advantage of falling prices for flexible loads."
+ "description": "Ob die Preise aktuell in einer fallenden Phase sind",
+ "long_description": "Schaltet auf ON, wenn die aktuelle Preisphase fallend ist — d. h. die Preise fallen seit dem letzten Phasenwechsel. Das ist oft ein gutes Zeitfenster, um flexible Verbraucher zu starten. Genau eines von in_rising_price_phase, in_falling_price_phase und in_flat_price_phase ist zu jedem Zeitpunkt ON.",
+ "usage_tips": "Nutze es in Automationen, um fallende Preise auszunutzen: 'Wenn in_falling_price_phase ON ist und current_price_phase_remaining_minutes > 60, starte die Waschmaschine'. Kombiniere mit next_rising_phase_start_time, um keinen Verbraucher zu starten, der vor dem Preisanstieg nicht fertig wird."
},
"in_flat_price_phase": {
- "description": "Whether prices are currently in a flat (stable) phase",
- "long_description": "Turns ON when the current intra-day price phase is flat and prices are relatively stable.",
- "usage_tips": "Use for loads that prefer price stability rather than the lowest price."
+ "description": "Ob die Preise aktuell in einer flachen (stabilen) Phase sind",
+ "long_description": "Schaltet auf ON, wenn die aktuelle Preisphase flach ist — d. h. die Preise sind relativ stabil ohne nennenswerten Anstieg oder Rückgang. Flache Phasen bedeuten vorhersehbare Kosten und eignen sich für Verbraucher mit unsicherer oder variabler Dauer. Genau eines von in_rising_price_phase, in_falling_price_phase und in_flat_price_phase ist zu jedem Zeitpunkt ON.",
+ "usage_tips": "Nutze es für Verbraucher, denen die Preisrichtung egal ist, die aber Stabilität bevorzugen: Wärmepumpen im stationären Betrieb, Hintergrundladen oder Nachheizen des Warmwasserspeichers. Kombiniere mit current_price_phase_end_time, um zu wissen, wie lange das stabile Fenster anhält."
},
"connection": {
"description": "Ob die Verbindung zur Tibber API funktioniert",
diff --git a/custom_components/tibber_prices/custom_translations/nb.json b/custom_components/tibber_prices/custom_translations/nb.json
index 24c1a24..2b2beb9 100644
--- a/custom_components/tibber_prices/custom_translations/nb.json
+++ b/custom_components/tibber_prices/custom_translations/nb.json
@@ -512,54 +512,54 @@
"usage_tips": "Bruk i automasjonar: 'Hvis next_price_phase = stigende og next_price_phase.start er innen 1 time, start vaskemaskin nå'. Eller kombiner med current_price_phase: 'Hvis current_price_phase = fallende og next_price_phase = flat, nærmer vi oss daglig lavpunkt – godt tidspunkt for fleksible laster'. Attributtet start er spesielt verdifullt: utløs automasjonar nøyaktig når neste fase begynner."
},
"current_price_phase_end_time": {
- "description": "When the current intra-day price phase ends",
- "long_description": "Shows the exact timestamp when the currently active rising, falling, or flat price phase will end and transition to the next phase.",
- "usage_tips": "Use in automations to schedule tasks that must finish before prices change."
+ "description": "Når den gjeldende prisfasen slutter",
+ "long_description": "Viser nøyaktig tidsstempel for når den aktive stigende, fallende eller flate prisfasen slutter og går over til neste fase. Blir utilgjengelig når det ikke finnes segmentdata. Oppdateres ved intervallgrenser (hvert 15. minutt). Kombiner med current_price_phase for å vite både hvilken fase du er i og når den slutter.",
+ "usage_tips": "Bruk i automasjoner for å planlegge oppgaver som må fullføres før prisene endres: 'Start vaskemaskinen hvis current_price_phase = falling og current_price_phase_end_time er mer enn 2 timer unna'. Eller for å varsle når en billig fase snart er over."
},
"current_price_phase_remaining_minutes": {
- "description": "Minutes remaining in the current price phase",
- "long_description": "Shows how many minutes are left in the current intra-day price phase. Updates every minute.",
- "usage_tips": "Use in automations: 'If current_price_phase = falling and remaining < 30, start the dishwasher now'."
+ "description": "Gjenværende minutter i den gjeldende prisfasen",
+ "long_description": "Viser hvor mange minutter som er igjen av den gjeldende prisfasen (stigende, fallende eller flat). Oppdateres hvert minutt for presis nedtelling. Returnerer 0 når det ikke finnes segmentdata. Attributtet remaining_minutes speiler sensorverdien i hele minutter for enklere automasjonsmaler.",
+ "usage_tips": "Bruk i automasjoner: 'Hvis current_price_phase = falling og current_price_phase_remaining_minutes < 30, start oppvaskmaskinen nå før prisene jevner seg ut'. Også nyttig for dashbordkort som viser en nedtellingslinje til fasen skifter."
},
"current_price_phase_duration": {
- "description": "Total duration of the current price phase",
- "long_description": "Shows the total length of the currently active price phase in hours.",
- "usage_tips": "Combine with remaining minutes to understand how far through the phase you are."
+ "description": "Total varighet for den gjeldende prisfasen",
+ "long_description": "Viser den totale lengden på den aktive prisfasen i timer (uttrykt internt i minutter). Oppdateres ved intervallgrenser. Dette forteller hvor lenge det gjeldende trendsegmentet varer totalt — nyttig for å forstå om det er en kort svingning eller en lengre periode med stigende eller fallende priser.",
+ "usage_tips": "Kombiner med current_price_phase_remaining_minutes for å anslå hvor langt du har kommet i fasen, eller sammenlign med current_price_phase_progress for å forstå tidsprofilen til den gjeldende trenden."
},
"current_price_phase_progress": {
- "description": "How far through the current price phase we are",
- "long_description": "Shows the percentage of the current intra-day price phase that has elapsed (0–100%). Updates every minute.",
- "usage_tips": "Use in dashboard cards to display a visual progress bar for the current price phase."
+ "description": "Hvor langt den gjeldende prisfasen har kommet",
+ "long_description": "Viser hvor stor andel av den gjeldende prisfasen som har gått (0–100 %). Oppdateres hvert minutt. En verdi nær 0 % betyr at fasen nettopp har startet; nær 100 % betyr at den snart slutter. Returnerer 0 når det ikke finnes segmentdata.",
+ "usage_tips": "Bruk i dashbordkort for å vise en visuell fremdriftslinje for den gjeldende prisfasen. I automasjoner: 'Hvis current_price_phase = falling og current_price_phase_progress > 80, er de billigste prisene nær — gjør klar fleksible laster nå'."
},
"next_rising_phase_start_time": {
- "description": "When the next rising price phase begins",
- "long_description": "Shows the timestamp of the next upcoming rising price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to schedule loads before prices start rising again."
+ "description": "Når den neste stigende prisfasen begynner",
+ "long_description": "Viser tidsstempelet for det neste kommende stigende prissegmentet på tvers av dagens gjenværende faser og morgendagens faser. Returnerer utilgjengelig når det ikke finnes flere stigende faser i dagens eller morgendagens data. Oppdateres ved intervallgrenser (hvert 15. minutt).",
+ "usage_tips": "Bruk in_falling_price_phase og next_rising_phase_start_time for å planlegge fleksible laster: kjør dem nå mens prisene faller, og avslutt før neste oppgang starter. 'Hvis in_falling_price_phase er ON og next_rising_phase_start_time er mindre enn 1 time unna, start vaskemaskinen umiddelbart'."
},
"next_falling_phase_start_time": {
- "description": "When the next falling price phase begins",
- "long_description": "Shows the timestamp of the next upcoming falling price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to delay flexible loads until the next price drop starts."
+ "description": "Når den neste fallende prisfasen begynner",
+ "long_description": "Viser tidsstempelet for det neste kommende fallende prissegmentet på tvers av dagens gjenværende faser og morgendagens faser. Returnerer utilgjengelig når det ikke finnes flere fallende faser i dagens eller morgendagens data. Oppdateres ved intervallgrenser (hvert 15. minutt).",
+ "usage_tips": "Bruk det til å utsette fleksible laster til neste prisfall starter. 'Hvis next_falling_phase_start_time er innen 2 timer, vurder å vente før du starter oppvaskmaskinen eller varmepumpen'."
},
"next_flat_phase_start_time": {
- "description": "When the next flat (stable) price phase begins",
- "long_description": "Shows the timestamp of the next upcoming flat price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use for scheduling loads that need predictable costs over time."
+ "description": "Når den neste flate (stabile) prisfasen begynner",
+ "long_description": "Viser tidsstempelet for det neste kommende flate prissegmentet (der prisene varierer lite) på tvers av dagens gjenværende faser og morgendagens faser. Returnerer utilgjengelig når det ikke finnes flere flate faser i tilgjengelige data. Oppdateres ved intervallgrenser (hvert 15. minutt).",
+ "usage_tips": "Flate faser indikerer prisstabilitet — nyttig for å planlegge laster som trenger forutsigbar kostnad over tid. 'Hvis next_flat_phase_start_time er innen 30 minutter og current_price_phase = rising, er pristoppen nesten over'."
},
"next_rising_phase_in_minutes": {
- "description": "Minutes until the next rising price phase begins",
- "long_description": "Shows how many minutes until the next rising price phase starts. Updates every minute.",
- "usage_tips": "Use in countdown automations to alert before the next price rise."
+ "description": "Minutter til den neste stigende prisfasen begynner",
+ "long_description": "Viser hvor mange minutter til den neste stigende prisfasen starter. Oppdateres hvert minutt. Returnerer utilgjengelig hvis det ikke finnes flere stigende faser i dagens eller morgendagens data. Attributtet next_in_minutes speiler sensorverdien i hele minutter for automasjonsmaler.",
+ "usage_tips": "Bruk i nedtellingsautomasjoner: 'Varsle meg 15 minutter før neste prisoppgang så jeg kan utsette fleksible laster'. Kombiner med in_falling_price_phase: hvis prisene faller nå og en oppgang er nært forestående, handle før prisene begynner å stige."
},
"next_falling_phase_in_minutes": {
- "description": "Minutes until the next falling price phase begins",
- "long_description": "Shows how many minutes until the next falling price phase starts. Updates every minute.",
- "usage_tips": "Use to time flexible loads: delay until the upcoming price drop."
+ "description": "Minutter til den neste fallende prisfasen begynner",
+ "long_description": "Viser hvor mange minutter til den neste fallende prisfasen starter. Oppdateres hvert minutt. Returnerer utilgjengelig hvis det ikke finnes flere fallende faser i dagens eller morgendagens data. Attributtet next_in_minutes speiler sensorverdien i hele minutter for automasjonsmaler.",
+ "usage_tips": "Bruk det til å time fleksible laster optimalt: 'Hvis next_falling_phase_in_minutes < 60, utsett starten av vaskemaskinen for å dra nytte av det kommende prisfallet'."
},
"next_flat_phase_in_minutes": {
- "description": "Minutes until the next flat (stable) price phase begins",
- "long_description": "Shows how many minutes until the next flat price phase starts. Updates every minute.",
- "usage_tips": "Use to anticipate price stabilisation after a volatile phase."
+ "description": "Minutter til den neste flate (stabile) prisfasen begynner",
+ "long_description": "Viser hvor mange minutter til den neste flate prisfasen starter. Oppdateres hvert minutt. Returnerer utilgjengelig hvis det ikke finnes flere flate faser i dagens eller morgendagens data. Attributtet next_in_minutes speiler sensorverdien i hele minutter.",
+ "usage_tips": "Bruk det til å forutse prisstabilisering etter en volatil fase. 'Hvis next_flat_phase_in_minutes < 30 og current_price_phase = rising, vil pristoppen snart flate ut — vurder å utsette laster til da'."
},
"chart_data_export": {
"description": "Dataeksport for dashboardintegrasjoner",
@@ -644,19 +644,19 @@
"usage_tips": "Bruk dette til å kjøre høyforbruksapparater i de billigste intervallene"
},
"in_rising_price_phase": {
- "description": "Whether prices are currently in a rising phase",
- "long_description": "Turns ON when the current intra-day price phase is rising.",
- "usage_tips": "Use in automations to delay or avoid running flexible loads during rising prices."
+ "description": "Om prisene for øyeblikket er i en stigende fase",
+ "long_description": "Slår seg PÅ når den gjeldende prisfasen er stigende — dvs. prisene har steget siden forrige faseovergang. Nøyaktig én av in_rising_price_phase, in_falling_price_phase og in_flat_price_phase er PÅ til enhver tid. Blir utilgjengelig når det ikke finnes segmentdata.",
+ "usage_tips": "Bruk i automasjoner for å utsette eller unngå å kjøre fleksible laster: 'Hvis in_rising_price_phase er PÅ, utsett oppvaskmaskinen'. Kombiner med next_falling_phase_start_time for å vite når prisene begynner å falle igjen."
},
"in_falling_price_phase": {
- "description": "Whether prices are currently in a falling phase",
- "long_description": "Turns ON when the current intra-day price phase is falling.",
- "usage_tips": "Use in automations to take advantage of falling prices for flexible loads."
+ "description": "Om prisene for øyeblikket er i en fallende fase",
+ "long_description": "Slår seg PÅ når den gjeldende prisfasen er fallende — dvs. prisene har falt siden forrige faseovergang. Dette er ofte et godt tidsvindu for å starte fleksible laster. Nøyaktig én av in_rising_price_phase, in_falling_price_phase og in_flat_price_phase er PÅ til enhver tid.",
+ "usage_tips": "Bruk i automasjoner for å utnytte fallende priser: 'Hvis in_falling_price_phase er PÅ og current_price_phase_remaining_minutes > 60, start vaskemaskinen'. Kombiner med next_rising_phase_start_time for å unngå å starte en last som ikke blir ferdig før prisene stiger."
},
"in_flat_price_phase": {
- "description": "Whether prices are currently in a flat (stable) phase",
- "long_description": "Turns ON when the current intra-day price phase is flat and prices are relatively stable.",
- "usage_tips": "Use for loads that prefer price stability rather than the lowest price."
+ "description": "Om prisene for øyeblikket er i en flat (stabil) fase",
+ "long_description": "Slår seg PÅ når den gjeldende prisfasen er flat — dvs. prisene er relativt stabile uten betydelig oppgang eller nedgang. Flate faser betyr forutsigbare kostnader og passer for laster med usikker eller variabel varighet. Nøyaktig én av in_rising_price_phase, in_falling_price_phase og in_flat_price_phase er PÅ til enhver tid.",
+ "usage_tips": "Bruk det for laster som er likegyldige til prisretning, men foretrekker stabilitet: varmepumper i stabil drift, bakgrunnslading eller etterfylling av varmtvannsbereder. Kombiner med current_price_phase_end_time for å vite hvor lenge det stabile vinduet varer."
},
"connection": {
"description": "Om tilkoblingen til Tibber API fungerer",
diff --git a/custom_components/tibber_prices/custom_translations/nl.json b/custom_components/tibber_prices/custom_translations/nl.json
index b12774d..9485228 100644
--- a/custom_components/tibber_prices/custom_translations/nl.json
+++ b/custom_components/tibber_prices/custom_translations/nl.json
@@ -512,54 +512,54 @@
"usage_tips": "Gebruik in automations: 'Als next_price_phase = stijgend en next_price_phase.start binnen 1 uur is, start de wasmachine nu'. Of combineer met current_price_phase: 'Als current_price_phase = dalend en next_price_phase = vlak, naderen we het dagdieptepunt – goed moment voor flexibele lasten'. Het attribuut start is bijzonder waardevol: activeer automations precies wanneer de volgende fase begint."
},
"current_price_phase_end_time": {
- "description": "When the current intra-day price phase ends",
- "long_description": "Shows the exact timestamp when the currently active rising, falling, or flat price phase will end and transition to the next phase.",
- "usage_tips": "Use in automations to schedule tasks that must finish before prices change."
+ "description": "Wanneer de huidige prijsfase eindigt",
+ "long_description": "Toont de exacte tijdstempel waarop de momenteel actieve stijgende, dalende of vlakke prijsfase eindigt en overgaat naar de volgende fase. Wordt niet beschikbaar als er geen segmentgegevens zijn. Werkt bij op intervalgrenzen (elke 15 minuten). Combineer met current_price_phase om zowel te weten in welke fase je zit als wanneer die eindigt.",
+ "usage_tips": "Gebruik in automatiseringen om taken te plannen die klaar moeten zijn voordat de prijzen veranderen: 'Start de wasmachine als current_price_phase = falling en current_price_phase_end_time meer dan 2 uur weg is'. Of om te waarschuwen wanneer een goedkope fase bijna voorbij is."
},
"current_price_phase_remaining_minutes": {
- "description": "Minutes remaining in the current price phase",
- "long_description": "Shows how many minutes are left in the current intra-day price phase. Updates every minute.",
- "usage_tips": "Use in automations: 'If current_price_phase = falling and remaining < 30, start the dishwasher now'."
+ "description": "Resterende minuten in de huidige prijsfase",
+ "long_description": "Toont hoeveel minuten er nog over zijn in de huidige prijsfase (stijgend, dalend of vlak). Werkt elke minuut bij voor nauwkeurige aftelling. Geeft 0 terug als er geen segmentgegevens zijn. Het attribuut remaining_minutes weerspiegelt de sensorwaarde in hele minuten voor eenvoudigere automatiseringssjablonen.",
+ "usage_tips": "Gebruik in automatiseringen: 'Als current_price_phase = falling en current_price_phase_remaining_minutes < 30, start nu de vaatwasser voordat de prijzen afvlakken'. Ook handig voor dashboardkaarten met een afteltbalk tot de faseovergang."
},
"current_price_phase_duration": {
- "description": "Total duration of the current price phase",
- "long_description": "Shows the total length of the currently active price phase in hours.",
- "usage_tips": "Combine with remaining minutes to understand how far through the phase you are."
+ "description": "Totale duur van de huidige prijsfase",
+ "long_description": "Toont de totale lengte van de momenteel actieve prijsfase in uren (intern uitgedrukt in minuten). Werkt bij op intervalgrenzen. Dit vertelt je hoe lang het huidige trendsegment in totaal duurt — handig om te begrijpen of het een korte schommeling is of een langere periode van stijgende of dalende prijzen.",
+ "usage_tips": "Combineer met current_price_phase_remaining_minutes om in te schatten hoe ver je in de fase bent, of vergelijk met current_price_phase_progress om het tijdsprofiel van de huidige trend te begrijpen."
},
"current_price_phase_progress": {
- "description": "How far through the current price phase we are",
- "long_description": "Shows the percentage of the current intra-day price phase that has elapsed (0–100%). Updates every minute.",
- "usage_tips": "Use in dashboard cards to display a visual progress bar for the current price phase."
+ "description": "Hoe ver de huidige prijsfase gevorderd is",
+ "long_description": "Toont het percentage van de huidige prijsfase dat al verstreken is (0–100%). Werkt elke minuut bij. Een waarde rond 0% betekent dat de fase net is begonnen; rond 100% betekent dat die bijna eindigt. Geeft 0 terug als er geen segmentgegevens zijn.",
+ "usage_tips": "Gebruik in dashboardkaarten om een visuele voortgangsbalk voor de huidige prijsfase te tonen. In automatiseringen: 'Als current_price_phase = falling en current_price_phase_progress > 80, zijn de goedkoopste prijzen dichtbij — maak nu flexibele verbruikers klaar'."
},
"next_rising_phase_start_time": {
- "description": "When the next rising price phase begins",
- "long_description": "Shows the timestamp of the next upcoming rising price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to schedule loads before prices start rising again."
+ "description": "Wanneer de volgende stijgende prijsfase begint",
+ "long_description": "Toont de tijdstempel van het volgende komende stijgende prijssegment over de resterende fasen van vandaag en de fasen van morgen. Geeft niet-beschikbaar terug als er geen stijgende fasen meer zijn in de gegevens van vandaag of morgen. Werkt bij op intervalgrenzen (elke 15 minuten).",
+ "usage_tips": "Gebruik in_falling_price_phase en next_rising_phase_start_time om flexibele verbruikers te plannen: laat ze nu draaien terwijl de prijzen dalen en rond af voordat de volgende stijging begint. 'Als in_falling_price_phase ON is en next_rising_phase_start_time minder dan 1 uur weg is, start de wasmachine direct'."
},
"next_falling_phase_start_time": {
- "description": "When the next falling price phase begins",
- "long_description": "Shows the timestamp of the next upcoming falling price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to delay flexible loads until the next price drop starts."
+ "description": "Wanneer de volgende dalende prijsfase begint",
+ "long_description": "Toont de tijdstempel van het volgende komende dalende prijssegment over de resterende fasen van vandaag en de fasen van morgen. Geeft niet-beschikbaar terug als er geen dalende fasen meer zijn in de gegevens van vandaag of morgen. Werkt bij op intervalgrenzen (elke 15 minuten).",
+ "usage_tips": "Gebruik het om flexibele verbruikers uit te stellen tot de volgende prijsdaling begint. 'Als next_falling_phase_start_time binnen 2 uur is, overweeg dan te wachten voordat je de vaatwasser of warmtepomp start'."
},
"next_flat_phase_start_time": {
- "description": "When the next flat (stable) price phase begins",
- "long_description": "Shows the timestamp of the next upcoming flat price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use for scheduling loads that need predictable costs over time."
+ "description": "Wanneer de volgende vlakke (stabiele) prijsfase begint",
+ "long_description": "Toont de tijdstempel van het volgende komende vlakke prijssegment (waar de prijzen weinig variatie tonen) over de resterende fasen van vandaag en de fasen van morgen. Geeft niet-beschikbaar terug als er geen vlakke fasen meer zijn in de beschikbare gegevens. Werkt bij op intervalgrenzen (elke 15 minuten).",
+ "usage_tips": "Vlakke fasen wijzen op prijsstabiliteit — handig voor het plannen van verbruikers die in de tijd voorspelbare kosten nodig hebben. 'Als next_flat_phase_start_time binnen 30 minuten is en current_price_phase = rising, is de prijspiek bijna voorbij'."
},
"next_rising_phase_in_minutes": {
- "description": "Minutes until the next rising price phase begins",
- "long_description": "Shows how many minutes until the next rising price phase starts. Updates every minute.",
- "usage_tips": "Use in countdown automations to alert before the next price rise."
+ "description": "Minuten tot de volgende stijgende prijsfase begint",
+ "long_description": "Toont hoeveel minuten tot de volgende stijgende prijsfase begint. Werkt elke minuut bij. Geeft niet-beschikbaar terug als er geen stijgende fasen meer zijn in de gegevens van vandaag of morgen. Het attribuut next_in_minutes weerspiegelt de sensorwaarde in hele minuten voor automatiseringssjablonen.",
+ "usage_tips": "Gebruik in aftelautomatiseringen: 'Waarschuw me 15 minuten voor de volgende prijsstijging zodat ik flexibele verbruikers kan uitstellen'. Combineer met in_falling_price_phase: als de prijzen nu dalen en een stijging ophanden is, handel dan voordat de prijzen beginnen te klimmen."
},
"next_falling_phase_in_minutes": {
- "description": "Minutes until the next falling price phase begins",
- "long_description": "Shows how many minutes until the next falling price phase starts. Updates every minute.",
- "usage_tips": "Use to time flexible loads: delay until the upcoming price drop."
+ "description": "Minuten tot de volgende dalende prijsfase begint",
+ "long_description": "Toont hoeveel minuten tot de volgende dalende prijsfase begint. Werkt elke minuut bij. Geeft niet-beschikbaar terug als er geen dalende fasen meer zijn in de gegevens van vandaag of morgen. Het attribuut next_in_minutes weerspiegelt de sensorwaarde in hele minuten voor automatiseringssjablonen.",
+ "usage_tips": "Gebruik het om flexibele verbruikers optimaal te timen: 'Als next_falling_phase_in_minutes < 60, stel de start van de wasmachine uit om te profiteren van de komende prijsdaling'."
},
"next_flat_phase_in_minutes": {
- "description": "Minutes until the next flat (stable) price phase begins",
- "long_description": "Shows how many minutes until the next flat price phase starts. Updates every minute.",
- "usage_tips": "Use to anticipate price stabilisation after a volatile phase."
+ "description": "Minuten tot de volgende vlakke (stabiele) prijsfase begint",
+ "long_description": "Toont hoeveel minuten tot de volgende vlakke prijsfase begint. Werkt elke minuut bij. Geeft niet-beschikbaar terug als er geen vlakke fasen meer zijn in de gegevens van vandaag of morgen. Het attribuut next_in_minutes weerspiegelt de sensorwaarde in hele minuten.",
+ "usage_tips": "Gebruik het om prijsstabilisatie na een volatiele fase te anticiperen. 'Als next_flat_phase_in_minutes < 30 en current_price_phase = rising, zal de prijspiek binnenkort afvlakken — overweeg verbruikers tot dan uit te stellen'."
},
"chart_data_export": {
"description": "Data-export voor dashboard-integraties",
@@ -644,19 +644,19 @@
"usage_tips": "Gebruik dit om apparaten met hoog verbruik te laten draaien tijdens de goedkoopste intervallen"
},
"in_rising_price_phase": {
- "description": "Whether prices are currently in a rising phase",
- "long_description": "Turns ON when the current intra-day price phase is rising.",
- "usage_tips": "Use in automations to delay or avoid running flexible loads during rising prices."
+ "description": "Of de prijzen zich momenteel in een stijgende fase bevinden",
+ "long_description": "Gaat AAN wanneer de huidige prijsfase stijgend is — d.w.z. de prijzen stijgen sinds de laatste faseovergang. Precies één van in_rising_price_phase, in_falling_price_phase en in_flat_price_phase is op elk moment AAN. Wordt niet beschikbaar als er geen segmentgegevens zijn.",
+ "usage_tips": "Gebruik in automatiseringen om flexibele verbruikers uit te stellen of te vermijden: 'Als in_rising_price_phase AAN is, stel de vaatwasser uit'. Combineer met next_falling_phase_start_time om te weten wanneer de prijzen weer beginnen te dalen."
},
"in_falling_price_phase": {
- "description": "Whether prices are currently in a falling phase",
- "long_description": "Turns ON when the current intra-day price phase is falling.",
- "usage_tips": "Use in automations to take advantage of falling prices for flexible loads."
+ "description": "Of de prijzen zich momenteel in een dalende fase bevinden",
+ "long_description": "Gaat AAN wanneer de huidige prijsfase dalend is — d.w.z. de prijzen dalen sinds de laatste faseovergang. Dit is vaak een goed moment om flexibele verbruikers te starten. Precies één van in_rising_price_phase, in_falling_price_phase en in_flat_price_phase is op elk moment AAN.",
+ "usage_tips": "Gebruik in automatiseringen om dalende prijzen te benutten: 'Als in_falling_price_phase AAN is en current_price_phase_remaining_minutes > 60, start de wasmachine'. Combineer met next_rising_phase_start_time om te voorkomen dat je een verbruiker start die niet klaar is voordat de prijzen stijgen."
},
"in_flat_price_phase": {
- "description": "Whether prices are currently in a flat (stable) phase",
- "long_description": "Turns ON when the current intra-day price phase is flat and prices are relatively stable.",
- "usage_tips": "Use for loads that prefer price stability rather than the lowest price."
+ "description": "Of de prijzen zich momenteel in een vlakke (stabiele) fase bevinden",
+ "long_description": "Gaat AAN wanneer de huidige prijsfase vlak is — d.w.z. de prijzen zijn relatief stabiel zonder noemenswaardige stijging of daling. Vlakke fasen betekenen voorspelbare kosten en zijn geschikt voor verbruikers met een onzekere of variabele duur. Precies één van in_rising_price_phase, in_falling_price_phase en in_flat_price_phase is op elk moment AAN.",
+ "usage_tips": "Gebruik het voor verbruikers die onverschillig zijn voor de prijsrichting maar stabiliteit verkiezen: warmtepompen in stabiele modus, achtergrondladen of het bijverwarmen van de boiler. Combineer met current_price_phase_end_time om te weten hoe lang het stabiele venster duurt."
},
"connection": {
"description": "Of de verbinding met de Tibber API werkt",
diff --git a/custom_components/tibber_prices/custom_translations/sv.json b/custom_components/tibber_prices/custom_translations/sv.json
index 7834990..b50e990 100644
--- a/custom_components/tibber_prices/custom_translations/sv.json
+++ b/custom_components/tibber_prices/custom_translations/sv.json
@@ -512,54 +512,54 @@
"usage_tips": "Använd i automationer: 'Om next_price_phase = stigande och next_price_phase.start är inom 1 timme, starta tvättmaskinen nu'. Eller kombinera med current_price_phase: 'Om current_price_phase = fallande och next_price_phase = flat, närmar vi oss dagens lågpunkt – bra tid för flexibla laster'. Attributet start är särskilt värdefull: utlös automationer precis när nästa fas börjar."
},
"current_price_phase_end_time": {
- "description": "When the current intra-day price phase ends",
- "long_description": "Shows the exact timestamp when the currently active rising, falling, or flat price phase will end and transition to the next phase.",
- "usage_tips": "Use in automations to schedule tasks that must finish before prices change."
+ "description": "När den aktuella prisfasen slutar",
+ "long_description": "Visar den exakta tidsstämpeln för när den aktiva stigande, fallande eller flata prisfasen slutar och övergår till nästa fas. Blir otillgänglig när det inte finns segmentdata. Uppdateras vid intervallgränser (var 15:e minut). Kombinera med current_price_phase för att veta både vilken fas du är i och när den slutar.",
+ "usage_tips": "Använd i automationer för att schemalägga uppgifter som måste vara klara innan priserna ändras: 'Starta tvättmaskinen om current_price_phase = falling och current_price_phase_end_time är mer än 2 timmar bort'. Eller för att varna när en billig fas snart är slut."
},
"current_price_phase_remaining_minutes": {
- "description": "Minutes remaining in the current price phase",
- "long_description": "Shows how many minutes are left in the current intra-day price phase. Updates every minute.",
- "usage_tips": "Use in automations: 'If current_price_phase = falling and remaining < 30, start the dishwasher now'."
+ "description": "Återstående minuter i den aktuella prisfasen",
+ "long_description": "Visar hur många minuter som är kvar av den aktuella prisfasen (stigande, fallande eller flat). Uppdateras varje minut för exakt nedräkning. Returnerar 0 när det inte finns segmentdata. Attributet remaining_minutes speglar sensorvärdet i hela minuter för enklare automationsmallar.",
+ "usage_tips": "Använd i automationer: 'Om current_price_phase = falling och current_price_phase_remaining_minutes < 30, starta diskmaskinen nu innan priserna planar ut'. Även användbart för instrumentpanelskort som visar en nedräkningsstapel till fasövergången."
},
"current_price_phase_duration": {
- "description": "Total duration of the current price phase",
- "long_description": "Shows the total length of the currently active price phase in hours.",
- "usage_tips": "Combine with remaining minutes to understand how far through the phase you are."
+ "description": "Total varaktighet för den aktuella prisfasen",
+ "long_description": "Visar den totala längden på den aktiva prisfasen i timmar (uttryckt internt i minuter). Uppdateras vid intervallgränser. Detta talar om hur länge det aktuella trendsegmentet varar totalt — användbart för att förstå om det är en kort fluktuation eller en längre period av stigande eller fallande priser.",
+ "usage_tips": "Kombinera med current_price_phase_remaining_minutes för att uppskatta hur långt du har kommit i fasen, eller jämför med current_price_phase_progress för att förstå tidsprofilen för den aktuella trenden."
},
"current_price_phase_progress": {
- "description": "How far through the current price phase we are",
- "long_description": "Shows the percentage of the current intra-day price phase that has elapsed (0–100%). Updates every minute.",
- "usage_tips": "Use in dashboard cards to display a visual progress bar for the current price phase."
+ "description": "Hur långt den aktuella prisfasen har kommit",
+ "long_description": "Visar hur stor andel av den aktuella prisfasen som har förflutit (0–100 %). Uppdateras varje minut. Ett värde nära 0 % betyder att fasen just har börjat; nära 100 % betyder att den snart slutar. Returnerar 0 när det inte finns segmentdata.",
+ "usage_tips": "Använd i instrumentpanelskort för att visa en visuell förloppsindikator för den aktuella prisfasen. I automationer: 'Om current_price_phase = falling och current_price_phase_progress > 80, är de billigaste priserna nära — förbered flexibla laster nu'."
},
"next_rising_phase_start_time": {
- "description": "When the next rising price phase begins",
- "long_description": "Shows the timestamp of the next upcoming rising price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to schedule loads before prices start rising again."
+ "description": "När nästa stigande prisfas börjar",
+ "long_description": "Visar tidsstämpeln för nästa kommande stigande prissegment över dagens återstående faser och morgondagens faser. Returnerar otillgänglig när det inte finns fler stigande faser i dagens eller morgondagens data. Uppdateras vid intervallgränser (var 15:e minut).",
+ "usage_tips": "Använd in_falling_price_phase och next_rising_phase_start_time för att schemalägga flexibla laster: kör dem nu medan priserna faller och avsluta innan nästa uppgång börjar. 'Om in_falling_price_phase är ON och next_rising_phase_start_time är mindre än 1 timme bort, starta tvättmaskinen omedelbart'."
},
"next_falling_phase_start_time": {
- "description": "When the next falling price phase begins",
- "long_description": "Shows the timestamp of the next upcoming falling price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use to delay flexible loads until the next price drop starts."
+ "description": "När nästa fallande prisfas börjar",
+ "long_description": "Visar tidsstämpeln för nästa kommande fallande prissegment över dagens återstående faser och morgondagens faser. Returnerar otillgänglig när det inte finns fler fallande faser i dagens eller morgondagens data. Uppdateras vid intervallgränser (var 15:e minut).",
+ "usage_tips": "Använd det för att skjuta upp flexibla laster tills nästa prisfall börjar. 'Om next_falling_phase_start_time är inom 2 timmar, överväg att vänta innan du startar diskmaskinen eller värmepumpen'."
},
"next_flat_phase_start_time": {
- "description": "When the next flat (stable) price phase begins",
- "long_description": "Shows the timestamp of the next upcoming flat price segment across today's remaining phases and tomorrow's phases.",
- "usage_tips": "Use for scheduling loads that need predictable costs over time."
+ "description": "När nästa flata (stabila) prisfas börjar",
+ "long_description": "Visar tidsstämpeln för nästa kommande flata prissegment (där priserna varierar lite) över dagens återstående faser och morgondagens faser. Returnerar otillgänglig när det inte finns fler flata faser i tillgängliga data. Uppdateras vid intervallgränser (var 15:e minut).",
+ "usage_tips": "Flata faser indikerar prisstabilitet — användbart för att schemalägga laster som behöver en förutsägbar kostnad över tid. 'Om next_flat_phase_start_time är inom 30 minuter och current_price_phase = rising, är pristoppen nästan över'."
},
"next_rising_phase_in_minutes": {
- "description": "Minutes until the next rising price phase begins",
- "long_description": "Shows how many minutes until the next rising price phase starts. Updates every minute.",
- "usage_tips": "Use in countdown automations to alert before the next price rise."
+ "description": "Minuter tills nästa stigande prisfas börjar",
+ "long_description": "Visar hur många minuter tills nästa stigande prisfas börjar. Uppdateras varje minut. Returnerar otillgänglig om det inte finns fler stigande faser i dagens eller morgondagens data. Attributet next_in_minutes speglar sensorvärdet i hela minuter för automationsmallar.",
+ "usage_tips": "Använd i nedräkningsautomationer: 'Meddela mig 15 minuter före nästa prisuppgång så att jag kan skjuta upp flexibla laster'. Kombinera med in_falling_price_phase: om priserna faller nu och en uppgång är nära förestående, agera innan priserna börjar klättra."
},
"next_falling_phase_in_minutes": {
- "description": "Minutes until the next falling price phase begins",
- "long_description": "Shows how many minutes until the next falling price phase starts. Updates every minute.",
- "usage_tips": "Use to time flexible loads: delay until the upcoming price drop."
+ "description": "Minuter tills nästa fallande prisfas börjar",
+ "long_description": "Visar hur många minuter tills nästa fallande prisfas börjar. Uppdateras varje minut. Returnerar otillgänglig om det inte finns fler fallande faser i dagens eller morgondagens data. Attributet next_in_minutes speglar sensorvärdet i hela minuter för automationsmallar.",
+ "usage_tips": "Använd det för att tajma flexibla laster optimalt: 'Om next_falling_phase_in_minutes < 60, skjut upp starten av tvättmaskinen för att dra nytta av det kommande prisfallet'."
},
"next_flat_phase_in_minutes": {
- "description": "Minutes until the next flat (stable) price phase begins",
- "long_description": "Shows how many minutes until the next flat price phase starts. Updates every minute.",
- "usage_tips": "Use to anticipate price stabilisation after a volatile phase."
+ "description": "Minuter tills nästa flata (stabila) prisfas börjar",
+ "long_description": "Visar hur många minuter tills nästa flata prisfas börjar. Uppdateras varje minut. Returnerar otillgänglig om det inte finns fler flata faser i dagens eller morgondagens data. Attributet next_in_minutes speglar sensorvärdet i hela minuter.",
+ "usage_tips": "Använd det för att förutse prisstabilisering efter en volatil fas. 'Om next_flat_phase_in_minutes < 30 och current_price_phase = rising, kommer pristoppen snart att plana ut — överväg att skjuta upp laster till dess'."
},
"chart_data_export": {
"description": "Dataexport för dashboard-integrationer",
@@ -644,19 +644,19 @@
"usage_tips": "Använd detta för att köra högkonsumtionsapparater under de billigaste intervallerna"
},
"in_rising_price_phase": {
- "description": "Whether prices are currently in a rising phase",
- "long_description": "Turns ON when the current intra-day price phase is rising.",
- "usage_tips": "Use in automations to delay or avoid running flexible loads during rising prices."
+ "description": "Om priserna för närvarande är i en stigande fas",
+ "long_description": "Slås PÅ när den aktuella prisfasen är stigande — dvs. priserna har stigit sedan den senaste fasövergången. Exakt en av in_rising_price_phase, in_falling_price_phase och in_flat_price_phase är PÅ vid varje tidpunkt. Blir otillgänglig när det inte finns segmentdata.",
+ "usage_tips": "Använd i automationer för att skjuta upp eller undvika att köra flexibla laster: 'Om in_rising_price_phase är PÅ, skjut upp diskmaskinen'. Kombinera med next_falling_phase_start_time för att veta när priserna börjar falla igen."
},
"in_falling_price_phase": {
- "description": "Whether prices are currently in a falling phase",
- "long_description": "Turns ON when the current intra-day price phase is falling.",
- "usage_tips": "Use in automations to take advantage of falling prices for flexible loads."
+ "description": "Om priserna för närvarande är i en fallande fas",
+ "long_description": "Slås PÅ när den aktuella prisfasen är fallande — dvs. priserna har fallit sedan den senaste fasövergången. Detta är ofta ett bra tidsfönster för att starta flexibla laster. Exakt en av in_rising_price_phase, in_falling_price_phase och in_flat_price_phase är PÅ vid varje tidpunkt.",
+ "usage_tips": "Använd i automationer för att utnyttja fallande priser: 'Om in_falling_price_phase är PÅ och current_price_phase_remaining_minutes > 60, starta tvättmaskinen'. Kombinera med next_rising_phase_start_time för att undvika att starta en last som inte hinner bli klar innan priserna stiger."
},
"in_flat_price_phase": {
- "description": "Whether prices are currently in a flat (stable) phase",
- "long_description": "Turns ON when the current intra-day price phase is flat and prices are relatively stable.",
- "usage_tips": "Use for loads that prefer price stability rather than the lowest price."
+ "description": "Om priserna för närvarande är i en flat (stabil) fas",
+ "long_description": "Slås PÅ när den aktuella prisfasen är flat — dvs. priserna är relativt stabila utan betydande uppgång eller nedgång. Flata faser innebär förutsägbara kostnader och passar för laster med osäker eller variabel varaktighet. Exakt en av in_rising_price_phase, in_falling_price_phase och in_flat_price_phase är PÅ vid varje tidpunkt.",
+ "usage_tips": "Använd det för laster som är likgiltiga för prisriktningen men föredrar stabilitet: värmepumpar i stabilt läge, bakgrundsladdning eller påfyllning av varmvattenberedaren. Kombinera med current_price_phase_end_time för att veta hur länge det stabila fönstret varar."
},
"connection": {
"description": "Om anslutningen till Tibber API fungerar",
diff --git a/custom_components/tibber_prices/translations/de.json b/custom_components/tibber_prices/translations/de.json
index c7b12f3..9742660 100644
--- a/custom_components/tibber_prices/translations/de.json
+++ b/custom_components/tibber_prices/translations/de.json
@@ -35,7 +35,7 @@
"finish": {
"description": "Wähle ein Zuhause, um Preisinformationen und Bewertungen abzurufen.",
"data": {
- "home_id": "Home ID"
+ "home_id": "Zuhause-ID"
},
"title": "Wähle ein Zuhause",
"submit": "Zuhause auswählen"
@@ -375,7 +375,7 @@
"submit": "↩ Speichern & Zurück"
},
"chart_data_export": {
- "title": "📊 Chart Data Export Sensor",
+ "title": "📊 Chart-Daten-Export-Sensor",
"description": "Der Chart Data Export Sensor stellt Preisdaten als Sensor-Attribute zur Verfügung.\n\n⚠️ **Hinweis:** Dieser Sensor ist ein Legacy-Feature für Kompatibilität mit älteren Tools.\n\n**Für neue Setups empfohlen:** Nutze den `tibber_prices.get_chartdata` **Service direkt** - er ist flexibler, effizienter und der moderne Home Assistant-Ansatz.\n\n**Wann dieser Sensor sinnvoll ist:**\n\n✅ Dein Dashboard-Tool kann **nur** Attribute lesen (keine Service-Aufrufe)\n✅ Du brauchst statische Daten, die automatisch aktualisiert werden\n❌ **Nicht für Automationen:** Nutze dort direkt `tibber_prices.get_chartdata` - flexibler und effizienter!\n\n---\n\n{sensor_status_info}",
"submit": "↩ Ok & Zurück"
},
@@ -1029,34 +1029,34 @@
}
},
"current_price_phase_end_time": {
- "name": "Current Phase End Time"
+ "name": "Aktuelle Phase Endzeit"
},
"current_price_phase_remaining_minutes": {
- "name": "Current Phase Remaining"
+ "name": "Aktuelle Phase verbleibend"
},
"current_price_phase_duration": {
- "name": "Current Phase Duration"
+ "name": "Aktuelle Phase Dauer"
},
"current_price_phase_progress": {
- "name": "Current Phase Progress"
+ "name": "Aktuelle Phase Fortschritt"
},
"next_rising_phase_start_time": {
- "name": "Next Rising Phase Start"
+ "name": "Nächste steigende Phase Start"
},
"next_falling_phase_start_time": {
- "name": "Next Falling Phase Start"
+ "name": "Nächste fallende Phase Start"
},
"next_flat_phase_start_time": {
- "name": "Next Flat Phase Start"
+ "name": "Nächste flache Phase Start"
},
"next_rising_phase_in_minutes": {
- "name": "Time to Next Rising Phase"
+ "name": "Zeit bis nächste steigende Phase"
},
"next_falling_phase_in_minutes": {
- "name": "Time to Next Falling Phase"
+ "name": "Zeit bis nächste fallende Phase"
},
"next_flat_phase_in_minutes": {
- "name": "Time to Next Flat Phase"
+ "name": "Zeit bis nächste flache Phase"
},
"chart_data_export": {
"name": "Diagramm-Datenexport",
@@ -1116,13 +1116,13 @@
"name": "Bestpreis-Zeitraum"
},
"in_rising_price_phase": {
- "name": "In Rising Price Phase"
+ "name": "In steigender Preisphase"
},
"in_falling_price_phase": {
- "name": "In Falling Price Phase"
+ "name": "In fallender Preisphase"
},
"in_flat_price_phase": {
- "name": "In Flat Price Phase"
+ "name": "In flacher Preisphase"
},
"connection": {
"name": "Tibber-API-Verbindung"
@@ -1237,7 +1237,7 @@
"message": "Der Endzeitpunkt ({search_end}) muss nach dem Startzeitpunkt ({search_start}) liegen. Überprüfe die Zeit-Parameter und eventuelle Day-Offsets."
},
"price_fetch_failed": {
- "message": "Unable to fetch price data for the requested search range."
+ "message": "Preisdaten für den angeforderten Suchbereich konnten nicht abgerufen werden."
},
"invalid_search_scope": {
"message": "Ungültiger Suchbereich. Gültige Werte sind: today, tomorrow, remaining_today, next_24h, next_48h."
@@ -1309,49 +1309,49 @@
"message": "Wert '{raw_value}' von '{entity_id}' ({attribute}) kann nicht in {expected_type} konvertiert werden. Überprüfe, ob die Entity einen kompatiblen Wert liefert."
},
"capacity_required_for_percent": {
- "message": "battery_capacity_kwh is required when current or target SoC is provided as a percentage."
+ "message": "battery_capacity_kwh ist erforderlich, wenn der aktuelle oder Ziel-SoC in Prozent angegeben wird."
},
"ambiguous_soc_input": {
- "message": "The field {field} was provided both as percent and as kWh. Use only one representation."
+ "message": "Das Feld {field} wurde sowohl in Prozent als auch in kWh angegeben. Verwende nur eine Darstellung."
},
"already_at_target": {
- "message": "Current state of charge is already at or above the target. No charging schedule is needed."
+ "message": "Der aktuelle Ladezustand liegt bereits auf oder über dem Ziel. Es ist kein Ladeplan erforderlich."
},
"target_exceeds_capacity": {
- "message": "Target SoC ({target_soc_kwh} kWh) exceeds battery capacity ({capacity_kwh} kWh)."
+ "message": "Der Ziel-SoC ({target_soc_kwh} kWh) übersteigt die Batteriekapazität ({capacity_kwh} kWh)."
},
"energy_unreachable": {
- "message": "The requested charging target cannot be reached within the available search window and charging constraints."
+ "message": "Das angeforderte Ladeziel kann innerhalb des verfügbaren Suchfensters und der Ladebeschränkungen nicht erreicht werden."
},
"missing_current_soc": {
- "message": "Provide either current_soc_percent or current_soc_kwh."
+ "message": "Gib entweder current_soc_percent oder current_soc_kwh an."
},
"missing_target_soc": {
- "message": "Provide either target_soc_percent or target_soc_kwh."
+ "message": "Gib entweder target_soc_percent oder target_soc_kwh an."
},
"missing_deadline_for_must_reach": {
- "message": "Provide must_reach_by or must_reach_by_event when using must_reach_soc_percent or must_reach_soc_kwh."
+ "message": "Gib must_reach_by oder must_reach_by_event an, wenn du must_reach_soc_percent oder must_reach_soc_kwh verwendest."
},
"missing_must_reach_soc": {
- "message": "Provide must_reach_soc_percent or must_reach_soc_kwh when using a must_reach deadline."
+ "message": "Gib must_reach_soc_percent oder must_reach_soc_kwh an, wenn du einen must_reach-Stichtag verwendest."
},
"invalid_must_reach_soc": {
- "message": "The minimum state of charge by deadline must be between current and target state of charge."
+ "message": "Der Mindestladezustand bis zum Stichtag muss zwischen dem aktuellen und dem Ziel-Ladezustand liegen."
},
"power_strategy_conflict": {
- "message": "Use either min_charge_power_w or charge_power_steps_w, not both at the same time."
+ "message": "Verwende entweder min_charge_power_w oder charge_power_steps_w, nicht beide gleichzeitig."
},
"grid_limit_too_low": {
- "message": "grid_import_limit_w is lower than the minimum required charging power."
+ "message": "grid_import_limit_w ist niedriger als die minimal erforderliche Ladeleistung."
},
"deadline_conflict": {
- "message": "Use either must_reach_by or must_reach_by_event, not both at the same time."
+ "message": "Verwende entweder must_reach_by oder must_reach_by_event, nicht beide gleichzeitig."
},
"deadline_event_not_available": {
- "message": "The selected deadline event is not available in the current coordinator data."
+ "message": "Das ausgewählte Stichtagsereignis ist in den aktuellen Koordinatordaten nicht verfügbar."
},
"deadline_outside_search_range": {
- "message": "The resolved deadline must be inside the selected search range."
+ "message": "Der aufgelöste Stichtag muss innerhalb des ausgewählten Suchbereichs liegen."
}
},
"services": {
@@ -1570,7 +1570,7 @@
}
},
"find_cheapest_block": {
- "name": "Günstigsten Block finden",
+ "name": "Günstigsten Block finden (Experimentell)",
"description": "Findet das günstigste zusammenhängende Zeitfenster einer bestimmten Dauer. Gedacht für Geräteplanung: Spülmaschine, Waschmaschine, Trockner usw. Gibt das günstigste Fenster mit Start-/Endzeiten und Preisstatistiken zurück.",
"sections": {
"search_range": {
@@ -1690,7 +1690,7 @@
}
},
"find_most_expensive_block": {
- "name": "Teuersten Block finden",
+ "name": "Teuersten Block finden (Experimentell)",
"description": "Findet das teuerste zusammenhängende Zeitfenster einer bestimmten Dauer. Nützlich zur Erkennung von Spitzenpreiszeiträumen, die vermieden werden sollten. Gibt das teuerste Fenster mit Start-/Endzeiten und Preisstatistiken zurück.",
"sections": {
"search_range": {
@@ -1810,7 +1810,7 @@
}
},
"find_cheapest_hours": {
- "name": "Günstigste Stunden finden",
+ "name": "Günstigste Stunden finden (Experimentell)",
"description": "Findet die günstigsten Intervalle für eine bestimmte Gesamtdauer, nicht unbedingt zusammenhängend. Gedacht für flexible Lasten: Batterieladung, E-Auto, Warmwasserspeicher. Gibt einen Zeitplan mit Intervallen gruppiert in zusammenhängende Segmente zurück.",
"sections": {
"search_range": {
@@ -1934,7 +1934,7 @@
}
},
"find_most_expensive_hours": {
- "name": "Teuerste Stunden finden",
+ "name": "Teuerste Stunden finden (Experimentell)",
"description": "Findet die teuersten Intervalle für eine bestimmte Gesamtdauer, nicht unbedingt zusammenhängend. Nützlich zur Erkennung von Spitzenpreiszeiträumen, die vermieden werden sollten. Gibt einen Zeitplan mit Intervallen gruppiert in zusammenhängende Segmente zurück.",
"sections": {
"search_range": {
@@ -2058,7 +2058,7 @@
}
},
"find_cheapest_schedule": {
- "name": "Günstigstes Programm planen",
+ "name": "Günstigstes Programm planen (Experimentell)",
"description": "Plant mehrere Geräte optimal ohne Zeitüberschneidung. Jede Aufgabe erhält das günstigste verfügbare zusammenhängende Zeitfenster.",
"sections": {
"search_range": {
@@ -2174,206 +2174,206 @@
}
},
"plan_charging": {
- "name": "Plan Charging",
- "description": "Creates a lowest-cost charging schedule from battery parameters instead of a fixed duration. Supports fixed, continuous, or stepped charging power, optional deadline-aware minimum SoC planning, and economic filtering for later discharge use cases. Returns a per-interval charging plan with power, energy, SoC progression, segment grouping, total cost, and profitability details. If no schedule is found, the response includes a stable reason code in the reason field (for example: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
+ "name": "Laden planen (experimentell)",
+ "description": "Erstellt einen kostenoptimierten Ladeplan aus Batterieparametern statt einer festen Dauer. Unterstützt festes, kontinuierliches oder gestuftes Laden, optionale Mindest-SoC-Planung mit Stichtag sowie wirtschaftliche Filterung für spätere Entlade-Szenarien. Gibt einen Ladeplan pro Intervall zurück – mit Leistung, Energie, SoC-Verlauf, Segmentgruppierung, Gesamtkosten und Wirtschaftlichkeitsdetails. Wird kein Plan gefunden, enthält die Antwort einen stabilen Ursachencode im Feld „reason“ (zum Beispiel: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
"sections": {
"battery": {
- "name": "Battery Parameters",
- "description": "Describe the battery: usable capacity, current and target SoC, and charging efficiency. You can provide SoC in percent (requires capacity) or directly in kWh."
+ "name": "Batterieparameter",
+ "description": "Beschreibe die Batterie: nutzbare Kapazität, aktueller und gewünschter SoC sowie Ladewirkungsgrad. Du kannst den SoC in Prozent (erfordert Kapazität) oder direkt in kWh angeben."
},
"charging": {
- "name": "Charging Strategy",
- "description": "Configure variable-power charging behavior, grid limits, and minimum run-time constraints."
+ "name": "Ladestrategie",
+ "description": "Konfiguriere das Laden mit variabler Leistung, Netzgrenzen und Mindestlaufzeit-Vorgaben."
},
"deadline": {
- "name": "Deadline Planning",
- "description": "Require a minimum state of charge by a specific moment (for example before a peak period). Set both the Minimum SoC by Deadline and when it must be reached — either as an absolute time (Must Reach By) or from a known event (Deadline Event)."
+ "name": "Stichtagsplanung",
+ "description": "Verlange einen Mindestladezustand bis zu einem bestimmten Zeitpunkt (zum Beispiel vor einer Hochpreisphase). Lege sowohl den Mindest-SoC bis Stichtag als auch den Zeitpunkt fest – entweder als absolute Zeit (Erreichen bis) oder über ein bekanntes Ereignis (Stichtagsereignis)."
},
"search_range": {
- "name": "Custom Search Range",
- "description": "Define precise start and end times for the search. Overrides Search Scope when set."
+ "name": "Eigener Suchbereich",
+ "description": "Lege präzise Start- und Endzeiten für die Suche fest. Überschreibt den Suchumfang, wenn gesetzt."
},
"time_alternatives": {
- "name": "Advanced Time Options",
- "description": "Alternative ways to define the search range using time-of-day and minute offsets."
+ "name": "Erweiterte Zeitoptionen",
+ "description": "Alternative Möglichkeiten, den Suchbereich über Tageszeit und Minutenversätze festzulegen."
},
"price_filter": {
- "name": "Price Level Filter",
- "description": "Restrict search to intervals within the specified Tibber price level range."
+ "name": "Preisniveau-Filter",
+ "description": "Beschränke die Suche auf Intervalle innerhalb des angegebenen Tibber-Preisniveaus."
},
"search_tuning": {
- "name": "Search Algorithm Tuning",
- "description": "Fine-tune how the search handles outliers, minimum quality thresholds, and fallback behavior."
+ "name": "Suchalgorithmus-Feinabstimmung",
+ "description": "Stelle fein ein, wie die Suche mit Ausreißern, Mindestqualitäts-Schwellen und Rückfallverhalten umgeht."
},
"economics": {
- "name": "Economic Filters",
- "description": "Filter charging intervals by maximum cost or expected later discharge value."
+ "name": "Wirtschaftliche Filter",
+ "description": "Filtere Ladeintervalle nach maximalen Kosten oder erwartetem späteren Entladewert."
},
"output": {
- "name": "Output Options",
- "description": "Control output format: comparison details and currency unit."
+ "name": "Ausgabeoptionen",
+ "description": "Steuere das Ausgabeformat: Vergleichsdetails und Währungseinheit."
}
},
"fields": {
"entry_id": {
- "name": "Entry ID",
- "description": "The config entry ID for the Tibber integration."
+ "name": "Eintrags-ID",
+ "description": "Die Konfigurationseintrags-ID der Tibber-Integration."
},
"max_charge_power_w": {
- "name": "Maximum Charge Power",
- "description": "Maximum charging power in watts. This defines the upper bound for fixed, continuous, or stepped charging schedules."
+ "name": "Maximale Ladeleistung",
+ "description": "Maximale Ladeleistung in Watt. Sie definiert die Obergrenze für festes, kontinuierliches oder gestuftes Laden."
},
"battery_capacity_kwh": {
- "name": "Battery Capacity",
- "description": "Usable battery capacity in kWh. Required when current or target SoC is provided as a percentage."
+ "name": "Batteriekapazität",
+ "description": "Nutzbare Batteriekapazität in kWh. Erforderlich, wenn aktueller oder Ziel-SoC in Prozent angegeben wird."
},
"current_soc_percent": {
- "name": "Current SoC (%)",
- "description": "Current battery state of charge in percent. Cannot be combined with Current SoC (kWh)."
+ "name": "Aktueller SoC (%)",
+ "description": "Aktueller Ladezustand der Batterie in Prozent. Kann nicht mit Aktueller SoC (kWh) kombiniert werden."
},
"current_soc_kwh": {
- "name": "Current SoC (kWh)",
- "description": "Current battery state of charge in kWh. Cannot be combined with Current SoC (%)."
+ "name": "Aktueller SoC (kWh)",
+ "description": "Aktueller Ladezustand der Batterie in kWh. Kann nicht mit Aktueller SoC (%) kombiniert werden."
},
"target_soc_percent": {
- "name": "Target SoC (%)",
- "description": "Desired battery state of charge in percent. Cannot be combined with Target SoC (kWh)."
+ "name": "Ziel-SoC (%)",
+ "description": "Gewünschter Ladezustand der Batterie in Prozent. Kann nicht mit Ziel-SoC (kWh) kombiniert werden."
},
"target_soc_kwh": {
- "name": "Target SoC (kWh)",
- "description": "Desired battery state of charge in kWh. Cannot be combined with Target SoC (%)."
+ "name": "Ziel-SoC (kWh)",
+ "description": "Gewünschter Ladezustand der Batterie in kWh. Kann nicht mit Ziel-SoC (%) kombiniert werden."
},
"charging_efficiency": {
- "name": "Charging Efficiency",
- "description": "Fraction of grid energy that is stored in the battery. Example: 0.92 means 8% charging losses."
+ "name": "Ladewirkungsgrad",
+ "description": "Anteil der Netzenergie, der in der Batterie gespeichert wird. Beispiel: 0,92 bedeutet 8 % Ladeverluste."
},
"search_scope": {
- "name": "Search Scope",
- "description": "Shorthand for common search ranges. Overrides all other time range options. today / tomorrow = full calendar day, remaining_today = now until midnight, next_24h / next_48h = rolling window from now."
+ "name": "Suchumfang",
+ "description": "Kurzform für gängige Suchbereiche. Überschreibt alle anderen Zeitbereichsoptionen. today / tomorrow = ganzer Kalendertag, remaining_today = jetzt bis Mitternacht, next_24h / next_48h = gleitendes Fenster ab jetzt."
},
"include_current_interval": {
- "name": "Include Current Interval",
- "description": "Include the currently running 15-minute interval in the search. When enabled, charging may begin in the current interval if it is part of the cheapest result."
+ "name": "Aktuelles Intervall einbeziehen",
+ "description": "Bezieht das aktuell laufende 15-Minuten-Intervall in die Suche ein. Wenn aktiviert, kann das Laden im aktuellen Intervall beginnen, sofern es Teil des günstigsten Ergebnisses ist."
},
"search_start": {
- "name": "Search Start",
- "description": "Start of the search range as exact date and time. Highest priority — overrides all other start options. Defaults to now if not specified."
+ "name": "Suchbeginn",
+ "description": "Beginn des Suchbereichs als genaues Datum und Uhrzeit. Höchste Priorität – überschreibt alle anderen Startoptionen. Standard ist jetzt, falls nicht angegeben."
},
"search_end": {
- "name": "Search End",
- "description": "End of the search range as exact date and time. Highest priority — overrides all other end options. Defaults to end of tomorrow if not specified."
+ "name": "Suchende",
+ "description": "Ende des Suchbereichs als genaues Datum und Uhrzeit. Höchste Priorität – überschreibt alle anderen Endoptionen. Standard ist Ende morgen, falls nicht angegeben."
},
"must_finish_by": {
- "name": "Must Finish By",
- "description": "Deadline: charging must be finished by this time. The search range ends at this deadline — the service finds the cheapest intervals that complete before it. Cannot be combined with Search End, Search End Time, or Search End Offset."
+ "name": "Fertig spätestens bis",
+ "description": "Stichtag: Das Laden muss bis zu diesem Zeitpunkt abgeschlossen sein. Der Suchbereich endet an diesem Stichtag – der Dienst findet die günstigsten Intervalle, die vorher abschließen. Kann nicht mit Suchende, Suchende-Uhrzeit oder Suchende-Versatz kombiniert werden."
},
"search_start_time": {
- "name": "Search Start Time",
- "description": "Alternative: start searching at this time of day. Combine with day offset. Ignored if Search Start (datetime) is set."
+ "name": "Suchbeginn-Uhrzeit",
+ "description": "Alternative: Beginne die Suche zu dieser Tageszeit. Mit Tagesversatz kombinieren. Wird ignoriert, wenn Suchbeginn (Datum/Zeit) gesetzt ist."
},
"search_start_day_offset": {
- "name": "Search Start Day Offset",
- "description": "Day offset for Search Start Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search Start Time."
+ "name": "Suchbeginn-Tagesversatz",
+ "description": "Tagesversatz für die Suchbeginn-Uhrzeit. -7 bis 2: -1 = gestern, 0 = heute, 1 = morgen. Nur mit Suchbeginn-Uhrzeit verwendet."
},
"search_end_time": {
- "name": "Search End Time",
- "description": "Alternative: stop searching at this time of day. Combine with day offset. Ignored if Search End (datetime) is set."
+ "name": "Suchende-Uhrzeit",
+ "description": "Alternative: Beende die Suche zu dieser Tageszeit. Mit Tagesversatz kombinieren. Wird ignoriert, wenn Suchende (Datum/Zeit) gesetzt ist."
},
"search_end_day_offset": {
- "name": "Search End Day Offset",
- "description": "Day offset for Search End Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search End Time."
+ "name": "Suchende-Tagesversatz",
+ "description": "Tagesversatz für die Suchende-Uhrzeit. -7 bis 2: -1 = gestern, 0 = heute, 1 = morgen. Nur mit Suchende-Uhrzeit verwendet."
},
"search_start_offset_minutes": {
- "name": "Search Start Offset (minutes)",
- "description": "Alternative: start searching this many minutes from now. Positive = future, negative = past. Ignored if Search Start or Search Start Time is set."
+ "name": "Suchbeginn-Versatz (Minuten)",
+ "description": "Alternative: Beginne die Suche so viele Minuten ab jetzt. Positiv = Zukunft, negativ = Vergangenheit. Wird ignoriert, wenn Suchbeginn oder Suchbeginn-Uhrzeit gesetzt ist."
},
"search_end_offset_minutes": {
- "name": "Search End Offset (minutes)",
- "description": "Alternative: stop searching this many minutes from now. Positive = future, negative = past. Ignored if Search End or Search End Time is set."
+ "name": "Suchende-Versatz (Minuten)",
+ "description": "Alternative: Beende die Suche so viele Minuten ab jetzt. Positiv = Zukunft, negativ = Vergangenheit. Wird ignoriert, wenn Suchende oder Suchende-Uhrzeit gesetzt ist."
},
"max_price_level": {
- "name": "Maximum Price Level",
- "description": "Only consider intervals at or below this Tibber price level. very_cheap = most restrictive, very_expensive = no restriction."
+ "name": "Maximales Preisniveau",
+ "description": "Berücksichtige nur Intervalle bei oder unter diesem Tibber-Preisniveau. very_cheap = am restriktivsten, very_expensive = keine Einschränkung."
},
"min_price_level": {
- "name": "Minimum Price Level",
- "description": "Only consider intervals at or above this Tibber price level. Useful to exclude unrealistically cheap negative-price-only windows from mixed searches."
+ "name": "Minimales Preisniveau",
+ "description": "Berücksichtige nur Intervalle bei oder über diesem Tibber-Preisniveau. Nützlich, um unrealistisch günstige Fenster mit ausschließlich negativen Preisen aus gemischten Suchen auszuschließen."
},
"include_comparison_details": {
- "name": "Include Comparison Details",
- "description": "Enrich the price_comparison result with additional fields: comparison_price_min and comparison_price_max."
+ "name": "Vergleichsdetails einbeziehen",
+ "description": "Reichert das Ergebnis price_comparison um zusätzliche Felder an: comparison_price_min und comparison_price_max."
},
"use_base_unit": {
- "name": "Use Base Currency Unit",
- "description": "Force prices in base currency (EUR, NOK) instead of the configured display unit (ct, øre). Useful for calculations."
+ "name": "Basiswährungseinheit verwenden",
+ "description": "Erzwingt Preise in der Basiswährung (EUR, NOK) statt in der konfigurierten Anzeigeeinheit (ct, øre). Nützlich für Berechnungen."
},
"smooth_outliers": {
- "name": "Smooth Outliers",
- "description": "Smooth price outliers before searching. Outlier intervals are temporarily replaced by the average of their neighbors, so a single spike or dip does not dominate the result. The response always shows the original (unsmoothed) prices. Default: enabled."
+ "name": "Ausreißer glätten",
+ "description": "Glättet Preisausreißer vor der Suche. Ausreißer-Intervalle werden vorübergehend durch den Durchschnitt ihrer Nachbarn ersetzt, sodass eine einzelne Spitze oder ein Tief das Ergebnis nicht dominiert. Die Antwort zeigt immer die ursprünglichen (ungeglätteten) Preise. Standard: aktiviert."
},
"min_distance_from_avg": {
- "name": "Min. Distance from Average",
- "description": "Require the selected charging intervals to be at least this percentage below the average price of the full search range. Leave empty to disable."
+ "name": "Mindestabstand zum Durchschnitt",
+ "description": "Verlange, dass die ausgewählten Ladeintervalle mindestens diesen Prozentsatz unter dem Durchschnittspreis des gesamten Suchbereichs liegen. Leer lassen zum Deaktivieren."
},
"allow_relaxation": {
- "name": "Allow relaxation",
- "description": "Progressively relax filters to guarantee a result when possible. Phases: 1) Reduce/remove distance threshold 2) Expand level filters 3) Reduce duration. Default: enabled."
+ "name": "Lockerung zulassen",
+ "description": "Lockert die Filter schrittweise, um – wenn möglich – ein Ergebnis zu garantieren. Phasen: 1) Abstandsschwelle reduzieren/entfernen 2) Preisniveau-Filter erweitern 3) Dauer verkürzen. Standard: aktiviert."
},
"duration_flexibility_minutes": {
- "name": "Duration flexibility",
- "description": "Maximum minutes the automatically calculated charging duration may be shortened during relaxation (0–120, step 15). Leave empty for automatic calculation."
+ "name": "Dauer-Flexibilität",
+ "description": "Maximale Minuten, um die die automatisch berechnete Ladedauer während der Lockerung verkürzt werden darf (0–120, Schritt 15). Leer lassen für automatische Berechnung."
},
"must_reach_soc_percent": {
- "name": "Minimum SoC by Deadline (%)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (kWh)."
+ "name": "Mindest-SoC bis Stichtag (%)",
+ "description": "Mindestladezustand der Batterie, der bis zum Stichtag erreicht werden muss. Kann nicht mit Mindest-SoC bis Stichtag (kWh) kombiniert werden."
},
"must_reach_soc_kwh": {
- "name": "Minimum SoC by Deadline (kWh)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (%)."
+ "name": "Mindest-SoC bis Stichtag (kWh)",
+ "description": "Mindestladezustand der Batterie, der bis zum Stichtag erreicht werden muss. Kann nicht mit Mindest-SoC bis Stichtag (%) kombiniert werden."
},
"min_charge_power_w": {
- "name": "Minimum Charge Power",
- "description": "Enable continuous charging mode. The planner may reduce the last interval down to this minimum power instead of always using the maximum."
+ "name": "Minimale Ladeleistung",
+ "description": "Aktiviert den kontinuierlichen Lademodus. Der Planer darf das letzte Intervall bis zu dieser Mindestleistung reduzieren, statt immer die maximale Leistung zu nutzen."
},
"charge_power_steps_w": {
- "name": "Charge Power Steps",
- "description": "Enable stepped charging mode. Provide the allowed power steps in watts as a list, for example [1380, 4140, 11000]. The planner picks the smallest step that still covers the remaining energy in the final interval. Mutually exclusive with Minimum Charge Power."
+ "name": "Ladeleistungsstufen",
+ "description": "Aktiviert den gestuften Lademodus. Gib die erlaubten Leistungsstufen in Watt als Liste an, zum Beispiel [1380, 4140, 11000]. Der Planer wählt die kleinste Stufe, die die verbleibende Energie im letzten Intervall noch deckt. Schließt sich mit Minimale Ladeleistung gegenseitig aus."
},
"grid_import_limit_w": {
- "name": "Grid Import Limit",
- "description": "Upper limit for charging power drawn from the grid in watts. Useful when the charger must share available power with other loads."
+ "name": "Netzbezugsgrenze",
+ "description": "Obergrenze für die aus dem Netz bezogene Ladeleistung in Watt. Nützlich, wenn der Lader die verfügbare Leistung mit anderen Verbrauchern teilen muss."
},
"must_reach_by": {
- "name": "Must Reach By",
- "description": "Absolute deadline for must_reach_soc_*. The planner first guarantees the minimum SoC before this moment, then continues with the remaining target if possible."
+ "name": "Erreichen bis",
+ "description": "Absoluter Stichtag für must_reach_soc_*. Der Planer garantiert zuerst den Mindest-SoC vor diesem Zeitpunkt und fährt dann – wenn möglich – mit dem verbleibenden Ziel fort."
},
"must_reach_by_event": {
- "name": "Deadline Event",
- "description": "Alternative deadline derived from coordinator data. Use this instead of Must Reach By to plan around midnight, the next peak period, or the next best-price period end."
+ "name": "Stichtagsereignis",
+ "description": "Alternativer Stichtag, abgeleitet aus Koordinatordaten. Verwende dies statt Erreichen bis, um um Mitternacht, die nächste Hochpreisphase oder das Ende der nächsten Bestpreisphase herum zu planen."
},
"discharging_efficiency": {
- "name": "Discharging Efficiency",
- "description": "Fraction of stored battery energy that is still usable when later discharged. Used for profitability calculations."
+ "name": "Entladewirkungsgrad",
+ "description": "Anteil der gespeicherten Batterieenergie, der beim späteren Entladen noch nutzbar ist. Wird für Wirtschaftlichkeitsberechnungen verwendet."
},
"expected_discharge_price": {
- "name": "Expected Discharge Price",
- "description": "Expected value of each discharged kWh. Intervals above the break-even price can be filtered when Reserve For Discharge is enabled."
+ "name": "Erwarteter Entladepreis",
+ "description": "Erwarteter Wert jeder entladenen kWh. Intervalle über dem Break-even-Preis können gefiltert werden, wenn Für Entladung reservieren aktiviert ist."
},
"reserve_for_discharge": {
- "name": "Reserve For Discharge",
- "description": "Keep only intervals that are economically sensible for a later discharge based on expected discharge price and round-trip efficiency."
+ "name": "Für Entladung reservieren",
+ "description": "Behält nur Intervalle, die für eine spätere Entladung wirtschaftlich sinnvoll sind – basierend auf erwartetem Entladepreis und Roundtrip-Wirkungsgrad."
},
"max_cost_per_kwh": {
- "name": "Maximum Charge Price",
- "description": "Discard candidate intervals above this price per kWh before scheduling. Uses the selected price unit."
+ "name": "Maximaler Ladepreis",
+ "description": "Verwirft Kandidaten-Intervalle über diesem Preis pro kWh vor der Planung. Verwendet die gewählte Preiseinheit."
},
"min_charge_duration_minutes": {
- "name": "Minimum Charge Duration",
- "description": "Merge short isolated intervals into longer charging blocks where possible. Useful for chargers that should avoid very short runs."
+ "name": "Minimale Ladedauer",
+ "description": "Führt kurze isolierte Intervalle nach Möglichkeit zu längeren Ladeblöcken zusammen. Nützlich für Lader, die sehr kurze Läufe vermeiden sollten."
},
"max_cycles_per_day": {
- "name": "Maximum Charge Cycles Per Day",
- "description": "Limit how many separate charging segments may be used per day. The planner keeps the cheapest segments within this limit."
+ "name": "Maximale Ladezyklen pro Tag",
+ "description": "Begrenzt, wie viele separate Ladesegmente pro Tag genutzt werden dürfen. Der Planer behält die günstigsten Segmente innerhalb dieser Grenze."
}
}
},
@@ -2505,9 +2505,9 @@
},
"charging_deadline_event": {
"options": {
- "midnight": "Midnight",
- "next_peak_period": "Next Peak Period",
- "next_best_period_end": "End of Next Best-Price Period"
+ "midnight": "Mitternacht",
+ "next_peak_period": "Nächste Hochpreisphase",
+ "next_best_period_end": "Ende der nächsten Bestpreisphase"
}
}
}
diff --git a/custom_components/tibber_prices/translations/en.json b/custom_components/tibber_prices/translations/en.json
index b5a61e4..616a8c9 100644
--- a/custom_components/tibber_prices/translations/en.json
+++ b/custom_components/tibber_prices/translations/en.json
@@ -1570,7 +1570,7 @@
}
},
"find_cheapest_block": {
- "name": "Find Cheapest Block",
+ "name": "Find Cheapest Block (Experimental)",
"description": "Finds the cheapest contiguous time window of a given duration. Designed for appliance scheduling: dishwasher, washing machine, dryer, etc. Returns the single cheapest window with start/end times and price statistics. If no window is found, the response includes a stable reason code in the reason field (for example: no_data_in_range, no_intervals_matching_level_filter, insufficient_intervals_after_filter, insufficient_contiguous_window).",
"sections": {
"search_range": {
@@ -1690,7 +1690,7 @@
}
},
"find_most_expensive_block": {
- "name": "Find Most Expensive Block",
+ "name": "Find Most Expensive Block (Experimental)",
"description": "Finds the most expensive contiguous time window of a given duration. Useful for identifying peak price periods to avoid. Returns the single most expensive window with start/end times and price statistics.",
"sections": {
"search_range": {
@@ -1810,7 +1810,7 @@
}
},
"find_cheapest_hours": {
- "name": "Find Cheapest Hours",
+ "name": "Find Cheapest Hours (Experimental)",
"description": "Finds the cheapest intervals totaling a given duration, not necessarily contiguous. Designed for flexible loads: battery charging, EV, water heater. Returns a schedule of intervals grouped into contiguous segments. If no schedule is found, the response includes a stable reason code in the reason field (for example: no_data_in_range, no_intervals_matching_level_filter, insufficient_intervals_after_filter, insufficient_intervals_for_constraints).",
"sections": {
"search_range": {
@@ -1934,7 +1934,7 @@
}
},
"find_most_expensive_hours": {
- "name": "Find Most Expensive Hours",
+ "name": "Find Most Expensive Hours (Experimental)",
"description": "Finds the most expensive intervals totaling a given duration, not necessarily contiguous. Useful for identifying peak price periods to avoid. Returns a schedule of intervals grouped into contiguous segments.",
"sections": {
"search_range": {
@@ -2058,7 +2058,7 @@
}
},
"find_cheapest_schedule": {
- "name": "Find Cheapest Schedule",
+ "name": "Find Cheapest Schedule (Experimental)",
"description": "Schedules multiple appliances optimally without time overlap. Each task gets the cheapest available contiguous window; tasks are placed longest-first for efficient packing unless sequential ordering is enabled. Returns a per-task schedule with start/end times and price stats. If scheduling is incomplete, the response includes a stable reason code in the reason field (for example: no_data_in_range, no_intervals_matching_level_filter, insufficient_contiguous_window, insufficient_contiguous_window_for_some_tasks).",
"sections": {
"search_range": {
@@ -2174,7 +2174,7 @@
}
},
"plan_charging": {
- "name": "Plan Charging",
+ "name": "Plan Charging (Experimental)",
"description": "Creates a lowest-cost charging schedule from battery parameters instead of a fixed duration. Supports fixed, continuous, or stepped charging power, optional deadline-aware minimum SoC planning, and economic filtering for later discharge use cases. Returns a per-interval charging plan with power, energy, SoC progression, segment grouping, total cost, and profitability details. If no schedule is found, the response includes a stable reason code in the reason field (for example: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
"sections": {
"battery": {
diff --git a/custom_components/tibber_prices/translations/nb.json b/custom_components/tibber_prices/translations/nb.json
index 388c104..7ed6b40 100644
--- a/custom_components/tibber_prices/translations/nb.json
+++ b/custom_components/tibber_prices/translations/nb.json
@@ -1029,34 +1029,34 @@
}
},
"current_price_phase_end_time": {
- "name": "Current Phase End Time"
+ "name": "Gjeldende fase sluttid"
},
"current_price_phase_remaining_minutes": {
- "name": "Current Phase Remaining"
+ "name": "Gjeldende fase gjenværende"
},
"current_price_phase_duration": {
- "name": "Current Phase Duration"
+ "name": "Gjeldende fase varighet"
},
"current_price_phase_progress": {
- "name": "Current Phase Progress"
+ "name": "Gjeldende fase fremgang"
},
"next_rising_phase_start_time": {
- "name": "Next Rising Phase Start"
+ "name": "Neste stigende fase start"
},
"next_falling_phase_start_time": {
- "name": "Next Falling Phase Start"
+ "name": "Neste fallende fase start"
},
"next_flat_phase_start_time": {
- "name": "Next Flat Phase Start"
+ "name": "Neste flate fase start"
},
"next_rising_phase_in_minutes": {
- "name": "Time to Next Rising Phase"
+ "name": "Tid til neste stigende fase"
},
"next_falling_phase_in_minutes": {
- "name": "Time to Next Falling Phase"
+ "name": "Tid til neste fallende fase"
},
"next_flat_phase_in_minutes": {
- "name": "Time to Next Flat Phase"
+ "name": "Tid til neste flate fase"
},
"chart_data_export": {
"name": "Diagramdataeksport",
@@ -1116,13 +1116,13 @@
"name": "Lavpris-periode"
},
"in_rising_price_phase": {
- "name": "In Rising Price Phase"
+ "name": "I stigende prisfase"
},
"in_falling_price_phase": {
- "name": "In Falling Price Phase"
+ "name": "I fallende prisfase"
},
"in_flat_price_phase": {
- "name": "In Flat Price Phase"
+ "name": "I flat prisfase"
},
"connection": {
"name": "Tibber API-tilkobling"
@@ -1237,7 +1237,7 @@
"message": "Sluttidspunktet ({search_end}) må være etter starttidspunktet ({search_start}). Sjekk tid-parameterne og eventuelle day-offsets."
},
"price_fetch_failed": {
- "message": "Unable to fetch price data for the requested search range."
+ "message": "Kunne ikke hente prisdata for det forespurte søkeområdet."
},
"invalid_search_scope": {
"message": "Ugyldig søkeområde. Gyldige verdier er: today, tomorrow, remaining_today, next_24h, next_48h."
@@ -1309,49 +1309,49 @@
"message": "Kan ikke konvertere verdi '{raw_value}' fra '{entity_id}' ({attribute}) til {expected_type}. Kontroller at entiteten gir en kompatibel verdi."
},
"capacity_required_for_percent": {
- "message": "battery_capacity_kwh is required when current or target SoC is provided as a percentage."
+ "message": "battery_capacity_kwh er påkrevd når nåværende eller mål-SoC oppgis i prosent."
},
"ambiguous_soc_input": {
- "message": "The field {field} was provided both as percent and as kWh. Use only one representation."
+ "message": "Feltet {field} ble oppgitt både i prosent og i kWh. Bruk kun én representasjon."
},
"already_at_target": {
- "message": "Current state of charge is already at or above the target. No charging schedule is needed."
+ "message": "Nåværende ladetilstand er allerede på eller over målet. Ingen ladeplan er nødvendig."
},
"target_exceeds_capacity": {
- "message": "Target SoC ({target_soc_kwh} kWh) exceeds battery capacity ({capacity_kwh} kWh)."
+ "message": "Mål-SoC ({target_soc_kwh} kWh) overstiger batterikapasiteten ({capacity_kwh} kWh)."
},
"energy_unreachable": {
- "message": "The requested charging target cannot be reached within the available search window and charging constraints."
+ "message": "Det forespurte ladenmålet kan ikke nås innenfor det tilgjengelige søkevinduet og ladebegrensningene."
},
"missing_current_soc": {
- "message": "Provide either current_soc_percent or current_soc_kwh."
+ "message": "Oppgi enten current_soc_percent eller current_soc_kwh."
},
"missing_target_soc": {
- "message": "Provide either target_soc_percent or target_soc_kwh."
+ "message": "Oppgi enten target_soc_percent eller target_soc_kwh."
},
"missing_deadline_for_must_reach": {
- "message": "Provide must_reach_by or must_reach_by_event when using must_reach_soc_percent or must_reach_soc_kwh."
+ "message": "Oppgi must_reach_by eller must_reach_by_event når du bruker must_reach_soc_percent eller must_reach_soc_kwh."
},
"missing_must_reach_soc": {
- "message": "Provide must_reach_soc_percent or must_reach_soc_kwh when using a must_reach deadline."
+ "message": "Oppgi must_reach_soc_percent eller must_reach_soc_kwh når du bruker en must_reach-frist."
},
"invalid_must_reach_soc": {
- "message": "The minimum state of charge by deadline must be between current and target state of charge."
+ "message": "Minimums ladetilstand innen frist må være mellom nåværende og mål-ladetilstand."
},
"power_strategy_conflict": {
- "message": "Use either min_charge_power_w or charge_power_steps_w, not both at the same time."
+ "message": "Bruk enten min_charge_power_w eller charge_power_steps_w, ikke begge samtidig."
},
"grid_limit_too_low": {
- "message": "grid_import_limit_w is lower than the minimum required charging power."
+ "message": "grid_import_limit_w er lavere enn den minimalt påkrevde ladeeffekten."
},
"deadline_conflict": {
- "message": "Use either must_reach_by or must_reach_by_event, not both at the same time."
+ "message": "Bruk enten must_reach_by eller must_reach_by_event, ikke begge samtidig."
},
"deadline_event_not_available": {
- "message": "The selected deadline event is not available in the current coordinator data."
+ "message": "Den valgte fristhendelsen er ikke tilgjengelig i de gjeldende koordinatordataene."
},
"deadline_outside_search_range": {
- "message": "The resolved deadline must be inside the selected search range."
+ "message": "Den oppløste fristen må være innenfor det valgte søkeområdet."
}
},
"services": {
@@ -1570,7 +1570,7 @@
}
},
"find_cheapest_block": {
- "name": "Finn billigste blokk",
+ "name": "Finn billigste blokk (Eksperimentell)",
"description": "Finner det billigste sammenhengende tidsvinduet med en gitt varighet. Designet for apparatplanlegging: oppvaskmaskin, vaskemaskin, tørketrommel osv. Returnerer det billigste vinduet med start-/sluttider og prisstatistikk.",
"sections": {
"search_range": {
@@ -1690,7 +1690,7 @@
}
},
"find_most_expensive_block": {
- "name": "Finn dyreste blokk",
+ "name": "Finn dyreste blokk (Eksperimentell)",
"description": "Finner det dyreste sammenhengende tidsvinduet med en gitt varighet. Nyttig for å identifisere topprisperioder som bør unngås. Returnerer det dyreste vinduet med start-/sluttider og prisstatistikk.",
"sections": {
"search_range": {
@@ -1810,7 +1810,7 @@
}
},
"find_cheapest_hours": {
- "name": "Finn billigste timer",
+ "name": "Finn billigste timer (Eksperimentell)",
"description": "Finner de billigste intervallene for en gitt total varighet, ikke nødvendigvis sammenhengende. Designet for fleksible laster: batterilading, elbil, varmtvannsbereder. Returnerer en tidsplan med intervaller gruppert i sammenhengende segmenter.",
"sections": {
"search_range": {
@@ -1934,7 +1934,7 @@
}
},
"find_most_expensive_hours": {
- "name": "Finn dyreste timer",
+ "name": "Finn dyreste timer (Eksperimentell)",
"description": "Finner de dyreste intervallene for en gitt total varighet, ikke nødvendigvis sammenhengende. Nyttig for å identifisere topprisperioder som bør unngås. Returnerer en tidsplan med intervaller gruppert i sammenhengende segmenter.",
"sections": {
"search_range": {
@@ -2058,7 +2058,7 @@
}
},
"find_cheapest_schedule": {
- "name": "Finn billigste tidsplan",
+ "name": "Finn billigste tidsplan (Eksperimentell)",
"description": "Planlegger flere apparater optimalt uten tidsoverlapp. Hver oppgave tildeles det billigste tilgjengelige sammenhengende tidsvinduet.",
"sections": {
"search_range": {
@@ -2174,206 +2174,206 @@
}
},
"plan_charging": {
- "name": "Plan Charging",
- "description": "Creates a lowest-cost charging schedule from battery parameters instead of a fixed duration. Supports fixed, continuous, or stepped charging power, optional deadline-aware minimum SoC planning, and economic filtering for later discharge use cases. Returns a per-interval charging plan with power, energy, SoC progression, segment grouping, total cost, and profitability details. If no schedule is found, the response includes a stable reason code in the reason field (for example: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
+ "name": "Planlegg lading (eksperimentell)",
+ "description": "Lager en lavkost-ladeplan ut fra batteriparametere i stedet for en fast varighet. Støtter fast, kontinuerlig eller trinnvis ladeeffekt, valgfri planlegging med minimums-SoC innen en frist, og økonomisk filtrering for senere utladingsscenarier. Returnerer en ladeplan per intervall med effekt, energi, SoC-utvikling, segmentgruppering, totalkostnad og lønnsomhetsdetaljer. Hvis ingen plan finnes, inneholder svaret en stabil årsakskode i feltet «reason» (for eksempel: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
"sections": {
"battery": {
- "name": "Battery Parameters",
- "description": "Describe the battery: usable capacity, current and target SoC, and charging efficiency. You can provide SoC in percent (requires capacity) or directly in kWh."
+ "name": "Batteriparametere",
+ "description": "Beskriv batteriet: brukbar kapasitet, nåværende og ønsket SoC, og ladeeffektivitet. Du kan oppgi SoC i prosent (krever kapasitet) eller direkte i kWh."
},
"charging": {
- "name": "Charging Strategy",
- "description": "Configure variable-power charging behavior, grid limits, and minimum run-time constraints."
+ "name": "Ladestrategi",
+ "description": "Konfigurer lading med variabel effekt, nettgrenser og minimums kjøretidsbegrensninger."
},
"deadline": {
- "name": "Deadline Planning",
- "description": "Require a minimum state of charge by a specific moment (for example before a peak period). Set both the Minimum SoC by Deadline and when it must be reached — either as an absolute time (Must Reach By) or from a known event (Deadline Event)."
+ "name": "Fristplanlegging",
+ "description": "Krev en minimums ladetilstand innen et bestemt tidspunkt (for eksempel før en topprisperiode). Sett både Minimums-SoC innen frist og når den må nås – enten som et absolutt tidspunkt (Må nås innen) eller fra en kjent hendelse (Fristhendelse)."
},
"search_range": {
- "name": "Custom Search Range",
- "description": "Define precise start and end times for the search. Overrides Search Scope when set."
+ "name": "Egendefinert søkeområde",
+ "description": "Definer presise start- og sluttidspunkt for søket. Overstyrer Søkeomfang når det er satt."
},
"time_alternatives": {
- "name": "Advanced Time Options",
- "description": "Alternative ways to define the search range using time-of-day and minute offsets."
+ "name": "Avanserte tidsalternativer",
+ "description": "Alternative måter å definere søkeområdet på ved hjelp av tid på døgnet og minuttforskyvninger."
},
"price_filter": {
- "name": "Price Level Filter",
- "description": "Restrict search to intervals within the specified Tibber price level range."
+ "name": "Prisnivåfilter",
+ "description": "Begrens søket til intervaller innenfor det angitte Tibber-prisnivået."
},
"search_tuning": {
- "name": "Search Algorithm Tuning",
- "description": "Fine-tune how the search handles outliers, minimum quality thresholds, and fallback behavior."
+ "name": "Finjustering av søkealgoritme",
+ "description": "Finjuster hvordan søket håndterer avvik, minimums kvalitetsterskler og reserveatferd."
},
"economics": {
- "name": "Economic Filters",
- "description": "Filter charging intervals by maximum cost or expected later discharge value."
+ "name": "Økonomiske filtre",
+ "description": "Filtrer ladeintervaller etter maksimal kostnad eller forventet senere utladingsverdi."
},
"output": {
- "name": "Output Options",
- "description": "Control output format: comparison details and currency unit."
+ "name": "Utdataalternativer",
+ "description": "Styr utdataformatet: sammenligningsdetaljer og valutaenhet."
}
},
"fields": {
"entry_id": {
- "name": "Entry ID",
- "description": "The config entry ID for the Tibber integration."
+ "name": "Oppførings-ID",
+ "description": "Konfigurasjonsoppførings-ID-en for Tibber-integrasjonen."
},
"max_charge_power_w": {
- "name": "Maximum Charge Power",
- "description": "Maximum charging power in watts. This defines the upper bound for fixed, continuous, or stepped charging schedules."
+ "name": "Maksimal ladeeffekt",
+ "description": "Maksimal ladeeffekt i watt. Dette definerer øvre grense for fast, kontinuerlig eller trinnvis lading."
},
"battery_capacity_kwh": {
- "name": "Battery Capacity",
- "description": "Usable battery capacity in kWh. Required when current or target SoC is provided as a percentage."
+ "name": "Batterikapasitet",
+ "description": "Brukbar batterikapasitet i kWh. Påkrevd når nåværende eller mål-SoC oppgis i prosent."
},
"current_soc_percent": {
- "name": "Current SoC (%)",
- "description": "Current battery state of charge in percent. Cannot be combined with Current SoC (kWh)."
+ "name": "Nåværende SoC (%)",
+ "description": "Nåværende ladetilstand for batteriet i prosent. Kan ikke kombineres med Nåværende SoC (kWh)."
},
"current_soc_kwh": {
- "name": "Current SoC (kWh)",
- "description": "Current battery state of charge in kWh. Cannot be combined with Current SoC (%)."
+ "name": "Nåværende SoC (kWh)",
+ "description": "Nåværende ladetilstand for batteriet i kWh. Kan ikke kombineres med Nåværende SoC (%)."
},
"target_soc_percent": {
- "name": "Target SoC (%)",
- "description": "Desired battery state of charge in percent. Cannot be combined with Target SoC (kWh)."
+ "name": "Mål-SoC (%)",
+ "description": "Ønsket ladetilstand for batteriet i prosent. Kan ikke kombineres med Mål-SoC (kWh)."
},
"target_soc_kwh": {
- "name": "Target SoC (kWh)",
- "description": "Desired battery state of charge in kWh. Cannot be combined with Target SoC (%)."
+ "name": "Mål-SoC (kWh)",
+ "description": "Ønsket ladetilstand for batteriet i kWh. Kan ikke kombineres med Mål-SoC (%)."
},
"charging_efficiency": {
- "name": "Charging Efficiency",
- "description": "Fraction of grid energy that is stored in the battery. Example: 0.92 means 8% charging losses."
+ "name": "Ladeeffektivitet",
+ "description": "Andelen nettenergi som lagres i batteriet. Eksempel: 0,92 betyr 8 % ladetap."
},
"search_scope": {
- "name": "Search Scope",
- "description": "Shorthand for common search ranges. Overrides all other time range options. today / tomorrow = full calendar day, remaining_today = now until midnight, next_24h / next_48h = rolling window from now."
+ "name": "Søkeomfang",
+ "description": "Snarvei for vanlige søkeområder. Overstyrer alle andre tidsområdealternativer. today / tomorrow = hele kalenderdagen, remaining_today = nå til midnatt, next_24h / next_48h = rullerende vindu fra nå."
},
"include_current_interval": {
- "name": "Include Current Interval",
- "description": "Include the currently running 15-minute interval in the search. When enabled, charging may begin in the current interval if it is part of the cheapest result."
+ "name": "Inkluder gjeldende intervall",
+ "description": "Inkluder det 15-minutters intervallet som kjører nå i søket. Når aktivert, kan lading begynne i gjeldende intervall hvis det er en del av det billigste resultatet."
},
"search_start": {
- "name": "Search Start",
- "description": "Start of the search range as exact date and time. Highest priority — overrides all other start options. Defaults to now if not specified."
+ "name": "Søkestart",
+ "description": "Start på søkeområdet som nøyaktig dato og tid. Høyest prioritet – overstyrer alle andre startalternativer. Standard er nå hvis ikke angitt."
},
"search_end": {
- "name": "Search End",
- "description": "End of the search range as exact date and time. Highest priority — overrides all other end options. Defaults to end of tomorrow if not specified."
+ "name": "Søkeslutt",
+ "description": "Slutt på søkeområdet som nøyaktig dato og tid. Høyest prioritet – overstyrer alle andre sluttalternativer. Standard er slutten av morgendagen hvis ikke angitt."
},
"must_finish_by": {
- "name": "Must Finish By",
- "description": "Deadline: charging must be finished by this time. The search range ends at this deadline — the service finds the cheapest intervals that complete before it. Cannot be combined with Search End, Search End Time, or Search End Offset."
+ "name": "Må fullføres innen",
+ "description": "Frist: lading må være fullført innen dette tidspunktet. Søkeområdet slutter ved denne fristen – tjenesten finner de billigste intervallene som fullfører før den. Kan ikke kombineres med Søkeslutt, Søkesluttid eller Søkesluttforskyvning."
},
"search_start_time": {
- "name": "Search Start Time",
- "description": "Alternative: start searching at this time of day. Combine with day offset. Ignored if Search Start (datetime) is set."
+ "name": "Søkestarttidspunkt",
+ "description": "Alternativ: start søk på dette tidspunktet på døgnet. Kombiner med dagforskyvning. Ignoreres hvis Søkestart (dato/tid) er satt."
},
"search_start_day_offset": {
- "name": "Search Start Day Offset",
- "description": "Day offset for Search Start Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search Start Time."
+ "name": "Dagforskyvning for søkestart",
+ "description": "Dagforskyvning for søkestarttidspunktet. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Brukes kun med Søkestarttidspunkt."
},
"search_end_time": {
- "name": "Search End Time",
- "description": "Alternative: stop searching at this time of day. Combine with day offset. Ignored if Search End (datetime) is set."
+ "name": "Søkesluttidspunkt",
+ "description": "Alternativ: stopp søk på dette tidspunktet på døgnet. Kombiner med dagforskyvning. Ignoreres hvis Søkeslutt (dato/tid) er satt."
},
"search_end_day_offset": {
- "name": "Search End Day Offset",
- "description": "Day offset for Search End Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search End Time."
+ "name": "Dagforskyvning for søkeslutt",
+ "description": "Dagforskyvning for søkesluttidspunktet. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Brukes kun med Søkesluttidspunkt."
},
"search_start_offset_minutes": {
- "name": "Search Start Offset (minutes)",
- "description": "Alternative: start searching this many minutes from now. Positive = future, negative = past. Ignored if Search Start or Search Start Time is set."
+ "name": "Søkestartforskyvning (minutter)",
+ "description": "Alternativ: start søk så mange minutter fra nå. Positiv = fremtid, negativ = fortid. Ignoreres hvis Søkestart eller Søkestarttidspunkt er satt."
},
"search_end_offset_minutes": {
- "name": "Search End Offset (minutes)",
- "description": "Alternative: stop searching this many minutes from now. Positive = future, negative = past. Ignored if Search End or Search End Time is set."
+ "name": "Søkesluttforskyvning (minutter)",
+ "description": "Alternativ: stopp søk så mange minutter fra nå. Positiv = fremtid, negativ = fortid. Ignoreres hvis Søkeslutt eller Søkesluttidspunkt er satt."
},
"max_price_level": {
- "name": "Maximum Price Level",
- "description": "Only consider intervals at or below this Tibber price level. very_cheap = most restrictive, very_expensive = no restriction."
+ "name": "Maksimalt prisnivå",
+ "description": "Vurder kun intervaller på eller under dette Tibber-prisnivået. very_cheap = mest restriktiv, very_expensive = ingen begrensning."
},
"min_price_level": {
- "name": "Minimum Price Level",
- "description": "Only consider intervals at or above this Tibber price level. Useful to exclude unrealistically cheap negative-price-only windows from mixed searches."
+ "name": "Minimum prisnivå",
+ "description": "Vurder kun intervaller på eller over dette Tibber-prisnivået. Nyttig for å utelukke urealistisk billige vinduer med kun negative priser fra blandede søk."
},
"include_comparison_details": {
- "name": "Include Comparison Details",
- "description": "Enrich the price_comparison result with additional fields: comparison_price_min and comparison_price_max."
+ "name": "Inkluder sammenligningsdetaljer",
+ "description": "Berik price_comparison-resultatet med flere felt: comparison_price_min og comparison_price_max."
},
"use_base_unit": {
- "name": "Use Base Currency Unit",
- "description": "Force prices in base currency (EUR, NOK) instead of the configured display unit (ct, øre). Useful for calculations."
+ "name": "Bruk basisvalutaenhet",
+ "description": "Tving priser i basisvaluta (EUR, NOK) i stedet for den konfigurerte visningsenheten (ct, øre). Nyttig for beregninger."
},
"smooth_outliers": {
- "name": "Smooth Outliers",
- "description": "Smooth price outliers before searching. Outlier intervals are temporarily replaced by the average of their neighbors, so a single spike or dip does not dominate the result. The response always shows the original (unsmoothed) prices. Default: enabled."
+ "name": "Jevn ut avvik",
+ "description": "Jevn ut prisavvik før søk. Avviksintervaller erstattes midlertidig med gjennomsnittet av naboene sine, slik at en enkelt topp eller bunn ikke dominerer resultatet. Svaret viser alltid de opprinnelige (ujevnede) prisene. Standard: aktivert."
},
"min_distance_from_avg": {
- "name": "Min. Distance from Average",
- "description": "Require the selected charging intervals to be at least this percentage below the average price of the full search range. Leave empty to disable."
+ "name": "Min. avstand fra gjennomsnitt",
+ "description": "Krev at de valgte ladeintervallene ligger minst denne prosenten under gjennomsnittsprisen for hele søkeområdet. La stå tom for å deaktivere."
},
"allow_relaxation": {
- "name": "Allow relaxation",
- "description": "Progressively relax filters to guarantee a result when possible. Phases: 1) Reduce/remove distance threshold 2) Expand level filters 3) Reduce duration. Default: enabled."
+ "name": "Tillat oppmykning",
+ "description": "Myk gradvis opp filtre for å garantere et resultat når det er mulig. Faser: 1) Reduser/fjern avstandsterskel 2) Utvid nivåfiltre 3) Reduser varighet. Standard: aktivert."
},
"duration_flexibility_minutes": {
- "name": "Duration flexibility",
- "description": "Maximum minutes the automatically calculated charging duration may be shortened during relaxation (0–120, step 15). Leave empty for automatic calculation."
+ "name": "Varighetsfleksibilitet",
+ "description": "Maksimalt antall minutter den automatisk beregnede ladevarigheten kan forkortes under oppmykning (0–120, steg 15). La stå tom for automatisk beregning."
},
"must_reach_soc_percent": {
- "name": "Minimum SoC by Deadline (%)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (kWh)."
+ "name": "Minimums-SoC innen frist (%)",
+ "description": "Minimums ladetilstand for batteriet som må nås innen fristen. Kan ikke kombineres med Minimums-SoC innen frist (kWh)."
},
"must_reach_soc_kwh": {
- "name": "Minimum SoC by Deadline (kWh)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (%)."
+ "name": "Minimums-SoC innen frist (kWh)",
+ "description": "Minimums ladetilstand for batteriet som må nås innen fristen. Kan ikke kombineres med Minimums-SoC innen frist (%)."
},
"min_charge_power_w": {
- "name": "Minimum Charge Power",
- "description": "Enable continuous charging mode. The planner may reduce the last interval down to this minimum power instead of always using the maximum."
+ "name": "Minimum ladeeffekt",
+ "description": "Aktiver kontinuerlig lademodus. Planleggeren kan redusere det siste intervallet ned til denne minimumseffekten i stedet for alltid å bruke maksimum."
},
"charge_power_steps_w": {
- "name": "Charge Power Steps",
- "description": "Enable stepped charging mode. Provide the allowed power steps in watts as a list, for example [1380, 4140, 11000]. The planner picks the smallest step that still covers the remaining energy in the final interval. Mutually exclusive with Minimum Charge Power."
+ "name": "Ladeeffekttrinn",
+ "description": "Aktiver trinnvis lademodus. Oppgi de tillatte effekttrinnene i watt som en liste, for eksempel [1380, 4140, 11000]. Planleggeren velger det minste trinnet som fortsatt dekker gjenværende energi i det siste intervallet. Gjensidig utelukkende med Minimum ladeeffekt."
},
"grid_import_limit_w": {
- "name": "Grid Import Limit",
- "description": "Upper limit for charging power drawn from the grid in watts. Useful when the charger must share available power with other loads."
+ "name": "Nettimportgrense",
+ "description": "Øvre grense for ladeeffekt hentet fra nettet i watt. Nyttig når laderen må dele tilgjengelig effekt med andre laster."
},
"must_reach_by": {
- "name": "Must Reach By",
- "description": "Absolute deadline for must_reach_soc_*. The planner first guarantees the minimum SoC before this moment, then continues with the remaining target if possible."
+ "name": "Må nås innen",
+ "description": "Absolutt frist for must_reach_soc_*. Planleggeren garanterer først minimums-SoC før dette tidspunktet, og fortsetter deretter med det gjenværende målet hvis mulig."
},
"must_reach_by_event": {
- "name": "Deadline Event",
- "description": "Alternative deadline derived from coordinator data. Use this instead of Must Reach By to plan around midnight, the next peak period, or the next best-price period end."
+ "name": "Fristhendelse",
+ "description": "Alternativ frist avledet fra koordinatordata. Bruk dette i stedet for Må nås innen for å planlegge rundt midnatt, neste topprisperiode eller slutten av neste bestprisperiode."
},
"discharging_efficiency": {
- "name": "Discharging Efficiency",
- "description": "Fraction of stored battery energy that is still usable when later discharged. Used for profitability calculations."
+ "name": "Utladingseffektivitet",
+ "description": "Andelen lagret batterienergi som fortsatt er brukbar ved senere utlading. Brukes til lønnsomhetsberegninger."
},
"expected_discharge_price": {
- "name": "Expected Discharge Price",
- "description": "Expected value of each discharged kWh. Intervals above the break-even price can be filtered when Reserve For Discharge is enabled."
+ "name": "Forventet utladingspris",
+ "description": "Forventet verdi av hver utladede kWh. Intervaller over balansprisen kan filtreres når Reserver for utlading er aktivert."
},
"reserve_for_discharge": {
- "name": "Reserve For Discharge",
- "description": "Keep only intervals that are economically sensible for a later discharge based on expected discharge price and round-trip efficiency."
+ "name": "Reserver for utlading",
+ "description": "Behold kun intervaller som er økonomisk fornuftige for en senere utlading basert på forventet utladingspris og rundturseffektivitet."
},
"max_cost_per_kwh": {
- "name": "Maximum Charge Price",
- "description": "Discard candidate intervals above this price per kWh before scheduling. Uses the selected price unit."
+ "name": "Maksimal ladepris",
+ "description": "Forkast kandidatintervaller over denne prisen per kWh før planlegging. Bruker den valgte prisenheten."
},
"min_charge_duration_minutes": {
- "name": "Minimum Charge Duration",
- "description": "Merge short isolated intervals into longer charging blocks where possible. Useful for chargers that should avoid very short runs."
+ "name": "Minimum ladevarighet",
+ "description": "Slå sammen korte isolerte intervaller til lengre ladeblokker der det er mulig. Nyttig for ladere som bør unngå svært korte kjøringer."
},
"max_cycles_per_day": {
- "name": "Maximum Charge Cycles Per Day",
- "description": "Limit how many separate charging segments may be used per day. The planner keeps the cheapest segments within this limit."
+ "name": "Maksimalt antall ladesykluser per dag",
+ "description": "Begrens hvor mange separate ladesegmenter som kan brukes per dag. Planleggeren beholder de billigste segmentene innenfor denne grensen."
}
}
},
@@ -2505,9 +2505,9 @@
},
"charging_deadline_event": {
"options": {
- "midnight": "Midnight",
- "next_peak_period": "Next Peak Period",
- "next_best_period_end": "End of Next Best-Price Period"
+ "midnight": "Midnatt",
+ "next_peak_period": "Neste topprisperiode",
+ "next_best_period_end": "Slutten på neste bestprisperiode"
}
}
}
diff --git a/custom_components/tibber_prices/translations/nl.json b/custom_components/tibber_prices/translations/nl.json
index 19b2f42..0cac27c 100644
--- a/custom_components/tibber_prices/translations/nl.json
+++ b/custom_components/tibber_prices/translations/nl.json
@@ -1029,34 +1029,34 @@
}
},
"current_price_phase_end_time": {
- "name": "Current Phase End Time"
+ "name": "Huidige Fase Eindtijd"
},
"current_price_phase_remaining_minutes": {
- "name": "Current Phase Remaining"
+ "name": "Huidige Fase Resterend"
},
"current_price_phase_duration": {
- "name": "Current Phase Duration"
+ "name": "Huidige Fase Duur"
},
"current_price_phase_progress": {
- "name": "Current Phase Progress"
+ "name": "Huidige Fase Voortgang"
},
"next_rising_phase_start_time": {
- "name": "Next Rising Phase Start"
+ "name": "Volgende Stijgende Fase Start"
},
"next_falling_phase_start_time": {
- "name": "Next Falling Phase Start"
+ "name": "Volgende Dalende Fase Start"
},
"next_flat_phase_start_time": {
- "name": "Next Flat Phase Start"
+ "name": "Volgende Vlakke Fase Start"
},
"next_rising_phase_in_minutes": {
- "name": "Time to Next Rising Phase"
+ "name": "Tijd tot Volgende Stijgende Fase"
},
"next_falling_phase_in_minutes": {
- "name": "Time to Next Falling Phase"
+ "name": "Tijd tot Volgende Dalende Fase"
},
"next_flat_phase_in_minutes": {
- "name": "Time to Next Flat Phase"
+ "name": "Tijd tot Volgende Vlakke Fase"
},
"chart_data_export": {
"name": "Grafiekdata Export",
@@ -1116,13 +1116,13 @@
"name": "Beste Prijs Periode"
},
"in_rising_price_phase": {
- "name": "In Rising Price Phase"
+ "name": "In Stijgende Prijsfase"
},
"in_falling_price_phase": {
- "name": "In Falling Price Phase"
+ "name": "In Dalende Prijsfase"
},
"in_flat_price_phase": {
- "name": "In Flat Price Phase"
+ "name": "In Vlakke Prijsfase"
},
"connection": {
"name": "Tibber API Verbinding"
@@ -1237,7 +1237,7 @@
"message": "Het eindtijdstip ({search_end}) moet na het starttijdstip ({search_start}) liggen. Controleer je tijdparameters en eventuele day-offsets."
},
"price_fetch_failed": {
- "message": "Unable to fetch price data for the requested search range."
+ "message": "Kan geen prijsgegevens ophalen voor het gevraagde zoekbereik."
},
"invalid_search_scope": {
"message": "Ongeldig zoekbereik. Geldige waarden zijn: today, tomorrow, remaining_today, next_24h, next_48h."
@@ -1309,49 +1309,49 @@
"message": "Kan waarde '{raw_value}' van '{entity_id}' ({attribute}) niet converteren naar {expected_type}. Controleer of de entiteit een compatibele waarde biedt."
},
"capacity_required_for_percent": {
- "message": "battery_capacity_kwh is required when current or target SoC is provided as a percentage."
+ "message": "battery_capacity_kwh is vereist wanneer huidige of doel-SoC in procenten wordt opgegeven."
},
"ambiguous_soc_input": {
- "message": "The field {field} was provided both as percent and as kWh. Use only one representation."
+ "message": "Het veld {field} is zowel in procenten als in kWh opgegeven. Gebruik slechts één weergave."
},
"already_at_target": {
- "message": "Current state of charge is already at or above the target. No charging schedule is needed."
+ "message": "De huidige laadtoestand is al op of boven het doel. Er is geen laadschema nodig."
},
"target_exceeds_capacity": {
- "message": "Target SoC ({target_soc_kwh} kWh) exceeds battery capacity ({capacity_kwh} kWh)."
+ "message": "Doel-SoC ({target_soc_kwh} kWh) overschrijdt de batterijcapaciteit ({capacity_kwh} kWh)."
},
"energy_unreachable": {
- "message": "The requested charging target cannot be reached within the available search window and charging constraints."
+ "message": "Het gevraagde laaddoel kan niet worden bereikt binnen het beschikbare zoekvenster en de laadbeperkingen."
},
"missing_current_soc": {
- "message": "Provide either current_soc_percent or current_soc_kwh."
+ "message": "Geef current_soc_percent of current_soc_kwh op."
},
"missing_target_soc": {
- "message": "Provide either target_soc_percent or target_soc_kwh."
+ "message": "Geef target_soc_percent of target_soc_kwh op."
},
"missing_deadline_for_must_reach": {
- "message": "Provide must_reach_by or must_reach_by_event when using must_reach_soc_percent or must_reach_soc_kwh."
+ "message": "Geef must_reach_by of must_reach_by_event op wanneer je must_reach_soc_percent of must_reach_soc_kwh gebruikt."
},
"missing_must_reach_soc": {
- "message": "Provide must_reach_soc_percent or must_reach_soc_kwh when using a must_reach deadline."
+ "message": "Geef must_reach_soc_percent of must_reach_soc_kwh op wanneer je een must_reach-deadline gebruikt."
},
"invalid_must_reach_soc": {
- "message": "The minimum state of charge by deadline must be between current and target state of charge."
+ "message": "De minimale laadtoestand vóór de deadline moet tussen de huidige en de doel-laadtoestand liggen."
},
"power_strategy_conflict": {
- "message": "Use either min_charge_power_w or charge_power_steps_w, not both at the same time."
+ "message": "Gebruik min_charge_power_w of charge_power_steps_w, niet beide tegelijk."
},
"grid_limit_too_low": {
- "message": "grid_import_limit_w is lower than the minimum required charging power."
+ "message": "grid_import_limit_w is lager dan het minimaal vereiste laadvermogen."
},
"deadline_conflict": {
- "message": "Use either must_reach_by or must_reach_by_event, not both at the same time."
+ "message": "Gebruik must_reach_by of must_reach_by_event, niet beide tegelijk."
},
"deadline_event_not_available": {
- "message": "The selected deadline event is not available in the current coordinator data."
+ "message": "De geselecteerde deadlinegebeurtenis is niet beschikbaar in de huidige coördinatorgegevens."
},
"deadline_outside_search_range": {
- "message": "The resolved deadline must be inside the selected search range."
+ "message": "De afgeleide deadline moet binnen het geselecteerde zoekbereik liggen."
}
},
"services": {
@@ -1360,7 +1360,7 @@
"description": "Haal prijsgegevens op voor een specifiek tijdsbereik met automatische routing. Ontwikkelings- en testservice voor de price_info_for_range API-functie. Gebruikt automatisch PRICE_INFO, PRICE_INFO_RANGE of beide op basis van de tijdsbereikgrens.",
"fields": {
"entry_id": {
- "name": "Entry ID",
+ "name": "Item-ID",
"description": "De configuratie entry ID voor de Tibber integratie."
},
"start_time": {
@@ -1570,7 +1570,7 @@
}
},
"find_cheapest_block": {
- "name": "Goedkoopste blok vinden",
+ "name": "Goedkoopste blok vinden (Experimenteel)",
"description": "Vindt het goedkoopste aaneengesloten tijdvenster van een bepaalde duur. Ontworpen voor apparaatplanning: vaatwasser, wasmachine, droger enz. Retourneert het goedkoopste venster met start-/eindtijden en prijsstatistieken.",
"sections": {
"search_range": {
@@ -1690,7 +1690,7 @@
}
},
"find_most_expensive_block": {
- "name": "Duurste blok vinden",
+ "name": "Duurste blok vinden (Experimenteel)",
"description": "Vindt het duurste aaneengesloten tijdvenster van een bepaalde duur. Nuttig voor het identificeren van piekprijsperioden die vermeden moeten worden. Retourneert het duurste venster met start-/eindtijden en prijsstatistieken.",
"sections": {
"search_range": {
@@ -1810,7 +1810,7 @@
}
},
"find_cheapest_hours": {
- "name": "Goedkoopste uren vinden",
+ "name": "Goedkoopste uren vinden (Experimenteel)",
"description": "Vindt de goedkoopste intervallen voor een bepaalde totale duur, niet noodzakelijk aaneengesloten. Ontworpen voor flexibele belastingen: batterijladen, elektrisch voertuig, warmwaterboiler. Retourneert een schema van intervallen gegroepeerd in aaneengesloten segmenten.",
"sections": {
"search_range": {
@@ -1934,7 +1934,7 @@
}
},
"find_most_expensive_hours": {
- "name": "Duurste uren vinden",
+ "name": "Duurste uren vinden (Experimenteel)",
"description": "Vindt de duurste intervallen voor een bepaalde totale duur, niet noodzakelijk aaneengesloten. Nuttig voor het identificeren van piekprijsperioden die vermeden moeten worden. Retourneert een schema van intervallen gegroepeerd in aaneengesloten segmenten.",
"sections": {
"search_range": {
@@ -2058,7 +2058,7 @@
}
},
"find_cheapest_schedule": {
- "name": "Goedkoopste schema vinden",
+ "name": "Goedkoopste schema vinden (Experimenteel)",
"description": "Plant meerdere apparaten optimaal zonder tijdoverlap. Elke taak krijgt het goedkoopste beschikbare aaneengesloten tijdvenster.",
"sections": {
"search_range": {
@@ -2174,206 +2174,206 @@
}
},
"plan_charging": {
- "name": "Plan Charging",
- "description": "Creates a lowest-cost charging schedule from battery parameters instead of a fixed duration. Supports fixed, continuous, or stepped charging power, optional deadline-aware minimum SoC planning, and economic filtering for later discharge use cases. Returns a per-interval charging plan with power, energy, SoC progression, segment grouping, total cost, and profitability details. If no schedule is found, the response includes a stable reason code in the reason field (for example: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
+ "name": "Laden plannen (experimenteel)",
+ "description": "Maakt een schema voor laden tegen de laagste kosten op basis van batterijparameters in plaats van een vaste duur. Ondersteunt vast, continu of getrapt laadvermogen, optionele planning met een minimum-SoC vóór een deadline, en economische filtering voor latere ontladingsscenario's. Retourneert een laadschema per interval met vermogen, energie, SoC-verloop, segmentgroepering, totale kosten en winstgevendheidsdetails. Als er geen schema wordt gevonden, bevat het antwoord een stabiele redencode in het veld 'reason' (bijvoorbeeld: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
"sections": {
"battery": {
- "name": "Battery Parameters",
- "description": "Describe the battery: usable capacity, current and target SoC, and charging efficiency. You can provide SoC in percent (requires capacity) or directly in kWh."
+ "name": "Batterijparameters",
+ "description": "Beschrijf de batterij: bruikbare capaciteit, huidige en gewenste SoC, en laadrendement. Je kunt de SoC opgeven in procenten (vereist capaciteit) of direct in kWh."
},
"charging": {
- "name": "Charging Strategy",
- "description": "Configure variable-power charging behavior, grid limits, and minimum run-time constraints."
+ "name": "Laadstrategie",
+ "description": "Configureer laden met variabel vermogen, netlimieten en minimale looptijdbeperkingen."
},
"deadline": {
- "name": "Deadline Planning",
- "description": "Require a minimum state of charge by a specific moment (for example before a peak period). Set both the Minimum SoC by Deadline and when it must be reached — either as an absolute time (Must Reach By) or from a known event (Deadline Event)."
+ "name": "Deadlineplanning",
+ "description": "Eis een minimale laadtoestand vóór een bepaald moment (bijvoorbeeld vóór een piekperiode). Stel zowel de Minimum-SoC vóór deadline in als wanneer deze bereikt moet zijn – als absolute tijd (Bereiken vóór) of vanuit een bekende gebeurtenis (Deadlinegebeurtenis)."
},
"search_range": {
- "name": "Custom Search Range",
- "description": "Define precise start and end times for the search. Overrides Search Scope when set."
+ "name": "Aangepast zoekbereik",
+ "description": "Definieer precieze start- en eindtijden voor het zoeken. Overschrijft Zoekbereik wanneer ingesteld."
},
"time_alternatives": {
- "name": "Advanced Time Options",
- "description": "Alternative ways to define the search range using time-of-day and minute offsets."
+ "name": "Geavanceerde tijdopties",
+ "description": "Alternatieve manieren om het zoekbereik te definiëren met tijdstip van de dag en minuutverschuivingen."
},
"price_filter": {
- "name": "Price Level Filter",
- "description": "Restrict search to intervals within the specified Tibber price level range."
+ "name": "Prijsniveaufilter",
+ "description": "Beperk het zoeken tot intervallen binnen het opgegeven Tibber-prijsniveau."
},
"search_tuning": {
- "name": "Search Algorithm Tuning",
- "description": "Fine-tune how the search handles outliers, minimum quality thresholds, and fallback behavior."
+ "name": "Zoekalgoritme-afstemming",
+ "description": "Stem fijn af hoe het zoeken omgaat met uitschieters, minimale kwaliteitsdrempels en terugvalgedrag."
},
"economics": {
- "name": "Economic Filters",
- "description": "Filter charging intervals by maximum cost or expected later discharge value."
+ "name": "Economische filters",
+ "description": "Filter laadintervallen op maximale kosten of verwachte latere ontladingswaarde."
},
"output": {
- "name": "Output Options",
- "description": "Control output format: comparison details and currency unit."
+ "name": "Uitvoeropties",
+ "description": "Bepaal het uitvoerformaat: vergelijkingsdetails en valuta-eenheid."
}
},
"fields": {
"entry_id": {
- "name": "Entry ID",
- "description": "The config entry ID for the Tibber integration."
+ "name": "Item-ID",
+ "description": "De configuratie-item-ID voor de Tibber-integratie."
},
"max_charge_power_w": {
- "name": "Maximum Charge Power",
- "description": "Maximum charging power in watts. This defines the upper bound for fixed, continuous, or stepped charging schedules."
+ "name": "Maximaal laadvermogen",
+ "description": "Maximaal laadvermogen in watt. Dit bepaalt de bovengrens voor vaste, continue of getrapte laadschema's."
},
"battery_capacity_kwh": {
- "name": "Battery Capacity",
- "description": "Usable battery capacity in kWh. Required when current or target SoC is provided as a percentage."
+ "name": "Batterijcapaciteit",
+ "description": "Bruikbare batterijcapaciteit in kWh. Vereist wanneer huidige of doel-SoC in procenten wordt opgegeven."
},
"current_soc_percent": {
- "name": "Current SoC (%)",
- "description": "Current battery state of charge in percent. Cannot be combined with Current SoC (kWh)."
+ "name": "Huidige SoC (%)",
+ "description": "Huidige laadtoestand van de batterij in procenten. Kan niet worden gecombineerd met Huidige SoC (kWh)."
},
"current_soc_kwh": {
- "name": "Current SoC (kWh)",
- "description": "Current battery state of charge in kWh. Cannot be combined with Current SoC (%)."
+ "name": "Huidige SoC (kWh)",
+ "description": "Huidige laadtoestand van de batterij in kWh. Kan niet worden gecombineerd met Huidige SoC (%)."
},
"target_soc_percent": {
- "name": "Target SoC (%)",
- "description": "Desired battery state of charge in percent. Cannot be combined with Target SoC (kWh)."
+ "name": "Doel-SoC (%)",
+ "description": "Gewenste laadtoestand van de batterij in procenten. Kan niet worden gecombineerd met Doel-SoC (kWh)."
},
"target_soc_kwh": {
- "name": "Target SoC (kWh)",
- "description": "Desired battery state of charge in kWh. Cannot be combined with Target SoC (%)."
+ "name": "Doel-SoC (kWh)",
+ "description": "Gewenste laadtoestand van de batterij in kWh. Kan niet worden gecombineerd met Doel-SoC (%)."
},
"charging_efficiency": {
- "name": "Charging Efficiency",
- "description": "Fraction of grid energy that is stored in the battery. Example: 0.92 means 8% charging losses."
+ "name": "Laadrendement",
+ "description": "Deel van de netenergie dat in de batterij wordt opgeslagen. Voorbeeld: 0,92 betekent 8% laadverlies."
},
"search_scope": {
- "name": "Search Scope",
- "description": "Shorthand for common search ranges. Overrides all other time range options. today / tomorrow = full calendar day, remaining_today = now until midnight, next_24h / next_48h = rolling window from now."
+ "name": "Zoekbereik",
+ "description": "Snelkoppeling voor veelgebruikte zoekbereiken. Overschrijft alle andere tijdbereikopties. today / tomorrow = volledige kalenderdag, remaining_today = nu tot middernacht, next_24h / next_48h = voortschrijdend venster vanaf nu."
},
"include_current_interval": {
- "name": "Include Current Interval",
- "description": "Include the currently running 15-minute interval in the search. When enabled, charging may begin in the current interval if it is part of the cheapest result."
+ "name": "Huidig interval opnemen",
+ "description": "Neem het momenteel lopende interval van 15 minuten op in het zoeken. Indien ingeschakeld, kan laden in het huidige interval beginnen als het deel uitmaakt van het goedkoopste resultaat."
},
"search_start": {
- "name": "Search Start",
- "description": "Start of the search range as exact date and time. Highest priority — overrides all other start options. Defaults to now if not specified."
+ "name": "Zoekstart",
+ "description": "Start van het zoekbereik als exacte datum en tijd. Hoogste prioriteit – overschrijft alle andere startopties. Standaard nu indien niet opgegeven."
},
"search_end": {
- "name": "Search End",
- "description": "End of the search range as exact date and time. Highest priority — overrides all other end options. Defaults to end of tomorrow if not specified."
+ "name": "Zoekeinde",
+ "description": "Einde van het zoekbereik als exacte datum en tijd. Hoogste prioriteit – overschrijft alle andere eindopties. Standaard einde van morgen indien niet opgegeven."
},
"must_finish_by": {
- "name": "Must Finish By",
- "description": "Deadline: charging must be finished by this time. The search range ends at this deadline — the service finds the cheapest intervals that complete before it. Cannot be combined with Search End, Search End Time, or Search End Offset."
+ "name": "Moet klaar zijn vóór",
+ "description": "Deadline: laden moet vóór dit tijdstip voltooid zijn. Het zoekbereik eindigt op deze deadline – de service vindt de goedkoopste intervallen die ervoor voltooien. Kan niet worden gecombineerd met Zoekeinde, Zoekeindtijd of Zoekeindverschuiving."
},
"search_start_time": {
- "name": "Search Start Time",
- "description": "Alternative: start searching at this time of day. Combine with day offset. Ignored if Search Start (datetime) is set."
+ "name": "Zoekstarttijd",
+ "description": "Alternatief: begin met zoeken op dit tijdstip van de dag. Combineer met dagverschuiving. Genegeerd als Zoekstart (datum/tijd) is ingesteld."
},
"search_start_day_offset": {
- "name": "Search Start Day Offset",
- "description": "Day offset for Search Start Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search Start Time."
+ "name": "Zoekstart-dagverschuiving",
+ "description": "Dagverschuiving voor de Zoekstarttijd. -7 tot 2: -1 = gisteren, 0 = vandaag, 1 = morgen. Alleen gebruikt met Zoekstarttijd."
},
"search_end_time": {
- "name": "Search End Time",
- "description": "Alternative: stop searching at this time of day. Combine with day offset. Ignored if Search End (datetime) is set."
+ "name": "Zoekeindtijd",
+ "description": "Alternatief: stop met zoeken op dit tijdstip van de dag. Combineer met dagverschuiving. Genegeerd als Zoekeinde (datum/tijd) is ingesteld."
},
"search_end_day_offset": {
- "name": "Search End Day Offset",
- "description": "Day offset for Search End Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search End Time."
+ "name": "Zoekeinde-dagverschuiving",
+ "description": "Dagverschuiving voor de Zoekeindtijd. -7 tot 2: -1 = gisteren, 0 = vandaag, 1 = morgen. Alleen gebruikt met Zoekeindtijd."
},
"search_start_offset_minutes": {
- "name": "Search Start Offset (minutes)",
- "description": "Alternative: start searching this many minutes from now. Positive = future, negative = past. Ignored if Search Start or Search Start Time is set."
+ "name": "Zoekstartverschuiving (minuten)",
+ "description": "Alternatief: begin met zoeken zoveel minuten vanaf nu. Positief = toekomst, negatief = verleden. Genegeerd als Zoekstart of Zoekstarttijd is ingesteld."
},
"search_end_offset_minutes": {
- "name": "Search End Offset (minutes)",
- "description": "Alternative: stop searching this many minutes from now. Positive = future, negative = past. Ignored if Search End or Search End Time is set."
+ "name": "Zoekeindeverschuiving (minuten)",
+ "description": "Alternatief: stop met zoeken zoveel minuten vanaf nu. Positief = toekomst, negatief = verleden. Genegeerd als Zoekeinde of Zoekeindtijd is ingesteld."
},
"max_price_level": {
- "name": "Maximum Price Level",
- "description": "Only consider intervals at or below this Tibber price level. very_cheap = most restrictive, very_expensive = no restriction."
+ "name": "Maximaal prijsniveau",
+ "description": "Overweeg alleen intervallen op of onder dit Tibber-prijsniveau. very_cheap = meest beperkend, very_expensive = geen beperking."
},
"min_price_level": {
- "name": "Minimum Price Level",
- "description": "Only consider intervals at or above this Tibber price level. Useful to exclude unrealistically cheap negative-price-only windows from mixed searches."
+ "name": "Minimaal prijsniveau",
+ "description": "Overweeg alleen intervallen op of boven dit Tibber-prijsniveau. Handig om onrealistisch goedkope vensters met alleen negatieve prijzen uit te sluiten bij gemengde zoekopdrachten."
},
"include_comparison_details": {
- "name": "Include Comparison Details",
- "description": "Enrich the price_comparison result with additional fields: comparison_price_min and comparison_price_max."
+ "name": "Vergelijkingsdetails opnemen",
+ "description": "Verrijk het price_comparison-resultaat met extra velden: comparison_price_min en comparison_price_max."
},
"use_base_unit": {
- "name": "Use Base Currency Unit",
- "description": "Force prices in base currency (EUR, NOK) instead of the configured display unit (ct, øre). Useful for calculations."
+ "name": "Basisvaluta-eenheid gebruiken",
+ "description": "Forceer prijzen in basisvaluta (EUR, NOK) in plaats van de geconfigureerde weergave-eenheid (ct, øre). Handig voor berekeningen."
},
"smooth_outliers": {
- "name": "Smooth Outliers",
- "description": "Smooth price outliers before searching. Outlier intervals are temporarily replaced by the average of their neighbors, so a single spike or dip does not dominate the result. The response always shows the original (unsmoothed) prices. Default: enabled."
+ "name": "Uitschieters afvlakken",
+ "description": "Vlak prijsuitschieters af vóór het zoeken. Uitschieterintervallen worden tijdelijk vervangen door het gemiddelde van hun buren, zodat een enkele piek of dal het resultaat niet domineert. Het antwoord toont altijd de oorspronkelijke (niet-afgevlakte) prijzen. Standaard: ingeschakeld."
},
"min_distance_from_avg": {
- "name": "Min. Distance from Average",
- "description": "Require the selected charging intervals to be at least this percentage below the average price of the full search range. Leave empty to disable."
+ "name": "Min. afstand tot gemiddelde",
+ "description": "Eis dat de geselecteerde laadintervallen minstens dit percentage onder de gemiddelde prijs van het volledige zoekbereik liggen. Laat leeg om uit te schakelen."
},
"allow_relaxation": {
- "name": "Allow relaxation",
- "description": "Progressively relax filters to guarantee a result when possible. Phases: 1) Reduce/remove distance threshold 2) Expand level filters 3) Reduce duration. Default: enabled."
+ "name": "Versoepeling toestaan",
+ "description": "Versoepel filters geleidelijk om indien mogelijk een resultaat te garanderen. Fasen: 1) Afstandsdrempel verlagen/verwijderen 2) Niveaufilters uitbreiden 3) Duur verkorten. Standaard: ingeschakeld."
},
"duration_flexibility_minutes": {
- "name": "Duration flexibility",
- "description": "Maximum minutes the automatically calculated charging duration may be shortened during relaxation (0–120, step 15). Leave empty for automatic calculation."
+ "name": "Duurflexibiliteit",
+ "description": "Maximaal aantal minuten dat de automatisch berekende laadduur tijdens versoepeling mag worden ingekort (0–120, stap 15). Laat leeg voor automatische berekening."
},
"must_reach_soc_percent": {
- "name": "Minimum SoC by Deadline (%)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (kWh)."
+ "name": "Minimum-SoC vóór deadline (%)",
+ "description": "Minimale laadtoestand van de batterij die vóór de deadline moet worden bereikt. Kan niet worden gecombineerd met Minimum-SoC vóór deadline (kWh)."
},
"must_reach_soc_kwh": {
- "name": "Minimum SoC by Deadline (kWh)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (%)."
+ "name": "Minimum-SoC vóór deadline (kWh)",
+ "description": "Minimale laadtoestand van de batterij die vóór de deadline moet worden bereikt. Kan niet worden gecombineerd met Minimum-SoC vóór deadline (%)."
},
"min_charge_power_w": {
- "name": "Minimum Charge Power",
- "description": "Enable continuous charging mode. The planner may reduce the last interval down to this minimum power instead of always using the maximum."
+ "name": "Minimaal laadvermogen",
+ "description": "Schakel continue laadmodus in. De planner mag het laatste interval verlagen tot dit minimumvermogen in plaats van altijd het maximum te gebruiken."
},
"charge_power_steps_w": {
- "name": "Charge Power Steps",
- "description": "Enable stepped charging mode. Provide the allowed power steps in watts as a list, for example [1380, 4140, 11000]. The planner picks the smallest step that still covers the remaining energy in the final interval. Mutually exclusive with Minimum Charge Power."
+ "name": "Laadvermogensstappen",
+ "description": "Schakel getrapte laadmodus in. Geef de toegestane vermogensstappen in watt op als lijst, bijvoorbeeld [1380, 4140, 11000]. De planner kiest de kleinste stap die de resterende energie in het laatste interval nog dekt. Sluit elkaar uit met Minimaal laadvermogen."
},
"grid_import_limit_w": {
- "name": "Grid Import Limit",
- "description": "Upper limit for charging power drawn from the grid in watts. Useful when the charger must share available power with other loads."
+ "name": "Netimportlimiet",
+ "description": "Bovengrens voor laadvermogen dat uit het net wordt onttrokken in watt. Handig wanneer de lader het beschikbare vermogen moet delen met andere belastingen."
},
"must_reach_by": {
- "name": "Must Reach By",
- "description": "Absolute deadline for must_reach_soc_*. The planner first guarantees the minimum SoC before this moment, then continues with the remaining target if possible."
+ "name": "Bereiken vóór",
+ "description": "Absolute deadline voor must_reach_soc_*. De planner garandeert eerst de minimum-SoC vóór dit moment en gaat daarna indien mogelijk verder met het resterende doel."
},
"must_reach_by_event": {
- "name": "Deadline Event",
- "description": "Alternative deadline derived from coordinator data. Use this instead of Must Reach By to plan around midnight, the next peak period, or the next best-price period end."
+ "name": "Deadlinegebeurtenis",
+ "description": "Alternatieve deadline afgeleid uit coördinatorgegevens. Gebruik dit in plaats van Bereiken vóór om rond middernacht, de volgende piekperiode of het einde van de volgende beste-prijsperiode te plannen."
},
"discharging_efficiency": {
- "name": "Discharging Efficiency",
- "description": "Fraction of stored battery energy that is still usable when later discharged. Used for profitability calculations."
+ "name": "Ontladingsrendement",
+ "description": "Deel van de opgeslagen batterijenergie dat bij later ontladen nog bruikbaar is. Gebruikt voor winstgevendheidsberekeningen."
},
"expected_discharge_price": {
- "name": "Expected Discharge Price",
- "description": "Expected value of each discharged kWh. Intervals above the break-even price can be filtered when Reserve For Discharge is enabled."
+ "name": "Verwachte ontladingsprijs",
+ "description": "Verwachte waarde van elke ontladen kWh. Intervallen boven de break-evenprijs kunnen worden gefilterd wanneer Reserveren voor ontladen is ingeschakeld."
},
"reserve_for_discharge": {
- "name": "Reserve For Discharge",
- "description": "Keep only intervals that are economically sensible for a later discharge based on expected discharge price and round-trip efficiency."
+ "name": "Reserveren voor ontladen",
+ "description": "Behoud alleen intervallen die economisch zinvol zijn voor een latere ontlading op basis van de verwachte ontladingsprijs en het rendement van de volledige cyclus."
},
"max_cost_per_kwh": {
- "name": "Maximum Charge Price",
- "description": "Discard candidate intervals above this price per kWh before scheduling. Uses the selected price unit."
+ "name": "Maximale laadprijs",
+ "description": "Verwerp kandidaat-intervallen boven deze prijs per kWh vóór de planning. Gebruikt de geselecteerde prijseenheid."
},
"min_charge_duration_minutes": {
- "name": "Minimum Charge Duration",
- "description": "Merge short isolated intervals into longer charging blocks where possible. Useful for chargers that should avoid very short runs."
+ "name": "Minimale laadduur",
+ "description": "Voeg korte geïsoleerde intervallen waar mogelijk samen tot langere laadblokken. Handig voor laders die zeer korte runs moeten vermijden."
},
"max_cycles_per_day": {
- "name": "Maximum Charge Cycles Per Day",
- "description": "Limit how many separate charging segments may be used per day. The planner keeps the cheapest segments within this limit."
+ "name": "Maximaal aantal laadcycli per dag",
+ "description": "Beperk hoeveel afzonderlijke laadsegmenten per dag mogen worden gebruikt. De planner behoudt de goedkoopste segmenten binnen deze limiet."
}
}
},
@@ -2505,9 +2505,9 @@
},
"charging_deadline_event": {
"options": {
- "midnight": "Midnight",
- "next_peak_period": "Next Peak Period",
- "next_best_period_end": "End of Next Best-Price Period"
+ "midnight": "Middernacht",
+ "next_peak_period": "Volgende piekperiode",
+ "next_best_period_end": "Einde van de volgende beste-prijsperiode"
}
}
}
diff --git a/custom_components/tibber_prices/translations/sv.json b/custom_components/tibber_prices/translations/sv.json
index ecd3139..a14af67 100644
--- a/custom_components/tibber_prices/translations/sv.json
+++ b/custom_components/tibber_prices/translations/sv.json
@@ -545,7 +545,7 @@
"name": "Gårdagens prisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -553,7 +553,7 @@
"name": "Dagens prisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -561,7 +561,7 @@
"name": "Morgondagens prisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -587,7 +587,7 @@
"name": "Aktuellt prisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -595,7 +595,7 @@
"name": "Nästa prisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -603,7 +603,7 @@
"name": "Föregående prisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -611,7 +611,7 @@
"name": "Aktuellt timprisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -619,7 +619,7 @@
"name": "Nästa timprisbetyg",
"state": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -1029,34 +1029,34 @@
}
},
"current_price_phase_end_time": {
- "name": "Current Phase End Time"
+ "name": "Aktuell fas sluttid"
},
"current_price_phase_remaining_minutes": {
- "name": "Current Phase Remaining"
+ "name": "Aktuell fas återstående"
},
"current_price_phase_duration": {
- "name": "Current Phase Duration"
+ "name": "Aktuell fas varaktighet"
},
"current_price_phase_progress": {
- "name": "Current Phase Progress"
+ "name": "Aktuell fas framsteg"
},
"next_rising_phase_start_time": {
- "name": "Next Rising Phase Start"
+ "name": "Nästa stigande fas start"
},
"next_falling_phase_start_time": {
- "name": "Next Falling Phase Start"
+ "name": "Nästa fallande fas start"
},
"next_flat_phase_start_time": {
- "name": "Next Flat Phase Start"
+ "name": "Nästa flata fas start"
},
"next_rising_phase_in_minutes": {
- "name": "Time to Next Rising Phase"
+ "name": "Tid till nästa stigande fas"
},
"next_falling_phase_in_minutes": {
- "name": "Time to Next Falling Phase"
+ "name": "Tid till nästa fallande fas"
},
"next_flat_phase_in_minutes": {
- "name": "Time to Next Flat Phase"
+ "name": "Tid till nästa flata fas"
},
"chart_data_export": {
"name": "Diagramdataexport",
@@ -1116,13 +1116,13 @@
"name": "Bästa Prisperiod"
},
"in_rising_price_phase": {
- "name": "In Rising Price Phase"
+ "name": "I stigande prisfas"
},
"in_falling_price_phase": {
- "name": "In Falling Price Phase"
+ "name": "I fallande prisfas"
},
"in_flat_price_phase": {
- "name": "In Flat Price Phase"
+ "name": "I flat prisfas"
},
"connection": {
"name": "Tibber API-anslutning"
@@ -1237,7 +1237,7 @@
"message": "Sluttidpunkten ({search_end}) måste vara efter starttidpunkten ({search_start}). Kontrollera tidsparametrarna och eventuella day-offsets."
},
"price_fetch_failed": {
- "message": "Unable to fetch price data for the requested search range."
+ "message": "Det gick inte att hämta prisdata för det begärda sökintervallet."
},
"invalid_search_scope": {
"message": "Ogiltigt sökområde. Giltiga värden är: today, tomorrow, remaining_today, next_24h, next_48h."
@@ -1309,49 +1309,49 @@
"message": "Kan inte konvertera värdet '{raw_value}' från '{entity_id}' ({attribute}) till {expected_type}. Kontrollera att entiteten ger ett kompatibelt värde."
},
"capacity_required_for_percent": {
- "message": "battery_capacity_kwh is required when current or target SoC is provided as a percentage."
+ "message": "battery_capacity_kwh krävs när nuvarande eller mål-SoC anges i procent."
},
"ambiguous_soc_input": {
- "message": "The field {field} was provided both as percent and as kWh. Use only one representation."
+ "message": "Fältet {field} angavs både i procent och i kWh. Använd endast en representation."
},
"already_at_target": {
- "message": "Current state of charge is already at or above the target. No charging schedule is needed."
+ "message": "Den nuvarande laddningsnivån är redan på eller över målet. Inget laddningsschema behövs."
},
"target_exceeds_capacity": {
- "message": "Target SoC ({target_soc_kwh} kWh) exceeds battery capacity ({capacity_kwh} kWh)."
+ "message": "Mål-SoC ({target_soc_kwh} kWh) överstiger batterikapaciteten ({capacity_kwh} kWh)."
},
"energy_unreachable": {
- "message": "The requested charging target cannot be reached within the available search window and charging constraints."
+ "message": "Det begärda laddmålet kan inte nås inom det tillgängliga sökfönstret och laddbegränsningarna."
},
"missing_current_soc": {
- "message": "Provide either current_soc_percent or current_soc_kwh."
+ "message": "Ange antingen current_soc_percent eller current_soc_kwh."
},
"missing_target_soc": {
- "message": "Provide either target_soc_percent or target_soc_kwh."
+ "message": "Ange antingen target_soc_percent eller target_soc_kwh."
},
"missing_deadline_for_must_reach": {
- "message": "Provide must_reach_by or must_reach_by_event when using must_reach_soc_percent or must_reach_soc_kwh."
+ "message": "Ange must_reach_by eller must_reach_by_event när du använder must_reach_soc_percent eller must_reach_soc_kwh."
},
"missing_must_reach_soc": {
- "message": "Provide must_reach_soc_percent or must_reach_soc_kwh when using a must_reach deadline."
+ "message": "Ange must_reach_soc_percent eller must_reach_soc_kwh när du använder en must_reach-deadline."
},
"invalid_must_reach_soc": {
- "message": "The minimum state of charge by deadline must be between current and target state of charge."
+ "message": "Den lägsta laddningsnivån före deadline måste ligga mellan nuvarande och mål-laddningsnivå."
},
"power_strategy_conflict": {
- "message": "Use either min_charge_power_w or charge_power_steps_w, not both at the same time."
+ "message": "Använd antingen min_charge_power_w eller charge_power_steps_w, inte båda samtidigt."
},
"grid_limit_too_low": {
- "message": "grid_import_limit_w is lower than the minimum required charging power."
+ "message": "grid_import_limit_w är lägre än den minsta laddeffekt som krävs."
},
"deadline_conflict": {
- "message": "Use either must_reach_by or must_reach_by_event, not both at the same time."
+ "message": "Använd antingen must_reach_by eller must_reach_by_event, inte båda samtidigt."
},
"deadline_event_not_available": {
- "message": "The selected deadline event is not available in the current coordinator data."
+ "message": "Den valda deadlinehändelsen är inte tillgänglig i de aktuella koordinatordata."
},
"deadline_outside_search_range": {
- "message": "The resolved deadline must be inside the selected search range."
+ "message": "Den upplösta deadlinen måste ligga inom det valda sökintervallet."
}
},
"services": {
@@ -1570,7 +1570,7 @@
}
},
"find_cheapest_block": {
- "name": "Hitta billigaste blocket",
+ "name": "Hitta billigaste blocket (Experimentell)",
"description": "Hittar det billigaste sammanhängande tidsfönstret med en given varaktighet. Designat för apparatschemaläggning: diskmaskin, tvättmaskin, torktumlare osv. Returnerar det billigaste fönstret med start-/sluttider och prisstatistik.",
"sections": {
"search_range": {
@@ -1690,7 +1690,7 @@
}
},
"find_most_expensive_block": {
- "name": "Hitta dyraste blocket",
+ "name": "Hitta dyraste blocket (Experimentell)",
"description": "Hittar det dyraste sammanhängande tidsfönstret med en given varaktighet. Användbart för att identifiera topprisperioder som bör undvikas. Returnerar det dyraste fönstret med start-/sluttider och prisstatistik.",
"sections": {
"search_range": {
@@ -1810,7 +1810,7 @@
}
},
"find_cheapest_hours": {
- "name": "Hitta billigaste timmarna",
+ "name": "Hitta billigaste timmarna (Experimentell)",
"description": "Hittar de billigaste intervallen för en given total varaktighet, inte nödvändigtvis sammanhängande. Designat för flexibla laster: batteriladdning, elbil, varmvattenberedare. Returnerar ett schema av intervaller grupperade i sammanhängande segment.",
"sections": {
"search_range": {
@@ -1934,7 +1934,7 @@
}
},
"find_most_expensive_hours": {
- "name": "Hitta dyraste timmarna",
+ "name": "Hitta dyraste timmarna (Experimentell)",
"description": "Hittar de dyraste intervallen för en given total varaktighet, inte nödvändigtvis sammanhängande. Användbart för att identifiera topprisperioder som bör undvikas. Returnerar ett schema av intervaller grupperade i sammanhängande segment.",
"sections": {
"search_range": {
@@ -2058,7 +2058,7 @@
}
},
"find_cheapest_schedule": {
- "name": "Hitta billigaste schema",
+ "name": "Hitta billigaste schema (Experimentell)",
"description": "Schemalaggar flera apparater optimalt utan tidsoeverlapp. Varje uppgift tilldelas det billigaste tillgaengliga sammanhangande tidsfoenster.",
"sections": {
"search_range": {
@@ -2174,206 +2174,206 @@
}
},
"plan_charging": {
- "name": "Plan Charging",
- "description": "Creates a lowest-cost charging schedule from battery parameters instead of a fixed duration. Supports fixed, continuous, or stepped charging power, optional deadline-aware minimum SoC planning, and economic filtering for later discharge use cases. Returns a per-interval charging plan with power, energy, SoC progression, segment grouping, total cost, and profitability details. If no schedule is found, the response includes a stable reason code in the reason field (for example: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
+ "name": "Planera laddning (experimentell)",
+ "description": "Skapar ett laddningsschema till lägsta kostnad utifrån batteriparametrar i stället för en fast varaktighet. Stöder fast, kontinuerlig eller stegvis laddeffekt, valfri planering med lägsta SoC före en deadline, samt ekonomisk filtrering för senare urladdningsscenarier. Returnerar ett laddningsschema per intervall med effekt, energi, SoC-förlopp, segmentgruppering, totalkostnad och lönsamhetsdetaljer. Om inget schema hittas innehåller svaret en stabil orsakskod i fältet ”reason” (till exempel: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
"sections": {
"battery": {
- "name": "Battery Parameters",
- "description": "Describe the battery: usable capacity, current and target SoC, and charging efficiency. You can provide SoC in percent (requires capacity) or directly in kWh."
+ "name": "Batteriparametrar",
+ "description": "Beskriv batteriet: användbar kapacitet, nuvarande och önskad SoC, samt laddeffektivitet. Du kan ange SoC i procent (kräver kapacitet) eller direkt i kWh."
},
"charging": {
- "name": "Charging Strategy",
- "description": "Configure variable-power charging behavior, grid limits, and minimum run-time constraints."
+ "name": "Laddningsstrategi",
+ "description": "Konfigurera laddning med variabel effekt, nätgränser och minsta körtidsbegränsningar."
},
"deadline": {
- "name": "Deadline Planning",
- "description": "Require a minimum state of charge by a specific moment (for example before a peak period). Set both the Minimum SoC by Deadline and when it must be reached — either as an absolute time (Must Reach By) or from a known event (Deadline Event)."
+ "name": "Deadlineplanering",
+ "description": "Kräv en lägsta laddningsnivå vid en viss tidpunkt (till exempel före en topprisperiod). Ange både Lägsta SoC före deadline och när den måste nås – antingen som en absolut tid (Måste nås senast) eller från en känd händelse (Deadlinehändelse)."
},
"search_range": {
- "name": "Custom Search Range",
- "description": "Define precise start and end times for the search. Overrides Search Scope when set."
+ "name": "Anpassat sökintervall",
+ "description": "Definiera exakta start- och sluttider för sökningen. Åsidosätter Sökomfång när det är angivet."
},
"time_alternatives": {
- "name": "Advanced Time Options",
- "description": "Alternative ways to define the search range using time-of-day and minute offsets."
+ "name": "Avancerade tidsalternativ",
+ "description": "Alternativa sätt att definiera sökintervallet med tid på dygnet och minutförskjutningar."
},
"price_filter": {
- "name": "Price Level Filter",
- "description": "Restrict search to intervals within the specified Tibber price level range."
+ "name": "Prisnivåfilter",
+ "description": "Begränsa sökningen till intervall inom den angivna Tibber-prisnivån."
},
"search_tuning": {
- "name": "Search Algorithm Tuning",
- "description": "Fine-tune how the search handles outliers, minimum quality thresholds, and fallback behavior."
+ "name": "Finjustering av sökalgoritm",
+ "description": "Finjustera hur sökningen hanterar avvikare, lägsta kvalitetströsklar och reservbeteende."
},
"economics": {
- "name": "Economic Filters",
- "description": "Filter charging intervals by maximum cost or expected later discharge value."
+ "name": "Ekonomiska filter",
+ "description": "Filtrera laddintervall efter maximal kostnad eller förväntat senare urladdningsvärde."
},
"output": {
- "name": "Output Options",
- "description": "Control output format: comparison details and currency unit."
+ "name": "Utdataalternativ",
+ "description": "Styr utdataformatet: jämförelsedetaljer och valutaenhet."
}
},
"fields": {
"entry_id": {
- "name": "Entry ID",
- "description": "The config entry ID for the Tibber integration."
+ "name": "Post-ID",
+ "description": "Konfigurationspost-ID för Tibber-integrationen."
},
"max_charge_power_w": {
- "name": "Maximum Charge Power",
- "description": "Maximum charging power in watts. This defines the upper bound for fixed, continuous, or stepped charging schedules."
+ "name": "Maximal laddeffekt",
+ "description": "Maximal laddeffekt i watt. Detta definierar den övre gränsen för fast, kontinuerlig eller stegvis laddning."
},
"battery_capacity_kwh": {
- "name": "Battery Capacity",
- "description": "Usable battery capacity in kWh. Required when current or target SoC is provided as a percentage."
+ "name": "Batterikapacitet",
+ "description": "Användbar batterikapacitet i kWh. Krävs när nuvarande eller mål-SoC anges i procent."
},
"current_soc_percent": {
- "name": "Current SoC (%)",
- "description": "Current battery state of charge in percent. Cannot be combined with Current SoC (kWh)."
+ "name": "Nuvarande SoC (%)",
+ "description": "Nuvarande laddningsnivå för batteriet i procent. Kan inte kombineras med Nuvarande SoC (kWh)."
},
"current_soc_kwh": {
- "name": "Current SoC (kWh)",
- "description": "Current battery state of charge in kWh. Cannot be combined with Current SoC (%)."
+ "name": "Nuvarande SoC (kWh)",
+ "description": "Nuvarande laddningsnivå för batteriet i kWh. Kan inte kombineras med Nuvarande SoC (%)."
},
"target_soc_percent": {
- "name": "Target SoC (%)",
- "description": "Desired battery state of charge in percent. Cannot be combined with Target SoC (kWh)."
+ "name": "Mål-SoC (%)",
+ "description": "Önskad laddningsnivå för batteriet i procent. Kan inte kombineras med Mål-SoC (kWh)."
},
"target_soc_kwh": {
- "name": "Target SoC (kWh)",
- "description": "Desired battery state of charge in kWh. Cannot be combined with Target SoC (%)."
+ "name": "Mål-SoC (kWh)",
+ "description": "Önskad laddningsnivå för batteriet i kWh. Kan inte kombineras med Mål-SoC (%)."
},
"charging_efficiency": {
- "name": "Charging Efficiency",
- "description": "Fraction of grid energy that is stored in the battery. Example: 0.92 means 8% charging losses."
+ "name": "Laddeffektivitet",
+ "description": "Andel av nätenergin som lagras i batteriet. Exempel: 0,92 betyder 8 % laddförluster."
},
"search_scope": {
- "name": "Search Scope",
- "description": "Shorthand for common search ranges. Overrides all other time range options. today / tomorrow = full calendar day, remaining_today = now until midnight, next_24h / next_48h = rolling window from now."
+ "name": "Sökomfång",
+ "description": "Genväg för vanliga sökintervall. Åsidosätter alla andra tidsintervallalternativ. today / tomorrow = hela kalenderdagen, remaining_today = nu till midnatt, next_24h / next_48h = rullande fönster från nu."
},
"include_current_interval": {
- "name": "Include Current Interval",
- "description": "Include the currently running 15-minute interval in the search. When enabled, charging may begin in the current interval if it is part of the cheapest result."
+ "name": "Inkludera nuvarande intervall",
+ "description": "Inkludera det 15-minutersintervall som körs nu i sökningen. När det är aktiverat kan laddning börja i det nuvarande intervallet om det är en del av det billigaste resultatet."
},
"search_start": {
- "name": "Search Start",
- "description": "Start of the search range as exact date and time. Highest priority — overrides all other start options. Defaults to now if not specified."
+ "name": "Sökstart",
+ "description": "Start på sökintervallet som exakt datum och tid. Högsta prioritet – åsidosätter alla andra startalternativ. Standard är nu om inget anges."
},
"search_end": {
- "name": "Search End",
- "description": "End of the search range as exact date and time. Highest priority — overrides all other end options. Defaults to end of tomorrow if not specified."
+ "name": "Sökslut",
+ "description": "Slut på sökintervallet som exakt datum och tid. Högsta prioritet – åsidosätter alla andra slutalternativ. Standard är slutet på morgondagen om inget anges."
},
"must_finish_by": {
- "name": "Must Finish By",
- "description": "Deadline: charging must be finished by this time. The search range ends at this deadline — the service finds the cheapest intervals that complete before it. Cannot be combined with Search End, Search End Time, or Search End Offset."
+ "name": "Måste vara klart senast",
+ "description": "Deadline: laddningen måste vara klar senast vid denna tidpunkt. Sökintervallet slutar vid denna deadline – tjänsten hittar de billigaste intervallen som blir klara dessförinnan. Kan inte kombineras med Sökslut, Söksluttid eller Sökslutförskjutning."
},
"search_start_time": {
- "name": "Search Start Time",
- "description": "Alternative: start searching at this time of day. Combine with day offset. Ignored if Search Start (datetime) is set."
+ "name": "Sökstarttid",
+ "description": "Alternativ: börja söka vid denna tid på dygnet. Kombinera med dagförskjutning. Ignoreras om Sökstart (datum/tid) är angiven."
},
"search_start_day_offset": {
- "name": "Search Start Day Offset",
- "description": "Day offset for Search Start Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search Start Time."
+ "name": "Dagförskjutning för sökstart",
+ "description": "Dagförskjutning för Sökstarttiden. -7 till 2: -1 = i går, 0 = i dag, 1 = i morgon. Används endast med Sökstarttid."
},
"search_end_time": {
- "name": "Search End Time",
- "description": "Alternative: stop searching at this time of day. Combine with day offset. Ignored if Search End (datetime) is set."
+ "name": "Söksluttid",
+ "description": "Alternativ: sluta söka vid denna tid på dygnet. Kombinera med dagförskjutning. Ignoreras om Sökslut (datum/tid) är angiven."
},
"search_end_day_offset": {
- "name": "Search End Day Offset",
- "description": "Day offset for Search End Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search End Time."
+ "name": "Dagförskjutning för sökslut",
+ "description": "Dagförskjutning för Söksluttiden. -7 till 2: -1 = i går, 0 = i dag, 1 = i morgon. Används endast med Söksluttid."
},
"search_start_offset_minutes": {
- "name": "Search Start Offset (minutes)",
- "description": "Alternative: start searching this many minutes from now. Positive = future, negative = past. Ignored if Search Start or Search Start Time is set."
+ "name": "Sökstartförskjutning (minuter)",
+ "description": "Alternativ: börja söka så här många minuter från nu. Positivt = framtid, negativt = dåtid. Ignoreras om Sökstart eller Sökstarttid är angiven."
},
"search_end_offset_minutes": {
- "name": "Search End Offset (minutes)",
- "description": "Alternative: stop searching this many minutes from now. Positive = future, negative = past. Ignored if Search End or Search End Time is set."
+ "name": "Sökslutförskjutning (minuter)",
+ "description": "Alternativ: sluta söka så här många minuter från nu. Positivt = framtid, negativt = dåtid. Ignoreras om Sökslut eller Söksluttid är angiven."
},
"max_price_level": {
- "name": "Maximum Price Level",
- "description": "Only consider intervals at or below this Tibber price level. very_cheap = most restrictive, very_expensive = no restriction."
+ "name": "Maximal prisnivå",
+ "description": "Beakta endast intervall på eller under denna Tibber-prisnivå. very_cheap = mest restriktiv, very_expensive = ingen begränsning."
},
"min_price_level": {
- "name": "Minimum Price Level",
- "description": "Only consider intervals at or above this Tibber price level. Useful to exclude unrealistically cheap negative-price-only windows from mixed searches."
+ "name": "Minsta prisnivå",
+ "description": "Beakta endast intervall på eller över denna Tibber-prisnivå. Användbart för att utesluta orealistiskt billiga fönster med enbart negativa priser från blandade sökningar."
},
"include_comparison_details": {
- "name": "Include Comparison Details",
- "description": "Enrich the price_comparison result with additional fields: comparison_price_min and comparison_price_max."
+ "name": "Inkludera jämförelsedetaljer",
+ "description": "Berika resultatet price_comparison med ytterligare fält: comparison_price_min och comparison_price_max."
},
"use_base_unit": {
- "name": "Use Base Currency Unit",
- "description": "Force prices in base currency (EUR, NOK) instead of the configured display unit (ct, øre). Useful for calculations."
+ "name": "Använd basvalutaenhet",
+ "description": "Tvinga priser i basvaluta (EUR, NOK) i stället för den konfigurerade visningsenheten (ct, öre). Användbart för beräkningar."
},
"smooth_outliers": {
- "name": "Smooth Outliers",
- "description": "Smooth price outliers before searching. Outlier intervals are temporarily replaced by the average of their neighbors, so a single spike or dip does not dominate the result. The response always shows the original (unsmoothed) prices. Default: enabled."
+ "name": "Jämna ut avvikare",
+ "description": "Jämna ut prisavvikare före sökningen. Avvikande intervall ersätts tillfälligt med medelvärdet av sina grannar, så att en enstaka topp eller dal inte dominerar resultatet. Svaret visar alltid de ursprungliga (ojämnade) priserna. Standard: aktiverat."
},
"min_distance_from_avg": {
- "name": "Min. Distance from Average",
- "description": "Require the selected charging intervals to be at least this percentage below the average price of the full search range. Leave empty to disable."
+ "name": "Min. avstånd från medel",
+ "description": "Kräv att de valda laddintervallen ligger minst denna procent under medelpriset för hela sökintervallet. Lämna tomt för att inaktivera."
},
"allow_relaxation": {
- "name": "Allow relaxation",
- "description": "Progressively relax filters to guarantee a result when possible. Phases: 1) Reduce/remove distance threshold 2) Expand level filters 3) Reduce duration. Default: enabled."
+ "name": "Tillåt uppmjukning",
+ "description": "Mjuka gradvis upp filter för att garantera ett resultat när det är möjligt. Faser: 1) Minska/ta bort avståndströskel 2) Utöka nivåfilter 3) Minska varaktighet. Standard: aktiverat."
},
"duration_flexibility_minutes": {
- "name": "Duration flexibility",
- "description": "Maximum minutes the automatically calculated charging duration may be shortened during relaxation (0–120, step 15). Leave empty for automatic calculation."
+ "name": "Varaktighetsflexibilitet",
+ "description": "Maximalt antal minuter som den automatiskt beräknade laddtiden får förkortas under uppmjukning (0–120, steg 15). Lämna tomt för automatisk beräkning."
},
"must_reach_soc_percent": {
- "name": "Minimum SoC by Deadline (%)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (kWh)."
+ "name": "Lägsta SoC före deadline (%)",
+ "description": "Lägsta laddningsnivå för batteriet som måste nås före deadline. Kan inte kombineras med Lägsta SoC före deadline (kWh)."
},
"must_reach_soc_kwh": {
- "name": "Minimum SoC by Deadline (kWh)",
- "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (%)."
+ "name": "Lägsta SoC före deadline (kWh)",
+ "description": "Lägsta laddningsnivå för batteriet som måste nås före deadline. Kan inte kombineras med Lägsta SoC före deadline (%)."
},
"min_charge_power_w": {
- "name": "Minimum Charge Power",
- "description": "Enable continuous charging mode. The planner may reduce the last interval down to this minimum power instead of always using the maximum."
+ "name": "Minsta laddeffekt",
+ "description": "Aktivera kontinuerligt laddläge. Planeraren får minska det sista intervallet ned till denna minsta effekt i stället för att alltid använda maximum."
},
"charge_power_steps_w": {
- "name": "Charge Power Steps",
- "description": "Enable stepped charging mode. Provide the allowed power steps in watts as a list, for example [1380, 4140, 11000]. The planner picks the smallest step that still covers the remaining energy in the final interval. Mutually exclusive with Minimum Charge Power."
+ "name": "Laddeffektsteg",
+ "description": "Aktivera stegvis laddläge. Ange de tillåtna effektstegen i watt som en lista, till exempel [1380, 4140, 11000]. Planeraren väljer det minsta steget som fortfarande täcker den återstående energin i det sista intervallet. Ömsesidigt uteslutande med Minsta laddeffekt."
},
"grid_import_limit_w": {
- "name": "Grid Import Limit",
- "description": "Upper limit for charging power drawn from the grid in watts. Useful when the charger must share available power with other loads."
+ "name": "Nätimportgräns",
+ "description": "Övre gräns för laddeffekt som tas från nätet i watt. Användbart när laddaren måste dela tillgänglig effekt med andra laster."
},
"must_reach_by": {
- "name": "Must Reach By",
- "description": "Absolute deadline for must_reach_soc_*. The planner first guarantees the minimum SoC before this moment, then continues with the remaining target if possible."
+ "name": "Måste nås senast",
+ "description": "Absolut deadline för must_reach_soc_*. Planeraren garanterar först lägsta SoC före denna tidpunkt och fortsätter sedan med det återstående målet om möjligt."
},
"must_reach_by_event": {
- "name": "Deadline Event",
- "description": "Alternative deadline derived from coordinator data. Use this instead of Must Reach By to plan around midnight, the next peak period, or the next best-price period end."
+ "name": "Deadlinehändelse",
+ "description": "Alternativ deadline härledd från koordinatordata. Använd detta i stället för Måste nås senast för att planera kring midnatt, nästa topprisperiod eller slutet på nästa bästprisperiod."
},
"discharging_efficiency": {
- "name": "Discharging Efficiency",
- "description": "Fraction of stored battery energy that is still usable when later discharged. Used for profitability calculations."
+ "name": "Urladdningseffektivitet",
+ "description": "Andel av den lagrade batterienergin som fortfarande är användbar vid senare urladdning. Används för lönsamhetsberäkningar."
},
"expected_discharge_price": {
- "name": "Expected Discharge Price",
- "description": "Expected value of each discharged kWh. Intervals above the break-even price can be filtered when Reserve For Discharge is enabled."
+ "name": "Förväntat urladdningspris",
+ "description": "Förväntat värde av varje urladdad kWh. Intervall över balanspriset kan filtreras när Reservera för urladdning är aktiverat."
},
"reserve_for_discharge": {
- "name": "Reserve For Discharge",
- "description": "Keep only intervals that are economically sensible for a later discharge based on expected discharge price and round-trip efficiency."
+ "name": "Reservera för urladdning",
+ "description": "Behåll endast intervall som är ekonomiskt rimliga för en senare urladdning baserat på förväntat urladdningspris och rundgångseffektivitet."
},
"max_cost_per_kwh": {
- "name": "Maximum Charge Price",
- "description": "Discard candidate intervals above this price per kWh before scheduling. Uses the selected price unit."
+ "name": "Maximalt laddpris",
+ "description": "Förkasta kandidatintervall över detta pris per kWh före planering. Använder den valda prisenheten."
},
"min_charge_duration_minutes": {
- "name": "Minimum Charge Duration",
- "description": "Merge short isolated intervals into longer charging blocks where possible. Useful for chargers that should avoid very short runs."
+ "name": "Minsta laddtid",
+ "description": "Slå samman korta isolerade intervall till längre laddblock där det är möjligt. Användbart för laddare som bör undvika mycket korta körningar."
},
"max_cycles_per_day": {
- "name": "Maximum Charge Cycles Per Day",
- "description": "Limit how many separate charging segments may be used per day. The planner keeps the cheapest segments within this limit."
+ "name": "Maximalt antal laddcykler per dag",
+ "description": "Begränsa hur många separata laddsegment som får användas per dag. Planeraren behåller de billigaste segmenten inom denna gräns."
}
}
},
@@ -2433,7 +2433,7 @@
"rating_level_filter": {
"options": {
"low": "Låg",
- "normal": "Normal",
+ "normal": "Normalt",
"high": "Hög"
}
},
@@ -2505,9 +2505,9 @@
},
"charging_deadline_event": {
"options": {
- "midnight": "Midnight",
- "next_peak_period": "Next Peak Period",
- "next_best_period_end": "End of Next Best-Price Period"
+ "midnight": "Midnatt",
+ "next_peak_period": "Nästa topprisperiod",
+ "next_best_period_end": "Slutet på nästa bästprisperiod"
}
}
}
diff --git a/docs/user/docs/sensor-reference.md b/docs/user/docs/sensor-reference.md
index 100fe92..ea3ff3c 100644
--- a/docs/user/docs/sensor-reference.md
+++ b/docs/user/docs/sensor-reference.md
@@ -220,24 +220,24 @@ explanations of each sensor's purpose, attributes, and automation examples.
| `current_interval_price_rank_today_tomorrow` | Current Price Rank (Today+Tomorrow) | Aktueller Preisrang (heute+morgen) | Aktuell prisrang (i dag+i morgen) | Huidige prijsrang (vandaag+morgen) | Aktuellt prisrang (idag+imorgon) | ❌ |
| `current_interval_price_rank_tomorrow` | Current Price Rank (Tomorrow) | Aktueller Preisrang (morgen) | Aktuell prisrang (i morgen) | Huidige prijsrang (morgen) | Aktuellt prisrang (imorgon) | ❌ |
| `current_price_phase` | Current Price Phase | Aktuelle Preisphase | Gjeldende Prisfase | Huidige Prijsfase | Aktuell Prisfas | ✅ |
-| `current_price_phase_duration` | Current Phase Duration | Current Phase Duration | Current Phase Duration | Current Phase Duration | Current Phase Duration | ❌ |
-| `current_price_phase_end_time` | Current Phase End Time | Current Phase End Time | Current Phase End Time | Current Phase End Time | Current Phase End Time | ✅ |
-| `current_price_phase_progress` | Current Phase Progress | Current Phase Progress | Current Phase Progress | Current Phase Progress | Current Phase Progress | ❌ |
-| `current_price_phase_remaining_minutes` | Current Phase Remaining | Current Phase Remaining | Current Phase Remaining | Current Phase Remaining | Current Phase Remaining | ✅ |
+| `current_price_phase_duration` | Current Phase Duration | Aktuelle Phase Dauer | Gjeldende fase varighet | Huidige Fase Duur | Aktuell fas varaktighet | ❌ |
+| `current_price_phase_end_time` | Current Phase End Time | Aktuelle Phase Endzeit | Gjeldende fase sluttid | Huidige Fase Eindtijd | Aktuell fas sluttid | ✅ |
+| `current_price_phase_progress` | Current Phase Progress | Aktuelle Phase Fortschritt | Gjeldende fase fremgang | Huidige Fase Voortgang | Aktuell fas framsteg | ❌ |
+| `current_price_phase_remaining_minutes` | Current Phase Remaining | Aktuelle Phase verbleibend | Gjeldende fase gjenværende | Huidige Fase Resterend | Aktuell fas återstående | ✅ |
| `day_pattern_today` | Today's Price Pattern | Preismuster Heute | Prismønster i dag | Prijspatroon Vandaag | Prismönster Idag | ✅ |
| `day_pattern_tomorrow` | Tomorrow's Price Pattern | Preismuster Morgen | Prismønster i morgen | Prijspatroon Morgen | Prismönster Imorgon | ❌ |
| `day_pattern_yesterday` | Yesterday's Price Pattern | Preismuster Gestern | Prismønster i går | Prijspatroon Gisteren | Prismönster Igår | ❌ |
-| `next_falling_phase_in_minutes` | Time to Next Falling Phase | Time to Next Falling Phase | Time to Next Falling Phase | Time to Next Falling Phase | Time to Next Falling Phase | ❌ |
-| `next_falling_phase_start_time` | Next Falling Phase Start | Next Falling Phase Start | Next Falling Phase Start | Next Falling Phase Start | Next Falling Phase Start | ❌ |
-| `next_flat_phase_in_minutes` | Time to Next Flat Phase | Time to Next Flat Phase | Time to Next Flat Phase | Time to Next Flat Phase | Time to Next Flat Phase | ❌ |
-| `next_flat_phase_start_time` | Next Flat Phase Start | Next Flat Phase Start | Next Flat Phase Start | Next Flat Phase Start | Next Flat Phase Start | ❌ |
+| `next_falling_phase_in_minutes` | Time to Next Falling Phase | Zeit bis nächste fallende Phase | Tid til neste fallende fase | Tijd tot Volgende Dalende Fase | Tid till nästa fallande fas | ❌ |
+| `next_falling_phase_start_time` | Next Falling Phase Start | Nächste fallende Phase Start | Neste fallende fase start | Volgende Dalende Fase Start | Nästa fallande fas start | ❌ |
+| `next_flat_phase_in_minutes` | Time to Next Flat Phase | Zeit bis nächste flache Phase | Tid til neste flate fase | Tijd tot Volgende Vlakke Fase | Tid till nästa flata fas | ❌ |
+| `next_flat_phase_start_time` | Next Flat Phase Start | Nächste flache Phase Start | Neste flate fase start | Volgende Vlakke Fase Start | Nästa flata fas start | ❌ |
| `next_hour_price_rank_today` | ⌀ Hourly Price Next Rank (Today) | ⌀ Stündlicher Preisrang Nächste (heute) | ⌀ Timesprisrang neste (i dag) | ⌀ Uurlijkse prijsrang volgende (vandaag) | ⌀ Timprisrang nästa (idag) | ❌ |
| `next_hour_price_rank_today_tomorrow` | ⌀ Hourly Price Next Rank (Today+Tomorrow) | ⌀ Stündlicher Preisrang Nächste (heute+morgen) | ⌀ Timesprisrang neste (i dag+i morgen) | ⌀ Uurlijkse prijsrang volgende (vandaag+morgen) | ⌀ Timprisrang nästa (idag+imorgon) | ❌ |
| `next_interval_price_rank_today` | Next Price Rank (Today) | Nächster Preisrang (heute) | Neste prisrang (i dag) | Volgende prijsrang (vandaag) | Nästa prisrang (idag) | ❌ |
| `next_interval_price_rank_today_tomorrow` | Next Price Rank (Today+Tomorrow) | Nächster Preisrang (heute+morgen) | Neste prisrang (i dag+i morgen) | Volgende prijsrang (vandaag+morgen) | Nästa prisrang (idag+imorgon) | ❌ |
| `next_price_phase` | Next Price Phase | Nächste Preisphase | Neste Prisfase | Volgende Prijsfase | Nästa Prisfas | ✅ |
-| `next_rising_phase_in_minutes` | Time to Next Rising Phase | Time to Next Rising Phase | Time to Next Rising Phase | Time to Next Rising Phase | Time to Next Rising Phase | ❌ |
-| `next_rising_phase_start_time` | Next Rising Phase Start | Next Rising Phase Start | Next Rising Phase Start | Next Rising Phase Start | Next Rising Phase Start | ❌ |
+| `next_rising_phase_in_minutes` | Time to Next Rising Phase | Zeit bis nächste steigende Phase | Tid til neste stigende fase | Tijd tot Volgende Stijgende Fase | Tid till nästa stigande fas | ❌ |
+| `next_rising_phase_start_time` | Next Rising Phase Start | Nächste steigende Phase Start | Neste stigende fase start | Volgende Stijgende Fase Start | Nästa stigande fas start | ❌ |
| `previous_interval_price_rank_today` | Previous Price Rank (Today) | Vorheriger Preisrang (heute) | Forrige prisrang (i dag) | Vorige prijsrang (vandaag) | Förra prisrang (idag) | ❌ |
| `previous_interval_price_rank_today_tomorrow` | Previous Price Rank (Today+Tomorrow) | Vorheriger Preisrang (heute+morgen) | Forrige prisrang (i dag+i morgen) | Vorige prijsrang (vandaag+morgen) | Förra prisrang (idag+imorgon) | ❌ |
## Binary Sensors
@@ -259,9 +259,9 @@ explanations of each sensor's purpose, attributes, and automation examples.
| Entity ID suffix | 🇬🇧 English | 🇩🇪 Deutsch | 🇳🇴 Norsk | 🇳🇱 Nederlands | 🇸🇪 Svenska | Default |
|---|---|---|---|---|---|---|
-| `in_falling_price_phase` | In Falling Price Phase | In Falling Price Phase | In Falling Price Phase | In Falling Price Phase | In Falling Price Phase | ✅ |
-| `in_flat_price_phase` | In Flat Price Phase | In Flat Price Phase | In Flat Price Phase | In Flat Price Phase | In Flat Price Phase | ✅ |
-| `in_rising_price_phase` | In Rising Price Phase | In Rising Price Phase | In Rising Price Phase | In Rising Price Phase | In Rising Price Phase | ✅ |
+| `in_falling_price_phase` | In Falling Price Phase | In fallender Preisphase | I fallende prisfase | In Dalende Prijsfase | I fallande prisfas | ✅ |
+| `in_flat_price_phase` | In Flat Price Phase | In flacher Preisphase | I flat prisfase | In Vlakke Prijsfase | I flat prisfas | ✅ |
+| `in_rising_price_phase` | In Rising Price Phase | In steigender Preisphase | I stigende prisfase | In Stijgende Prijsfase | I stigande prisfas | ✅ |
## Number Entities (Configuration Overrides)
> These entities allow runtime adjustment of period calculation parameters without changing the integration configuration. All are **disabled by default**.