mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 13:23:41 +00:00
BREAKING CHANGE: Period overlap resolution now merges adjacent/overlapping periods
instead of marking them as extensions. This simplifies automation logic and provides
clearer period boundaries for users.
Previous Behavior:
- Adjacent periods created by relaxation were marked with is_extension=true
- Multiple short periods instead of one continuous period
- Complex logic needed to determine actual period length in automations
New Behavior:
- Adjacent/overlapping periods are merged into single continuous periods
- Newer period's relaxation attributes override older period's
- Simpler automation: one period = one continuous time window
Changes:
- Period Overlap Resolution (new file: period_overlap.py):
* Added merge_adjacent_periods() to combine periods and preserve attributes
* Rewrote resolve_period_overlaps() with simplified merge logic
* Removed split_period_by_overlaps() (no longer needed)
* Removed is_extension marking logic
* Removed unused parameters: min_period_length, baseline_periods
- Relaxation Strategy (relaxation.py):
* Removed all is_extension filtering from period counting
* Simplified standalone counting to just len(periods)
* Changed from period_merging import to period_overlap import
* Added MAX_FLEX_HARD_LIMIT constant (0.50)
* Improved debug logging for merged periods
- Code Quality:
* Fixed all remaining linter errors (N806, PLR2004, PLR0912)
* Extracted magic values to module-level constants:
- FLEX_SCALING_THRESHOLD = 0.20
- SCALE_FACTOR_WARNING_THRESHOLD = 0.8
- MAX_FLEX_HARD_LIMIT = 0.50
* Added appropriate noqa comments for unavoidable patterns
- Configuration (from previous work in this session):
* Removed CONF_RELAXATION_STEP_BEST, CONF_RELAXATION_STEP_PEAK
* Hard-coded 3% relaxation increment for reliability
* Optimized defaults: RELAXATION_ATTEMPTS 8→11, ENABLE_MIN_PERIODS False→True,
MIN_PERIODS undefined→2
* Removed relaxation_step UI fields from config flow
* Updated all 5 translation files
- Documentation:
* Updated period_handlers/__init__.py: period_merging → period_overlap
* No user-facing docs changes needed (already described continuous periods)
Rationale - Period Merging:
User experience was complicated by fragmented periods:
- Automations had to check multiple adjacent periods
- Binary sensors showed ON/OFF transitions within same cheap time
- No clear way to determine actual continuous period length
With merging:
- One continuous cheap time = one period
- Binary sensor clearly ON during entire period
- Attributes show merge history via merged_from dict
- Relaxation info preserved from newest/highest flex period
Rationale - Hard-Coded Relaxation Increment:
The configurable relaxation_step parameter proved problematic:
- High base flex + high step → rapid explosion (40% base + 10% step → 100% in 6 steps)
- Users don't understand the multiplicative nature
- 3% increment provides optimal balance: 11 attempts to reach 50% hard cap
Impact:
- Existing installations: Periods may appear longer (merged instead of split)
- Automations benefit from simpler logic (no is_extension checks needed)
- Custom relaxation_step values will use new 3% increment
- Users may need to adjust relaxation_attempts if they relied on high step sizes
883 lines
43 KiB
JSON
883 lines
43 KiB
JSON
{
|
||
"config": {
|
||
"step": {
|
||
"user": {
|
||
"description": "Sett opp Tibber Prisinformasjon & Vurderinger.\n\nFor å generere et API-tilgangstoken, besøk https://developer.tibber.com.",
|
||
"data": {
|
||
"access_token": "API-tilgangstoken"
|
||
},
|
||
"submit": "Valider token"
|
||
},
|
||
"select_home": {
|
||
"description": "Velg et hjem for å hente prisinformasjon og vurderinger.",
|
||
"data": {
|
||
"home_id": "Hjem"
|
||
},
|
||
"title": "Velg et hjem",
|
||
"submit": "Velg hjem"
|
||
},
|
||
"finish": {
|
||
"description": "Velg et hjem for å hente prisinformasjon og vurderinger.",
|
||
"data": {
|
||
"home_id": "Hjem-ID"
|
||
},
|
||
"title": "Velg et hjem",
|
||
"submit": "Velg hjem"
|
||
},
|
||
"reauth_confirm": {
|
||
"title": "Autentiser Tibber Prisintegrasjonen på nytt",
|
||
"description": "Tilgangstokenet for Tibber er ikke lenger gyldig. Vennligst oppgi et nytt API-tilgangstoken for å fortsette å bruke denne integrasjonen.\n\nFor å generere et nytt API-tilgangstoken, besøk https://developer.tibber.com.",
|
||
"data": {
|
||
"access_token": "API-tilgangstoken"
|
||
},
|
||
"submit": "Oppdater token"
|
||
}
|
||
},
|
||
"error": {
|
||
"auth": "Tibber-tilgangstokenet er ugyldig.",
|
||
"connection": "Kunne ikke koble til Tibber. Vennligst sjekk internettforbindelsen din.",
|
||
"unknown": "Uventet feil",
|
||
"cannot_connect": "Kunne ikke koble til",
|
||
"invalid_access_token": "Ugyldig tilgangstoken",
|
||
"missing_homes": "Det nye tilgangstokenet har ikke tilgang til alle konfigurerte hjem. Vennligst bruk et tilgangstoken som har tilgang til de samme Tibber-hjemmene.",
|
||
"invalid_yaml_syntax": "Ugyldig YAML-syntaks. Vennligst sjekk innrykk, kolon og spesialtegn.",
|
||
"invalid_yaml_structure": "YAML må være en ordbok/objekt (nøkkel: verdi-par), ikke en liste eller ren tekst.",
|
||
"service_call_failed": "Service-kall validering feilet: {error_detail}"
|
||
},
|
||
"abort": {
|
||
"already_configured": "Integrasjonen er allerede konfigurert",
|
||
"entry_not_found": "Tibber-konfigurasjonsoppføring ikke funnet.",
|
||
"setup_complete": "Oppsett fullført! Du kan endre flere innstillinger for Tibber-priser i integrasjonens alternativer etter å ha lukket denne dialogen.",
|
||
"reauth_successful": "Autentisering vellykket. Integrasjonen er oppdatert med det nye tilgangstokenet."
|
||
}
|
||
},
|
||
"common": {
|
||
"step_progress": "Trinn {step_num} av {total_steps}"
|
||
},
|
||
"config_subentries": {
|
||
"home": {
|
||
"initiate_flow": {
|
||
"user": "Legg til Tibber-hjem"
|
||
},
|
||
"title": "Legg til Tibber-hjem",
|
||
"step": {
|
||
"user": {
|
||
"title": "Legg til Tibber-hjem",
|
||
"description": "Velg et hjem å legge til i din Tibber-integrasjon.\n\n**Merk:** Etter å ha lagt til dette hjemmet, kan du legge til flere hjem fra integrasjonens kontekstmeny ved å velge \"Legg til Tibber-hjem\".",
|
||
"data": {
|
||
"home_id": "Hjem"
|
||
}
|
||
}
|
||
},
|
||
"error": {
|
||
"api_error": "Kunne ikke hente hjem fra Tibber API"
|
||
},
|
||
"abort": {
|
||
"no_parent_entry": "Overordnet oppføring ikke funnet",
|
||
"no_access_token": "Ingen tilgangstoken tilgjengelig",
|
||
"home_not_found": "Valgt hjem ikke funnet",
|
||
"api_error": "Kunne ikke hente hjem fra Tibber API",
|
||
"no_available_homes": "Ingen flere hjem tilgjengelig for å legge til. Alle hjem fra din Tibber-konto er allerede lagt til."
|
||
}
|
||
}
|
||
},
|
||
"options": {
|
||
"step": {
|
||
"init": {
|
||
"title": "Generelle innstillinger",
|
||
"description": "{step_progress}\n\nKonfigurer generelle innstillinger for Tibber Prisinformasjon & Vurderinger.\n\nBruker: {user_login}",
|
||
"data": {
|
||
"extended_descriptions": "Vis utvidede beskrivelser i entitetsattributter"
|
||
},
|
||
"submit": "Neste til steg 2"
|
||
},
|
||
"current_interval_price_rating": {
|
||
"title": "Prisvurderingsterskler",
|
||
"description": "{step_progress}\n\nKonfigurer terskler for prisvurderingsnivåer (lav/normal/høy) basert på sammenligning med 24-timers glidende gjennomsnitt.",
|
||
"data": {
|
||
"price_rating_threshold_low": "Lav vurderingsterskel (% under glidende gjennomsnitt)",
|
||
"price_rating_threshold_high": "Høy vurderingsterskel (% over glidende gjennomsnitt)"
|
||
},
|
||
"submit": "Neste til steg 3"
|
||
},
|
||
"best_price": {
|
||
"title": "Innstillinger for beste prisperiode",
|
||
"description": "{step_progress}\n\nKonfigurer innstillinger for binærsensoren Beste prisperiode. Denne sensoren er aktiv i perioder med de laveste strømprisene.",
|
||
"data": {
|
||
"best_price_min_period_length": "Minimum periodelengde",
|
||
"best_price_flex": "Fleksibilitet: Maksimum % over minimumspris",
|
||
"best_price_min_distance_from_avg": "Minimumsavstand: Påkrevd % under daglig gjennomsnitt",
|
||
"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": {
|
||
"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 ett '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",
|
||
"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.",
|
||
"best_price_max_level_gap_count": "Maksimalt antall påfølgende intervaller som kan avvike med nøyaktig ett nivåtrinn fra det nødvendige nivået. For eksempel: med 'Billig' filter og gapantall 1, aksepteres sekvensen 'BILLIG, BILLIG, NORMAL, BILLIG' (NORMAL er ett trinn over BILLIG). Dette forhindrer at perioder blir delt opp av tilfeldige nivåavvik. Standard: 0 (streng filtrering, ingen toleranse)."
|
||
},
|
||
"submit": "Neste til steg 5"
|
||
},
|
||
"peak_price": {
|
||
"title": "Innstillinger for topprisperiode",
|
||
"description": "{step_progress}\n\nKonfigurer innstillinger for binærsensoren Topprisperiode. Denne sensoren er aktiv i perioder med de høyeste strømprisene.",
|
||
"data": {
|
||
"peak_price_min_period_length": "Minimum periodelengde",
|
||
"peak_price_flex": "Fleksibilitet: Maksimum % under maksimumspris (negativ verdi)",
|
||
"peak_price_min_distance_from_avg": "Minimumsavstand: Påkrevd % over daglig gjennomsnitt",
|
||
"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": {
|
||
"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 ett '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å.",
|
||
"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",
|
||
"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 ett nivåtrinn fra det nødvendige nivået. For eksempel: med 'Dyr' filter og gapantall 2, aksepteres sekvensen 'DYR, NORMAL, NORMAL, DYR' (NORMAL er ett trinn under DYR). Dette forhindrer at perioder blir delt opp av tilfeldige nivåavvik. Standard: 0 (streng filtrering, ingen toleranse)."
|
||
},
|
||
"submit": "Neste til steg 6"
|
||
},
|
||
"price_trend": {
|
||
"title": "Pristrendterskler",
|
||
"description": "{step_progress}\n\nKonfigurer 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.",
|
||
"data": {
|
||
"price_trend_threshold_rising": "Stigende terskel (% over nåværende pris)",
|
||
"price_trend_threshold_falling": "Fallende terskel (% under nåværende pris, negativ verdi)"
|
||
},
|
||
"submit": "Neste til trinn 7"
|
||
},
|
||
"volatility": {
|
||
"title": "Volatilitet Terskler",
|
||
"description": "{step_progress}\n\nKonfigurer 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)",
|
||
"data": {
|
||
"volatility_threshold_moderate": "Moderat terskel (VK ≥ denne %, f.eks. 15)",
|
||
"volatility_threshold_high": "Høy terskel (VK ≥ denne %, f.eks. 30)",
|
||
"volatility_threshold_very_high": "Veldig høy terskel (VK ≥ denne %, f.eks. 50)"
|
||
},
|
||
"submit": "Neste til steg 4"
|
||
},
|
||
"chart_data_export": {
|
||
"title": "Diagramdataeksport",
|
||
"description": "{step_progress}\n\n⚠️ **Dette trinnet er valgfritt:** Konfigurer bare hvis du trenger en diagnostisk sensor for eldre dashboardverktøy som IKKE kan kalle tjenester.\n\n⚠️ **VIKTIG: Legacy-funksjon**\nDenne sensoren finnes kun for bakoverkompatibilitet med eldre verktøy som bare kan lese data fra entitetsattributter.\n\n**For nye integrasjoner, bruk `tibber_prices.get_chartdata` tjenesten direkte** - den er mer fleksibel, effektiv og den anbefalte Home Assistant-tilnærmingen.\n\n**Når bruke denne sensoren:**\n✅ KUN hvis dashboardverktøyet ditt KUN kan lese attributter (f.eks. eldre versjoner)\n❌ IKKE for nye integrasjoner - bruk tjenesten direkte\n\n**Hva er denne sensoren?**\nEn diagnostisk sensor som kaller `tibber_prices.get_chartdata` tjenesten med dine YAML-parametere og gir resultatet som attributter.\n\n**Hvordan bruke:**\n1. Åpne Innstillinger → Enheter og tjenester → Tibber Prices\n2. Velg ditt hjem\n3. Finn 'Diagramdataeksport' i Diagnostikk-seksjonen\n4. Aktiver sensoren (deaktivert som standard)\n5. Bruk `homeassistant.update_entity` for å oppdatere data manuelt\n\n**Konfigurasjonsveiledning:**\n1. Test tjenestekallet ditt i Utviklerverktøy → Tjenester → `tibber_prices.get_chartdata`\n2. Kopier YAML fra `data:` seksjonen (uten `entry_id`)\n3. Lim det inn nedenfor (bruk Shift+Enter eller Ctrl+Enter for nye linjer)\n\n**Eksempel YAML:**\n```yaml\nday:\n - today\n - tomorrow\ninclude_level: true\ninclude_rating_level: true\n```\n\n**Merk:** La være tomt eller hopp over dette trinnet hvis du bruker tjenesten direkte (anbefalt).",
|
||
"data": {
|
||
"chart_data_config": "Tjenestekonfigurasjon (YAML)"
|
||
},
|
||
"data_description": {
|
||
"chart_data_config": "YAML-konfigurasjon for `get_chartdata` tjeneste. Støttede parametere: day (liste med yesterday/today/tomorrow), resolution (interval/hourly), output_format, include_level, include_rating_level, include_average, og mange flere. Se tjenestens dokumentasjon for full liste. La være tomt for å bruke standardinnstillinger (today, interval resolution, array of objects)."
|
||
},
|
||
"submit": "Fullfør konfigurasjon"
|
||
}
|
||
},
|
||
"error": {
|
||
"auth": "Tibber-tilgangstokenet er ugyldig.",
|
||
"connection": "Kunne ikke koble til Tibber. Vennligst sjekk internettforbindelsen din.",
|
||
"unknown": "En uventet feil oppstod. Vennligst sjekk loggene for detaljer.",
|
||
"cannot_connect": "Kunne ikke koble til",
|
||
"invalid_access_token": "Ugyldig tilgangstoken",
|
||
"different_home": "Tilgangstokenet er ikke gyldig for hjem-ID-en denne integrasjonen er konfigurert for."
|
||
},
|
||
"abort": {
|
||
"entry_not_found": "Tibber-konfigurasjonsoppføring ikke funnet."
|
||
}
|
||
},
|
||
"entity": {
|
||
"sensor": {
|
||
"current_interval_price": {
|
||
"name": "Nåværende strømpris"
|
||
},
|
||
"current_interval_price_major": {
|
||
"name": "Nåværende strømpris (Energi-dashboard)"
|
||
},
|
||
"next_interval_price": {
|
||
"name": "Neste strømpris"
|
||
},
|
||
"previous_interval_price": {
|
||
"name": "Forrige strømpris"
|
||
},
|
||
"current_hour_average_price": {
|
||
"name": "⌀ Timepris nåværende"
|
||
},
|
||
"next_hour_average_price": {
|
||
"name": "⌀ Timepris neste"
|
||
},
|
||
"current_interval_price_level": {
|
||
"name": "Nåværende prisnivå",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"next_interval_price_level": {
|
||
"name": "Neste prisnivå",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"previous_interval_price_level": {
|
||
"name": "Forrige prisnivå",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"current_hour_price_level": {
|
||
"name": "Nåværende timepris nivå",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"next_hour_price_level": {
|
||
"name": "Neste timepris nivå",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"lowest_price_today": {
|
||
"name": "Dagens laveste pris"
|
||
},
|
||
"highest_price_today": {
|
||
"name": "Dagens høyeste pris"
|
||
},
|
||
"average_price_today": {
|
||
"name": "⌀ Pris i dag"
|
||
},
|
||
"lowest_price_tomorrow": {
|
||
"name": "Morgendagens laveste pris"
|
||
},
|
||
"highest_price_tomorrow": {
|
||
"name": "Morgendagens høyeste pris"
|
||
},
|
||
"average_price_tomorrow": {
|
||
"name": "⌀ Pris i morgen"
|
||
},
|
||
"yesterday_price_level": {
|
||
"name": "Prisnivå i går",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"today_price_level": {
|
||
"name": "Prisnivå i dag",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"tomorrow_price_level": {
|
||
"name": "Prisnivå i morgen",
|
||
"state": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"yesterday_price_rating": {
|
||
"name": "Prisvurdering i går",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"today_price_rating": {
|
||
"name": "Prisvurdering i dag",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"tomorrow_price_rating": {
|
||
"name": "Prisvurdering i morgen",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"trailing_price_average": {
|
||
"name": "⌀ Pris glidende 24t"
|
||
},
|
||
"leading_price_average": {
|
||
"name": "⌀ Pris fremtidig 24t"
|
||
},
|
||
"trailing_price_min": {
|
||
"name": "Glidende 24t minimumspris"
|
||
},
|
||
"trailing_price_max": {
|
||
"name": "Glidende 24t maksimumspris"
|
||
},
|
||
"leading_price_min": {
|
||
"name": "Fremtidig 24t minimumspris"
|
||
},
|
||
"leading_price_max": {
|
||
"name": "Fremtidig 24t maksimumspris"
|
||
},
|
||
"current_interval_price_rating": {
|
||
"name": "Nåværende prisvurdering",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"next_interval_price_rating": {
|
||
"name": "Neste prisvurdering",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"previous_interval_price_rating": {
|
||
"name": "Forrige prisvurdering",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"current_hour_price_rating": {
|
||
"name": "Nåværende timeprisvurdering",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"next_hour_price_rating": {
|
||
"name": "Neste timeprisvurdering",
|
||
"state": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"next_avg_1h": {
|
||
"name": "⌀ Pris neste 1t"
|
||
},
|
||
"next_avg_2h": {
|
||
"name": "⌀ Pris neste 2t"
|
||
},
|
||
"next_avg_3h": {
|
||
"name": "⌀ Pris neste 3t"
|
||
},
|
||
"next_avg_4h": {
|
||
"name": "⌀ Pris neste 4t"
|
||
},
|
||
"next_avg_5h": {
|
||
"name": "⌀ Pris neste 5t"
|
||
},
|
||
"next_avg_6h": {
|
||
"name": "⌀ Pris neste 6t"
|
||
},
|
||
"next_avg_8h": {
|
||
"name": "⌀ Pris neste 8t"
|
||
},
|
||
"next_avg_12h": {
|
||
"name": "⌀ Pris neste 12t"
|
||
},
|
||
"price_trend_1h": {
|
||
"name": "Pristrend (1t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_2h": {
|
||
"name": "Pristrend (2t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_3h": {
|
||
"name": "Pristrend (3t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_4h": {
|
||
"name": "Pristrend (4t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_5h": {
|
||
"name": "Pristrend (5t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_6h": {
|
||
"name": "Pristrend (6t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_8h": {
|
||
"name": "Pristrend (8t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"price_trend_12h": {
|
||
"name": "Pristrend (12t)",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"current_price_trend": {
|
||
"name": "Nåværende pristrend",
|
||
"state": {
|
||
"rising": "Stigende",
|
||
"falling": "Fallende",
|
||
"stable": "Stabil"
|
||
}
|
||
},
|
||
"next_price_trend_change": {
|
||
"name": "Neste trendendring"
|
||
},
|
||
"daily_rating": {
|
||
"name": "Daglig prisvurdering"
|
||
},
|
||
"monthly_rating": {
|
||
"name": "Månedlig prisvurdering"
|
||
},
|
||
"data_timestamp": {
|
||
"name": "Prisdata Utløp"
|
||
},
|
||
"today_volatility": {
|
||
"name": "Volatilitet i dag",
|
||
"state": {
|
||
"low": "Lav",
|
||
"moderate": "Moderat",
|
||
"high": "Høy",
|
||
"very_high": "Svært Høy"
|
||
}
|
||
},
|
||
"tomorrow_volatility": {
|
||
"name": "Volatilitet i morgen",
|
||
"state": {
|
||
"low": "Lav",
|
||
"moderate": "Moderat",
|
||
"high": "Høy",
|
||
"very_high": "Svært Høy"
|
||
}
|
||
},
|
||
"next_24h_volatility": {
|
||
"name": "Volatilitet neste 24t",
|
||
"state": {
|
||
"low": "Lav",
|
||
"moderate": "Moderat",
|
||
"high": "Høy",
|
||
"very_high": "Svært Høy"
|
||
}
|
||
},
|
||
"today_tomorrow_volatility": {
|
||
"name": "Volatilitet i dag+i morgen",
|
||
"state": {
|
||
"low": "Lav",
|
||
"moderate": "Moderat",
|
||
"high": "Høy",
|
||
"very_high": "Svært Høy"
|
||
}
|
||
},
|
||
"best_price_end_time": {
|
||
"name": "Beste pris slutter"
|
||
},
|
||
"best_price_period_duration": {
|
||
"name": "Beste pris varighet"
|
||
},
|
||
"best_price_remaining_minutes": {
|
||
"name": "Beste pris gjenværende tid"
|
||
},
|
||
"best_price_progress": {
|
||
"name": "Beste pris fremgang"
|
||
},
|
||
"best_price_next_start_time": {
|
||
"name": "Beste pris starter"
|
||
},
|
||
"best_price_next_in_minutes": {
|
||
"name": "Beste pris starter om"
|
||
},
|
||
"peak_price_end_time": {
|
||
"name": "Topppris slutter"
|
||
},
|
||
"peak_price_period_duration": {
|
||
"name": "Topppris varighet"
|
||
},
|
||
"peak_price_remaining_minutes": {
|
||
"name": "Topppris gjenværende tid"
|
||
},
|
||
"peak_price_progress": {
|
||
"name": "Topppris fremgang"
|
||
},
|
||
"peak_price_next_start_time": {
|
||
"name": "Topppris starter"
|
||
},
|
||
"peak_price_next_in_minutes": {
|
||
"name": "Topppris starter om"
|
||
},
|
||
"price_forecast": {
|
||
"name": "Prisprognose"
|
||
},
|
||
"home_type": {
|
||
"name": "Boligtype",
|
||
"state": {
|
||
"apartment": "Leilighet",
|
||
"rowhouse": "Rekkehus",
|
||
"house": "Hus",
|
||
"cottage": "Hytte"
|
||
}
|
||
},
|
||
"home_size": {
|
||
"name": "Boligareal"
|
||
},
|
||
"main_fuse_size": {
|
||
"name": "Hovedsikring"
|
||
},
|
||
"number_of_residents": {
|
||
"name": "Antall beboere"
|
||
},
|
||
"primary_heating_source": {
|
||
"name": "Primær varmekilde",
|
||
"state": {
|
||
"air2air_heatpump": "Luft-til-luft-varmepumpe",
|
||
"air2water_heatpump": "Luft-til-vann-varmepumpe",
|
||
"boiler": "Varmtvannsbereder",
|
||
"central_heating": "Sentralvarme",
|
||
"district_heating": "Fjernvarme",
|
||
"district": "Fjernvarme",
|
||
"electric_boiler": "Elektrisk varmtvannsbereder",
|
||
"electricity": "Elektrisitet",
|
||
"floor": "Gulvvarme",
|
||
"gas": "Gass",
|
||
"ground_heatpump": "Jordvarmepumpe",
|
||
"ground": "Jordvarmepumpe",
|
||
"oil": "Olje",
|
||
"other": "Annet",
|
||
"waste": "Spillvarme"
|
||
}
|
||
},
|
||
"grid_company": {
|
||
"name": "Nettselskap"
|
||
},
|
||
"grid_area_code": {
|
||
"name": "Nettområdekode"
|
||
},
|
||
"price_area_code": {
|
||
"name": "Prisområdekode"
|
||
},
|
||
"consumption_ean": {
|
||
"name": "Forbruks-EAN"
|
||
},
|
||
"production_ean": {
|
||
"name": "Produksjons-EAN"
|
||
},
|
||
"energy_tax_type": {
|
||
"name": "Energiavgiftstype"
|
||
},
|
||
"vat_type": {
|
||
"name": "MVA-type"
|
||
},
|
||
"estimated_annual_consumption": {
|
||
"name": "Estimert årlig forbruk"
|
||
},
|
||
"subscription_status": {
|
||
"name": "Abonnementsstatus",
|
||
"state": {
|
||
"running": "Aktiv",
|
||
"ended": "Avsluttet",
|
||
"pending": "Venter",
|
||
"unknown": "Ukjent"
|
||
}
|
||
},
|
||
"chart_data_export": {
|
||
"name": "Diagramdataeksport",
|
||
"state": {
|
||
"pending": "Venter",
|
||
"ready": "Klar",
|
||
"error": "Feil"
|
||
}
|
||
}
|
||
},
|
||
"binary_sensor": {
|
||
"peak_price_period": {
|
||
"name": "Toppris-periode"
|
||
},
|
||
"best_price_period": {
|
||
"name": "Lavpris-periode"
|
||
},
|
||
"connection": {
|
||
"name": "Tibber API-tilkobling"
|
||
},
|
||
"tomorrow_data_available": {
|
||
"name": "Morgendagens data tilgjengelig"
|
||
},
|
||
"has_ventilation_system": {
|
||
"name": "Har ventilasjonsanlegg"
|
||
},
|
||
"realtime_consumption_enabled": {
|
||
"name": "Sanntidsforbruk aktivert"
|
||
}
|
||
}
|
||
},
|
||
"issues": {
|
||
"new_homes_available": {
|
||
"title": "Nye Tibber-hjem oppdaget",
|
||
"description": "Vi oppdaget {count} nytt/nye hjem på din Tibber-konto: {homes}. Du kan legge dem til i Home Assistant gjennom Tibber-integrasjonskonfigurasjonen."
|
||
},
|
||
"homes_removed": {
|
||
"title": "Tibber-hjem fjernet",
|
||
"description": "Vi oppdaget at {count} hjem har blitt fjernet fra din Tibber-konto: {homes}. Vennligst gjennomgå din Tibber-integrasjonskonfigurasjon."
|
||
}
|
||
},
|
||
"services": {
|
||
"get_apexcharts_yaml": {
|
||
"name": "Hent ApexCharts-kort YAML",
|
||
"description": "Returnerer en klar-til-kopier YAML-snippet for et ApexCharts-kort som visualiserer Tibber-priser for den valgte dagen. Bruk dette for å enkelt legge til et forhåndskonfigurert diagram til dashboardet ditt. YAML vil bruke get_chartdata-tjenesten for data.",
|
||
"fields": {
|
||
"entry_id": {
|
||
"name": "Oppførings-ID",
|
||
"description": "Konfigureringsoppførings-IDen for Tibber-integrasjonen."
|
||
},
|
||
"day": {
|
||
"name": "Dag",
|
||
"description": "Hvilken dag som skal visualiseres (i går, i dag eller i morgen)."
|
||
},
|
||
"level_type": {
|
||
"name": "Nivåtype",
|
||
"description": "Velg hvilken prisnivåklassifisering som skal visualiseres: 'rating_level' (lav/normal/høy basert på dine konfigurerte terskelverdier) eller 'level' (Tibber API-nivåer: veldig billig/billig/normal/dyr/veldig dyr)."
|
||
}
|
||
}
|
||
},
|
||
"get_chartdata": {
|
||
"name": "Hent diagramdata",
|
||
"description": "Returnerer prisdata i et enkelt diagramvennlig format kompatibelt med Tibber Core-integrasjonens utdatastruktur. Perfekt for bruk med populære diagramkort som ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card eller den innebygde History Graph Card. Feltnavn og datastruktur kan tilpasses for å matche diagrammets krav.",
|
||
"fields": {
|
||
"entry_id": {
|
||
"name": "Oppførings-ID",
|
||
"description": "Konfig-oppførings-ID for Tibber-integrasjonen."
|
||
},
|
||
"day": {
|
||
"name": "Dag",
|
||
"description": "Hvilken dag(er) skal det hentes priser for. Du kan velge flere dager. Hvis ikke angitt, returneres alle tilgjengelige data (i dag + i morgen hvis tilgjengelig)."
|
||
},
|
||
"resolution": {
|
||
"name": "Oppløsning",
|
||
"description": "Tidsoppløsning for de returnerte dataene. Alternativer: 'interval' (standard, 15-minutters intervaller, 96 datapunkter per dag), 'hourly' (timegjennomsnitt, 24 datapunkter per dag)."
|
||
},
|
||
"output_format": {
|
||
"name": "Utdataformat",
|
||
"description": "Utdataformat for de returnerte dataene. Alternativer: 'array_of_objects' (standard, array av objekter med tilpassbare feltnavn), 'array_of_arrays' (array av [tidsstempel, pris]-arrays med avsluttende null-punkt for stepline-diagrammer)."
|
||
},
|
||
"array_fields": {
|
||
"name": "Array-felt (kun Array av arrays)",
|
||
"description": "[KUN FOR Array av arrays FORMAT] Definer hvilke felt som skal inkluderes. Bruk feltnavn i krøllparenteser, adskilt med komma. Tilgjengelige felt: start_time, price_per_kwh, level, rating_level, average. Felt vil automatisk aktiveres selv om include_*-alternativene ikke er satt. La stå tom for standard (kun tidsstempel og pris)."
|
||
},
|
||
"minor_currency": {
|
||
"name": "Mindre valutaenhet",
|
||
"description": "Returner priser i mindre valutaenheter (øre for NOK/SEK, cent for EUR) i stedet for hovedvalutaenheter. Deaktivert som standard."
|
||
},
|
||
"round_decimals": {
|
||
"name": "Rund desimaler",
|
||
"description": "Antall desimalplasser å runde priser til (0-10). Hvis ikke angitt, brukes standard presisjon (4 desimaler for hovedvaluta, 2 for mindre valutaenhet)."
|
||
},
|
||
"include_level": {
|
||
"name": "Inkluder prisnivå (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Inkluder Tibber-prisnivåfeltet (VERY_CHEAP, CHEAP, NORMAL, EXPENSIVE, VERY_EXPENSIVE) i hvert datapunkt."
|
||
},
|
||
"include_rating_level": {
|
||
"name": "Inkluder prisvurdering (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Inkluder det beregnede prisvurderingsfeltet (LOW, NORMAL, HIGH) basert på dine konfigurerte terskler i hvert datapunkt."
|
||
},
|
||
"include_average": {
|
||
"name": "Inkluder gjennomsnitt (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Inkluder daglig gjennomsnittspris i hvert datapunkt for sammenligning."
|
||
},
|
||
"level_filter": {
|
||
"name": "Prisnivåfilter",
|
||
"description": "Filtrer intervaller for å bare inkludere spesifikke Tibber-prisnivåer (VERY_CHEAP, CHEAP, NORMAL, EXPENSIVE, VERY_EXPENSIVE). Hvis ikke angitt, inkluderes alle nivåer."
|
||
},
|
||
"rating_level_filter": {
|
||
"name": "Prisvurderingsfilter",
|
||
"description": "Filtrer intervaller for å inkludere bare spesifikke prisvurderinger (LOW, NORMAL, HIGH). Hvis ikke spesifisert, inkluderes alle vurderinger."
|
||
},
|
||
"period_filter": {
|
||
"name": "Periodefilter",
|
||
"description": "Filtrer intervaller for å inkludere kun de innenfor Beste pris- eller Topp pris-perioder. Alternativer: 'best_price' (kun intervaller i Beste pris-perioder), 'peak_price' (kun intervaller i Topp pris-perioder). Hvis ikke spesifisert, inkluderes alle intervaller. Bruker forhåndsberegnede periodedata fra binære sensorer."
|
||
},
|
||
"insert_nulls": {
|
||
"name": "Sett inn NULL-verdier",
|
||
"description": "Kontroller innsetting av NULL-verdier for filtrerte data. 'none' (standard): Ingen NULL-verdier, bare matchende intervaller. 'segments': Legg til NULL-punkter ved segmentgrenser for rene hull i diagrammer (anbefalt for trinnlinjediagrammer). 'all': Sett inn NULL for alle tidsstempler der filteret ikke samsvarer (nyttig for kontinuerlig tidsserievisualisering)."
|
||
},
|
||
"add_trailing_null": {
|
||
"name": "Legg til avsluttende null-punkt",
|
||
"description": "[BEGGE FORMATER] Legg til et siste datapunkt med nullverdier (unntatt tidsstempel) på slutten. Noen diagrambiblioteker trenger dette for å forhindre ekstrapolering/interpolering til visningsportens kant ved bruk av trinnlinje-rendering. La være deaktivert med mindre diagrammet ditt krever det."
|
||
},
|
||
"start_time_field": {
|
||
"name": "Starttid-feltnavn (kun Array of Objects)",
|
||
"description": "[KUN FOR Array of Objects FORMAT] Egendefinert navn for starttid-feltet i utdata. Standard er 'start_time' hvis ikke angitt."
|
||
},
|
||
"end_time_field": {
|
||
"name": "Sluttid-feltnavn (kun Array of Objects)",
|
||
"description": "[KUN FOR Array of Objects FORMAT] Egendefinert navn for sluttid-feltet i utdata. Standard er 'end_time' hvis ikke angitt. Brukes kun med period_filter."
|
||
},
|
||
"price_field": {
|
||
"name": "Prisfelt-navn (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Tilpasset navn for prisfeltet i utdata. Standard er 'price_per_kwh'."
|
||
},
|
||
"level_field": {
|
||
"name": "Prisnivåfelt-navn (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Tilpasset navn for prisnivåfeltet i utdata. Standard er 'level'. Brukes bare når include_level er aktivert."
|
||
},
|
||
"rating_level_field": {
|
||
"name": "Prisvurderingsfelt-navn (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Tilpasset navn for prisvurderingsfeltet i utdata. Standard er 'rating_level'. Brukes bare når include_rating_level er aktivert."
|
||
},
|
||
"average_field": {
|
||
"name": "Gjennomsnittsfelt-navn (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Tilpasset navn for gjennomsnittsfeltet i utdata. Standard er 'average'. Brukes bare når include_average er aktivert."
|
||
},
|
||
"data_key": {
|
||
"name": "Datanøkkel (begge formater)",
|
||
"description": "[BEGGE FORMATER] Tilpasset navn for datanøkkelen på toppnivå i svaret. Standard er 'data' hvis ikke angitt. For ApexCharts-kompatibilitet med Array av arrays, bruk 'points'."
|
||
}
|
||
}
|
||
},
|
||
"refresh_user_data": {
|
||
"name": "Oppdater brukerdata",
|
||
"description": "Tvinger en oppdatering av brukerdataene (hjem, profilinformasjon) fra Tibber API. Dette kan være nyttig etter å ha gjort endringer i Tibber-kontoen din eller ved feilsøking av tilkoblingsproblemer.",
|
||
"fields": {
|
||
"entry_id": {
|
||
"name": "Oppførings-ID",
|
||
"description": "Konfig-oppførings-ID for Tibber-integrasjonen."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"selector": {
|
||
"day": {
|
||
"options": {
|
||
"yesterday": "I går",
|
||
"today": "I dag",
|
||
"tomorrow": "I morgen"
|
||
}
|
||
},
|
||
"resolution": {
|
||
"options": {
|
||
"interval": "Intervall (15 min)",
|
||
"hourly": "Hver time"
|
||
}
|
||
},
|
||
"output_format": {
|
||
"options": {
|
||
"array_of_objects": "Array av objekter",
|
||
"array_of_arrays": "Array av arrays"
|
||
}
|
||
},
|
||
"level_type": {
|
||
"options": {
|
||
"rating_level": "Vurderingsnivå (lav/normal/høy)",
|
||
"level": "Tibber-nivå (veldig billig til veldig dyr)"
|
||
}
|
||
},
|
||
"level_filter": {
|
||
"options": {
|
||
"very_cheap": "Veldig billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Veldig dyr"
|
||
}
|
||
},
|
||
"rating_level_filter": {
|
||
"options": {
|
||
"low": "Lav",
|
||
"normal": "Normal",
|
||
"high": "Høy"
|
||
}
|
||
},
|
||
"insert_nulls": {
|
||
"options": {
|
||
"none": "Ingen",
|
||
"segments": "Segmenter",
|
||
"all": "Alle"
|
||
}
|
||
},
|
||
"period_filter": {
|
||
"options": {
|
||
"best_price": "Beste prisperioder",
|
||
"peak_price": "Topp prisperioder"
|
||
}
|
||
},
|
||
"volatility": {
|
||
"options": {
|
||
"low": "Lav",
|
||
"moderate": "Moderat",
|
||
"high": "Høy",
|
||
"very_high": "Svært høy"
|
||
}
|
||
},
|
||
"current_interval_price_level": {
|
||
"options": {
|
||
"any": "Alle",
|
||
"very_cheap": "Svært billig",
|
||
"cheap": "Billig",
|
||
"normal": "Normal",
|
||
"expensive": "Dyr",
|
||
"very_expensive": "Svært dyr"
|
||
}
|
||
}
|
||
},
|
||
"title": "Tibber Prisinformasjon & Vurderinger"
|
||
}
|