mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 05:13:40 +00:00
* feat(period-calc): adaptive defaults + remove volatility filter Major improvements to period calculation with smarter defaults and simplified configuration: **Adaptive Defaults:** - ENABLE_MIN_PERIODS: true (was false) - Always try to find periods - MIN_PERIODS target: 2 periods/day (ensures coverage) - BEST_PRICE_MAX_LEVEL: "cheap" (was "any") - Prefer genuinely cheap - PEAK_PRICE_MIN_LEVEL: "expensive" (was "any") - Prefer genuinely expensive - GAP_TOLERANCE: 1 (was 0) - Allow 1-level deviations in sequences - MIN_DISTANCE_FROM_AVG: 5% (was 2%) - Ensure significance - PEAK_PRICE_MIN_PERIOD_LENGTH: 30min (was 60min) - More responsive - PEAK_PRICE_FLEX: -20% (was -15%) - Better peak detection **Volatility Filter Removal:** - Removed CONF_BEST_PRICE_MIN_VOLATILITY from const.py - Removed CONF_PEAK_PRICE_MIN_VOLATILITY from const.py - Removed volatility filter UI controls from config_flow.py - Removed filter_periods_by_volatility() calls from coordinator.py - Updated all 5 translations (de, en, nb, nl, sv) **Period Calculation Logic:** - Level filter now integrated into _build_periods() (applied during interval qualification, not as post-filter) - Gap tolerance implemented via _check_level_with_gap_tolerance() - Short periods (<1.5h) use strict filtering (no gap tolerance) - Relaxation now passes level_filter + gap_count directly to PeriodConfig - show_periods check skipped when relaxation enabled (relaxation tries "any" as fallback) **Documentation:** - Complete rewrite of docs/user/period-calculation.md: * Visual examples with timelines * Step-by-step explanation of 4-step process * Configuration scenarios (5 common use cases) * Troubleshooting section with specific fixes * Advanced topics (per-day independence, early stop, etc.) - Updated README.md: "volatility" → "distance from average" Impact: Periods now reliably appear on most days with meaningful quality filters. Users get warned about expensive periods and notified about cheap opportunities without manual tuning. Relaxation ensures coverage while keeping filters as strict as possible. Breaking change: Volatility filter removed (was never a critical feature, often confused users). Existing configs continue to work (removed keys are simply ignored). * feat(periods): modularize period_utils and add statistical outlier filtering Refactored monolithic period_utils.py (1800 lines) into focused modules for better maintainability and added advanced outlier filtering with smart impact tracking. Modular structure: - types.py: Type definitions and constants (89 lines) - level_filtering.py: Level filtering with gap tolerance (121 lines) - period_building.py: Period construction from intervals (238 lines) - period_statistics.py: Statistics and summaries (318 lines) - period_merging.py: Overlap resolution (382 lines) - relaxation.py: Per-day relaxation strategy (547 lines) - core.py: Main API orchestration (251 lines) - outlier_filtering.py: Statistical spike detection (294 lines) - __init__.py: Public API exports (62 lines) New statistical outlier filtering: - Linear regression for trend-based spike detection - 2 standard deviation confidence intervals (95%) - Symmetry checking to preserve legitimate price shifts - Enhanced zigzag detection with relative volatility (catches clusters) - Replaces simple average smoothing with trend-based predictions Smart impact tracking: - Tests if original price would have passed criteria - Only counts smoothed intervals that actually changed period formation - Tracks level gap tolerance usage separately - Both attributes only appear when > 0 (clean UI) New period attributes: - period_interval_smoothed_count: Intervals kept via outlier smoothing - period_interval_level_gap_count: Intervals kept via gap tolerance Impact: Statistical outlier filtering prevents isolated price spikes from breaking continuous periods while preserving data integrity. All statistics use original prices. Smart tracking shows only meaningful interventions, making it clear when tolerance mechanisms actually influenced results. Backwards compatible: All public APIs re-exported from period_utils package. * Update docs/user/period-calculation.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update custom_components/tibber_prices/const.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update custom_components/tibber_prices/coordinator.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update custom_components/tibber_prices/const.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * docs(periods): fix corrupted period-calculation.md and add outlier filtering documentation Completely rewrote period-calculation.md after severe corruption (massive text duplication throughout the file made it 2489 lines). Changes: - Fixed formatting: Removed all duplicate text and headers - Reduced file size: 2594 lines down to 516 lines (clean, readable structure) - Added section 5: "Statistical Outlier Filtering (NEW)" explaining: - Linear regression-based spike detection (95% confidence intervals) - Symmetry checking to preserve legitimate price shifts - Enhanced zigzag detection with relative volatility - Data integrity guarantees (original prices always used) - New period attributes: period_interval_smoothed_count - Added troubleshooting: "Price spikes breaking periods" section - Added technical details: Algorithm constants and implementation notes Impact: Users can now understand how outlier filtering prevents isolated price spikes from breaking continuous periods. Documentation is readable again with no duplicate content. * fix(const): improve clarity in comments regarding period lengths for price alerts * docs(periods): improve formatting and clarity in period-calculation.md * Initial plan * refactor: convert flexibility_pct to ratio once at function entry Co-authored-by: jpawlowski <75446+jpawlowski@users.noreply.github.com> * Update custom_components/tibber_prices/const.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update custom_components/tibber_prices/period_utils/period_building.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update custom_components/tibber_prices/period_utils/relaxation.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Julian Pawlowski <jpawlowski@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
514 lines
24 KiB
JSON
514 lines
24 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"
|
|
},
|
|
"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"
|
|
},
|
|
"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.",
|
|
"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"
|
|
},
|
|
"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.",
|
|
"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": "Prisvolatilitet Trösklar",
|
|
"description": "{step_progress}\n\nKonfigurera trösklar för volatilitetsklassificering. Volatilitet mäter prisvariationer (spridning mellan min/max) i minsta valutaenhet (ct/øre). Dessa trösklar används av volatilitetssensorer och periodfilter.",
|
|
"data": {
|
|
"volatility_threshold_moderate": "Måttlig tröskel (ct/øre, spridning ≥ detta värde)",
|
|
"volatility_threshold_high": "Hög tröskel (ct/øre, spridning ≥ detta värde)",
|
|
"volatility_threshold_very_high": "Mycket hög tröskel (ct/øre, spridning ≥ detta värde)"
|
|
},
|
|
"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_price": {
|
|
"name": "Nuvarande elpris"
|
|
},
|
|
"next_interval_price": {
|
|
"name": "Nästa pris"
|
|
},
|
|
"previous_interval_price": {
|
|
"name": "Föregående elpris"
|
|
},
|
|
"current_hour_average": {
|
|
"name": "Nuvarande timgenomsnitt pris"
|
|
},
|
|
"next_hour_average": {
|
|
"name": "Nästa timgenomsnitt pris"
|
|
},
|
|
"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": "Dagens genomsnittspris"
|
|
},
|
|
"lowest_price_tomorrow": {
|
|
"name": "Morgondagens lägsta pris"
|
|
},
|
|
"highest_price_tomorrow": {
|
|
"name": "Morgondagens högsta pris"
|
|
},
|
|
"average_price_tomorrow": {
|
|
"name": "Morgondagens genomsnittspris"
|
|
},
|
|
"trailing_price_average": {
|
|
"name": "Rullande 24t genomsnittspris"
|
|
},
|
|
"leading_price_average": {
|
|
"name": "Framåtblickande 24t genomsnittspris"
|
|
},
|
|
"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"
|
|
},
|
|
"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 timpris värdering",
|
|
"state": {
|
|
"low": "Låg",
|
|
"normal": "Normal",
|
|
"high": "Hög"
|
|
}
|
|
},
|
|
"next_hour_price_rating": {
|
|
"name": "Nästa timpris värdering",
|
|
"state": {
|
|
"low": "Låg",
|
|
"normal": "Normal",
|
|
"high": "Hög"
|
|
}
|
|
},
|
|
"next_avg_1h": {
|
|
"name": "Nästa 1t genomsnittspris"
|
|
},
|
|
"next_avg_2h": {
|
|
"name": "Nästa 2t genomsnittspris"
|
|
},
|
|
"next_avg_3h": {
|
|
"name": "Nästa 3t genomsnittspris"
|
|
},
|
|
"next_avg_4h": {
|
|
"name": "Nästa 4t genomsnittspris"
|
|
},
|
|
"next_avg_5h": {
|
|
"name": "Nästa 5t genomsnittspris"
|
|
},
|
|
"next_avg_6h": {
|
|
"name": "Nästa 6t genomsnittspris"
|
|
},
|
|
"next_avg_8h": {
|
|
"name": "Nästa 8t genomsnittspris"
|
|
},
|
|
"next_avg_12h": {
|
|
"name": "Nästa 12t genomsnittspris"
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"daily_rating": {
|
|
"name": "Daglig prisvärdering"
|
|
},
|
|
"monthly_rating": {
|
|
"name": "Månatlig prisvärdering"
|
|
},
|
|
"data_timestamp": {
|
|
"name": "Prisdata Utgångsdatum"
|
|
},
|
|
"today_volatility": {
|
|
"name": "Dagens Prisvolatilitet",
|
|
"state": {
|
|
"low": "Låg",
|
|
"moderate": "Måttlig",
|
|
"high": "Hög",
|
|
"very_high": "Mycket Hög"
|
|
}
|
|
},
|
|
"tomorrow_volatility": {
|
|
"name": "Morgondagens Prisvolatilitet",
|
|
"state": {
|
|
"low": "Låg",
|
|
"moderate": "Måttlig",
|
|
"high": "Hög",
|
|
"very_high": "Mycket Hög"
|
|
}
|
|
},
|
|
"next_24h_volatility": {
|
|
"name": "Nästa 24t Prisvolatilitet",
|
|
"state": {
|
|
"low": "Låg",
|
|
"moderate": "Måttlig",
|
|
"high": "Hög",
|
|
"very_high": "Mycket Hög"
|
|
}
|
|
},
|
|
"today_tomorrow_volatility": {
|
|
"name": "Idag+Imorgon Prisvolatilitet",
|
|
"state": {
|
|
"low": "Låg",
|
|
"moderate": "Måttlig",
|
|
"high": "Hög",
|
|
"very_high": "Mycket Hög"
|
|
}
|
|
},
|
|
"price_forecast": {
|
|
"name": "Prisprognos"
|
|
}
|
|
},
|
|
"binary_sensor": {
|
|
"peak_price_period": {
|
|
"name": "Topprisperiod"
|
|
},
|
|
"best_price_period": {
|
|
"name": "Bästa prisperiod"
|
|
},
|
|
"connection": {
|
|
"name": "Tibber API-anslutning"
|
|
},
|
|
"tomorrow_data_available": {
|
|
"name": "Morgondagens data tillgänglig"
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"price_level": {
|
|
"options": {
|
|
"any": "Alla",
|
|
"very_cheap": "Mycket billigt",
|
|
"cheap": "Billigt",
|
|
"normal": "Normalt",
|
|
"expensive": "Dyrt",
|
|
"very_expensive": "Mycket dyrt"
|
|
}
|
|
}
|
|
},
|
|
"title": "Tibber Prisinformation & Betyg"
|
|
}
|