refactor(config_flow): reorganize options flow steps with section structure

Restructured 5 options flow steps (current_interval_price_rating, best_price,
peak_price, price_trend, volatility) to use Home Assistant's sections feature
for better UI organization and logical grouping.

Changes:
- current_interval_price_rating: Single section "price_rating_thresholds"
- best_price: Three sections (period_settings, flexibility_settings,
  relaxation_and_target_periods)
- peak_price: Three sections (period_settings, flexibility_settings,
  relaxation_and_target_periods)
- price_trend: Single section "price_trend_thresholds"
- volatility: Single section "volatility_thresholds"

Each section includes name, description, data fields, and data_description
fields following HA translation schema requirements.

Updated all 5 language files (de, en, nb, nl, sv) with new section structure
while preserving existing field descriptions and translations.

Impact: Options flow now displays configuration fields in collapsible,
logically grouped sections with clear section headers, improving UX for
complex multi-parameter configuration steps. No functional changes to
configuration logic or validation.
This commit is contained in:
Julian Pawlowski 2025-12-02 20:23:31 +00:00
parent 3098144db2
commit a1ab98d666
6 changed files with 1022 additions and 648 deletions

View file

@ -89,6 +89,7 @@ from custom_components.tibber_prices.const import (
PEAK_PRICE_MIN_LEVEL_OPTIONS, PEAK_PRICE_MIN_LEVEL_OPTIONS,
) )
from homeassistant.const import CONF_ACCESS_TOKEN from homeassistant.const import CONF_ACCESS_TOKEN
from homeassistant.data_entry_flow import section
from homeassistant.helpers.selector import ( from homeassistant.helpers.selector import (
BooleanSelector, BooleanSelector,
NumberSelector, NumberSelector,
@ -211,6 +212,9 @@ def get_options_init_schema(options: Mapping[str, Any]) -> vol.Schema:
def get_price_rating_schema(options: Mapping[str, Any]) -> vol.Schema: def get_price_rating_schema(options: Mapping[str, Any]) -> vol.Schema:
"""Return schema for price rating thresholds configuration.""" """Return schema for price rating thresholds configuration."""
return vol.Schema( return vol.Schema(
{
vol.Required("price_rating_thresholds"): section(
vol.Schema(
{ {
vol.Optional( vol.Optional(
CONF_PRICE_RATING_THRESHOLD_LOW, CONF_PRICE_RATING_THRESHOLD_LOW,
@ -247,12 +251,19 @@ def get_price_rating_schema(options: Mapping[str, Any]) -> vol.Schema:
), ),
), ),
} }
),
{"collapsed": True},
),
}
) )
def get_volatility_schema(options: Mapping[str, Any]) -> vol.Schema: def get_volatility_schema(options: Mapping[str, Any]) -> vol.Schema:
"""Return schema for volatility thresholds configuration.""" """Return schema for volatility thresholds configuration with collapsible sections."""
return vol.Schema( return vol.Schema(
{
vol.Required("volatility_thresholds"): section(
vol.Schema(
{ {
vol.Optional( vol.Optional(
CONF_VOLATILITY_THRESHOLD_MODERATE, CONF_VOLATILITY_THRESHOLD_MODERATE,
@ -306,12 +317,19 @@ def get_volatility_schema(options: Mapping[str, Any]) -> vol.Schema:
), ),
), ),
} }
),
{"collapsed": True},
),
}
) )
def get_best_price_schema(options: Mapping[str, Any]) -> vol.Schema: def get_best_price_schema(options: Mapping[str, Any]) -> vol.Schema:
"""Return schema for best price period configuration.""" """Return schema for best price period configuration with collapsible sections."""
return vol.Schema( return vol.Schema(
{
vol.Required("period_settings"): section(
vol.Schema(
{ {
vol.Optional( vol.Optional(
CONF_BEST_PRICE_MIN_PERIOD_LENGTH, CONF_BEST_PRICE_MIN_PERIOD_LENGTH,
@ -330,6 +348,42 @@ def get_best_price_schema(options: Mapping[str, Any]) -> vol.Schema:
mode=NumberSelectorMode.SLIDER, mode=NumberSelectorMode.SLIDER,
), ),
), ),
vol.Optional(
CONF_BEST_PRICE_MAX_LEVEL,
default=options.get(
CONF_BEST_PRICE_MAX_LEVEL,
DEFAULT_BEST_PRICE_MAX_LEVEL,
),
): SelectSelector(
SelectSelectorConfig(
options=BEST_PRICE_MAX_LEVEL_OPTIONS,
mode=SelectSelectorMode.DROPDOWN,
translation_key="current_interval_price_level",
),
),
vol.Optional(
CONF_BEST_PRICE_MAX_LEVEL_GAP_COUNT,
default=int(
options.get(
CONF_BEST_PRICE_MAX_LEVEL_GAP_COUNT,
DEFAULT_BEST_PRICE_MAX_LEVEL_GAP_COUNT,
)
),
): NumberSelector(
NumberSelectorConfig(
min=MIN_GAP_COUNT,
max=MAX_GAP_COUNT,
step=1,
mode=NumberSelectorMode.SLIDER,
),
),
}
),
{"collapsed": True},
),
vol.Required("flexibility_settings"): section(
vol.Schema(
{
vol.Optional( vol.Optional(
CONF_BEST_PRICE_FLEX, CONF_BEST_PRICE_FLEX,
default=int( default=int(
@ -364,35 +418,13 @@ def get_best_price_schema(options: Mapping[str, Any]) -> vol.Schema:
mode=NumberSelectorMode.SLIDER, mode=NumberSelectorMode.SLIDER,
), ),
), ),
vol.Optional( }
CONF_BEST_PRICE_MAX_LEVEL,
default=options.get(
CONF_BEST_PRICE_MAX_LEVEL,
DEFAULT_BEST_PRICE_MAX_LEVEL,
),
): SelectSelector(
SelectSelectorConfig(
options=BEST_PRICE_MAX_LEVEL_OPTIONS,
mode=SelectSelectorMode.DROPDOWN,
translation_key="current_interval_price_level",
),
),
vol.Optional(
CONF_BEST_PRICE_MAX_LEVEL_GAP_COUNT,
default=int(
options.get(
CONF_BEST_PRICE_MAX_LEVEL_GAP_COUNT,
DEFAULT_BEST_PRICE_MAX_LEVEL_GAP_COUNT,
)
),
): NumberSelector(
NumberSelectorConfig(
min=MIN_GAP_COUNT,
max=MAX_GAP_COUNT,
step=1,
mode=NumberSelectorMode.SLIDER,
), ),
{"collapsed": True},
), ),
vol.Required("relaxation_and_target_periods"): section(
vol.Schema(
{
vol.Optional( vol.Optional(
CONF_ENABLE_MIN_PERIODS_BEST, CONF_ENABLE_MIN_PERIODS_BEST,
default=options.get( default=options.get(
@ -433,12 +465,19 @@ def get_best_price_schema(options: Mapping[str, Any]) -> vol.Schema:
), ),
), ),
} }
),
{"collapsed": True},
),
}
) )
def get_peak_price_schema(options: Mapping[str, Any]) -> vol.Schema: def get_peak_price_schema(options: Mapping[str, Any]) -> vol.Schema:
"""Return schema for peak price period configuration.""" """Return schema for peak price period configuration with collapsible sections."""
return vol.Schema( return vol.Schema(
{
vol.Required("period_settings"): section(
vol.Schema(
{ {
vol.Optional( vol.Optional(
CONF_PEAK_PRICE_MIN_PERIOD_LENGTH, CONF_PEAK_PRICE_MIN_PERIOD_LENGTH,
@ -457,6 +496,42 @@ def get_peak_price_schema(options: Mapping[str, Any]) -> vol.Schema:
mode=NumberSelectorMode.SLIDER, mode=NumberSelectorMode.SLIDER,
), ),
), ),
vol.Optional(
CONF_PEAK_PRICE_MIN_LEVEL,
default=options.get(
CONF_PEAK_PRICE_MIN_LEVEL,
DEFAULT_PEAK_PRICE_MIN_LEVEL,
),
): SelectSelector(
SelectSelectorConfig(
options=PEAK_PRICE_MIN_LEVEL_OPTIONS,
mode=SelectSelectorMode.DROPDOWN,
translation_key="current_interval_price_level",
),
),
vol.Optional(
CONF_PEAK_PRICE_MAX_LEVEL_GAP_COUNT,
default=int(
options.get(
CONF_PEAK_PRICE_MAX_LEVEL_GAP_COUNT,
DEFAULT_PEAK_PRICE_MAX_LEVEL_GAP_COUNT,
)
),
): NumberSelector(
NumberSelectorConfig(
min=MIN_GAP_COUNT,
max=MAX_GAP_COUNT,
step=1,
mode=NumberSelectorMode.SLIDER,
),
),
}
),
{"collapsed": True},
),
vol.Required("flexibility_settings"): section(
vol.Schema(
{
vol.Optional( vol.Optional(
CONF_PEAK_PRICE_FLEX, CONF_PEAK_PRICE_FLEX,
default=int( default=int(
@ -491,35 +566,13 @@ def get_peak_price_schema(options: Mapping[str, Any]) -> vol.Schema:
mode=NumberSelectorMode.SLIDER, mode=NumberSelectorMode.SLIDER,
), ),
), ),
vol.Optional( }
CONF_PEAK_PRICE_MIN_LEVEL,
default=options.get(
CONF_PEAK_PRICE_MIN_LEVEL,
DEFAULT_PEAK_PRICE_MIN_LEVEL,
),
): SelectSelector(
SelectSelectorConfig(
options=PEAK_PRICE_MIN_LEVEL_OPTIONS,
mode=SelectSelectorMode.DROPDOWN,
translation_key="current_interval_price_level",
),
),
vol.Optional(
CONF_PEAK_PRICE_MAX_LEVEL_GAP_COUNT,
default=int(
options.get(
CONF_PEAK_PRICE_MAX_LEVEL_GAP_COUNT,
DEFAULT_PEAK_PRICE_MAX_LEVEL_GAP_COUNT,
)
),
): NumberSelector(
NumberSelectorConfig(
min=MIN_GAP_COUNT,
max=MAX_GAP_COUNT,
step=1,
mode=NumberSelectorMode.SLIDER,
), ),
{"collapsed": True},
), ),
vol.Required("relaxation_and_target_periods"): section(
vol.Schema(
{
vol.Optional( vol.Optional(
CONF_ENABLE_MIN_PERIODS_PEAK, CONF_ENABLE_MIN_PERIODS_PEAK,
default=options.get( default=options.get(
@ -560,12 +613,19 @@ def get_peak_price_schema(options: Mapping[str, Any]) -> vol.Schema:
), ),
), ),
} }
),
{"collapsed": True},
),
}
) )
def get_price_trend_schema(options: Mapping[str, Any]) -> vol.Schema: def get_price_trend_schema(options: Mapping[str, Any]) -> vol.Schema:
"""Return schema for price trend thresholds configuration.""" """Return schema for price trend thresholds configuration."""
return vol.Schema( return vol.Schema(
{
vol.Required("price_trend_thresholds"): section(
vol.Schema(
{ {
vol.Optional( vol.Optional(
CONF_PRICE_TREND_THRESHOLD_RISING, CONF_PRICE_TREND_THRESHOLD_RISING,
@ -602,6 +662,10 @@ def get_price_trend_schema(options: Mapping[str, Any]) -> vol.Schema:
), ),
), ),
} }
),
{"collapsed": True},
),
}
) )

View file

