mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 05:13:40 +00:00
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".
699 lines
31 KiB
JSON
699 lines
31 KiB
JSON
{
|
||
"config": {
|
||
"step": {
|
||
"user": {
|
||
"description": "Konfigurera Tibber Prisinformation & Betyg.\n\nFör att generera en API-åtkomsttoken, besök https://developer.tibber.com.",
|
||
"data": {
|
||
"access_token": "API-åtkomsttoken"
|
||
},
|
||
"submit": "Validera token"
|
||
},
|
||
"select_home": {
|
||
"description": "Välj ett hem för att hämta prisinformation och betyg.",
|
||
"data": {
|
||
"home_id": "Hem"
|
||
},
|
||
"title": "Välj ett hem",
|
||
"submit": "Välj hem"
|
||
},
|
||
"finish": {
|
||
"description": "Välj ett hem för att hämta prisinformation och betyg.",
|
||
"data": {
|
||
"home_id": "Hem-ID"
|
||
},
|
||
"title": "Välj ett hem",
|
||
"submit": "Välj hem"
|
||
},
|
||
"reauth_confirm": {
|
||
"title": "Autentisera Tibber Prisintegrationen igen",
|
||
"description": "Åtkomsttoken för Tibber är inte längre giltig. Vänligen ange en ny API-åtkomsttoken för att fortsätta använda denna integration.\n\nFör att generera en ny API-åtkomsttoken, besök https://developer.tibber.com.",
|
||
"data": {
|
||
"access_token": "API-åtkomsttoken"
|
||
},
|
||
"submit": "Uppdatera token"
|
||
}
|
||
},
|
||
"error": {
|
||
"auth": "Tibber-åtkomsttoken är ogiltig.",
|
||
"connection": "Kunde inte ansluta till Tibber. Vänligen kontrollera din internetanslutning.",
|
||
"unknown": "Oväntat fel",
|
||
"cannot_connect": "Kunde inte ansluta",
|
||
"invalid_access_token": "Ogiltig åtkomsttoken",
|
||
"missing_homes": "Den nya åtkomsttoken har inte åtkomst till alla konfigurerade hem. Vänligen använd en åtkomsttoken som har åtkomst till samma Tibber-hem."
|
||
},
|
||
"abort": {
|
||
"already_configured": "Integrationen är redan konfigurerad",
|
||
"entry_not_found": "Tibber-konfigurationspost hittades inte.",
|
||
"setup_complete": "Konfiguration klar! Du kan ändra ytterligare alternativ för Tibber-priser i integrationens alternativ efter att ha stängt denna dialog.",
|
||
"reauth_successful": "Omautentisering lyckades. Integrationen har uppdaterats med den nya åtkomsttoken."
|
||
}
|
||
},
|
||
"common": {
|
||
"step_progress": "Steg {step_num} av {total_steps}"
|
||
},
|
||
"config_subentries": {
|
||
"home": {
|
||
"initiate_flow": {
|
||
"user": "Lägg till Tibber-hem"
|
||
},
|
||
"title": "Lägg till Tibber-hem",
|
||
"step": {
|
||
"user": {
|
||
"title": "Lägg till Tibber-hem",
|
||
"description": "Välj ett hem att lägga till i din Tibber-integration.\n\n**Obs:** Efter att ha lagt till detta hem kan du lägga till ytterligare hem från integrationens kontextmeny genom att välja \"Lägg till Tibber-hem\".",
|
||
"data": {
|
||
"home_id": "Hem"
|
||
}
|
||
}
|
||
},
|
||
"error": {
|
||
"api_error": "Kunde inte hämta hem från Tibber API"
|
||
},
|
||
"abort": {
|
||
"no_parent_entry": "Överordnad post hittades inte",
|
||
"no_access_token": "Ingen åtkomsttoken tillgänglig",
|
||
"home_not_found": "Valt hem hittades inte",
|
||
"api_error": "Kunde inte hämta hem från Tibber API",
|
||
"no_available_homes": "Inga ytterligare hem tillgängliga att lägga till. Alla hem från ditt Tibber-konto har redan lagts till."
|
||
}
|
||
}
|
||
},
|
||
"options": {
|
||
"step": {
|
||
"init": {
|
||
"title": "Allmänna inställningar",
|
||
"description": "{step_progress}\n\nKonfigurera allmänna inställningar för Tibber Prisinformation & Betyg.\n\nAnvändare: {user_login}",
|
||
"data": {
|
||
"extended_descriptions": "Visa utökade beskrivningar i entitetsattribut"
|
||
},
|
||
"submit": "Nästa till steg 2"
|
||
},
|
||
"current_interval_price_rating": {
|
||
"title": "Prisvärderingströsklar",
|
||
"description": "{step_progress}\n\nKonfigurera trösklar för prisvärderingsnivåer (låg/normal/hög) baserat på jämförelse med rullande 24-timmars genomsnitt.",
|
||
"data": {
|
||
"price_rating_threshold_low": "Låg värderingströskel (% under rullande genomsnitt)",
|
||
"price_rating_threshold_high": "Hög värderingströskel (% över rullande genomsnitt)"
|
||
},
|
||
"submit": "Nästa till steg 3"
|
||
},
|
||
"best_price": {
|
||
"title": "Inställningar för bästa prisperiod",
|
||
"description": "{step_progress}\n\nKonfigurera inställningar för Bästa Prisperiod binärsensor. Denna sensor är aktiv under perioder med de lägsta elpriserna.",
|
||
"data": {
|
||
"best_price_min_period_length": "Minsta periodlängd",
|
||
"best_price_flex": "Flexibilitet: Maximalt % över minimumpris",
|
||
"best_price_min_distance_from_avg": "Minimiavstånd: Krävd % under dagligt genomsnitt",
|
||
"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_step_best": "Avslappningssteg",
|
||
"relaxation_attempts_best": "Antal avslappningsförsök"
|
||
},
|
||
"data_description": {
|
||
"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",
|
||
"relaxation_step_best": "Procentandel av den ursprungliga flexibilitetströskeln att lägga till per avslappningssteg. Till exempel: med 15% flexibilitet och 25% stegstorlek kommer filtren att prova 15%, 18,75%, 22,5%, osv. Högre värden innebär snabbare avslappning men mindre precision.",
|
||
"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.",
|
||
"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. Standard: 0 (strikt filtrering, ingen tolerans)."
|
||
},
|
||
"submit": "Nästa till steg 5"
|
||
},
|
||
"peak_price": {
|
||
"title": "Inställningar för topprisperiod",
|
||
"description": "{step_progress}\n\nKonfigurera inställningar för Topprisperiod binärsensor. Denna sensor är aktiv under perioder med de högsta elpriserna.",
|
||
"data": {
|
||
"peak_price_min_period_length": "Minsta periodlängd",
|
||
"peak_price_flex": "Flexibilitet: Maximalt % under maximumpris (negativt värde)",
|
||
"peak_price_min_distance_from_avg": "Minimiavstånd: Krävd % över dagligt genomsnitt",
|
||
"peak_price_min_level": "Prisnivåfilter (Valfritt)",
|
||
"peak_price_max_level_gap_count": "Gaptolerens för nivåfilter",
|
||
"enable_min_periods_peak": "Försök uppnå minsta antal perioder",
|
||
"min_periods_peak": "Minsta antal perioder",
|
||
"relaxation_step_peak": "Avslappningssteg",
|
||
"relaxation_attempts_peak": "Antal avslappningsförsök"
|
||
},
|
||
"data_description": {
|
||
"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.",
|
||
"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_step_peak": "Procentandel av den ursprungliga flexibilitetströskeln att lägga till per avslappningssteg. Till exempel: med -15% flexibilitet och 25% stegstorlek kommer filtren att prova -15%, -18,75%, -22,5%, osv. Högre värden innebär snabbare avslappning men mindre precision.",
|
||
"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 2 accepteras sekvensen 'DYRT, NORMALT, NORMALT, DYRT' (NORMALT är ett steg under DYRT). Detta förhindrar att perioder delas upp av tillfälliga nivåavvikelser. Standard: 0 (strikt filtrering, ingen tolerans)."
|
||
},
|
||
"submit": "Nästa till steg 6"
|
||
},
|
||
"price_trend": {
|
||
"title": "Pristrendtrösklar",
|
||
"description": "{step_progress}\n\nKonfigurera 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.",
|
||
"data": {
|
||
"price_trend_threshold_rising": "Stigande tröskel (% över aktuellt pris)",
|
||
"price_trend_threshold_falling": "Fallande tröskel (% under aktuellt pris, negativt värde)"
|
||
},
|
||
"submit": "Slutför konfigurationen"
|
||
},
|
||
"volatility": {
|
||
"title": "Volatilitet Trösklar",
|
||
"description": "{step_progress}\n\nKonfigurera 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)",
|
||
"data": {
|
||
"volatility_threshold_moderate": "Måttlig tröskel (VK ≥ denna %, t.ex. 15)",
|
||
"volatility_threshold_high": "Hög tröskel (VK ≥ denna %, t.ex. 30)",
|
||
"volatility_threshold_very_high": "Mycket hög tröskel (VK ≥ detta %, t.ex. 50)"
|
||
},
|
||
"submit": "Nästa till steg 4"
|
||
}
|
||
},
|
||
"error": {
|
||
"auth": "Tibber-åtkomsttoken är ogiltig.",
|
||
"connection": "Kunde inte ansluta till Tibber. Vänligen kontrollera din internetanslutning.",
|
||
"unknown": "Ett oväntat fel inträffade. Vänligen kontrollera loggarna för detaljer.",
|
||
"cannot_connect": "Kunde inte ansluta",
|
||
"invalid_access_token": "Ogiltig åtkomsttoken",
|
||
"different_home": "Åtkomsttoken är inte giltig för hem-ID:t som denna integration är konfigurerad för."
|
||
},
|
||
"abort": {
|
||
"entry_not_found": "Tibber-konfigurationspost hittades inte."
|
||
}
|
||
},
|
||
"entity": {
|
||
"sensor": {
|
||
"current_interval_price": {
|
||
"name": "Nuvarande elpris"
|
||
},
|
||
"current_interval_price_major": {
|
||
"name": "Nuvarande elpris (Energipanel)"
|
||
},
|
||
"next_interval_price": {
|
||
"name": "Nästa elpris"
|
||
},
|
||
"previous_interval_price": {
|
||
"name": "Föregående elpris"
|
||
},
|
||
"current_hour_average_price": {
|
||
"name": "⌀ Timpris nuvarande"
|
||
},
|
||
"next_hour_average_price": {
|
||
"name": "⌀ Timpris nästa"
|
||
},
|
||
"current_interval_price_level": {
|
||
"name": "Nuvarande prisnivå",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normal",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"next_interval_price_level": {
|
||
"name": "Nästa prisnivå",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normal",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"previous_interval_price_level": {
|
||
"name": "Föregående prisnivå",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normal",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"current_hour_price_level": {
|
||
"name": "Nuvarande timprisnivå",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normal",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"next_hour_price_level": {
|
||
"name": "Nästa timprisnivå",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normal",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"lowest_price_today": {
|
||
"name": "Dagens lägsta pris"
|
||
},
|
||
"highest_price_today": {
|
||
"name": "Dagens högsta pris"
|
||
},
|
||
"average_price_today": {
|
||
"name": "⌀ Pris idag"
|
||
},
|
||
"lowest_price_tomorrow": {
|
||
"name": "Morgondagens lägsta pris"
|
||
},
|
||
"highest_price_tomorrow": {
|
||
"name": "Morgondagens högsta pris"
|
||
},
|
||
"average_price_tomorrow": {
|
||
"name": "⌀ Pris imorgon"
|
||
},
|
||
"yesterday_price_level": {
|
||
"name": "Prisnivå igår",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normalt",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"today_price_level": {
|
||
"name": "Prisnivå idag",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normalt",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"tomorrow_price_level": {
|
||
"name": "Prisnivå imorgon",
|
||
"state": {
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normalt",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
},
|
||
"yesterday_price_rating": {
|
||
"name": "Prisvärdering igår",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"today_price_rating": {
|
||
"name": "Prisvärdering idag",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"tomorrow_price_rating": {
|
||
"name": "Prisvärdering imorgon",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"trailing_price_average": {
|
||
"name": "⌀ Pris rullande 24t"
|
||
},
|
||
"leading_price_average": {
|
||
"name": "⌀ Pris framåtblickande 24t"
|
||
},
|
||
"trailing_price_min": {
|
||
"name": "Rullande 24t minimumpris"
|
||
},
|
||
"trailing_price_max": {
|
||
"name": "Rullande 24t maximumpris"
|
||
},
|
||
"leading_price_min": {
|
||
"name": "Framåtblickande 24t minimumpris"
|
||
},
|
||
"leading_price_max": {
|
||
"name": "Framåtblickande 24t maximumpris"
|
||
},
|
||
"current_interval_price_rating": {
|
||
"name": "Nuvarande prisvärdering",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"next_interval_price_rating": {
|
||
"name": "Nästa prisvärdering",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"previous_interval_price_rating": {
|
||
"name": "Föregående prisvärdering",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"current_hour_price_rating": {
|
||
"name": "Nuvarande timprisvärdering",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"next_hour_price_rating": {
|
||
"name": "Nästa timprisvärdering",
|
||
"state": {
|
||
"low": "Låg",
|
||
"normal": "Normal",
|
||
"high": "Hög"
|
||
}
|
||
},
|
||
"next_avg_1h": {
|
||
"name": "⌀ Pris nästa 1t"
|
||
},
|
||
"next_avg_2h": {
|
||
"name": "⌀ Pris nästa 2t"
|
||
},
|
||
"next_avg_3h": {
|
||
"name": "⌀ Pris nästa 3t"
|
||
},
|
||
"next_avg_4h": {
|
||
"name": "⌀ Pris nästa 4t"
|
||
},
|
||
"next_avg_5h": {
|
||
"name": "⌀ Pris nästa 5t"
|
||
},
|
||
"next_avg_6h": {
|
||
"name": "⌀ Pris nästa 6t"
|
||
},
|
||
"next_avg_8h": {
|
||
"name": "⌀ Pris nästa 8t"
|
||
},
|
||
"next_avg_12h": {
|
||
"name": "⌀ Pris nästa 12t"
|
||
},
|
||
"price_trend_1h": {
|
||
"name": "Pristrend (1t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_2h": {
|
||
"name": "Pristrend (2t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_3h": {
|
||
"name": "Pristrend (3t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_4h": {
|
||
"name": "Pristrend (4t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_5h": {
|
||
"name": "Pristrend (5t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_6h": {
|
||
"name": "Pristrend (6t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_8h": {
|
||
"name": "Pristrend (8t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_12h": {
|
||
"name": "Pristrend (12t)",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"current_price_trend": {
|
||
"name": "Nuvarande pristrend",
|
||
"state": {
|
||
"rising": "Stigande",
|
||
"falling": "Fallande",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"next_price_trend_change": {
|
||
"name": "Nästa trendförändring"
|
||
},
|
||
"daily_rating": {
|
||
"name": "Daglig prisvärdering"
|
||
},
|
||
"monthly_rating": {
|
||
"name": "Månatlig prisvärdering"
|
||
},
|
||
"data_timestamp": {
|
||
"name": "Prisdata Utgångsdatum"
|
||
},
|
||
"today_volatility": {
|
||
"name": "Volatilitet idag",
|
||
"state": {
|
||
"low": "Låg",
|
||
"moderate": "Måttlig",
|
||
"high": "Hög",
|
||
"very_high": "Mycket Hög"
|
||
}
|
||
},
|
||
"tomorrow_volatility": {
|
||
"name": "Volatilitet imorgon",
|
||
"state": {
|
||
"low": "Låg",
|
||
"moderate": "Måttlig",
|
||
"high": "Hög",
|
||
"very_high": "Mycket Hög"
|
||
}
|
||
},
|
||
"next_24h_volatility": {
|
||
"name": "Volatilitet nästa 24t",
|
||
"state": {
|
||
"low": "Låg",
|
||
"moderate": "Måttlig",
|
||
"high": "Hög",
|
||
"very_high": "Mycket Hög"
|
||
}
|
||
},
|
||
"today_tomorrow_volatility": {
|
||
"name": "Volatilitet idag+imorgon",
|
||
"state": {
|
||
"low": "Låg",
|
||
"moderate": "Måttlig",
|
||
"high": "Hög",
|
||
"very_high": "Mycket Hög"
|
||
}
|
||
},
|
||
"best_price_end_time": {
|
||
"name": "Bästa pris slutar"
|
||
},
|
||
"best_price_period_duration": {
|
||
"name": "Bästa pris varaktighet"
|
||
},
|
||
"best_price_remaining_minutes": {
|
||
"name": "Bästa pris återstående tid"
|
||
},
|
||
"best_price_progress": {
|
||
"name": "Bästa pris framsteg"
|
||
},
|
||
"best_price_next_start_time": {
|
||
"name": "Bästa pris startar"
|
||
},
|
||
"best_price_next_in_minutes": {
|
||
"name": "Bästa pris startar om"
|
||
},
|
||
"peak_price_end_time": {
|
||
"name": "Topppris slutar"
|
||
},
|
||
"peak_price_period_duration": {
|
||
"name": "Topppris varaktighet"
|
||
},
|
||
"peak_price_remaining_minutes": {
|
||
"name": "Topppris återstående tid"
|
||
},
|
||
"peak_price_progress": {
|
||
"name": "Topppris framsteg"
|
||
},
|
||
"peak_price_next_start_time": {
|
||
"name": "Topppris startar"
|
||
},
|
||
"peak_price_next_in_minutes": {
|
||
"name": "Topppris startar om"
|
||
},
|
||
"price_forecast": {
|
||
"name": "Prisprognos"
|
||
},
|
||
"home_type": {
|
||
"name": "Bostadstyp",
|
||
"state": {
|
||
"apartment": "Lägenhet",
|
||
"rowhouse": "Radhus",
|
||
"house": "Hus",
|
||
"cottage": "Stuga"
|
||
}
|
||
},
|
||
"home_size": {
|
||
"name": "Boyta"
|
||
},
|
||
"main_fuse_size": {
|
||
"name": "Huvudsäkring"
|
||
},
|
||
"number_of_residents": {
|
||
"name": "Antal boende"
|
||
},
|
||
"primary_heating_source": {
|
||
"name": "Primär värmekälla",
|
||
"state": {
|
||
"air2air_heatpump": "Luft-till-luft-värmepump",
|
||
"air2water_heatpump": "Luft-till-vatten-värmepump",
|
||
"boiler": "Varmvattenberedare",
|
||
"central_heating": "Centralvärme",
|
||
"district_heating": "Fjärrvärme",
|
||
"district": "Fjärrvärme",
|
||
"electric_boiler": "Elektrisk varmvattenberedare",
|
||
"electricity": "Elektricitet",
|
||
"floor": "Golvvärme",
|
||
"gas": "Gas",
|
||
"ground_heatpump": "Bergvärmepump",
|
||
"ground": "Bergvärmepump",
|
||
"oil": "Olja",
|
||
"other": "Annat",
|
||
"waste": "Spillvärme"
|
||
}
|
||
},
|
||
"grid_company": {
|
||
"name": "Nätbolag"
|
||
},
|
||
"grid_area_code": {
|
||
"name": "Nätområdeskod"
|
||
},
|
||
"price_area_code": {
|
||
"name": "Prisområdeskod"
|
||
},
|
||
"consumption_ean": {
|
||
"name": "Förbruknings-EAN"
|
||
},
|
||
"production_ean": {
|
||
"name": "Produktions-EAN"
|
||
},
|
||
"energy_tax_type": {
|
||
"name": "Energiskattetyp"
|
||
},
|
||
"vat_type": {
|
||
"name": "Momstyp"
|
||
},
|
||
"estimated_annual_consumption": {
|
||
"name": "Uppskattat årsförbrukning"
|
||
},
|
||
"subscription_status": {
|
||
"name": "Abonnemangsstatus",
|
||
"state": {
|
||
"running": "Aktiv",
|
||
"ended": "Avslutad",
|
||
"pending": "Väntar",
|
||
"unknown": "Okänd"
|
||
}
|
||
}
|
||
},
|
||
"binary_sensor": {
|
||
"peak_price_period": {
|
||
"name": "Toppris-period"
|
||
},
|
||
"best_price_period": {
|
||
"name": "Bästa pris-period"
|
||
},
|
||
"connection": {
|
||
"name": "Tibber API-anslutning"
|
||
},
|
||
"tomorrow_data_available": {
|
||
"name": "Morgondagens data tillgänglig"
|
||
},
|
||
"has_ventilation_system": {
|
||
"name": "Har ventilationssystem"
|
||
},
|
||
"realtime_consumption_enabled": {
|
||
"name": "Realtidsförbrukning aktiverad"
|
||
}
|
||
}
|
||
},
|
||
"issues": {
|
||
"new_homes_available": {
|
||
"title": "Nya Tibber-hem upptäckta",
|
||
"description": "Vi upptäckte {count} nytt/nya hem på ditt Tibber-konto: {homes}. Du kan lägga till dem i Home Assistant via Tibber-integrationskonfigurationen."
|
||
},
|
||
"homes_removed": {
|
||
"title": "Tibber-hem borttagna",
|
||
"description": "Vi upptäckte att {count} hem har tagits bort från ditt Tibber-konto: {homes}. Vänligen granska din Tibber-integrationskonfiguration."
|
||
}
|
||
},
|
||
"services": {
|
||
"refresh_user_data": {
|
||
"name": "Uppdatera användardata",
|
||
"description": "Tvingar en uppdatering av användardata (hem, profilinformation) från Tibber API. Detta kan vara användbart efter att ha gjort ändringar i ditt Tibber-konto eller vid felsökning av anslutningsproblem.",
|
||
"fields": {
|
||
"entry_id": {
|
||
"name": "Post-ID",
|
||
"description": "Konfigurationspost-ID för Tibber-integrationen."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"selector": {
|
||
"volatility": {
|
||
"options": {
|
||
"low": "Låg",
|
||
"moderate": "Måttlig",
|
||
"high": "Hög",
|
||
"very_high": "Mycket hög"
|
||
}
|
||
},
|
||
"current_interval_price_level": {
|
||
"options": {
|
||
"any": "Alla",
|
||
"very_cheap": "Mycket billigt",
|
||
"cheap": "Billigt",
|
||
"normal": "Normalt",
|
||
"expensive": "Dyrt",
|
||
"very_expensive": "Mycket dyrt"
|
||
}
|
||
}
|
||
},
|
||
"title": "Tibber Prisinformation & Betyg"
|
||
}
|