hass.tibber_prices/custom_components/tibber_prices/translations/de.json
Julian Pawlowski 76dc488bb5 feat(sensors): add momentum-based trend detection with two new sensors
Added intelligent price trend analysis combining historical momentum
(weighted 1h lookback) with future outlook for more accurate trend
recognition. Introduced two complementary sensors for comprehensive
trend monitoring.

New sensors:
- current_price_trend: Shows active trend direction with duration
- next_price_trend_change: Predicts when trend will reverse

Momentum analysis (historical perspective):
- Weighted 1h lookback (4 × 15-min intervals)
- Linear weight progression [0.5, 0.75, 1.0, 1.25]
- ±3% threshold for momentum classification
- Recognizes ongoing trends earlier than future-only analysis

Two-phase trend calculation:
- Phase 1: Calculate momentum from weighted trailing average
- Phase 2: Validate with volatility-adaptive future comparison
- Combines both for final trend determination (rising/falling/stable)
- Centralized in _calculate_trend_info() with 60s cache

Volatility-adaptive thresholds:
- Existing trend sensors (1h-12h) now use adaptive thresholds
- calculate_price_trend() adjusted by market volatility:
  * LOW volatility (<15% CV): factor 0.6 → more sensitive (e.g., 3%→1.8%)
  * MODERATE volatility (15-30%): factor 1.0 → baseline (3%)
  * HIGH volatility (≥30%): factor 1.4 → less sensitive (e.g., 3%→4.2%)
- Uses same coefficient of variation as volatility sensors
- Ensures mathematical consistency across integration

Default threshold reduction:
- Rising/falling thresholds: 5% → 3% (more responsive)
- Momentum-based detection enables lower thresholds without noise
- Adaptive adjustment compensates during high volatility

Architectural improvements:
- Centralized calculation: Single source of truth for both sensors
- Eliminates Henne-Ei problem (duplicate calculations)
- 60-second cache per coordinator update
- Shared helper methods: _calculate_momentum(), _combine_momentum_with_future()

Translation updates (all 5 languages):
- Documented momentum feature in custom_translations (de/en/nb/nl/sv)
- Explained "recognizes ongoing trends earlier" advantage
- Added sensor names and state options to standard translations
- Updated volatility threshold descriptions (clarify usage by trend sensors)

Files changed:
- custom_components/tibber_prices/sensor/core.py (930 lines added)
  * New: _calculate_momentum(), _combine_momentum_with_future()
  * New: _calculate_trend_info() (centralized with cache)
  * New: _get_current_trend_value(), _get_next_trend_change_value()
  * Modified: _get_price_trend_value() (volatility-adaptive thresholds)
- custom_components/tibber_prices/sensor/definitions.py
  * Added: current_price_trend (ENUM sensor)
  * Added: next_price_trend_change (TIMESTAMP sensor)
- custom_components/tibber_prices/sensor/attributes.py
  * New: _add_cached_trend_attributes() helper
  * Support for current_trend_attributes, trend_change_attributes
- custom_components/tibber_prices/price_utils.py (178 lines added)
  * New: _calculate_lookahead_volatility_factor()
  * Modified: calculate_price_trend() with volatility adjustment
  * Added: VOLATILITY_FACTOR_* constants (0.6/1.0/1.4)
- custom_components/tibber_prices/entity_utils/icons.py
  * Added: Dynamic icon handling for next_price_trend_change
- custom_components/tibber_prices/const.py
  * Changed: DEFAULT_PRICE_TREND_THRESHOLD_RISING/FALLING (5→3%)
