mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 05:13:40 +00:00
Complete overhaul of the ApexCharts integration service layer to support modern chart card workflows with flexible data formatting and filtering. Replaced services: - Removed: get_price, get_apexcharts_data (legacy, entity-based) - Added: get_chartdata (flexible data service) - Improved: get_apexcharts_yaml (now uses get_chartdata internally) New get_chartdata service features: - Multiple output formats (array_of_objects, array_of_arrays) - Customizable field names for chart compatibility - Resolution options (15-min intervals, hourly averages) - Advanced filtering (level_filter, rating_level_filter) - NULL insertion modes (none, segments, all) for clean gaps - Minor currency support (cents/øre) with custom rounding - Optional fields (level, rating_level, average) - Multi-day support (yesterday/today/tomorrow) Enhanced get_apexcharts_yaml service: - Direct entry_id parameter (no entity_id lookup needed) - Uses get_chartdata with WebSocket API (data_generator) - Improved ApexCharts configuration: * Gradient fill (70% opacity → 20%) * Grid styling with dashed lines * Zoom & Pan tools (animations disabled for performance) * Optimized legend (top-left, compact markers) * Y-axis auto-scaling (min: 0 for visibility, supports negative prices) * 2 decimal places (improved precision) * Browser locale formatting (automatic comma/point) * insert_nulls='segments' for clean gaps between levels - Multi-language support (translated titles, series names) - Day selection (yesterday/today/tomorrow with correct span config) Service translations: - Added comprehensive field descriptions (all 5 languages: de, en, nb, nl, sv) - Selector translations for all options (day, resolution, output_format, etc.) - ApexCharts title translations in custom_translations/ Technical improvements: - Hourly aggregation uses exact 4-interval windows (:00/:15/:30/:45) - Level/rating aggregation follows sensor logic (aggregate_level_data, aggregate_rating_data) - Midnight extension for last interval of filtered data (seamless day transitions) - Case-insensitive filter matching (normalized to uppercase) - Ruff complexity fixed (extracted _get_level_translation helper) Impact: Users can now generate production-ready ApexCharts YAML with a single service call, or use get_chartdata flexibly with any chart card (ApexCharts, Plotly, Mini Graph, etc.). Supports complex filtering scenarios (e.g., "show only LOW rating periods") with clean visual gaps. Full multi-language support.
851 lines
40 KiB
JSON
851 lines
40 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."
|
||
},
|
||
"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_step_best": "Avslappingstrinn",
|
||
"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_step_best": "Prosentandel av den opprinnelige fleksibilitetsterskealen som legges til per avslappingstrinn. For eksempel: med 15% fleksibilitet og 25% trinnstørrelse vil filtrene prøve 15%, 18,75%, 22,5%, osv. Høyere verdier betyr raskere avslapping men mindre presisjon.",
|
||
"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_step_peak": "Avslappingstrinn",
|
||
"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_step_peak": "Prosentandel av den opprinnelige fleksibilitetsterskealen som legges til per avslappingstrinn. For eksempel: med -15% fleksibilitet og 25% trinnstørrelse vil filtrene prøve -15%, -18,75%, -22,5%, osv. Høyere verdier betyr raskere avslapping men mindre presisjon.",
|
||
"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": "Fullfør konfigurasjon"
|
||
},
|
||
"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"
|
||
}
|
||
},
|
||
"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"
|
||
}
|
||
}
|
||
},
|
||
"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."
|
||
},
|
||
"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 null-verdier (unntatt tidsstempel) på slutten. Noen diagrambiblioteker trenger dette for å forhindre ekstrapolering/interpolering til kanten av visningsområdet ved stepline-gjengivelse. La være deaktivert med mindre diagrammet ditt krever det."
|
||
},
|
||
"timestamp_field": {
|
||
"name": "Tidsstempel-feltnavn (kun Array av objekter)",
|
||
"description": "[KUN FOR Array av objekter FORMAT] Tilpasset navn for tidsstempel-feltet i utdata. Standard er 'start_time' hvis ikke angitt."
|
||
},
|
||
"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"
|
||
}
|
||
},
|
||
"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"
|
||
}
|