@ -145,6 +145,10 @@
"current_interval_price_rating": { "current_interval_price_rating": {
"title": "📊 Preisbewertungs-Schwellenwerte", "title": "📊 Preisbewertungs-Schwellenwerte",
"description": "_{step_progress}_\n\n**Konfiguriere Schwellenwerte für Preisbewertungsstufen (niedrig/normal/hoch) basierend auf dem Vergleich mit dem nachlaufenden 24-Stunden-Durchschnitt.**\n\n---", "description": "_{step_progress}_\n\n**Konfiguriere Schwellenwerte für Preisbewertungsstufen (niedrig/normal/hoch) basierend auf dem Vergleich mit dem nachlaufenden 24-Stunden-Durchschnitt.**\n\n---",
"sections": {
"price_rating_thresholds": {
"name": "Preisbewertungs-Schwellenwerte",
"description": "Definiere die Einstufungen für die Preisbewertung.",
"data": { "data": {
"price_rating_threshold_low": "Niedrig-Schwelle", "price_rating_threshold_low": "Niedrig-Schwelle",
"price_rating_threshold_high": "Hoch-Schwelle" "price_rating_threshold_high": "Hoch-Schwelle"
@ -152,62 +156,112 @@
"data_description": { "data_description": {
"price_rating_threshold_low": "Prozentwert, um wie viel der aktuelle Preis unter dem nachlaufenden 24-Stunden-Durchschnitt liegen muss, damit er als 'niedrig' bewertet wird. Beispiel: 5 bedeutet mindestens 5% unter Durchschnitt. Sensoren mit dieser Bewertung zeigen günstige Zeitfenster an. Standard: 5%", "price_rating_threshold_low": "Prozentwert, um wie viel der aktuelle Preis unter dem nachlaufenden 24-Stunden-Durchschnitt liegen muss, damit er als 'niedrig' bewertet wird. Beispiel: 5 bedeutet mindestens 5% unter Durchschnitt. Sensoren mit dieser Bewertung zeigen günstige Zeitfenster an. Standard: 5%",
"price_rating_threshold_high": "Prozentwert, um wie viel der aktuelle Preis über dem nachlaufenden 24-Stunden-Durchschnitt liegen muss, damit er als 'hoch' bewertet wird. Beispiel: 10 bedeutet mindestens 10% über Durchschnitt. Sensoren mit dieser Bewertung warnen vor teuren Zeitfenstern. Standard: 10%" "price_rating_threshold_high": "Prozentwert, um wie viel der aktuelle Preis über dem nachlaufenden 24-Stunden-Durchschnitt liegen muss, damit er als 'hoch' bewertet wird. Beispiel: 10 bedeutet mindestens 10% über Durchschnitt. Sensoren mit dieser Bewertung warnen vor teuren Zeitfenstern. Standard: 10%"
}
}
}, },
"submit": "Weiter →" "submit": "Weiter →"
}, },
"best_price": { "best_price": {
"title": "💚 Bestpreis-Zeitraum Einstellungen", "title": "💚 Bestpreis-Zeitraum Einstellungen",
"description": "_{step_progress}_\n\n**Konfiguration für den Bestpreis-Zeitraum mit den niedrigsten Strompreisen.**\n\n---", "description": "_{step_progress}_\n\n**Konfiguration für den Bestpreis-Zeitraum mit den niedrigsten Strompreisen.**\n\n---",
"sections": {
"period_settings": {
"name": "Zeitraumdauer & Preisniveaus",
"description": "Legen Sie fest, wie lange Zeiträume sein sollen und welche Preisniveaus einbezogen werden.",
"data": { "data": {
"best_price_min_period_length": "Minimale Zeitraumlänge", "best_price_min_period_length": "Minimale Zeitraumlänge",
"best_price_flex": "Flexibilität",
"best_price_min_distance_from_avg": "Mindestabstand",
"best_price_max_level": "Preisniveau-Filter", "best_price_max_level": "Preisniveau-Filter",
"best_price_max_level_gap_count": "Lückentoleranz", "best_price_max_level_gap_count": "Lückentoleranz"
},
"data_description": {
"best_price_min_period_length": "Mindestdauer für einen Zeitraum um als 'Bestpreis' zu gelten. Längere Zeiträume sind prakti scher für Geräte wie Geschirrspüler oder Wärmepumpen. Bestpreis-Zeiträume benötigen mindestens 60 Minuten (vs. 30 Minuten für Spitzenlast-Warnungen), da sie aussagekräftige Zeitfenster für die Verbrauchsplanung bieten sollten.",
"best_price_max_level": "Nur Bestpreis-Zeiträume anzeigen, wenn sie Intervalle mit Preisniveaus ≤ dem ausgewählten Wert enthalten. Beispiel: Auswahl 'Günstig' bedeutet, der Zeitraum muss mindestens ein 'SEHR_GÜNSTIG' oder 'GÜNSTIG' Intervall enthalten. Dies stellt sicher, dass 'Bestpreis'-Zeiträume nicht nur relativ billig für den Tag sind, sondern auch absolut günstig. Wählen Sie 'Alle' um Bestpreise unabhängig vom absoluten Preisniveau anzuzeigen.",
"best_price_max_level_gap_count": "Maximale Anzahl aufeinanderfolgender Intervalle, die um genau eine Preisstufe vom erforderlichen Niveau abweichen dürfen. Beispiel: Mit 'Günstig'-Filter und Lückenzähler 1 wird eine Sequenz 'GÜNSTIG, GÜNSTIG, NORMAL, GÜNSTIG' akzeptiert (NORMAL ist eine Stufe über GÜNSTIG). Dies verhindert, dass Zeiträume durch gelegentliche Niveauabweichungen aufgeteilt werden. **Hinweis:** Lückentoleranz erfordert Zeiträume ≥90 Minuten (6 Intervalle), um Ausreißer effektiv zu erkennen. Standard: 0 (strikte Filterung, keine Toleranz)."
}
},
"flexibility_settings": {
"name": "Flexibilität & Schwellenwerte",
"description": "Kontrollieren Sie, wie sehr Preise abweichen dürfen und dennoch als 'Bestpreis' gelten.",
"data": {
"best_price_flex": "Flexibilität",
"best_price_min_distance_from_avg": "Mindestabstand"
},
"data_description": {
"best_price_flex": "Maximale Menge über dem Tagesminimumpreis, um noch als 'Bestpreis' zu gelten. Empfohlen: 15-20% mit Lockerung aktiviert (Standard), oder 25-35% ohne Lockerung. Maximum: 50% (Hartgrenze für zuverlässige Zeitraumerkennung).",
"best_price_min_distance_from_avg": "Stellt sicher, dass Zeiträume erheblich günstiger als der Tagesdurchschnitt sind, nicht nur marginal darunter. Dies filtert Rauschen heraus und verhindert, dass leicht unterdurchschnittliche Zeiträume an flachen Preistagen als 'Bestpreis' markiert werden. Höhere Werte = strengere Filterung (nur wirklich billige Zeiträume gelten). Standard: 5 bedeutet Zeiträume müssen mindestens 5% unter dem Tagesdurchschnitt liegen."
}
},
"relaxation_and_target_periods": {
"name": "Lockerung & Zielanzahl Zeiträume",
"description": "Konfigurieren Sie automatische Filterlockerung und Zielanzahl von Zeiträumen. Aktivieren Sie 'Mindestanzahl anstreben' um die Lockerung zu aktivieren.",
"data": {
"enable_min_periods_best": "Mindestanzahl anstreben", "enable_min_periods_best": "Mindestanzahl anstreben",
"min_periods_best": "Mindestanzahl Zeiträume", "min_periods_best": "Mindestanzahl Zeiträume",
"relaxation_attempts_best": "Lockerungsversuche" "relaxation_attempts_best": "Lockerungsversuche"
}, },
"data_description": { "data_description": {
"best_price_min_period_length": "Minimale Dauer, damit ein Zeitraum als 'Bestpreis' gilt. Längere Zeiträume sind praktischer für den Betrieb von Geräten wie Geschirrspülern oder Wärmepumpen. Bestpreis-Zeiträume erfordern mindestens 60 Minuten (im Vergleich zu 30 Minuten für Spitzenpreis-Warnungen), da sie sinnvolle Zeitfenster für die Verbrauchsplanung bieten sollen, nicht nur kurze Gelegenheiten.", "enable_min_periods_best": "Bei Aktivierung werden Filter schrittweise gelockert, wenn nicht genug Zeiträume gefunden werden. Dies versucht, die gewünschte Mindestanzahl von Zeiträumen zu erreichen, was weniger optimale Zeitfenster als Bestpreis-Zeiträume einschließen kann.",
"best_price_flex": "Maximal über dem täglichen Mindestpreis, bei dem Intervalle noch als 'Bestpreis' qualifizieren. Empfehlung: 15-20 mit aktivierter Lockerung (Standard), oder 25-35 ohne Lockerung. Maximum: 50 (harte Grenze für zuverlässige Zeitraumerkennung).", "min_periods_best": "Mindestanzahl von Bestpreis-Zeiträumen pro Tag, die angestrebt werden sollen. Filter werden schrittweise gelockert, um diese Anzahl zu erreichen. Nur aktiv wenn 'Mindestanzahl anstreben' aktiviert ist. Standard: 1",
"best_price_min_distance_from_avg": "Stellt sicher, dass Zeiträume signifikant günstiger als der Tagesdurchschnitt sind, nicht nur geringfügig darunter. Dies filtert Rauschen und verhindert, dass leicht unterdurchschnittliche Zeiträume an Tagen mit flachen Preisen als 'Bestpreis' markiert werden. Höhere Werte = strengere Filterung (nur wirklich günstige Zeiträume qualifizieren). Standard: 5 bedeutet, Zeiträume müssen mindestens 5% unter dem Tagesdurchschnitt liegen.", "relaxation_attempts_best": "Wie viele Flexibilitätsstufen (Versuche) zu versuchen sind, bevor aufgegeben wird. Jeder Versuch führt alle Filterkombinationen auf der neuen Flexibilitätsstufe aus. Mehr Versuche erhöhen die Chance, zusätzliche Zeiträume zu finden, kosten aber mehr Verarbeitungszeit."
"best_price_max_level": "Zeigt Bestpreis-Zeiträume nur an, wenn sie Intervalle mit Preisniveaus ≤ dem gewählten Wert enthalten. Beispiel: Wahl von 'Günstig' bedeutet, dass der Zeitraum mindestens ein 'SEHR GÜNSTIG' oder 'GÜNSTIG' Intervall haben muss. Dies stellt sicher, dass Bestpreis-Zeiträume nicht nur relativ günstig für den Tag sind, sondern tatsächlich günstig in absoluten Zahlen. Wähle 'Beliebig' um Bestpreise unabhängig vom absoluten Preisniveau anzuzeigen.", }
"best_price_max_level_gap_count": "Maximale Anzahl aufeinanderfolgender Intervalle, die exakt um eine Niveaustufe vom geforderten Level abweichen dürfen. Beispiel: Bei Filter 'Günstig' und Lückentoleranz 1 wird die Sequenz 'GÜNSTIG, GÜNSTIG, NORMAL, GÜNSTIG' akzeptiert (NORMAL ist eine Stufe über GÜNSTIG). Dies verhindert, dass Zeiträume durch gelegentliche Niveau-Abweichungen aufgespalten werden. **Hinweis:** Lückentoleranz erfordert Zeiträume ≥90 Minuten (6 Intervalle), um Ausreißer effektiv zu erkennen. Standard: 0 (strenge Filterung, keine Toleranz).", }
"enable_min_periods_best": "Wenn aktiviert, werden Filter schrittweise gelockert, falls nicht genug Zeiträume gefunden wurden. Dies versucht die gewünschte Mindestanzahl zu erreichen, was dazu führen kann, dass auch weniger optimale Zeiträume als Bestpreis-Zeiträume markiert werden.",
"min_periods_best": "Mindestanzahl an Bestpreis-Zeiträumen, die pro Tag angestrebt werden. Filter werden schrittweise gelockert, um diese Anzahl zu erreichen. Nur aktiv, wenn 'Mindestanzahl Zeiträume anstreben' aktiviert ist. Standard: 1",
"relaxation_attempts_best": "Wie viele Flex-Stufen (Versuche) nacheinander ausprobiert werden, bevor aufgegeben wird. Jeder Versuch testet alle Filterkombinationen auf der neuen Flex-Stufe. Mehr Versuche erhöhen die Chance auf zusätzliche Zeiträume, benötigen aber etwas mehr Rechenzeit."
}, },
"submit": "Weiter →" "submit": "Weiter →"
}, },
"peak_price": { "peak_price": {
"title": "🔴 Spitzenpreis-Zeitraum Einstellungen", "title": "🔴 Spitzenpreis-Zeitraum Einstellungen",
"description": "_{step_progress}_\n\n**Konfiguration für den Spitzenpreis-Zeitraum mit den höchsten Strompreisen.**\n\n---", "description": "_{step_progress}_\n\n**Konfiguration für den Spitzenpreis-Zeitraum mit den höchsten Strompreisen.**\n\n---",
"sections": {
"period_settings": {
"name": "Zeitraum-Einstellungen",
"description": "Konfiguriere Zeitraumlänge und Preisniveau-Einschränkungen.",
"data": { "data": {
"peak_price_min_period_length": "Minimale Zeitraumlänge", "peak_price_min_period_length": "Minimale Zeitraumlänge",
"peak_price_flex": "Flexibilität",
"peak_price_min_distance_from_avg": "Mindestabstand",
"peak_price_min_level": "Preisniveau-Filter", "peak_price_min_level": "Preisniveau-Filter",
"peak_price_max_level_gap_count": "Lückentoleranz", "peak_price_max_level_gap_count": "Lückentoleranz"
},
"data_description": {
"peak_price_min_period_length": "Minimale Dauer, damit ein Zeitraum als 'Spitzenpreis' gilt. Spitzenpreis-Warnungen sind für kürzere Zeiträume zulässig (mindestens 30 Minuten im Vergleich zu 60 Minuten für Bestpreis), da kurze teure Spitzen eine Warnung wert sind, auch wenn sie für die Verbrauchsplanung zu kurz sind.",
"peak_price_min_level": "Zeigt Spitzenpreis-Zeiträume nur an, wenn sie Intervalle mit Preisniveaus ≥ dem gewählten Wert enthalten. Beispiel: Wahl von 'Teuer' bedeutet, dass der Zeitraum mindestens ein 'TEUER' oder 'SEHR TEUER' Intervall haben muss. Dies stellt sicher, dass Spitzenpreis-Zeiträume nicht nur relativ teuer für den Tag sind, sondern tatsächlich teuer in absoluten Zahlen. Wähle 'Beliebig' um Spitzenpreise unabhängig vom absoluten Preisniveau anzuzeigen.",
"peak_price_max_level_gap_count": "Maximale Anzahl aufeinanderfolgender Intervalle, die exakt um eine Niveaustufe vom geforderten Level abweichen dürfen. Beispiel: Bei Filter 'Teuer' und Lückentoleranz 2 wird die Sequenz 'TEUER, NORMAL, NORMAL, TEUER' akzeptiert (NORMAL ist eine Stufe unter TEUER). Dies verhindert, dass Zeiträume durch gelegentliche Niveau-Abweichungen aufgespalten werden. **Hinweis:** Lückentoleranz erfordert Zeiträume ≥90 Minuten (6 Intervalle), um Ausreißer effektiv zu erkennen. Standard: 0 (strenge Filterung, keine Toleranz)."
}
},
"flexibility_settings": {
"name": "Flexibilitäts-Einstellungen",
"description": "Konfiguriere Preisvergleich-Schwellenwerte und Filterung.",
"data": {
"peak_price_flex": "Flexibilität",
"peak_price_min_distance_from_avg": "Mindestabstand"
},
"data_description": {
"peak_price_flex": "Maximal unter dem täglichen Höchstpreis, bei dem Intervalle noch als 'Spitzenpreis' qualifizieren. Empfehlung: -15 bis -20 mit aktivierter Lockerung (Standard), oder -25 bis -35 ohne Lockerung. Maximum: -50 (harte Grenze für zuverlässige Zeitraumerkennung). Hinweis: Negative Werte zeigen den Abstand unter dem Maximum an.",
"peak_price_min_distance_from_avg": "Stellt sicher, dass Zeiträume signifikant teurer als der Tagesdurchschnitt sind, nicht nur geringfügig darüber. Dies filtert Rauschen und verhindert, dass leicht überdurchschnittliche Zeiträume an Tagen mit flachen Preisen als 'Spitzenpreis' markiert werden. Höhere Werte = strengere Filterung (nur wirklich teure Zeiträume qualifizieren). Standard: 5 bedeutet, Zeiträume müssen mindestens 5% über dem Tagesdurchschnitt liegen."
}
},
"relaxation_and_target_periods": {
"name": "Lockerung & Zielzeiträume",
"description": "Konfiguriere automatische Filter-Lockerung und Zielzeiträume. Aktiviere 'Mindestanzahl anstreben' um Lockerung zu aktivieren.",
"data": {
"enable_min_periods_peak": "Mindestanzahl anstreben", "enable_min_periods_peak": "Mindestanzahl anstreben",
"min_periods_peak": "Mindestanzahl Zeiträume", "min_periods_peak": "Mindestanzahl Zeiträume",
"relaxation_attempts_peak": "Lockerungsversuche" "relaxation_attempts_peak": "Lockerungsversuche"
}, },
"data_description": { "data_description": {
"peak_price_min_period_length": "Minimale Dauer, damit ein Zeitraum als 'Spitzenpreis' gilt. Spitzenpreis-Warnungen sind für kürzere Zeiträume zulässig (mindestens 30 Minuten im Vergleich zu 60 Minuten für Bestpreis), da kurze teure Spitzen eine Warnung wert sind, auch wenn sie für die Verbrauchsplanung zu kurz sind.",
"peak_price_flex": "Maximal unter dem täglichen Höchstpreis, bei dem Intervalle noch als 'Spitzenpreis' qualifizieren. Empfehlung: -15 bis -20 mit aktivierter Lockerung (Standard), oder -25 bis -35 ohne Lockerung. Maximum: -50 (harte Grenze für zuverlässige Zeitraumerkennung). Hinweis: Negative Werte zeigen den Abstand unter dem Maximum an.",
"peak_price_min_distance_from_avg": "Stellt sicher, dass Zeiträume signifikant teurer als der Tagesdurchschnitt sind, nicht nur geringfügig darüber. Dies filtert Rauschen und verhindert, dass leicht überdurchschnittliche Zeiträume an Tagen mit flachen Preisen als 'Spitzenpreis' markiert werden. Höhere Werte = strengere Filterung (nur wirklich teure Zeiträume qualifizieren). Standard: 5 bedeutet, Zeiträume müssen mindestens 5% über dem Tagesdurchschnitt liegen.",
"peak_price_min_level": "Zeigt Spitzenpreis-Zeiträume nur an, wenn sie Intervalle mit Preisniveaus ≥ dem gewählten Wert enthalten. Beispiel: Wahl von 'Teuer' bedeutet, dass der Zeitraum mindestens ein 'TEUER' oder 'SEHR TEUER' Intervall haben muss. Dies stellt sicher, dass Spitzenpreis-Zeiträume nicht nur relativ teuer für den Tag sind, sondern tatsächlich teuer in absoluten Zahlen. Wähle 'Beliebig' um Spitzenpreise unabhängig vom absoluten Preisniveau anzuzeigen.",
"peak_price_max_level_gap_count": "Maximale Anzahl aufeinanderfolgender Intervalle, die exakt um eine Niveaustufe vom geforderten Level abweichen dürfen. Beispiel: Bei Filter 'Teuer' und Lückentoleranz 2 wird die Sequenz 'TEUER, NORMAL, NORMAL, TEUER' akzeptiert (NORMAL ist eine Stufe unter TEUER). Dies verhindert, dass Zeiträume durch gelegentliche Niveau-Abweichungen aufgespalten werden. **Hinweis:** Lückentoleranz erfordert Zeiträume ≥90 Minuten (6 Intervalle), um Ausreißer effektiv zu erkennen. Standard: 0 (strenge Filterung, keine Toleranz).",
"enable_min_periods_peak": "Wenn aktiviert, werden Filter schrittweise gelockert, falls nicht genug Zeiträume gefunden wurden. Dies versucht die gewünschte Mindestanzahl zu erreichen, um sicherzustellen, dass du auch an Tagen mit ungewöhnlichen Preismustern vor teuren Zeiträumen gewarnt wirst.", "enable_min_periods_peak": "Wenn aktiviert, werden Filter schrittweise gelockert, falls nicht genug Zeiträume gefunden wurden. Dies versucht die gewünschte Mindestanzahl zu erreichen, um sicherzustellen, dass du auch an Tagen mit ungewöhnlichen Preismustern vor teuren Zeiträumen gewarnt wirst.",
"min_periods_peak": "Mindestanzahl an Spitzenpreis-Zeiträumen, die pro Tag angestrebt werden. Filter werden schrittweise gelockert, um diese Anzahl zu erreichen. Nur aktiv, wenn 'Mindestanzahl Zeiträume anstreben' aktiviert ist. Standard: 1", "min_periods_peak": "Mindestanzahl an Spitzenpreis-Zeiträumen, die pro Tag angestrebt werden. Filter werden schrittweise gelockert, um diese Anzahl zu erreichen. Nur aktiv, wenn 'Mindestanzahl Zeiträume anstreben' aktiviert ist. Standard: 1",
"relaxation_attempts_peak": "Wie viele Flex-Stufen (Versuche) nacheinander ausprobiert werden, bevor aufgegeben wird. Jeder Versuch testet alle Filterkombinationen auf der neuen Flex-Stufe. Mehr Versuche erhöhen die Chance auf zusätzliche Spitzenpreis-Zeiträume, benötigen aber etwas mehr Rechenzeit." "relaxation_attempts_peak": "Wie viele Flex-Stufen (Versuche) nacheinander ausprobiert werden, bevor aufgegeben wird. Jeder Versuch testet alle Filterkombinationen auf der neuen Flex-Stufe. Mehr Versuche erhöhen die Chance auf zusätzliche Spitzenpreis-Zeiträume, benötigen aber etwas mehr Rechenzeit."
}
}
}, },
"submit": "Weiter →" "submit": "Weiter →"
}, },
"price_trend": { "price_trend": {
"title": "📈 Preistrend-Schwellenwerte", "title": "📈 Preistrend-Schwellenwerte",
"description": "_{step_progress}_\n\n**Konfiguriere Schwellenwerte für Preistrend-Sensoren. Diese Sensoren vergleichen den aktuellen Preis mit dem Durchschnitt der nächsten N Stunden, um festzustellen, ob die Preise steigen, fallen oder stabil sind.**\n\n---", "description": "_{step_progress}_\n\n**Konfiguriere Schwellenwerte für Preistrend-Sensoren. Diese Sensoren vergleichen den aktuellen Preis mit dem Durchschnitt der nächsten N Stunden, um festzustellen, ob die Preise steigen, fallen oder stabil sind.**\n\n---",
"sections": {
"price_trend_thresholds": {
"name": "Preistrend-Schwellenwerte",
"description": "Definiere die Einstufungen für den Preistrend.",
"data": { "data": {
"price_trend_threshold_rising": "Steigend-Schwelle", "price_trend_threshold_rising": "Steigend-Schwelle",
"price_trend_threshold_falling": "Fallend-Schwelle" "price_trend_threshold_falling": "Fallend-Schwelle"
@ -215,12 +269,18 @@
"data_description": { "data_description": {
"price_trend_threshold_rising": "Prozentwert, um wie viel der Durchschnitt der nächsten N Stunden über dem aktuellen Preis liegen muss, damit der Trend als 'steigend' gilt. Beispiel: 5 bedeutet Durchschnitt ist mindestens 5% höher → Preise werden steigen. Typische Werte: 5-15%. Standard: 5%", "price_trend_threshold_rising": "Prozentwert, um wie viel der Durchschnitt der nächsten N Stunden über dem aktuellen Preis liegen muss, damit der Trend als 'steigend' gilt. Beispiel: 5 bedeutet Durchschnitt ist mindestens 5% höher → Preise werden steigen. Typische Werte: 5-15%. Standard: 5%",
"price_trend_threshold_falling": "Prozentwert (negativ), um wie viel der Durchschnitt der nächsten N Stunden unter dem aktuellen Preis liegen muss, damit der Trend als 'fallend' gilt. Beispiel: -5 bedeutet Durchschnitt ist mindestens 5% niedriger → Preise werden fallen. Typische Werte: -5 bis -15%. Standard: -5%" "price_trend_threshold_falling": "Prozentwert (negativ), um wie viel der Durchschnitt der nächsten N Stunden unter dem aktuellen Preis liegen muss, damit der Trend als 'fallend' gilt. Beispiel: -5 bedeutet Durchschnitt ist mindestens 5% niedriger → Preise werden fallen. Typische Werte: -5 bis -15%. Standard: -5%"
}
}
}, },
"submit": "Weiter →" "submit": "Weiter →"
}, },
"volatility": { "volatility": {
"title": "💨 Volatilität Schwellenwerte", "title": "💨 Volatilität Schwellenwerte",
"description": "_{step_progress}_\n\n**Konfiguriere Schwellenwerte für die Volatilitätsklassifizierung.** Volatilität misst relative Preisschwankungen anhand des Variationskoeffizienten (VK = Standardabweichung / Durchschnitt × 100%). Diese Schwellenwerte sind Prozentwerte, die für alle Preisniveaus funktionieren.\n\nVerwendet von:\n• Volatilitätssensoren (Klassifizierung)\n• Trend-Sensoren (adaptive Schwellenanpassung: <moderat = empfindlicher, ≥hoch = weniger empfindlich)\n\n---", "description": "_{step_progress}_\n\n**Konfiguriere Schwellenwerte für die Volatilitätsklassifizierung.** Volatilität misst relative Preisschwankungen anhand des Variationskoeffizienten (VK = Standardabweichung / Durchschnitt × 100%). Diese Schwellenwerte sind Prozentwerte, die für alle Preisniveaus funktionieren.\n\nVerwendet von:\n• Volatilitätssensoren (Klassifizierung)\n• Trend-Sensoren (adaptive Schwellenanpassung: <moderat = empfindlicher, ≥hoch = weniger empfindlich)\n\n---",
"sections": {
"volatility_thresholds": {
"name": "Volatilitätsschwellen",
"description": "Definiere Volatilitäts-Klassifizierungsstufen.",
"data": { "data": {
"volatility_threshold_moderate": "Moderat-Schwelle", "volatility_threshold_moderate": "Moderat-Schwelle",
"volatility_threshold_high": "Hoch-Schwelle", "volatility_threshold_high": "Hoch-Schwelle",
@ -230,6 +290,8 @@
"volatility_threshold_moderate": "Variationskoeffizient (VK) ab dem Preise als 'moderat volatil' gelten. VK = (Standardabweichung / Durchschnitt) × 100%. Beispiel: 15 bedeutet Preisschwankungen von ±15% um den Durchschnitt. Sensoren zeigen diese Klassifizierung an, Trend-Sensoren werden empfindlicher. Standard: 15%", "volatility_threshold_moderate": "Variationskoeffizient (VK) ab dem Preise als 'moderat volatil' gelten. VK = (Standardabweichung / Durchschnitt) × 100%. Beispiel: 15 bedeutet Preisschwankungen von ±15% um den Durchschnitt. Sensoren zeigen diese Klassifizierung an, Trend-Sensoren werden empfindlicher. Standard: 15%",
"volatility_threshold_high": "Variationskoeffizient (VK) ab dem Preise als 'hoch volatil' gelten. Beispiel: 30 bedeutet Preisschwankungen von ±30% um den Durchschnitt. Größere Preissprünge erwartet, Trend-Sensoren werden weniger empfindlich. Standard: 30%", "volatility_threshold_high": "Variationskoeffizient (VK) ab dem Preise als 'hoch volatil' gelten. Beispiel: 30 bedeutet Preisschwankungen von ±30% um den Durchschnitt. Größere Preissprünge erwartet, Trend-Sensoren werden weniger empfindlich. Standard: 30%",
"volatility_threshold_very_high": "Variationskoeffizient (VK) ab dem Preise als 'sehr hoch volatil' gelten. Beispiel: 50 bedeutet extreme Preisschwankungen von ±50% um den Durchschnitt. An solchen Tagen sind starke Preisspitzen wahrscheinlich. Standard: 50%" "volatility_threshold_very_high": "Variationskoeffizient (VK) ab dem Preise als 'sehr hoch volatil' gelten. Beispiel: 50 bedeutet extreme Preisschwankungen von ±50% um den Durchschnitt. An solchen Tagen sind starke Preisspitzen wahrscheinlich. Standard: 50%"
}
}
}, },
"submit": "Weiter →" "submit": "Weiter →"
}, },

View file

@ -145,6 +145,10 @@
"current_interval_price_rating": { "current_interval_price_rating": {
"title": "📊 Price Rating Thresholds", "title": "📊 Price Rating Thresholds",
"description": "_{step_progress}_\n\n**Configure thresholds for price rating levels (low/normal/high) based on comparison with trailing 24-hour average.**\n\n---", "description": "_{step_progress}_\n\n**Configure thresholds for price rating levels (low/normal/high) based on comparison with trailing 24-hour average.**\n\n---",
"sections": {
"price_rating_thresholds": {
"name": "Price Rating Thresholds",
"description": "Define price rating classification levels.",
"data": { "data": {
"price_rating_threshold_low": "Low Threshold", "price_rating_threshold_low": "Low Threshold",
"price_rating_threshold_high": "High Threshold" "price_rating_threshold_high": "High Threshold"
@ -152,62 +156,112 @@
"data_description": { "data_description": {
"price_rating_threshold_low": "Percentage below the trailing 24-hour average that the current price must be to qualify as 'low' rating. Example: 5 means at least 5% below average. Sensors with this rating indicate favorable time windows. Default: 5%", "price_rating_threshold_low": "Percentage below the trailing 24-hour average that the current price must be to qualify as 'low' rating. Example: 5 means at least 5% below average. Sensors with this rating indicate favorable time windows. Default: 5%",
"price_rating_threshold_high": "Percentage above the trailing 24-hour average that the current price must be to qualify as 'high' rating. Example: 10 means at least 10% above average. Sensors with this rating warn about expensive time windows. Default: 10%" "price_rating_threshold_high": "Percentage above the trailing 24-hour average that the current price must be to qualify as 'high' rating. Example: 10 means at least 10% above average. Sensors with this rating warn about expensive time windows. Default: 10%"
}
}
}, },
"submit": "Continue →" "submit": "Continue →"
}, },
"best_price": { "best_price": {
"title": "💚 Best Price Period Settings", "title": "💚 Best Price Period Settings",
"description": "_{step_progress}_\n\n**Configure settings for the Best Price Period binary sensor. This sensor is active during periods with the lowest electricity prices.**\n\n---", "description": "_{step_progress}_\n\n**Configure settings for the Best Price Period binary sensor. This sensor is active during periods with the lowest electricity prices.**\n\n---",
"sections": {
"period_settings": {
"name": "Period Duration & Levels",
"description": "Configure how long periods should be and which price levels to include.",
"data": { "data": {
"best_price_min_period_length": "Minimum Period Length", "best_price_min_period_length": "Minimum Period Length",
"best_price_flex": "Flexibility",
"best_price_min_distance_from_avg": "Minimum Distance",
"best_price_max_level": "Price Level Filter", "best_price_max_level": "Price Level Filter",
"best_price_max_level_gap_count": "Gap Tolerance", "best_price_max_level_gap_count": "Gap Tolerance"
},
"data_description": {
"best_price_min_period_length": "Minimum duration for a period to be considered as 'best price'. Longer periods are more practical for running appliances like dishwashers or heat pumps. Best price periods require 60 minutes minimum (vs. 30 minutes for peak price warnings) because they should provide meaningful time windows for consumption planning, not just brief opportunities.",
"best_price_max_level": "Only show best price periods if they contain intervals with price levels ≤ selected value. For example, selecting 'Cheap' means the period must have at least one 'VERY_CHEAP' or 'CHEAP' interval. This ensures 'best price' periods are not just relatively cheap for the day, but actually cheap in absolute terms. Select 'Any' to show best prices regardless of their absolute price level.",
"best_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with 'Cheap' filter and gap count 1, a sequence 'CHEAP, CHEAP, NORMAL, CHEAP' is accepted (NORMAL is one step above CHEAP). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance)."
}
},
"flexibility_settings": {
"name": "Flexibility & Thresholds",
"description": "Control how much prices can deviate and still qualify as 'best price'.",
"data": {
"best_price_flex": "Flexibility",
"best_price_min_distance_from_avg": "Minimum Distance"
},
"data_description": {
"best_price_flex": "Maximum above the daily minimum price that intervals can be and still qualify as 'best price'. Recommended: 15-20 with relaxation enabled (default), or 25-35 without relaxation. Maximum: 50 (hard cap for reliable period detection).",
"best_price_min_distance_from_avg": "Ensures periods are significantly cheaper than the daily average, not just marginally below it. This filters out noise and prevents marking slightly-below-average periods as 'best price' on days with flat prices. Higher values = stricter filtering (only truly cheap periods qualify). Default: 5 means periods must be at least 5% below the daily average."
}
},
"relaxation_and_target_periods": {
"name": "Relaxation & Target Periods",
"description": "Configure automatic filter relaxation and target period counts. Enable 'Achieve Minimum Count' to activate relaxation.",
"data": {
"enable_min_periods_best": "Achieve Minimum Count", "enable_min_periods_best": "Achieve Minimum Count",
"min_periods_best": "Minimum Periods", "min_periods_best": "Minimum Periods",
"relaxation_attempts_best": "Relaxation Attempts" "relaxation_attempts_best": "Relaxation Attempts"
}, },
"data_description": { "data_description": {
"best_price_min_period_length": "Minimum duration for a period to be considered as 'best price'. Longer periods are more practical for running appliances like dishwashers or heat pumps. Best price periods require 60 minutes minimum (vs. 30 minutes for peak price warnings) because they should provide meaningful time windows for consumption planning, not just brief opportunities.",
"best_price_flex": "Maximum above the daily minimum price that intervals can be and still qualify as 'best price'. Recommended: 15-20 with relaxation enabled (default), or 25-35 without relaxation. Maximum: 50 (hard cap for reliable period detection).",
"best_price_min_distance_from_avg": "Ensures periods are significantly cheaper than the daily average, not just marginally below it. This filters out noise and prevents marking slightly-below-average periods as 'best price' on days with flat prices. Higher values = stricter filtering (only truly cheap periods qualify). Default: 5 means periods must be at least 5% below the daily average.",
"best_price_max_level": "Only show best price periods if they contain intervals with price levels ≤ selected value. For example, selecting 'Cheap' means the period must have at least one 'VERY_CHEAP' or 'CHEAP' interval. This ensures 'best price' periods are not just relatively cheap for the day, but actually cheap in absolute terms. Select 'Any' to show best prices regardless of their absolute price level.",
"best_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with 'Cheap' filter and gap count 1, a sequence 'CHEAP, CHEAP, NORMAL, CHEAP' is accepted (NORMAL is one step above CHEAP). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance).",
"enable_min_periods_best": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods, which may include less optimal time windows as best-price periods.", "enable_min_periods_best": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods, which may include less optimal time windows as best-price periods.",
"min_periods_best": "Minimum number of best price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Try to Achieve Minimum Period Count' is enabled. Default: 1", "min_periods_best": "Minimum number of best price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Achieve Minimum Count' is enabled. Default: 1",
"relaxation_attempts_best": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional periods at the cost of longer processing time." "relaxation_attempts_best": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional periods at the cost of longer processing time."
}
}
}, },
"submit": "Continue →" "submit": "Continue →"
}, },
"peak_price": { "peak_price": {
"title": "🔴 Peak Price Period Settings", "title": "🔴 Peak Price Period Settings",
"description": "_{step_progress}_\n\n**Configure settings for the Peak Price Period binary sensor. This sensor is active during periods with the highest electricity prices.**\n\n---", "description": "_{step_progress}_\n\n**Configure settings for the Peak Price Period binary sensor. This sensor is active during periods with the highest electricity prices.**\n\n---",
"sections": {
"period_settings": {
"name": "Period Settings",
"description": "Configure period duration and price level constraints.",
"data": { "data": {
"peak_price_min_period_length": "Minimum Period Length", "peak_price_min_period_length": "Minimum Period Length",
"peak_price_flex": "Flexibility",
"peak_price_min_distance_from_avg": "Minimum Distance",
"peak_price_min_level": "Price Level Filter", "peak_price_min_level": "Price Level Filter",
"peak_price_max_level_gap_count": "Gap Tolerance", "peak_price_max_level_gap_count": "Gap Tolerance"
},
"data_description": {
"peak_price_min_period_length": "Minimum duration for a period to be considered as 'peak price'. Peak price warnings are allowed for shorter periods (30 minutes minimum vs. 60 minutes for best price) because brief expensive spikes are worth alerting about, even if they're too short for consumption planning.",
"peak_price_min_level": "Only show peak price periods if they contain intervals with price levels ≥ selected value. For example, selecting 'Expensive' means the period must have at least one 'EXPENSIVE' or 'VERY_EXPENSIVE' interval. This ensures 'peak price' periods are not just relatively expensive for the day, but actually expensive in absolute terms. Select 'Any' to show peak prices regardless of their absolute price level.",
"peak_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with 'Expensive' filter and gap count 2, a sequence 'EXPENSIVE, NORMAL, NORMAL, EXPENSIVE' is accepted (NORMAL is one step below EXPENSIVE). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance)."
}
},
"flexibility_settings": {
"name": "Flexibility Settings",
"description": "Configure price comparison thresholds and filtering.",
"data": {
"peak_price_flex": "Flexibility",
"peak_price_min_distance_from_avg": "Minimum Distance"
},
"data_description": {
"peak_price_flex": "Maximum below the daily maximum price that intervals can be and still qualify as 'peak price'. Recommended: -15 to -20 with relaxation enabled (default), or -25 to -35 without relaxation. Maximum: -50 (hard cap for reliable period detection). Note: Negative values indicate distance below maximum.",
"peak_price_min_distance_from_avg": "Ensures periods are significantly more expensive than the daily average, not just marginally above it. This filters out noise and prevents marking slightly-above-average periods as 'peak price' on days with flat prices. Higher values = stricter filtering (only truly expensive periods qualify). Default: 5 means periods must be at least 5% above the daily average."
}
},
"relaxation_and_target_periods": {
"name": "Relaxation & Target Periods",
"description": "Configure automatic filter relaxation and target period counts. Enable 'Achieve Minimum Count' to activate relaxation.",
"data": {
"enable_min_periods_peak": "Achieve Minimum Count", "enable_min_periods_peak": "Achieve Minimum Count",
"min_periods_peak": "Minimum Periods", "min_periods_peak": "Minimum Periods",
"relaxation_attempts_peak": "Relaxation Attempts" "relaxation_attempts_peak": "Relaxation Attempts"
}, },
"data_description": { "data_description": {
"peak_price_min_period_length": "Minimum duration for a period to be considered as 'peak price'. Peak price warnings are allowed for shorter periods (30 minutes minimum vs. 60 minutes for best price) because brief expensive spikes are worth alerting about, even if they're too short for consumption planning.",
"peak_price_flex": "Maximum below the daily maximum price that intervals can be and still qualify as 'peak price'. Recommended: -15 to -20 with relaxation enabled (default), or -25 to -35 without relaxation. Maximum: -50 (hard cap for reliable period detection). Note: Negative values indicate distance below maximum.",
"peak_price_min_distance_from_avg": "Ensures periods are significantly more expensive than the daily average, not just marginally above it. This filters out noise and prevents marking slightly-above-average periods as 'peak price' on days with flat prices. Higher values = stricter filtering (only truly expensive periods qualify). Default: 5 means periods must be at least 5% above the daily average.",
"peak_price_min_level": "Only show peak price periods if they contain intervals with price levels ≥ selected value. For example, selecting 'Expensive' means the period must have at least one 'EXPENSIVE' or 'VERY_EXPENSIVE' interval. This ensures 'peak price' periods are not just relatively expensive for the day, but actually expensive in absolute terms. Select 'Any' to show peak prices regardless of their absolute price level.",
"peak_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with 'Expensive' filter and gap count 2, a sequence 'EXPENSIVE, NORMAL, NORMAL, EXPENSIVE' is accepted (NORMAL is one step below EXPENSIVE). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance).",
"enable_min_periods_peak": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods to ensure you're warned about expensive periods even on days with unusual price patterns.", "enable_min_periods_peak": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods to ensure you're warned about expensive periods even on days with unusual price patterns.",
"min_periods_peak": "Minimum number of peak price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Try to Achieve Minimum Period Count' is enabled. Default: 1", "min_periods_peak": "Minimum number of peak price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Achieve Minimum Count' is enabled. Default: 1",
"relaxation_attempts_peak": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional peak periods at the cost of longer processing time." "relaxation_attempts_peak": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional peak periods at the cost of longer processing time."
}
}
}, },
"submit": "Continue →" "submit": "Continue →"
}, },
"price_trend": { "price_trend": {
"title": "📈 Price Trend Thresholds", "title": "📈 Price Trend Thresholds",
"description": "_{step_progress}_\n\n**Configure thresholds for price trend sensors. These sensors compare current price with the average of the next N hours to determine if prices are rising, falling, or stable.**\n\n---", "description": "_{step_progress}_\n\n**Configure thresholds for price trend sensors. These sensors compare current price with the average of the next N hours to determine if prices are rising, falling, or stable.**\n\n---",
"sections": {
"price_trend_thresholds": {
"name": "Price Trend Thresholds",
"description": "Define price trend classification levels.",
"data": { "data": {
"price_trend_threshold_rising": "Rising Threshold", "price_trend_threshold_rising": "Rising Threshold",
"price_trend_threshold_falling": "Falling Threshold" "price_trend_threshold_falling": "Falling Threshold"
@ -215,6 +269,8 @@
"data_description": { "data_description": {
"price_trend_threshold_rising": "Percentage that the average of the next N hours must be above the current price to qualify as 'rising' trend. Example: 5 means average is at least 5% higher → prices will rise. Typical values: 5-15%. Default: 5%", "price_trend_threshold_rising": "Percentage that the average of the next N hours must be above the current price to qualify as 'rising' trend. Example: 5 means average is at least 5% higher → prices will rise. Typical values: 5-15%. Default: 5%",
"price_trend_threshold_falling": "Percentage (negative) that the average of the next N hours must be below the current price to qualify as 'falling' trend. Example: -5 means average is at least 5% lower → prices will fall. Typical values: -5 to -15%. Default: -5%" "price_trend_threshold_falling": "Percentage (negative) that the average of the next N hours must be below the current price to qualify as 'falling' trend. Example: -5 means average is at least 5% lower → prices will fall. Typical values: -5 to -15%. Default: -5%"
}
}
}, },
"submit": "Continue →" "submit": "Continue →"
}, },
@ -226,6 +282,10 @@
"volatility": { "volatility": {
"title": "💨 Price Volatility Thresholds", "title": "💨 Price Volatility Thresholds",
"description": "_{step_progress}_\n\n**Configure thresholds for volatility classification.** Volatility measures relative price variation using the coefficient of variation (CV = standard deviation / mean × 100%). These thresholds are percentage values that work across all price levels.\n\nUsed by:\n• Volatility sensors (classification)\n• Trend sensors (adaptive threshold adjustment: <moderate = more sensitive, ≥high = less sensitive)\n\n---", "description": "_{step_progress}_\n\n**Configure thresholds for volatility classification.** Volatility measures relative price variation using the coefficient of variation (CV = standard deviation / mean × 100%). These thresholds are percentage values that work across all price levels.\n\nUsed by:\n• Volatility sensors (classification)\n• Trend sensors (adaptive threshold adjustment: <moderate = more sensitive, ≥high = less sensitive)\n\n---",
"sections": {
"volatility_thresholds": {
"name": "Volatility Thresholds",
"description": "Define price volatility classification levels.",
"data": { "data": {
"volatility_threshold_moderate": "Moderate Threshold", "volatility_threshold_moderate": "Moderate Threshold",
"volatility_threshold_high": "High Threshold", "volatility_threshold_high": "High Threshold",
@ -235,8 +295,10 @@
"volatility_threshold_moderate": "Coefficient of Variation (CV) at which prices are considered 'moderately volatile'. CV = (standard deviation / mean) × 100%. Example: 15 means price fluctuations of ±15% around average. Sensors show this classification, trend sensors become more sensitive. Default: 15%", "volatility_threshold_moderate": "Coefficient of Variation (CV) at which prices are considered 'moderately volatile'. CV = (standard deviation / mean) × 100%. Example: 15 means price fluctuations of ±15% around average. Sensors show this classification, trend sensors become more sensitive. Default: 15%",
"volatility_threshold_high": "Coefficient of Variation (CV) at which prices are considered 'highly volatile'. Example: 30 means price fluctuations of ±30% around average. Larger price jumps expected, trend sensors become less sensitive. Default: 30%", "volatility_threshold_high": "Coefficient of Variation (CV) at which prices are considered 'highly volatile'. Example: 30 means price fluctuations of ±30% around average. Larger price jumps expected, trend sensors become less sensitive. Default: 30%",
"volatility_threshold_very_high": "Coefficient of Variation (CV) at which prices are considered 'very highly volatile'. Example: 50 means extreme price fluctuations of ±50% around average. On such days, strong price spikes are likely. Default: 50%" "volatility_threshold_very_high": "Coefficient of Variation (CV) at which prices are considered 'very highly volatile'. Example: 50 means extreme price fluctuations of ±50% around average. On such days, strong price spikes are likely. Default: 50%"
}
}
}, },
"submit": "Next to Step 4" "submit": "Continue →"
} }
}, },
"error": { "error": {

View file

@ -145,6 +145,10 @@
"current_interval_price_rating": { "current_interval_price_rating": {
"title": "📊 Prisvurderings-terskler", "title": "📊 Prisvurderings-terskler",
"description": "_{step_progress}_\n\n**Konfigurer terskler for prisvurderingsnivåer (lav/normal/høy) basert på sammenligning med etterfølgende 24-timers gjennomsnitt.**\n\n---", "description": "_{step_progress}_\n\n**Konfigurer terskler for prisvurderingsnivåer (lav/normal/høy) basert på sammenligning med etterfølgende 24-timers gjennomsnitt.**\n\n---",
"sections": {
"price_rating_thresholds": {
"name": "Prisvurderings-terskler",
"description": "Definer prisvurderingsnivåer.",
"data": { "data": {
"price_rating_threshold_low": "Lav-terskel", "price_rating_threshold_low": "Lav-terskel",
"price_rating_threshold_high": "Høy-terskel" "price_rating_threshold_high": "Høy-terskel"
@ -152,62 +156,112 @@
"data_description": { "data_description": {
"price_rating_threshold_low": "Prosentverdi for hvor mye gjeldende pris må være under det etterfølgende 24-timers gjennomsnittet for å kvalifisere som 'lav' vurdering. Eksempel: 5 betyr minst 5% under gjennomsnitt. Sensorer med denne vurderingen indikerer gunstige tidsvinduer. Standard: 5%", "price_rating_threshold_low": "Prosentverdi for hvor mye gjeldende pris må være under det etterfølgende 24-timers gjennomsnittet for å kvalifisere som 'lav' vurdering. Eksempel: 5 betyr minst 5% under gjennomsnitt. Sensorer med denne vurderingen indikerer gunstige tidsvinduer. Standard: 5%",
"price_rating_threshold_high": "Prosentverdi for hvor mye gjeldende pris må være over det etterfølgende 24-timers gjennomsnittet for å kvalifisere som 'høy' vurdering. Eksempel: 10 betyr minst 10% over gjennomsnitt. Sensorer med denne vurderingen advarer om dyre tidsvinduer. Standard: 10%" "price_rating_threshold_high": "Prosentverdi for hvor mye gjeldende pris må være over det etterfølgende 24-timers gjennomsnittet for å kvalifisere som 'høy' vurdering. Eksempel: 10 betyr minst 10% over gjennomsnitt. Sensorer med denne vurderingen advarer om dyre tidsvinduer. Standard: 10%"
}
}
}, },
"submit": "Fortsett →" "submit": "Fortsett →"
}, },
"best_price": { "best_price": {
"title": "💚 Beste Prisperiode Innstillinger", "title": "💚 Beste Prisperiode Innstillinger",
"description": "_{step_progress}_\n\nKonfigurer innstillinger for **Beste Prisperiode** binærsensor. Denne sensoren er aktiv i perioder med de laveste strømprisene.\n\n---", "description": "_{step_progress}_\n\nKonfigurer innstillinger for **Beste Prisperiode** binærsensor. Denne sensoren er aktiv i perioder med de laveste strømprisene.\n\n---",
"sections": {
"period_settings": {
"name": "Period Settings",
"description": "Configure period duration and price level constraints.",
"data": { "data": {
"best_price_min_period_length": "Minimum periodelengde", "best_price_min_period_length": "Minimum Period Length",
"best_price_flex": "Fleksibilitet: Maksimum over minimumspris", "best_price_max_level": "Price Level Filter",
"best_price_min_distance_from_avg": "Minimumsavstand: Påkrevd under daglig gjennomsnitt", "best_price_max_level_gap_count": "Gap Tolerance"
"best_price_max_level": "Prisnivåfilter (valgfritt)",
"best_price_max_level_gap_count": "Gaptoleranse for nivåfilter",
"enable_min_periods_best": "Prøv å oppnå minimum antall perioder",
"min_periods_best": "Minimum antall perioder",
"relaxation_attempts_best": "Antall forsøk (fleksnivåer)"
}, },
"data_description": { "data_description": {
"best_price_min_period_length": "Minimum varighet for at en periode skal regnes som 'beste pris'. Lengre perioder er mer praktiske for å kjøre apparater som oppvaskmaskiner eller varmepumper. Beste-pris-perioder krever minimum 60 minutter (sammenlignet med 30 minutter for topppris-advarsler) fordi de skal gi meningsfulle tidsvinduer for forbruksplanlegging, ikke bare korte muligheter.", "best_price_min_period_length": "Minimum duration for a period to be considered as 'best price'. Longer periods are more practical for running appliances like dishwashers or heat pumps. Best price periods require minimum 60 minutes (compared to 30 minutes for peak price alerts) because they should provide meaningful time windows for consumption planning, not just brief opportunities.",
"best_price_flex": "Maksimalt over den daglige minimumsprisen der intervaller fortsatt kvalifiserer som 'beste pris'. Anbefaling: 15-20 med lemping aktivert (standard), eller 25-35 uten lemping. Maksimum: 50 (hard grense for pålitelig periodegjenkjenning).", "best_price_max_level": "Only show best price periods if they contain intervals with price levels ≤ selected value. For example, selecting 'Cheap' means the period must have at least one 'VERY_CHEAP' or 'CHEAP' interval. This ensures 'best price' periods are not just relatively cheap for the day, but actually cheap in absolute terms. Select 'Any' to show best prices regardless of their absolute price level.",
"best_price_min_distance_from_avg": "Sikrer at perioder er betydelig billigere enn daglig gjennomsnitt, ikke bare marginalt under det. Dette filtrerer støy og forhindrer at litt-under-gjennomsnittet perioder markeres som 'beste pris' på dager med flate priser. Høyere verdier = strengere filtrering (bare virkelig billige perioder kvalifiserer). Standard: 5 betyr at perioder må være minst 5% under daglig gjennomsnitt.", "best_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with 'Cheap' filter and gap count 1, a sequence 'CHEAP, CHEAP, NORMAL, CHEAP' is accepted (NORMAL is one step above CHEAP). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance)."
"best_price_max_level": "Vis kun beste prisperioder hvis de inneholder intervaller med prisnivåer ≤ valgt verdi. For eksempel: å velge 'Billig' betyr at perioden må ha minst étt 'VELDIG_BILLIG' eller 'BILLIG' intervall. Dette sikrer at 'beste pris'-perioder ikke bare er relativt billige for dagen, men faktisk billige i absolutte tall. Velg 'Alle' for å vise beste priser uavhengig av deres absolutte prisnivå.", }
"enable_min_periods_best": "Når aktivert vil filtrene gradvis bli lempeligere hvis det ikke blir funnet nok perioder. Dette forsøker å nå ønsket minimum antall perioder, noe som kan føre til at mindre optimale tidsrom blir markert som beste-pris-perioder.", },
"min_periods_best": "Minimum antall beste-pris-perioder å sikte mot per dag. Filtre vil bli lempet trinn for trinn for å prøve å oppnå dette antallet. Kun aktiv når 'Prøv å oppnå minimum antall perioder' er aktivert. Standard: 1", "flexibility_settings": {
"relaxation_attempts_best": "Hvor mange fleksnivåer (forsøk) som testes før vi gir opp. Hvert forsøk kjører alle filterkombinasjoner på det nye fleksnivået. Flere forsøk øker sjansen for ekstra perioder, men tar litt lengre tid.", "name": "Flexibility Settings",
"best_price_max_level_gap_count": "Maksimalt antall påfølgende intervaller som kan avvike med nøyaktig étt nivåtrinn fra det nødvendige nivået. For eksempel: med 'Billig' filter og gapantall 1, aksepteres sekvensen 'BILLIG, BILLIG, NORMAL, BILLIG' (NORMAL er étt trinn over BILLIG). Dette forhindrer at perioder blir delt opp av tilfeldige nivåavvik. **Merk:** Gaptoleranse krever perioder ≥90 minutter (6 intervaller) for å oppdage avvik effektivt. Standard: 0 (streng filtrering, ingen toleranse)." "description": "Configure price comparison thresholds and filtering.",
"data": {
"best_price_flex": "Flexibility",
"best_price_min_distance_from_avg": "Minimum Distance"
},
"data_description": {
"best_price_flex": "Maximum above the daily minimum price that intervals can be and still qualify as 'best price'. Recommended: 15-20 with relaxation enabled (default), or 25-35 without relaxation. Maximum: 50 (hard cap for reliable period detection).",
"best_price_min_distance_from_avg": "Ensures periods are significantly cheaper than the daily average, not just marginally below it. This filters out noise and prevents marking slightly-below-average periods as 'best price' on days with flat prices. Higher values = stricter filtering (only truly cheap periods qualify). Default: 5 means periods must be at least 5% below the daily average."
}
},
"relaxation_and_target_periods": {
"name": "Relaxation & Target Periods",
"description": "Configure automatic filter relaxation and target period counts. Enable 'Achieve Minimum Count' to activate relaxation.",
"data": {
"enable_min_periods_best": "Achieve Minimum Count",
"min_periods_best": "Minimum Periods",
"relaxation_attempts_best": "Relaxation Attempts"
},
"data_description": {
"enable_min_periods_best": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods, which may include less optimal time windows as best-price periods.",
"min_periods_best": "Minimum number of best price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Achieve Minimum Count' is enabled. Default: 1",
"relaxation_attempts_best": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional periods at the cost of longer processing time."
}
}
}, },
"submit": "Fortsett →" "submit": "Fortsett →"
}, },
"peak_price": { "peak_price": {
"title": "🔴 Toppprisperiode Innstillinger", "title": "🔴 Toppprisperiode Innstillinger",
"description": "_{step_progress}_\n\nKonfigurer innstillinger for **Toppprisperiode** binærsensor. Denne sensoren er aktiv i perioder med de høyeste strømprisene.\n\n---", "description": "_{step_progress}_\n\nKonfigurer innstillinger for **Toppprisperiode** binærsensor. Denne sensoren er aktiv i perioder med de høyeste strømprisene.\n\n---",
"sections": {
"period_settings": {
"name": "Periodeinnstillinger",
"description": "Konfigurer periodelengde og prisnivåbegrensninger.",
"data": { "data": {
"peak_price_min_period_length": "Minimum periodelengde", "peak_price_min_period_length": "Minimum periodelengde",
"peak_price_flex": "Fleksibilitet: Maksimum under maksimumspris", "peak_price_min_level": "Prisnivåfilter",
"peak_price_min_distance_from_avg": "Minimumsavstand: Påkrevd over daglig gjennomsnitt", "peak_price_max_level_gap_count": "Gaptoleranse"
"peak_price_min_level": "Prisnivåfilter (valgfritt)",
"peak_price_max_level_gap_count": "Gaptoleranse for nivåfilter",
"enable_min_periods_peak": "Prøv å oppnå minimum antall perioder",
"min_periods_peak": "Minimum antall perioder",
"relaxation_attempts_peak": "Antall forsøk (fleksnivåer)"
}, },
"data_description": { "data_description": {
"peak_price_min_period_length": "Minimum varighet for at en periode skal regnes som 'topppris'. Topppris-advarsler er tillatt for kortere perioder (minimum 30 minutter sammenlignet med 60 minutter for beste pris) fordi korte dyre topper er verdt å advare om, selv om de er for korte for forbruksplanlegging.", "peak_price_min_period_length": "Minimum varighet for at en periode skal regnes som 'topppris'. Topppris-advarsler er tillatt for kortere perioder (minimum 30 minutter sammenlignet med 60 minutter for beste pris) fordi korte dyre topper er verdt å advare om, selv om de er for korte for forbruksplanlegging.",
"peak_price_flex": "Maksimalt under den daglige maksimumsprisen der intervaller fortsatt kvalifiserer som 'topppris'. Anbefaling: -15 til -20 med lemping aktivert (standard), eller -25 til -35 uten lemping. Maksimum: -50 (hard grense for pålitelig periodegjenkjenning). Merk: Negative verdier angir avstand under maksimum.",
"peak_price_min_distance_from_avg": "Sikrer at perioder er betydelig dyrere enn daglig gjennomsnitt, ikke bare marginalt over det. Dette filtrerer støy og forhindrer at litt-over-gjennomsnittet perioder markeres som 'topppris' på dager med flate priser. Høyere verdier = strengere filtrering (bare virkelig dyre perioder kvalifiserer). Standard: 5 betyr at perioder må være minst 5% over daglig gjennomsnitt.",
"peak_price_min_level": "Vis kun topprisperioder hvis de inneholder intervaller med prisnivåer ≥ valgt verdi. For eksempel: å velge 'Dyr' betyr at perioden må ha minst étt 'DYR' eller 'VELDIG_DYR' intervall. Dette sikrer at 'topppris'-perioder ikke bare er relativt dyre for dagen, men faktisk dyre i absolutte tall. Velg 'Alle' for å vise topppriser uavhengig av deres absolutte prisnivå.", "peak_price_min_level": "Vis kun topprisperioder hvis de inneholder intervaller med prisnivåer ≥ valgt verdi. For eksempel: å velge 'Dyr' betyr at perioden må ha minst étt 'DYR' eller 'VELDIG_DYR' intervall. Dette sikrer at 'topppris'-perioder ikke bare er relativt dyre for dagen, men faktisk dyre i absolutte tall. Velg 'Alle' for å vise topppriser uavhengig av deres absolutte prisnivå.",
"peak_price_max_level_gap_count": "Maksimalt antall påfølgende intervaller som kan avvike med nøyaktig étt nivåtrinn fra det nødvendige nivået. For eksempel: med 'Dyr' filter og gapantall 1, aksepteres sekvensen 'DYR, DYR, NORMAL, DYR' (NORMAL er étt trinn under DYR). Dette forhindrer at perioder blir delt opp av tilfeldige nivåavvik. **Merk:** Gaptoleranse krever perioder ≥90 minutter (6 intervaller) for å oppdage avvik effektivt. Standard: 0 (streng filtrering, ingen toleranse)."
}
},
"flexibility_settings": {
"name": "Fleksibilitetsinnstillinger",
"description": "Konfigurer prissammenligningskriterier og filtrering.",
"data": {
"peak_price_flex": "Fleksibilitet",
"peak_price_min_distance_from_avg": "Minimumsavstand"
},
"data_description": {
"peak_price_flex": "Maksimalt under den daglige maksimumsprisen der intervaller fortsatt kvalifiserer som 'topppris'. Anbefaling: -15 til -20 med lemping aktivert (standard), eller -25 til -35 uten lemping. Maksimum: -50 (hard grense for pålitelig periodegjenkjenning). Merk: Negative verdier angir avstand under maksimum.",
"peak_price_min_distance_from_avg": "Sikrer at perioder er betydelig dyrere enn daglig gjennomsnitt, ikke bare marginalt over det. Dette filtrerer støy og forhindrer at litt-over-gjennomsnittet perioder markeres som 'topppris' på dager med flate priser. Høyere verdier = strengere filtrering (bare virkelig dyre perioder kvalifiserer). Standard: 5 betyr at perioder må være minst 5% over daglig gjennomsnitt."
}
},
"relaxation_and_target_periods": {
"name": "Lemping & målperioder",
"description": "Konfigurer automatisk filterlempelse og målperioder. Aktiver 'Prøv å oppnå minimum antall perioder' for å aktivere lemping.",
"data": {
"enable_min_periods_peak": "Prøv å oppnå minimum antall perioder",
"min_periods_peak": "Minimum antall perioder",
"relaxation_attempts_peak": "Antall lempingsforsøk"
},
"data_description": {
"enable_min_periods_peak": "Når aktivert vil filtrene gradvis bli lempeligere hvis det ikke blir funnet nok perioder. Dette forsøker å nå ønsket minimum antall perioder for å sikre at du blir advart om dyre perioder selv på dager med uvanlige prismønstre.", "enable_min_periods_peak": "Når aktivert vil filtrene gradvis bli lempeligere hvis det ikke blir funnet nok perioder. Dette forsøker å nå ønsket minimum antall perioder for å sikre at du blir advart om dyre perioder selv på dager med uvanlige prismønstre.",
"min_periods_peak": "Minimum antall topp-pris-perioder å sikte mot per dag. Filtre vil bli lempet trinn for trinn for å prøve å oppnå dette antallet. Kun aktiv når 'Prøv å oppnå minimum antall perioder' er aktivert. Standard: 1", "min_periods_peak": "Minimum antall topp-pris-perioder å sikte mot per dag. Filtre vil bli lempet trinn for trinn for å prøve å oppnå dette antallet. Kun aktiv når 'Prøv å oppnå minimum antall perioder' er aktivert. Standard: 1",
"relaxation_attempts_peak": "Hvor mange fleksnivåer (forsøk) som testes før vi gir opp. Hvert forsøk kjører alle filterkombinasjoner på det nye fleksnivået. Flere forsøk øker sjansen for ekstra toppprisperioder, men tar litt lengre tid.", "relaxation_attempts_peak": "Hvor mange fleksnivåer (forsøk) som testes før vi gir opp. Hvert forsøk kjører alle filterkombinasjoner på det nye fleksnivået. Flere forsøk øker sjansen for ekstra toppprisperioder, men tar litt lengre tid."
"peak_price_max_level_gap_count": "Maksimalt antall påfølgende intervaller som kan avvike med nøyaktig étt nivåtrinn fra det nødvendige nivået. For eksempel: med 'Dyr' filter og gapantall 1, aksepteres sekvensen 'DYR, DYR, NORMAL, DYR' (NORMAL er étt trinn under DYR). Dette forhindrer at perioder blir delt opp av tilfeldige nivåavvik. **Merk:** Gaptoleranse krever perioder ≥90 minutter (6 intervaller) for å oppdage avvik effektivt. Standard: 0 (streng filtrering, ingen toleranse)." }
}
}, },
"submit": "Fortsett →" "submit": "Fortsett →"
}, },
"price_trend": { "price_trend": {
"title": "📈 Pristrendterskler", "title": "📈 Pristrendterskler",
"description": "_{step_progress}_\n\n**Konfigurer terskler for pristrendsensorer. Disse sensorene sammenligner nåværende pris med gjennomsnittet av de neste N timene for å bestemme om prisene stiger, faller eller er stabile.**\n\n---", "description": "_{step_progress}_\n\n**Konfigurer terskler for pristrendsensorer. Disse sensorene sammenligner nåværende pris med gjennomsnittet av de neste N timene for å bestemme om prisene stiger, faller eller er stabile.**\n\n---",
"sections": {
"price_trend_thresholds": {
"name": "Pristrendterskler",
"description": "Definer pristrendnivåer.",
"data": { "data": {
"price_trend_threshold_rising": "Stigende terskel", "price_trend_threshold_rising": "Stigende terskel",
"price_trend_threshold_falling": "Fallende terskel" "price_trend_threshold_falling": "Fallende terskel"
@ -215,12 +269,18 @@
"data_description": { "data_description": {
"price_trend_threshold_rising": "Prosentverdi for gjennomsnittlig prisøkning per time som kvalifiserer trenden som 'stigende'. Eksempel: 5 betyr minst 5% økning per time. Sensorer med denne trenden indikerer at prisene vil stige raskt. Standard: 5%", "price_trend_threshold_rising": "Prosentverdi for gjennomsnittlig prisøkning per time som kvalifiserer trenden som 'stigende'. Eksempel: 5 betyr minst 5% økning per time. Sensorer med denne trenden indikerer at prisene vil stige raskt. Standard: 5%",
"price_trend_threshold_falling": "Prosentverdi for gjennomsnittlig prisnedgang per time som kvalifiserer trenden som 'synkende'. Eksempel: -5 betyr minst 5% nedgang per time. Sensorer med denne trenden indikerer at prisene vil synke raskt. Standard: -5%" "price_trend_threshold_falling": "Prosentverdi for gjennomsnittlig prisnedgang per time som kvalifiserer trenden som 'synkende'. Eksempel: -5 betyr minst 5% nedgang per time. Sensorer med denne trenden indikerer at prisene vil synke raskt. Standard: -5%"
}
}
}, },
"submit": "Fortsett →" "submit": "Fortsett →"
}, },
"volatility": { "volatility": {
"title": "💨 Volatilitets-terskler", "title": "💨 Volatilitets-terskler",
"description": "_{step_progress}_\n\n**Konfigurer terskler for volatilitetsklassifisering. Volatilitet måler relativ prisvariation ved hjelp av variasjonskoeffisienten (VK = standardavvik / gjennomsnitt × 100%). Disse tersklene er prosentverdier som fungerer på tvers av alle prisnivåer.**\n\nBrukes av:\n• Volatilitetssensorer (klassifisering)\n• Trendsensorer (adaptiv terskel justering: <moderat = mer følsom, ≥høy = mindre følsom)\n\n---", "description": "_{step_progress}_\n\n**Konfigurer terskler for volatilitetsklassifisering. Volatilitet måler relativ prisvariation ved hjelp av variasjonskoeffisienten (VK = standardavvik / gjennomsnitt × 100%). Disse tersklene er prosentverdier som fungerer på tvers av alle prisnivåer.**\n\nBrukes av:\n• Volatilitetssensorer (klassifisering)\n• Trendsensorer (adaptiv terskel justering: <moderat = mer følsom, ≥høy = mindre følsom)\n\n---",
"sections": {
"volatility_thresholds": {
"name": "Volatilitetsterskler",
"description": "Definer volatilitetsklassifiseringsnivåer.",
"data": { "data": {
"volatility_threshold_moderate": "Moderat terskel", "volatility_threshold_moderate": "Moderat terskel",
"volatility_threshold_high": "Høy terskel", "volatility_threshold_high": "Høy terskel",
@ -230,6 +290,8 @@
"volatility_threshold_moderate": "Grenseverdi for standardavvik (% av gjennomsnitt) for å klassifisere prisvariasjonen som 'moderat'. Eksempel: 10 betyr standardavvik ≥ 10% av gjennomsnitt. Dette indikerer økt prisustabilitet. Standard: 10%", "volatility_threshold_moderate": "Grenseverdi for standardavvik (% av gjennomsnitt) for å klassifisere prisvariasjonen som 'moderat'. Eksempel: 10 betyr standardavvik ≥ 10% av gjennomsnitt. Dette indikerer økt prisustabilitet. Standard: 10%",
"volatility_threshold_high": "Grenseverdi for standardavvik (% av gjennomsnitt) for å klassifisere prisvariasjonen som 'høy'. Eksempel: 20 betyr standardavvik ≥ 20% av gjennomsnitt. Dette indikerer betydelige prissvingninger. Standard: 20%", "volatility_threshold_high": "Grenseverdi for standardavvik (% av gjennomsnitt) for å klassifisere prisvariasjonen som 'høy'. Eksempel: 20 betyr standardavvik ≥ 20% av gjennomsnitt. Dette indikerer betydelige prissvingninger. Standard: 20%",
"volatility_threshold_very_high": "Grenseverdi for standardavvik (% av gjennomsnitt) for å klassifisere prisvariasjonen som 'veldig høy'. Eksempel: 30 betyr standardavvik ≥ 30% av gjennomsnitt. Dette indikerer ekstrem prisustabilitet. Standard: 30%" "volatility_threshold_very_high": "Grenseverdi for standardavvik (% av gjennomsnitt) for å klassifisere prisvariasjonen som 'veldig høy'. Eksempel: 30 betyr standardavvik ≥ 30% av gjennomsnitt. Dette indikerer ekstrem prisustabilitet. Standard: 30%"
}
}
}, },
"submit": "Fortsett →" "submit": "Fortsett →"
}, },

View file

@ -145,6 +145,10 @@
"current_interval_price_rating": { "current_interval_price_rating": {
"title": "📊 Prijsbeoordelingsdrempels", "title": "📊 Prijsbeoordelingsdrempels",
"description": "_{step_progress}_\n\n**Configureer drempels voor prijsbeoordelingsniveaus (laag/normaal/hoog) op basis van vergelijking met het lopende 24-uurs gemiddelde.**\n\n---", "description": "_{step_progress}_\n\n**Configureer drempels voor prijsbeoordelingsniveaus (laag/normaal/hoog) op basis van vergelijking met het lopende 24-uurs gemiddelde.**\n\n---",
"sections": {
"price_rating_thresholds": {
"name": "Prijsbeoordelingsdrempels",
"description": "Definieer prijsbeoordelingsniveaus.",
"data": { "data": {
"price_rating_threshold_low": "Lage drempel", "price_rating_threshold_low": "Lage drempel",
"price_rating_threshold_high": "Hoge drempel" "price_rating_threshold_high": "Hoge drempel"
@ -152,62 +156,112 @@
"data_description": { "data_description": {
"price_rating_threshold_low": "Percentage onder het lopende 24-uurs gemiddelde dat de huidige prijs moet zijn om als 'laag' te kwalificeren. Voorbeeld: 5 betekent minstens 5% onder gemiddelde. Sensoren met deze beoordeling geven gunstige tijdsvensters aan. Standaard: 5%", "price_rating_threshold_low": "Percentage onder het lopende 24-uurs gemiddelde dat de huidige prijs moet zijn om als 'laag' te kwalificeren. Voorbeeld: 5 betekent minstens 5% onder gemiddelde. Sensoren met deze beoordeling geven gunstige tijdsvensters aan. Standaard: 5%",
"price_rating_threshold_high": "Percentage boven het lopende 24-uurs gemiddelde dat de huidige prijs moet zijn om als 'hoog' te kwalificeren. Voorbeeld: 10 betekent minstens 10% boven gemiddelde. Sensoren met deze beoordeling waarschuwen voor dure tijdsvensters. Standaard: 10%" "price_rating_threshold_high": "Percentage boven het lopende 24-uurs gemiddelde dat de huidige prijs moet zijn om als 'hoog' te kwalificeren. Voorbeeld: 10 betekent minstens 10% boven gemiddelde. Sensoren met deze beoordeling waarschuwen voor dure tijdsvensters. Standaard: 10%"
}
}
}, },
"submit": "Doorgaan →" "submit": "Doorgaan →"
}, },
"best_price": { "best_price": {
"title": "💚 Beste Prijs Periode Instellingen", "title": "💚 Beste Prijs Periode Instellingen",
"description": "_{step_progress}_\n\nConfigureer instellingen voor de **Beste Prijs Periode** binaire sensor. Deze sensor is actief tijdens periodes met de laagste elektriciteitsprijzen.\n\n---", "description": "_{step_progress}_\n\nConfigureer instellingen voor de **Beste Prijs Periode** binaire sensor. Deze sensor is actief tijdens periodes met de laagste elektriciteitsprijzen.\n\n---",
"sections": {
"period_settings": {
"name": "Period Settings",
"description": "Configure period duration and price level constraints.",
"data": { "data": {
"best_price_min_period_length": "Minimale periodelengte", "best_price_min_period_length": "Minimum Period Length",
"best_price_flex": "Flexibiliteit: Maximaal boven minimumprijs", "best_price_max_level": "Price Level Filter",
"best_price_min_distance_from_avg": "Minimale afstand: Vereist onder daggemiddelde", "best_price_max_level_gap_count": "Gap Tolerance"
"best_price_max_level": "Prijsniveaufilter (Optioneel)",
"best_price_max_level_gap_count": "Gaptolerantie voor niveaufilter",
"enable_min_periods_best": "Probeer minimum aantal periodes te bereiken",
"min_periods_best": "Minimum aantal periodes",
"relaxation_attempts_best": "Aantal ontspanningspogingen"
}, },
"data_description": { "data_description": {
"best_price_min_period_length": "Minimale duur voordat een periode als 'beste prijs' wordt beschouwd. Langere periodes zijn praktischer voor het gebruik van apparaten zoals vaatwassers of warmtepompen. Beste prijs periodes vereisen minimaal 60 minuten (versus 30 minuten voor piekprijs waarschuwingen) omdat ze betekenisvolle tijdsvensters moeten bieden voor verbruiksplanning, niet alleen korte kansen.", "best_price_min_period_length": "Minimum duration for a period to be considered as 'best price'. Longer periods are more practical for running appliances like dishwashers or heat pumps. Best price periods require minimum 60 minutes (compared to 30 minutes for peak price alerts) because they should provide meaningful time windows for consumption planning, not just brief opportunities.",
"best_price_flex": "Maximaal boven de dagelijkse minimumprijs waarbij intervallen nog kwalificeren als 'beste prijs'. Aanbeveling: 15-20 met versoepeling geactiveerd (standaard), of 25-35 zonder versoepeling. Maximum: 50 (harde limiet voor betrouwbare periodedetectie).", "best_price_max_level": "Only show best price periods if they contain intervals with price levels ≤ selected value. For example, selecting 'Cheap' means the period must have at least one 'VERY_CHEAP' or 'CHEAP' interval. This ensures 'best price' periods are not just relatively cheap for the day, but actually cheap in absolute terms. Select 'Any' to show best prices regardless of their absolute price level.",
"best_price_min_distance_from_avg": "Zorgt ervoor dat periodes significant goedkoper zijn dan het daggemiddelde, niet slechts marginaal eronder. Dit filtert ruis en voorkomt dat licht-onder-gemiddelde periodes op dagen met vlakke prijzen als 'beste prijs' worden gemarkeerd. Hogere waarden = striktere filtering (alleen echt goedkope periodes kwalificeren). Standaard: 5 betekent dat periodes minimaal 5% onder het daggemiddelde moeten liggen.", "best_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with 'Cheap' filter and gap count 1, a sequence 'CHEAP, CHEAP, NORMAL, CHEAP' is accepted (NORMAL is one step above CHEAP). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance)."
"best_price_max_level": "Toon alleen beste prijsperiodes als ze intervallen bevatten met prijsniveaus ≤ geselecteerde waarde. Bijvoorbeeld: selecteren van 'Goedkoop' betekent dat de periode minstens één 'ZEER_GOEDKOOP' of 'GOEDKOOP' interval moet hebben. Dit zorgt ervoor dat 'beste prijs'-periodes niet alleen relatief goedkoop zijn voor de dag, maar daadwerkelijk goedkoop in absolute termen. Selecteer 'Alle' om beste prijzen te tonen ongeacht hun absolute prijsniveau.", }
"enable_min_periods_best": "Wanneer ingeschakeld worden filters geleidelijk versoepeld als er niet genoeg periodes worden gevonden. Dit probeert het gewenste minimum aantal periodes te bereiken om ervoor te zorgen dat je kansen hebt om van lage prijzen te profiteren, zelfs op dagen met ongebruikelijke prijspatronen.", },
"min_periods_best": "Minimum aantal beste prijsperiodes om naar te streven per dag. Filters worden stap voor stap versoepeld om dit aantal te proberen bereiken. Alleen actief wanneer 'Probeer minimum aantal periodes te bereiken' is ingeschakeld. Standaard: 1", "flexibility_settings": {
"relaxation_attempts_best": "Hoeveel keer de ontspanningslogica filters opnieuw mag proberen. Gebruik hogere waarden om meer variaties te testen als dagen extreem grillig zijn. Hogere aantallen vergen meer rekentijd maar vergroten de kans dat het gewenste minimum aantal periodes wordt gehaald.", "name": "Flexibility Settings",
"best_price_max_level_gap_count": "Maximum aantal opeenvolgende intervallen dat precies één niveaustap mag afwijken van het vereiste niveau. Bijvoorbeeld: met 'Goedkoop' filter en gaptelling 1 wordt de reeks 'GOEDKOOP, GOEDKOOP, NORMAAL, GOEDKOOP' geaccepteerd (NORMAAL is één stap boven GOEDKOOP). Dit voorkomt dat periodes worden opgesplitst door incidentele niveauafwijkingen. **Let op:** Gaptolerantie vereist periodes ≥90 minuten (6 intervallen) om afwijkingen effectief te detecteren. Standaard: 0 (strikte filtering, geen tolerantie)." "description": "Configure price comparison thresholds and filtering.",
"data": {
"best_price_flex": "Flexibility",
"best_price_min_distance_from_avg": "Minimum Distance"
},
"data_description": {
"best_price_flex": "Maximum above the daily minimum price that intervals can be and still qualify as 'best price'. Recommended: 15-20 with relaxation enabled (default), or 25-35 without relaxation. Maximum: 50 (hard cap for reliable period detection).",
"best_price_min_distance_from_avg": "Ensures periods are significantly cheaper than the daily average, not just marginally below it. This filters out noise and prevents marking slightly-below-average periods as 'best price' on days with flat prices. Higher values = stricter filtering (only truly cheap periods qualify). Default: 5 means periods must be at least 5% below the daily average."
}
},
"relaxation_and_target_periods": {
"name": "Relaxation & Target Periods",
"description": "Configure automatic filter relaxation and target period counts. Enable 'Achieve Minimum Count' to activate relaxation.",
"data": {
"enable_min_periods_best": "Achieve Minimum Count",
"min_periods_best": "Minimum Periods",
"relaxation_attempts_best": "Relaxation Attempts"
},
"data_description": {
"enable_min_periods_best": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods, which may include less optimal time windows as best-price periods.",
"min_periods_best": "Minimum number of best price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Achieve Minimum Count' is enabled. Default: 1",
"relaxation_attempts_best": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional periods at the cost of longer processing time."
}
}
}, },
"submit": "Doorgaan →" "submit": "Doorgaan →"
}, },
"peak_price": { "peak_price": {
"title": "🔴 Piekprijs Periode Instellingen", "title": "🔴 Piekprijs Periode Instellingen",
"description": "_{step_progress}_\n\nConfigureer instellingen voor de **Piekprijs Periode** binaire sensor. Deze sensor is actief tijdens periodes met de hoogste elektriciteitsprijzen.\n\n---", "description": "_{step_progress}_\n\nConfigureer instellingen voor de **Piekprijs Periode** binaire sensor. Deze sensor is actief tijdens periodes met de hoogste elektriciteitsprijzen.\n\n---",
"sections": {
"period_settings": {
"name": "Periode-instellingen",
"description": "Configureer periodelengte en prijsniveaubeperkingen.",
"data": { "data": {
"peak_price_min_period_length": "Minimale periodelengte", "peak_price_min_period_length": "Minimale periodelengte",
"peak_price_flex": "Flexibiliteit: Maximaal onder maximumprijs", "peak_price_min_level": "Prijsniveaufilter",
"peak_price_min_distance_from_avg": "Minimale afstand: Vereist boven daggemiddelde", "peak_price_max_level_gap_count": "Gaptolerantie"
"peak_price_min_level": "Prijsniveaufilter (Optioneel)", },
"peak_price_max_level_gap_count": "Gaptolerantie voor niveaufilter", "data_description": {
"peak_price_min_period_length": "Minimale duur voordat een periode als 'piekprijs' wordt beschouwd. Piekprijs waarschuwingen zijn toegestaan voor kortere periodes (minimaal 30 minuten versus 60 minuten voor beste prijs) omdat korte dure pieken de moeite waard zijn om voor te waarschuwen, zelfs als ze te kort zijn voor verbruiksplanning.",
"peak_price_min_level": "Toon alleen piekprijs periodes als ze intervallen bevatten met prijsniveaus ≥ geselecteerde waarde. Bijvoorbeeld: selecteren van 'Duur' betekent dat de periode minstens één 'DUUR' of 'ZEER_DUUR' interval moet hebben. Dit zorgt ervoor dat 'piekprijs'-periodes niet alleen relatief duur zijn voor de dag, maar daadwerkelijk duur in absolute termen. Selecteer 'Alle' om piekprijzen te tonen ongeacht hun absolute prijsniveau.",
"peak_price_max_level_gap_count": "Maximum aantal opeenvolgende intervallen dat precies één niveaustap mag afwijken van het vereiste niveau. Bijvoorbeeld: met 'Duur' filter en gaptelling 1 wordt de reeks 'DUUR, DUUR, NORMAAL, DUUR' geaccepteerd (NORMAAL is één stap onder DUUR). Dit voorkomt dat periodes worden opgesplitst door incidentele niveauafwijkingen. **Let op:** Gaptolerantie vereist periodes ≥90 minuten (6 intervallen) om afwijkingen effectief te detecteren. Standaard: 0 (strikte filtering, geen tolerantie)."
}
},
"flexibility_settings": {
"name": "Flexibiliteitsinstellingen",
"description": "Configureer prijsvergelijkingscriteria en filtering.",
"data": {
"peak_price_flex": "Flexibiliteit",
"peak_price_min_distance_from_avg": "Minimale afstand"
},
"data_description": {
"peak_price_flex": "Maximaal onder de dagelijkse maximumprijs waarbij intervallen nog kwalificeren als 'piekprijs'. Aanbeveling: -15 tot -20 met versoepeling geactiveerd (standaard), of -25 tot -35 zonder versoepeling. Maximum: -50 (harde limiet voor betrouwbare periodedetectie). Let op: Negatieve waarden geven de afstand onder het maximum aan.",
"peak_price_min_distance_from_avg": "Zorgt ervoor dat periodes significant duurder zijn dan het daggemiddelde, niet slechts marginaal erboven. Dit filtert ruis en voorkomt dat licht-boven-gemiddelde periodes op dagen met vlakke prijzen als 'piekprijs' worden gemarkeerd. Hogere waarden = striktere filtering (alleen echt dure periodes kwalificeren). Standaard: 5 betekent dat periodes minimaal 5% boven het daggemiddelde moeten liggen."
}
},
"relaxation_and_target_periods": {
"name": "Ontspanning en doelperiodes",
"description": "Configureer automatische filterontspanning en doelperiode-aantallen. Schakel 'Probeer minimum aantal periodes te bereiken' in om ontspanning te activeren.",
"data": {
"enable_min_periods_peak": "Probeer minimum aantal periodes te bereiken", "enable_min_periods_peak": "Probeer minimum aantal periodes te bereiken",
"min_periods_peak": "Minimum aantal periodes", "min_periods_peak": "Minimum aantal periodes",
"relaxation_attempts_peak": "Aantal ontspanningspogingen" "relaxation_attempts_peak": "Aantal ontspanningspogingen"
}, },
"data_description": { "data_description": {
"peak_price_min_period_length": "Minimale duur voordat een periode als 'piekprijs' wordt beschouwd. Piekprijs waarschuwingen zijn toegestaan voor kortere periodes (minimaal 30 minuten versus 60 minuten voor beste prijs) omdat korte dure pieken de moeite waard zijn om voor te waarschuwen, zelfs als ze te kort zijn voor verbruiksplanning.",
"peak_price_flex": "Maximaal onder de dagelijkse maximumprijs waarbij intervallen nog kwalificeren als 'piekprijs'. Aanbeveling: -15 tot -20 met versoepeling geactiveerd (standaard), of -25 tot -35 zonder versoepeling. Maximum: -50 (harde limiet voor betrouwbare periodedetectie). Let op: Negatieve waarden geven de afstand onder het maximum aan.",
"peak_price_min_distance_from_avg": "Zorgt ervoor dat periodes significant duurder zijn dan het daggemiddelde, niet slechts marginaal erboven. Dit filtert ruis en voorkomt dat licht-boven-gemiddelde periodes op dagen met vlakke prijzen als 'piekprijs' worden gemarkeerd. Hogere waarden = striktere filtering (alleen echt dure periodes kwalificeren). Standaard: 5 betekent dat periodes minimaal 5% boven het daggemiddelde moeten liggen.",
"peak_price_min_level": "Toon alleen piekprijs periodes als ze intervallen bevatten met prijsniveaus ≥ geselecteerde waarde. Bijvoorbeeld: selecteren van 'Duur' betekent dat de periode minstens één 'DUUR' of 'ZEER_DUUR' interval moet hebben. Dit zorgt ervoor dat 'piekprijs'-periodes niet alleen relatief duur zijn voor de dag, maar daadwerkelijk duur in absolute termen. Selecteer 'Alle' om piekprijzen te tonen ongeacht hun absolute prijsniveau.",
"enable_min_periods_peak": "Wanneer ingeschakeld worden filters geleidelijk versoepeld als er niet genoeg periodes worden gevonden. Dit probeert het gewenste minimum aantal periodes te bereiken om ervoor te zorgen dat je wordt gewaarschuwd voor dure periodes, zelfs op dagen met ongebruikelijke prijspatronen.", "enable_min_periods_peak": "Wanneer ingeschakeld worden filters geleidelijk versoepeld als er niet genoeg periodes worden gevonden. Dit probeert het gewenste minimum aantal periodes te bereiken om ervoor te zorgen dat je wordt gewaarschuwd voor dure periodes, zelfs op dagen met ongebruikelijke prijspatronen.",
"min_periods_peak": "Minimum aantal piekprijsperiodes om naar te streven per dag. Filters worden stap voor stap versoepeld om dit aantal te proberen bereiken. Alleen actief wanneer 'Probeer minimum aantal periodes te bereiken' is ingeschakeld. Standaard: 1", "min_periods_peak": "Minimum aantal piekprijsperiodes om naar te streven per dag. Filters worden stap voor stap versoepeld om dit aantal te proberen bereiken. Alleen actief wanneer 'Probeer minimum aantal periodes te bereiken' is ingeschakeld. Standaard: 1",
"relaxation_attempts_peak": "Hoeveel keer de ontspanningslogica filters opnieuw mag proberen. Gebruik meer pogingen wanneer de piekperiodes moeilijk te vinden zijn door vlakke of zeer grillige dagen. Elke extra poging kost wat extra verwerkingstijd maar vergroot de kans dat periodes worden gevonden.", "relaxation_attempts_peak": "Hoeveel keer de ontspanningslogica filters opnieuw mag proberen. Gebruik meer pogingen wanneer de piekperiodes moeilijk te vinden zijn door vlakke of zeer grillige dagen. Elke extra poging kost wat extra verwerkingstijd maar vergroot de kans dat periodes worden gevonden."
"peak_price_max_level_gap_count": "Maximum aantal opeenvolgende intervallen dat precies één niveaustap mag afwijken van het vereiste niveau. Bijvoorbeeld: met 'Duur' filter en gaptelling 1 wordt de reeks 'DUUR, DUUR, NORMAAL, DUUR' geaccepteerd (NORMAAL is één stap onder DUUR). Dit voorkomt dat periodes worden opgesplitst door incidentele niveauafwijkingen. **Let op:** Gaptolerantie vereist periodes ≥90 minuten (6 intervallen) om afwijkingen effectief te detecteren. Standaard: 0 (strikte filtering, geen tolerantie)." }
}
}, },
"submit": "Doorgaan →" "submit": "Doorgaan →"
}, },
"price_trend": { "price_trend": {
"title": "📈 Prijstrenddrempels", "title": "📈 Prijstrenddrempels",
"description": "_{step_progress}_\n\n**Configureer drempels voor prijstrendsensoren. Deze sensoren vergelijken de huidige prijs met het gemiddelde van de volgende N uur om te bepalen of prijzen stijgen, dalen of stabiel zijn.**\n\n---", "description": "_{step_progress}_\n\n**Configureer drempels voor prijstrendsensoren. Deze sensoren vergelijken de huidige prijs met het gemiddelde van de volgende N uur om te bepalen of prijzen stijgen, dalen of stabiel zijn.**\n\n---",
"sections": {
"price_trend_thresholds": {
"name": "Prijstrenddrempels",
"description": "Definieer prijstrendniveaus.",
"data": { "data": {
"price_trend_threshold_rising": "Stijgende drempel", "price_trend_threshold_rising": "Stijgende drempel",
"price_trend_threshold_falling": "Dalende drempel" "price_trend_threshold_falling": "Dalende drempel"
@ -215,12 +269,18 @@
"data_description": { "data_description": {
"price_trend_threshold_rising": "Percentage voor gemiddelde prijsstijging per uur die de trend kwalificeert als 'stijgend'. Voorbeeld: 5 betekent minstens 5% stijging per uur. Sensoren met deze trend geven aan dat prijzen snel zullen stijgen. Standaard: 5%", "price_trend_threshold_rising": "Percentage voor gemiddelde prijsstijging per uur die de trend kwalificeert als 'stijgend'. Voorbeeld: 5 betekent minstens 5% stijging per uur. Sensoren met deze trend geven aan dat prijzen snel zullen stijgen. Standaard: 5%",
"price_trend_threshold_falling": "Percentage voor gemiddelde prijsdaling per uur die de trend kwalificeert als 'dalend'. Voorbeeld: -5 betekent minstens 5% daling per uur. Sensoren met deze trend geven aan dat prijzen snel zullen dalen. Standaard: -5%" "price_trend_threshold_falling": "Percentage voor gemiddelde prijsdaling per uur die de trend kwalificeert als 'dalend'. Voorbeeld: -5 betekent minstens 5% daling per uur. Sensoren met deze trend geven aan dat prijzen snel zullen dalen. Standaard: -5%"
}
}
}, },
"submit": "Doorgaan →" "submit": "Doorgaan →"
}, },
"volatility": { "volatility": {
"title": "💨 Volatiliteit Drempels", "title": "💨 Volatiliteit Drempels",
"description": "_{step_progress}_\n\n**Configureer drempels voor volatiliteitsclassificatie. Volatiliteit meet relatieve prijsvariatie met behulp van de variatiecoëfficiënt (VC = standaarddeviatie / gemiddelde × 100%). Deze drempels zijn percentagewaarden die werken over alle prijsniveaus.**\n\nGebruikt door:\n• Volatiliteitssensoren (classificatie)\n• Trendsensoren (adaptieve drempelaanpassing: <matig = gevoeliger, ≥hoog = minder gevoelig)\n\n---", "description": "_{step_progress}_\n\n**Configureer drempels voor volatiliteitsclassificatie. Volatiliteit meet relatieve prijsvariatie met behulp van de variatiecoëfficiënt (VC = standaarddeviatie / gemiddelde × 100%). Deze drempels zijn percentagewaarden die werken over alle prijsniveaus.**\n\nGebruikt door:\n• Volatiliteitssensoren (classificatie)\n• Trendsensoren (adaptieve drempelaanpassing: <matig = gevoeliger, ≥hoog = minder gevoelig)\n\n---",
"sections": {
"volatility_thresholds": {
"name": "Volatiliteitdrempels",
"description": "Definieer volatiliteitsclassificatieniveaus.",
"data": { "data": {
"volatility_threshold_moderate": "Matige drempel", "volatility_threshold_moderate": "Matige drempel",
"volatility_threshold_high": "Hoge drempel", "volatility_threshold_high": "Hoge drempel",
@ -230,6 +290,8 @@
"volatility_threshold_moderate": "Grenswaarde voor standaardafwijking (% van gemiddelde) om prijsvariatie als 'matig' te classificeren. Voorbeeld: 10 betekent standaardafwijking ≥ 10% van gemiddelde. Dit wijst op verhoogde prijsinstabiliteit. Standaard: 10%", "volatility_threshold_moderate": "Grenswaarde voor standaardafwijking (% van gemiddelde) om prijsvariatie als 'matig' te classificeren. Voorbeeld: 10 betekent standaardafwijking ≥ 10% van gemiddelde. Dit wijst op verhoogde prijsinstabiliteit. Standaard: 10%",
"volatility_threshold_high": "Grenswaarde voor standaardafwijking (% van gemiddelde) om prijsvariatie als 'hoog' te classificeren. Voorbeeld: 20 betekent standaardafwijking ≥ 20% van gemiddelde. Dit wijst op aanzienlijke prijsschommelingen. Standaard: 20%", "volatility_threshold_high": "Grenswaarde voor standaardafwijking (% van gemiddelde) om prijsvariatie als 'hoog' te classificeren. Voorbeeld: 20 betekent standaardafwijking ≥ 20% van gemiddelde. Dit wijst op aanzienlijke prijsschommelingen. Standaard: 20%",
"volatility_threshold_very_high": "Grenswaarde voor standaardafwijking (% van gemiddelde) om prijsvariatie als 'zeer hoog' te classificeren. Voorbeeld: 30 betekent standaardafwijking ≥ 30% van gemiddelde. Dit wijst op extreme prijsinstabiliteit. Standaard: 30%" "volatility_threshold_very_high": "Grenswaarde voor standaardafwijking (% van gemiddelde) om prijsvariatie als 'zeer hoog' te classificeren. Voorbeeld: 30 betekent standaardafwijking ≥ 30% van gemiddelde. Dit wijst op extreme prijsinstabiliteit. Standaard: 30%"
}
}
}, },
"submit": "Doorgaan →" "submit": "Doorgaan →"
}, },

View file

@ -145,6 +145,10 @@
"current_interval_price_rating": { "current_interval_price_rating": {
"title": "📊 Prisvärderingströsklar", "title": "📊 Prisvärderingströsklar",
"description": "_{step_progress}_\n\n**Konfigurera trösklar för prisvärderingsnivåer (låg/normal/hög) baserat på jämförelse med rullande 24-timmars genomsnitt.**\n\n---", "description": "_{step_progress}_\n\n**Konfigurera trösklar för prisvärderingsnivåer (låg/normal/hög) baserat på jämförelse med rullande 24-timmars genomsnitt.**\n\n---",
"sections": {
"price_rating_thresholds": {
"name": "Prisvärderingströsklar",
"description": "Definiera prisvärderingsnivåer.",
"data": { "data": {
"price_rating_threshold_low": "Låg tröskel", "price_rating_threshold_low": "Låg tröskel",
"price_rating_threshold_high": "Hög tröskel" "price_rating_threshold_high": "Hög tröskel"
@ -152,62 +156,112 @@
"data_description": { "data_description": {
"price_rating_threshold_low": "Procent under det rullande 24-timmars genomsnittet som det aktuella priset måste vara för att kvalificera som 'låg' värdering. Exempel: 5 betyder minst 5% under genomsnitt. Sensorer med denna värdering indikerar gynnsamma tidsfönster. Standard: 5%", "price_rating_threshold_low": "Procent under det rullande 24-timmars genomsnittet som det aktuella priset måste vara för att kvalificera som 'låg' värdering. Exempel: 5 betyder minst 5% under genomsnitt. Sensorer med denna värdering indikerar gynnsamma tidsfönster. Standard: 5%",
"price_rating_threshold_high": "Procent över det rullande 24-timmars genomsnittet som det aktuella priset måste vara för att kvalificera som 'hög' värdering. Exempel: 10 betyder minst 10% över genomsnitt. Sensorer med denna värdering varnar för dyra tidsfönster. Standard: 10%" "price_rating_threshold_high": "Procent över det rullande 24-timmars genomsnittet som det aktuella priset måste vara för att kvalificera som 'hög' värdering. Exempel: 10 betyder minst 10% över genomsnitt. Sensorer med denna värdering varnar för dyra tidsfönster. Standard: 10%"
}
}
}, },
"submit": "Fortsätt →" "submit": "Fortsätt →"
}, },
"best_price": { "best_price": {
"title": "💚 Bästa Pris Period Inställningar", "title": "💚 Bästa Pris Period Inställningar",
"description": "_{step_progress}_\n\nKonfigurera inställningar för **Bästa Pris Period** binär sensor. Denna sensor är aktiv under perioder med de lägsta elpriserna.\n\n---", "description": "_{step_progress}_\n\nKonfigurera inställningar för **Bästa Pris Period** binär sensor. Denna sensor är aktiv under perioder med de lägsta elpriserna.\n\n---",
"sections": {
"period_settings": {
"name": "Period Settings",
"description": "Configure period duration and price level constraints.",
"data": { "data": {
"best_price_min_period_length": "Minimal periodlängd", "best_price_min_period_length": "Minimum Period Length",
"best_price_flex": "Flexibilitet: Maximalt över minimumpris", "best_price_max_level": "Price Level Filter",
"best_price_min_distance_from_avg": "Minimiavstånd: Krävs under dagsgenomsnitt", "best_price_max_level_gap_count": "Gap Tolerance"
"best_price_max_level": "Prisnivåfilter (Valfritt)",
"best_price_max_level_gap_count": "Gaptolerens för nivåfilter",
"enable_min_periods_best": "Försök uppnå minsta antal perioder",
"min_periods_best": "Minsta antal perioder",
"relaxation_attempts_best": "Antal avslappningsförsök"
}, },
"data_description": { "data_description": {
"best_price_min_period_length": "Minsta varaktighet för att en period ska räknas som 'bästa pris'. Längre perioder är mer praktiska för att köra apparater som diskmaskiner eller värmepumpar. Bästa pris-perioder kräver minst 60 minuter (jämfört med 30 minuter för topppris-varningar) eftersom de ska ge meningsfulla tidsfönster för förbruksplanering, inte bara korta tillfällen.", "best_price_min_period_length": "Minimum duration for a period to be considered as 'best price'. Longer periods are more practical for running appliances like dishwashers or heat pumps. Best price periods require minimum 60 minutes (compared to 30 minutes for peak price alerts) because they should provide meaningful time windows for consumption planning, not just brief opportunities.",
"best_price_flex": "Maximalt över dagens minimumpris där intervaller fortfarande kvalificerar som 'bästa pris'. Rekommendation: 15-20 med avslappning aktiverad (standard), eller 25-35 utan avslappning. Maximum: 50 (hård gräns för tillförlitlig periodigkänning).", "best_price_max_level": "Only show best price periods if they contain intervals with price levels ≤ selected value. For example, selecting 'Cheap' means the period must have at least one 'VERY_CHEAP' or 'CHEAP' interval. This ensures 'best price' periods are not just relatively cheap for the day, but actually cheap in absolute terms. Select 'Any' to show best prices regardless of their absolute price level.",
"best_price_min_distance_from_avg": "Säkerställer att perioder är betydligt billigare än dagsgenomsnittet, inte bara marginellt under det. Detta filtrerar brus och förhindrar att något-under-genomsnittet perioder markeras som 'bästa pris' på dagar med platta priser. Högre värden = striktare filtrering (endast riktigt billiga perioder kvalificerar). Standard: 5 betyder att perioder måste vara minst 5% under dagsgenomsnittet.", "best_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with 'Cheap' filter and gap count 1, a sequence 'CHEAP, CHEAP, NORMAL, CHEAP' is accepted (NORMAL is one step above CHEAP). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance)."
"best_price_max_level": "Visa endast bästa prisperioder om de innehåller intervall med prisnivåer ≤ valt värde. Till exempel: att välja 'Billigt' betyder att perioden måste ha minst ett 'MYCKET_BILLIGT' eller 'BILLIGT' intervall. Detta säkerställer att 'bästa pris'-perioder inte bara är relativt billiga för dagen, utan faktiskt billiga i absoluta tal. Välj 'Alla' för att visa bästa priser oavsett deras absoluta prisnivå.", }
"enable_min_periods_best": "När aktiverad kommer filtren att gradvis luckras upp om inte tillräckligt många perioder hittas. Detta försöker uppnå det önskade minsta antalet perioder för att säkerställa att du har möjligheter att dra nytta av låga priser även på dagar med ovanliga prismönster.", },
"min_periods_best": "Minsta antal bästa prisperioder att sträva efter per dag. Filtren kommer att luckras upp steg för steg för att försöka uppnå detta antal. Endast aktiv när 'Försök uppnå minsta antal perioder' är aktiverad. Standard: 1", "flexibility_settings": {
"relaxation_attempts_best": "Hur många gånger avslappningslogiken får försöka hitta nya kombinationer av flex och filter. Öka detta om dagarna är extrema och du behöver fler försök för att nå minimikravet. Varje extra försök tar lite mer tid men ökar chansen att hitta perioder.", "name": "Flexibility Settings",
"best_price_max_level_gap_count": "Maximalt antal på varandra följande intervaller som får avvika med exakt ett nivåsteg från det erforderliga nivået. Till exempel: med 'Billigt' filter och gapantal 1 accepteras sekvensen 'BILLIGT, BILLIGT, NORMALT, BILLIGT' (NORMALT är ett steg över BILLIGT). Detta förhindrar att perioder delas upp av tillfälliga nivåavvikelser. **Obs:** Gaptoleransen kräver perioder ≥90 minuter (6 intervaller) för att detektera avvikelser effektivt. Standard: 0 (strikt filtrering, ingen tolerans)." "description": "Configure price comparison thresholds and filtering.",
"data": {
"best_price_flex": "Flexibility",
"best_price_min_distance_from_avg": "Minimum Distance"
},
"data_description": {
"best_price_flex": "Maximum above the daily minimum price that intervals can be and still qualify as 'best price'. Recommended: 15-20 with relaxation enabled (default), or 25-35 without relaxation. Maximum: 50 (hard cap for reliable period detection).",
"best_price_min_distance_from_avg": "Ensures periods are significantly cheaper than the daily average, not just marginally below it. This filters out noise and prevents marking slightly-below-average periods as 'best price' on days with flat prices. Higher values = stricter filtering (only truly cheap periods qualify). Default: 5 means periods must be at least 5% below the daily average."
}
},
"relaxation_and_target_periods": {
"name": "Relaxation & Target Periods",
"description": "Configure automatic filter relaxation and target period counts. Enable 'Achieve Minimum Count' to activate relaxation.",
"data": {
"enable_min_periods_best": "Achieve Minimum Count",
"min_periods_best": "Minimum Periods",
"relaxation_attempts_best": "Relaxation Attempts"
},
"data_description": {
"enable_min_periods_best": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods, which may include less optimal time windows as best-price periods.",
"min_periods_best": "Minimum number of best price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Achieve Minimum Count' is enabled. Default: 1",
"relaxation_attempts_best": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional periods at the cost of longer processing time."
}
}
}, },
"submit": "Fortsätt →" "submit": "Fortsätt →"
}, },
"peak_price": { "peak_price": {
"title": "🔴 Topppris Period Inställningar", "title": "🔴 Topppris Period Inställningar",
"description": "_{step_progress}_\n\nKonfigurera inställningar för **Topppris Period** binär sensor. Denna sensor är aktiv under perioder med de högsta elpriserna.\n\n---", "description": "_{step_progress}_\n\nKonfigurera inställningar för **Topppris Period** binär sensor. Denna sensor är aktiv under perioder med de högsta elpriserna.\n\n---",
"sections": {
"period_settings": {
"name": "Periodinställningar",
"description": "Konfigurera periodlängd och prisnivåbegränsningar.",
"data": { "data": {
"peak_price_min_period_length": "Minimal periodlängd", "peak_price_min_period_length": "Minimal periodlängd",
"peak_price_flex": "Flexibilitet: Maximalt under maximumpris", "peak_price_min_level": "Prisnivåfilter",
"peak_price_min_distance_from_avg": "Minimiavstånd: Krävs över dagsgenomsnitt", "peak_price_max_level_gap_count": "Gaptolerens"
"peak_price_min_level": "Prisnivåfilter (Valfritt)", },
"peak_price_max_level_gap_count": "Gaptolerens för nivåfilter", "data_description": {
"peak_price_min_period_length": "Minsta varaktighet för att en period ska räknas som 'toppris'. Topppris-varningar är tillåtna för kortare perioder (minst 30 minuter jämfört med 60 minuter för bästa pris) eftersom korta dyra toppar är värda att varna om, även om de är för korta för förbruksplanering.",
"peak_price_min_level": "Visa endast topprisperioder om de innehåller intervall med prisnivåer ≥ valt värde. Till exempel måste perioden om du väljer 'Dyr' ha minst ett 'DYR' eller 'MYCKET_DYR' intervall. Detta säkerställer att 'toppris'-perioder inte bara är relativt dyra för dagen, utan faktiskt dyra i absoluta termer (inte bara 'lite dyrare än genomsnittet på en billig dag').",
"peak_price_max_level_gap_count": "Maximalt antal på varandra följande intervaller som får avvika med exakt ett nivåsteg från det erforderliga nivået. Till exempel: med 'Dyrt' filter och gapantal 1 accepteras sekvensen 'DYRT, DYRT, NORMALT, DYRT' (NORMALT är ett steg under DYRT). Detta förhindrar att perioder delas upp av tillfälliga nivåavvikelser. **Obs:** Gaptoleransen kräver perioder ≥90 minuter (6 intervaller) för att detektera avvikelser effektivt. Standard: 0 (strikt filtrering, ingen tolerans)."
}
},
"flexibility_settings": {
"name": "Flexibilitetsinställningar",
"description": "Konfigurera prisjämförelsekriterer och filtrering.",
"data": {
"peak_price_flex": "Flexibilitet",
"peak_price_min_distance_from_avg": "Minimiavstånd"
},
"data_description": {
"peak_price_flex": "Maximalt under dagens maximumpris där intervaller fortfarande kvalificerar som 'toppris'. Rekommendation: -15 till -20 med avslappning aktiverad (standard), eller -25 till -35 utan avslappning. Maximum: -50 (hård gräns för tillförlitlig periodigkänning). Observera: Negativa värden anger avstånd under maximum.",
"peak_price_min_distance_from_avg": "Säkerställer att perioder är betydligt dyrare än dagsgenomsnittet, inte bara marginellt över det. Detta filtrerar brus och förhindrar att något-över-genomsnittet perioder markeras som 'toppris' på dagar med platta priser. Högre värden = striktare filtrering (endast riktigt dyra perioder kvalificerar). Standard: 5 betyder att perioder måste vara minst 5% över dagsgenomsnittet."
}
},
"relaxation_and_target_periods": {
"name": "Avslappning & målperioder",
"description": "Konfigurera automatisk filteravslappning och målperioder. Aktivera 'Försök uppnå minsta antal perioder' för att aktivera avslappning.",
"data": {
"enable_min_periods_peak": "Försök uppnå minsta antal perioder", "enable_min_periods_peak": "Försök uppnå minsta antal perioder",
"min_periods_peak": "Minsta antal perioder", "min_periods_peak": "Minsta antal perioder",
"relaxation_attempts_peak": "Antal avslappningsförsök" "relaxation_attempts_peak": "Antal avslappningsförsök"
}, },
"data_description": { "data_description": {
"peak_price_min_period_length": "Minsta varaktighet för att en period ska räknas som 'toppris'. Topppris-varningar är tillåtna för kortare perioder (minst 30 minuter jämfört med 60 minuter för bästa pris) eftersom korta dyra toppar är värda att varna om, även om de är för korta för förbruksplanering.",
"peak_price_flex": "Maximalt under dagens maximumpris där intervaller fortfarande kvalificerar som 'toppris'. Rekommendation: -15 till -20 med avslappning aktiverad (standard), eller -25 till -35 utan avslappning. Maximum: -50 (hård gräns för tillförlitlig periodigkänning). Observera: Negativa värden anger avstånd under maximum.",
"peak_price_min_distance_from_avg": "Säkerställer att perioder är betydligt dyrare än dagsgenomsnittet, inte bara marginellt över det. Detta filtrerar brus och förhindrar att något-över-genomsnittet perioder markeras som 'toppris' på dagar med platta priser. Högre värden = striktare filtrering (endast riktigt dyra perioder kvalificerar). Standard: 5 betyder att perioder måste vara minst 5% över dagsgenomsnittet.",
"peak_price_min_level": "Visa endast topprisperioder om de innehåller intervall med prisnivåer ≥ valt värde. Till exempel måste perioden om du väljer 'Dyr' ha minst ett 'DYR' eller 'MYCKET_DYR' intervall. Detta säkerställer att 'toppris'-perioder inte bara är relativt dyra för dagen, utan faktiskt dyra i absoluta termer (inte bara 'lite dyrare än genomsnittet på en billig dag').",
"enable_min_periods_peak": "När aktiverad kommer filtren att gradvis luckras upp om inte tillräckligt många perioder hittas. Detta försöker uppnå det önskade minsta antalet perioder för att säkerställa att du blir varnad för dyra perioder även på dagar med ovanliga prismönster.", "enable_min_periods_peak": "När aktiverad kommer filtren att gradvis luckras upp om inte tillräckligt många perioder hittas. Detta försöker uppnå det önskade minsta antalet perioder för att säkerställa att du blir varnad för dyra perioder även på dagar med ovanliga prismönster.",
"min_periods_peak": "Minsta antal topprisperioder att sträva efter per dag. Filtren kommer att luckras upp steg för steg för att försöka uppnå detta antal. Endast aktiv när 'Försök uppnå minsta antal perioder' är aktiverad. Standard: 1", "min_periods_peak": "Minsta antal topprisperioder att sträva efter per dag. Filtren kommer att luckras upp steg för steg för att försöka uppnå detta antal. Endast aktiv när 'Försök uppnå minsta antal perioder' är aktiverad. Standard: 1",
"relaxation_attempts_peak": "Hur många gånger avslappningslogiken får försöka hitta nya kombinationer av flex och filter. Öka detta när topperioderna är svåra att hitta på grund av platta eller mycket volatila dagar. Fler försök ger större chans att hitta perioder men kräver lite mer beräkningstid.", "relaxation_attempts_peak": "Hur många gånger avslappningslogiken får försöka hitta nya kombinationer av flex och filter. Öka detta när topperioderna är svåra att hitta på grund av platta eller mycket volatila dagar. Fler försök ger större chans att hitta perioder men kräver lite mer beräkningstid."
"peak_price_max_level_gap_count": "Maximalt antal på varandra följande intervaller som får avvika med exakt ett nivåsteg från det erforderliga nivået. Till exempel: med 'Dyrt' filter och gapantal 1 accepteras sekvensen 'DYRT, DYRT, NORMALT, DYRT' (NORMALT är ett steg under DYRT). Detta förhindrar att perioder delas upp av tillfälliga nivåavvikelser. **Obs:** Gaptoleransen kräver perioder ≥90 minuter (6 intervaller) för att detektera avvikelser effektivt. Standard: 0 (strikt filtrering, ingen tolerans)." }
}
}, },
"submit": "Fortsätt →" "submit": "Fortsätt →"
}, },
"price_trend": { "price_trend": {
"title": "📈 Pristrendtrösklar", "title": "📈 Pristrendtrösklar",
"description": "_{step_progress}_\n\n**Konfigurera trösklar för pristrendsensorer. Dessa sensorer jämför det aktuella priset med genomsnittet av de nästa N timmarna för att avgöra om priserna stiger, faller eller är stabila.**\n\n---", "description": "_{step_progress}_\n\n**Konfigurera trösklar för pristrendsensorer. Dessa sensorer jämför det aktuella priset med genomsnittet av de nästa N timmarna för att avgöra om priserna stiger, faller eller är stabila.**\n\n---",
"sections": {
"price_trend_thresholds": {
"name": "Pristrendtrösklar",
"description": "Definiera pristrendnivåer.",
"data": { "data": {
"price_trend_threshold_rising": "Stigande tröskel", "price_trend_threshold_rising": "Stigande tröskel",
"price_trend_threshold_falling": "Fallande tröskel" "price_trend_threshold_falling": "Fallande tröskel"
@ -215,12 +269,18 @@
"data_description": { "data_description": {
"price_trend_threshold_rising": "Procent för genomsnittlig prisökning per timme som kvalificerar trenden som 'stigande'. Exempel: 5 betyder minst 5% ökning per timme. Sensorer med denna trend indikerar att priserna kommer att stiga snabbt. Standard: 5%", "price_trend_threshold_rising": "Procent för genomsnittlig prisökning per timme som kvalificerar trenden som 'stigande'. Exempel: 5 betyder minst 5% ökning per timme. Sensorer med denna trend indikerar att priserna kommer att stiga snabbt. Standard: 5%",
"price_trend_threshold_falling": "Procent för genomsnittlig prisminskning per timme som kvalificerar trenden som 'fallande'. Exempel: -5 betyder minst 5% minskning per timme. Sensorer med denna trend indikerar att priserna kommer att falla snabbt. Standard: -5%" "price_trend_threshold_falling": "Procent för genomsnittlig prisminskning per timme som kvalificerar trenden som 'fallande'. Exempel: -5 betyder minst 5% minskning per timme. Sensorer med denna trend indikerar att priserna kommer att falla snabbt. Standard: -5%"
}
}
}, },
"submit": "Fortsätt →" "submit": "Fortsätt →"
}, },
"volatility": { "volatility": {
"title": "💨 Volatilitetströsklar", "title": "💨 Volatilitetströsklar",
"description": "_{step_progress}_\n\n**Konfigurera trösklar för volatilitetsklassificering. Volatilitet mäter relativ prisvariation med hjälp av variationskoefficienten (VK = standardavvikelse / medelvärde × 100%). Dessa trösklar är procentvärden som fungerar över alla prisnivåer.**\n\nAnvänds av:\n• Volatilitetssensorer (klassificering)\n• Trendsensorer (adaptiv tröskel justering: <måttlig = mer känslig, ≥hög = mindre känslig)\n\n---", "description": "_{step_progress}_\n\n**Konfigurera trösklar för volatilitetsklassificering. Volatilitet mäter relativ prisvariation med hjälp av variationskoefficienten (VK = standardavvikelse / medelvärde × 100%). Dessa trösklar är procentvärden som fungerar över alla prisnivåer.**\n\nAnvänds av:\n• Volatilitetssensorer (klassificering)\n• Trendsensorer (adaptiv tröskel justering: <måttlig = mer känslig, ≥hög = mindre känslig)\n\n---",
"sections": {
"volatility_thresholds": {
"name": "Volatilitetströsklar",
"description": "Definiera volatilitetsklassificeringsignivåer.",
"data": { "data": {
"volatility_threshold_moderate": "Måttlig tröskel", "volatility_threshold_moderate": "Måttlig tröskel",
"volatility_threshold_high": "Hög tröskel", "volatility_threshold_high": "Hög tröskel",
@ -230,6 +290,8 @@
"volatility_threshold_moderate": "Gränsvärde för standardavvikelse (% av genomsnitt) för att klassificera prisvariation som 'måttlig'. Exempel: 10 betyder standardavvikelse ≥ 10% av genomsnitt. Detta indikerar ökad prisinstabilitet. Standard: 10%", "volatility_threshold_moderate": "Gränsvärde för standardavvikelse (% av genomsnitt) för att klassificera prisvariation som 'måttlig'. Exempel: 10 betyder standardavvikelse ≥ 10% av genomsnitt. Detta indikerar ökad prisinstabilitet. Standard: 10%",
"volatility_threshold_high": "Gränsvärde för standardavvikelse (% av genomsnitt) för att klassificera prisvariation som 'hög'. Exempel: 20 betyder standardavvikelse ≥ 20% av genomsnitt. Detta indikerar betydande prissvingningar. Standard: 20%", "volatility_threshold_high": "Gränsvärde för standardavvikelse (% av genomsnitt) för att klassificera prisvariation som 'hög'. Exempel: 20 betyder standardavvikelse ≥ 20% av genomsnitt. Detta indikerar betydande prissvingningar. Standard: 20%",
"volatility_threshold_very_high": "Gränsvärde för standardavvikelse (% av genomsnitt) för att klassificera prisvariation som 'mycket hög'. Exempel: 30 betyder standardavvikelse ≥ 30% av genomsnitt. Detta indikerar extrem prisinstabilitet. Standard: 30%" "volatility_threshold_very_high": "Gränsvärde för standardavvikelse (% av genomsnitt) för att klassificera prisvariation som 'mycket hög'. Exempel: 30 betyder standardavvikelse ≥ 30% av genomsnitt. Detta indikerar extrem prisinstabilitet. Standard: 30%"
}
}
}, },
"submit": "Fortsätt →" "submit": "Fortsätt →"
}, },