- custom_components/tibber_prices/translations/*.json (5 files)
  * Added: Sensor names, state options, descriptions
- custom_components/tibber_prices/custom_translations/*.json (5 files)
  * Added: Long descriptions with momentum feature explanation

Impact: Users get significantly more accurate trend detection that
understands they're ALREADY in a trend, not just predicting future
changes. Momentum-based approach recognizes ongoing movements 15-60
minutes earlier. Adaptive thresholds prevent false signals during
volatile periods. Two complementary sensors enable both status display
(current trend) and event-based automation (when will it change).
Perfect for use cases like "charge EV when next trend change shows
falling prices" or dashboard badges showing "Rising for 2.5h".
2025-11-16 12:49:43 +00:00

703 lines
32 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"config": {
"step": {
"user": {
"description": "Richte Tibber Preisinformationen & Bewertungen ein.\n\nUm einen API-Zugriffstoken zu generieren, besuche https://developer.tibber.com.",
"data": {
"access_token": "API-Zugriffstoken"
},
"submit": "Token validieren"
},
"select_home": {
"description": "Wähle ein Zuhause, um Preisinformationen und Bewertungen abzurufen.",
"data": {
"home_id": "Zuhause"
},
"title": "Wähle ein Zuhause",
"submit": "Zuhause auswählen"
},
"finish": {
"description": "Wähle ein Zuhause, um Preisinformationen und Bewertungen abzurufen.",
"data": {
"home_id": "Home ID"
},
"title": "Wähle ein Zuhause",
"submit": "Zuhause auswählen"
},
"reauth_confirm": {
"title": "Tibber Preis-Integration erneut authentifizieren",
"description": "Der Zugriffstoken für Tibber ist nicht mehr gültig. Bitte gib einen neuen API-Zugriffstoken ein, um diese Integration weiter zu nutzen.\n\nUm einen neuen API-Zugriffstoken zu generieren, besuche https://developer.tibber.com.",
"data": {
"access_token": "API-Zugriffstoken"
},
"submit": "Token aktualisieren"
}
},
"error": {
"auth": "Der Tibber Zugangstoken ist ungültig.",
"connection": "Verbindung zu Tibber nicht möglich. Bitte überprüfe deine Internetverbindung.",
"unknown": "Ein unerwarteter Fehler ist aufgetreten. Bitte überprüfe die Logs für Details.",
"cannot_connect": "Verbindung fehlgeschlagen",
"invalid_access_token": "Ungültiges Zugriffstoken",
"missing_homes": "Der neue Zugriffstoken hat keinen Zugriff auf alle konfigurierten Zuhause. Bitte verwende einen Zugriffstoken, der Zugriff auf die gleichen Tibber-Zuhause hat."
},
"abort": {
"already_configured": "Integration ist bereits konfiguriert",
"entry_not_found": "Tibber Konfigurationseintrag nicht gefunden.",
"setup_complete": "Einrichtung abgeschlossen! Du kannst zusätzliche Optionen für Tibber Preise in den Integrationsoptionen ändern, nachdem du diesen Dialog geschlossen hast.",
"reauth_successful": "Erneute Authentifizierung erfolgreich. Die Integration wurde mit dem neuen Zugriffstoken aktualisiert."
}
},
"common": {
"step_progress": "Schritt {step_num} von {total_steps}"
},
"config_subentries": {
"home": {
"initiate_flow": {
"user": "Tibber Zuhause hinzufügen"
},
"title": "Tibber Zuhause hinzufügen",
"step": {
"user": {
"title": "Tibber Zuhause hinzufügen",
"description": "Wähle ein Zuhause aus, das du zu deiner Tibber-Integration hinzufügen möchtest.",
"data": {
"home_id": "Zuhause"
}
}
},
"error": {
"api_error": "Fehler beim Abrufen der Zuhause von der Tibber API"
},
"abort": {
"no_parent_entry": "Übergeordneter Eintrag nicht gefunden",
"no_access_token": "Kein Zugriffstoken verfügbar",
"home_not_found": "Ausgewähltes Zuhause nicht gefunden",
"api_error": "Fehler beim Abrufen der Zuhause von der Tibber API",
"no_available_homes": "Keine zusätzlichen Zuhause verfügbar. Alle Zuhause von deinem Tibber-Konto wurden bereits hinzugefügt."
}
}
},
"options": {
"step": {
"init": {
"title": "Allgemeine Einstellungen",
"description": "{step_progress}\n\nKonfiguration allgemeiner Einstellungen für Tibber Preisinformationen & Bewertungen.\n\nBenutzer: {user_login}",
"data": {
"extended_descriptions": "Erweiterte Beschreibungen in Entity-Attributen anzeigen"
},
"submit": "Weiter zu Schritt 2"
},
"current_interval_price_rating": {
"title": "Preisbewertungs-Schwellwerte",
"description": "{step_progress}\n\nKonfiguration der Schwellwerte für Preisbewertungsstufen (niedrig/normal/hoch) basierend auf dem Vergleich mit dem gleitenden 24-Stunden-Durchschnitt.",
"data": {
"price_rating_threshold_low": "Schwellwert für niedrige Bewertung (unter gleitendem Durchschnitt)",
"price_rating_threshold_high": "Schwellwert für hohe Bewertung (über gleitendem Durchschnitt)"
},
"submit": "Weiter zu Schritt 3"
},
"best_price": {
"title": "Bestpreis-Zeitraum Einstellungen",
"description": "{step_progress}\n\nKonfiguration für den Bestpreis-Zeitraum mit den niedrigsten Strompreisen.",
"data": {
"best_price_min_period_length": "Minimale Zeitraumlänge",
"best_price_flex": "Flexibilität: Maximal über dem Mindestpreis",
"best_price_min_distance_from_avg": "Mindestabstand: Erforderlich unter dem Tagesdurchschnitt",
"best_price_max_level": "Preisniveau-Filter (Optional)",
"best_price_max_level_gap_count": "Lückentoleranz für Niveaufilter",
"enable_min_periods_best": "Mindestanzahl Zeiträume anstreben",
"min_periods_best": "Mindestanzahl Zeiträume",
"relaxation_step_best": "Lockerungsschritt",
"relaxation_attempts_best": "Lockerungsversuche (Flex-Stufen)"
},
"data_description": {
"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. Standard: 1.",
"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_step_best": "Prozentsatz des ursprünglichen Flexibilitätsschwellwerts, der pro Lockerungsschritt addiert wird. Beispiel: Bei 15% Flexibilität und 25% Schrittgröße werden 15%, 18,75%, 22,5% usw. versucht. Höhere Werte bedeuten schnellere Lockerung, aber geringere Präzision.",
"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 zu Schritt 5"
},
"peak_price": {
"title": "Spitzenpreis-Zeitraum Einstellungen",
"description": "{step_progress}\n\nKonfiguration für den Spitzenpreis-Zeitraum mit den höchsten Strompreisen.",
"data": {
"peak_price_min_period_length": "Minimale Zeitraumlänge",
"peak_price_flex": "Flexibilität: Maximal unter dem Höchstpreis (negativer Wert)",
"peak_price_min_distance_from_avg": "Mindestabstand: Erforderlich über dem Tagesdurchschnitt",
"peak_price_min_level": "Preisniveau-Filter (Optional)",
"peak_price_max_level_gap_count": "Lückentoleranz für Niveaufilter",
"enable_min_periods_peak": "Mindestanzahl Zeiträume anstreben",
"min_periods_peak": "Mindestanzahl Zeiträume",
"relaxation_step_peak": "Lockerungsschritt",
"relaxation_attempts_peak": "Lockerungsversuche (Flex-Stufen)"
},
"data_description": {
"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. Standard: 0.",
"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",
"relaxation_step_peak": "Prozentsatz des ursprünglichen Flexibilitätsschwellwerts, der pro Lockerungsschritt addiert wird. Beispiel: Bei -15% Flexibilität und 25% Schrittgröße werden -15%, -18,75%, -22,5% usw. versucht. Höhere Werte bedeuten schnellere Lockerung, aber geringere Präzision.",
"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 zu Schritt 6"
},
"price_trend": {
"title": "Preistrend-Schwellenwerte",
"description": "{step_progress}\n\nKonfiguriere 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.",
"data": {
"price_trend_threshold_rising": "Steigender Schwellenwert (über dem aktuellen Preis)",
"price_trend_threshold_falling": "Fallender Schwellenwert (unter dem aktuellen Preis, negativer Wert)"
},
"submit": "Konfiguration abschließen"
},
"volatility": {
"title": "Volatilität Schwellenwerte",
"description": "{step_progress}\n\nKonfiguriere 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)",
"data": {
"volatility_threshold_moderate": "Moderate Schwelle (VK ≥ dieser %, z.B. 15)",
"volatility_threshold_high": "Hohe Schwelle (VK ≥ dieser %, z.B. 30)",
"volatility_threshold_very_high": "Sehr hohe Schwelle (VK ≥ dieser %, z.B. 50)"
},
"submit": "Weiter zu Schritt 4"
}
},
"error": {
"auth": "Der Tibber Zugangstoken ist ungültig.",
"connection": "Verbindung zu Tibber nicht möglich. Bitte überprüfe deine Internetverbindung.",
"unknown": "Ein unerwarteter Fehler ist aufgetreten. Bitte überprüfe die Logs für Details.",
"cannot_connect": "Verbindung fehlgeschlagen",
"invalid_access_token": "Ungültiges Zugriffstoken",
"different_home": "Der Zugriffstoken ist nicht gültig für die Home ID, für die diese Integration konfiguriert ist."
},
"abort": {
"entry_not_found": "Tibber Konfigurationseintrag nicht gefunden."
},
"best_price_flex": "Bestpreis Flexibilität (%)",
"peak_price_flex": "Spitzenpreis Flexibilität (%)",
"price_rating_threshold_low": "Niedriger Preis Schwellenwert (% zum gleitenden Durchschnitt)",
"price_rating_threshold_high": "Hoher Preis Schwellenwert (% zum gleitenden Durchschnitt)"
},
"entity": {
"sensor": {
"current_interval_price": {
"name": "Aktueller Strompreis"
},
"current_interval_price_major": {
"name": "Aktueller Strompreis (Energie-Dashboard)"
},
"next_interval_price": {
"name": "Nächster Strompreis"
},
"previous_interval_price": {
"name": "Vorheriger Strompreis"
},
"current_hour_average_price": {
"name": "⌀ Stunden-Preis aktuell"
},
"next_hour_average_price": {
"name": "⌀ Stunden-Preis nächste Stunde"
},
"current_interval_price_level": {
"name": "Aktuelles Preisniveau",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"next_interval_price_level": {
"name": "Nächstes Preisniveau",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"previous_interval_price_level": {
"name": "Vorheriges Preisniveau",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"current_hour_price_level": {
"name": "Aktuelles Stunden-Preisniveau",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"next_hour_price_level": {
"name": "Nächstes Stunden-Preisniveau",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"lowest_price_today": {
"name": "Mindestpreis heute"
},
"highest_price_today": {
"name": "Höchstpreis heute"
},
"average_price_today": {
"name": "⌀ Preis heute"
},
"lowest_price_tomorrow": {
"name": "Mindestpreis morgen"
},
"highest_price_tomorrow": {
"name": "Höchstpreis morgen"
},
"average_price_tomorrow": {
"name": "⌀ Preis morgen"
},
"yesterday_price_level": {
"name": "Preisniveau gestern",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"today_price_level": {
"name": "Preisniveau heute",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"tomorrow_price_level": {
"name": "Preisniveau morgen",
"state": {
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
},
"yesterday_price_rating": {
"name": "Preisbewertung gestern",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"today_price_rating": {
"name": "Preisbewertung heute",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"tomorrow_price_rating": {
"name": "Preisbewertung morgen",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"trailing_price_average": {
"name": "⌀ Preis nachlaufend 24h"
},
"leading_price_average": {
"name": "⌀ Preis vorlaufend 24h"
},
"trailing_price_min": {
"name": "24h-Mindestpreis nachlaufend"
},
"trailing_price_max": {
"name": "24h-Höchstpreis nachlaufend"
},
"leading_price_min": {
"name": "24h-Mindestpreis vorlaufend"
},
"leading_price_max": {
"name": "24h-Höchstpreis vorlaufend"
},
"current_interval_price_rating": {
"name": "Aktuelle Preisbewertung",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"next_interval_price_rating": {
"name": "Nächste Preisbewertung",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"previous_interval_price_rating": {
"name": "Vorherige Preisbewertung",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"current_hour_price_rating": {
"name": "Aktuelle Stunden-Preisbewertung",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"next_hour_price_rating": {
"name": "Nächste Stunden-Preisbewertung",
"state": {
"low": "Niedrig",
"normal": "Normal",
"high": "Hoch"
}
},
"next_avg_1h": {
"name": "⌀ Preis nächste 1h"
},
"next_avg_2h": {
"name": "⌀ Preis nächste 2h"
},
"next_avg_3h": {
"name": "⌀ Preis nächste 3h"
},
"next_avg_4h": {
"name": "⌀ Preis nächste 4h"
},
"next_avg_5h": {
"name": "⌀ Preis nächste 5h"
},
"next_avg_6h": {
"name": "⌀ Preis nächste 6h"
},
"next_avg_8h": {
"name": "⌀ Preis nächste 8h"
},
"next_avg_12h": {
"name": "⌀ Preis nächste 12h"
},
"price_trend_1h": {
"name": "Preistrend (1h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"price_trend_2h": {
"name": "Preistrend (2h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"price_trend_3h": {
"name": "Preistrend (3h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"price_trend_4h": {
"name": "Preistrend (4h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"price_trend_5h": {
"name": "Preistrend (5h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"price_trend_6h": {
"name": "Preistrend (6h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"price_trend_8h": {
"name": "Preistrend (8h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"price_trend_12h": {
"name": "Preistrend (12h)",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"current_price_trend": {
"name": "Aktueller Preistrend",
"state": {
"rising": "Steigend",
"falling": "Fallend",
"stable": "Stabil"
}
},
"next_price_trend_change": {
"name": "Nächste Trendänderung"
},
"daily_rating": {
"name": "Tägliche Preisbewertung"
},
"monthly_rating": {
"name": "Monatliche Preisbewertung"
},
"data_timestamp": {
"name": "Preisdaten-Ablauf"
},
"today_volatility": {
"name": "Volatilität heute",
"state": {
"low": "Niedrig",
"moderate": "Moderat",
"high": "Hoch",
"very_high": "Sehr hoch"
}
},
"tomorrow_volatility": {
"name": "Volatilität morgen",
"state": {
"low": "Niedrig",
"moderate": "Moderat",
"high": "Hoch",
"very_high": "Sehr hoch"
}
},
"next_24h_volatility": {
"name": "Volatilität der nächsten 24h",
"state": {
"low": "Niedrig",
"moderate": "Moderat",
"high": "Hoch",
"very_high": "Sehr hoch"
}
},
"today_tomorrow_volatility": {
"name": "Volatilität heute+morgen",
"state": {
"low": "Niedrig",
"moderate": "Moderat",
"high": "Hoch",
"very_high": "Sehr hoch"
}
},
"best_price_end_time": {
"name": "Bestpreis endet"
},
"best_price_period_duration": {
"name": "Bestpreis Dauer"
},
"best_price_remaining_minutes": {
"name": "Bestpreis verbleibend"
},
"best_price_progress": {
"name": "Bestpreis Fortschritt"
},
"best_price_next_start_time": {
"name": "Bestpreis startet"
},
"best_price_next_in_minutes": {
"name": "Bestpreis startet in"
},
"peak_price_end_time": {
"name": "Spitzenpreis endet"
},
"peak_price_period_duration": {
"name": "Spitzenpreis Dauer"
},
"peak_price_remaining_minutes": {
"name": "Spitzenpreis verbleibend"
},
"peak_price_progress": {
"name": "Spitzenpreis Fortschritt"
},
"peak_price_next_start_time": {
"name": "Spitzenpreis startet"
},
"peak_price_next_in_minutes": {
"name": "Spitzenpreis startet in"
},
"price_forecast": {
"name": "Preisprognose"
},
"home_type": {
"name": "Wohnungstyp",
"state": {
"apartment": "Wohnung",
"rowhouse": "Reihenhaus",
"house": "Haus",
"cottage": "Ferienhaus"
}
},
"home_size": {
"name": "Wohnfläche"
},
"main_fuse_size": {
"name": "Hauptsicherung"
},
"number_of_residents": {
"name": "Anzahl Bewohner"
},
"primary_heating_source": {
"name": "Primäre Heizquelle",
"state": {
"air2air_heatpump": "Luft-Luft-Wärmepumpe",
"air2water_heatpump": "Luft-Wasser-Wärmepumpe",
"boiler": "Boiler",
"central_heating": "Zentralheizung",
"district_heating": "Fernwärme",
"district": "Fernwärme",
"electric_boiler": "Elektroboiler",
"electricity": "Elektroheizung",
"floor": "Fußbodenheizung",
"gas": "Gas",
"ground_heatpump": "Erdwärmepumpe",
"ground": "Erdwärmepumpe",
"oil": "Öl",
"other": "Sonstige",
"waste": "Abwärme"
}
},
"grid_company": {
"name": "Netzbetreiber"
},
"grid_area_code": {
"name": "Netzgebietscode"
},
"price_area_code": {
"name": "Preiszonencode"
},
"consumption_ean": {
"name": "Verbrauchs-EAN"
},
"production_ean": {
"name": "Erzeugungs-EAN"
},
"energy_tax_type": {
"name": "Energiesteuertyp"
},
"vat_type": {
"name": "Mehrwertsteuertyp"
},
"estimated_annual_consumption": {
"name": "Geschätzter Jahresverbrauch"
},
"subscription_status": {
"name": "Abonnementstatus",
"state": {
"running": "Aktiv",
"ended": "Beendet",
"pending": "Ausstehend",
"unknown": "Unbekannt"
}
}
},
"binary_sensor": {
"peak_price_period": {
"name": "Spitzenpreis-Zeitraum"
},
"best_price_period": {
"name": "Bestpreis-Zeitraum"
},
"connection": {
"name": "Tibber-API-Verbindung"
},
"tomorrow_data_available": {
"name": "Morgige Daten verfügbar"
},
"has_ventilation_system": {
"name": "Hat Lüftungsanlage"
},
"realtime_consumption_enabled": {
"name": "Echtzeitverbrauch aktiviert"
}
}
},
"issues": {
"new_homes_available": {
"title": "Neue Tibber-Häuser erkannt",
"description": "Wir haben {count} neue(s) Zuhause in deinem Tibber-Konto erkannt: {homes}. Du kannst diese über die Tibber-Integration in Home Assistant hinzufügen."
},
"homes_removed": {
"title": "Tibber-Häuser entfernt",
"description": "Wir haben erkannt, dass {count} Zuhause aus deinem Tibber-Konto entfernt wurde(n): {homes}. Bitte überprüfe deine Tibber-Integrationskonfiguration."
}
},
"services": {
"refresh_user_data": {
"name": "Benutzerdaten aktualisieren",
"description": "Erzwingt eine Aktualisierung der Benutzerdaten (Häuser, Profilinformationen) aus der Tibber API. Dies kann nützlich sein, nachdem Änderungen an deinem Tibber-Konto vorgenommen wurden oder bei der Fehlerbehebung von Verbindungsproblemen.",
"fields": {
"entry_id": {
"name": "Eintrag-ID",
"description": "Die Konfigurationseintrag-ID für die Tibber-Integration."
}
}
}
},
"selector": {
"volatility": {
"options": {
"low": "Niedrig",
"moderate": "Moderat",
"high": "Hoch",
"very_high": "Sehr hoch"
}
},
"current_interval_price_level": {
"options": {
"any": "Beliebig",
"very_cheap": "Sehr günstig",
"cheap": "Günstig",
"normal": "Normal",
"expensive": "Teuer",
"very_expensive": "Sehr teuer"
}
}
},
"title": "Tibber Preisinformationen & Bewertungen"
}