{
  "config": {
    "step": {
      "account_choice": {
        "title": "Velg konto",
        "description": "Du kan legge til et nytt hjem fra en eksisterende Tibber-konto eller skrive inn et nytt API-token for en annen konto.",
        "data": {
          "account_choice": "Konto"
        },
        "submit": "Fortsett →"
      },
      "new_token": {
        "title": "Skriv inn API-token",
        "description": "Sett opp Tibber Prisinformasjon & Vurderinger.\n\nFor å generere et API-tilgangstoken, besøk [{tibber_url}]({tibber_url}).",
        "data": {
          "access_token": "API-tilgangstoken"
        },
        "submit": "Valider token"
      },
      "user": {
        "description": "Sett opp Tibber Prisinformasjon & Vurderinger.\n\nFor å generere et API-tilgangstoken, besøk [{tibber_url}]({tibber_url}).",
        "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 [{tibber_url}]({tibber_url}).",
        "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.",
      "home_already_configured": "Dette hjemmet er allerede konfigurert i en annen oppføring. Hvert hjem kan kun konfigureres én gang.",
      "no_active_subscription": "Dette hjemmet har ikke en aktiv Tibber-kontrakt. Bare hjem med aktive strømkontrakter kan legges til Home Assistant.",
      "subscription_expired": "Tibber-kontrakten for dette hjemmet har utløpt. Bare hjem med aktive eller fremtidige strømkontrakter kan legges til Home Assistant.",
      "future_subscription_warning": "Merk: Tibber-kontrakten for dette hjemmet har ikke startet ennå. Funksjonaliteten kan være begrenset til kontrakten blir aktiv."
    },
    "abort": {
      "already_configured": "Alle tilgjengelige Tibber-hjem er allerede konfigurert. Hvert hjem kan kun konfigureres én gang.",
      "entry_not_found": "Tibber-konfigurasjonsoppføring ikke funnet.",
      "setup_complete": "Oppsett fullført! Du kan endre ytterligere alternativer for Tibber Prices i integrasjonens alternativer etter å ha lukket denne dialogen.",
      "reauth_successful": "Ny autentisering vellykket. Integrasjonen har blitt oppdatert med det nye tilgangstokenet."
    }
  },
  "common": {
    "step_progress": "{step_num} / {total_steps}",
    "override_warning_template": "⚠️ {fields} styres av konfigurasjons-entitet",
    "override_warning_and": "og",
    "override_field_label_best_price_min_period_length": "Minste periodelengde",
    "override_field_label_best_price_max_level_gap_count": "Gaptoleranse",
    "override_field_label_best_price_flex": "Fleksibilitet",
    "override_field_label_best_price_min_distance_from_avg": "Minimumsavstand",
    "override_field_label_enable_min_periods_best": "Oppnå minimum antall",
    "override_field_label_min_periods_best": "Minimumperioder",
    "override_field_label_relaxation_attempts_best": "Avslapningsforsøk",
    "override_field_label_peak_price_min_period_length": "Minste periodelengde",
    "override_field_label_peak_price_max_level_gap_count": "Gaptoleranse",
    "override_field_label_peak_price_flex": "Fleksibilitet",
    "override_field_label_peak_price_min_distance_from_avg": "Minimumsavstand",
    "override_field_label_enable_min_periods_peak": "Oppnå minimum antall",
    "override_field_label_min_periods_peak": "Minimumperioder",
    "override_field_label_relaxation_attempts_peak": "Avslapningsforsøk"
  },
  "config_subentries": {
    "home": {
      "entry_type": "Tidsreisevisning",
      "initiate_flow": {
        "user": "Opprett tidsreisevisning"
      },
      "title": "Opprett tidsreisevisning",
      "step": {
        "user": {
          "title": "Velg konfigurasjonsoppføring",
          "description": "Velg konfigurasjonsoppføringen du vil opprette en tidsreisevisning for.\n\n**Tidsreisevisninger** lar deg se historiske prisdata som om det var nåværende tid. Dette er nyttig for å teste automatiseringer eller analysere tidligere prismønstre.",
          "data": {
            "parent_entry_id": "Konfigurasjonsoppføring"
          }
        },
        "time_offset": {
          "title": "Konfigurer tidsforskyvning",
          "description": "Konfigurer hvor langt tilbake i tid denne visningen skal reise.\n\n**Anbefalt:** Bruk **≥2 dager** forskyvning for å unngå konflikter med \"yesterday\"-entiteter som også gir historiske data.\n\n**Eksempler:**\n• **-7 dager**: Vis priser fra 7 dager siden\n• **-2 dager, 3 timer**: Vis priser fra 2 dager og 3 timer siden\n• **-14 dager**: Vis priser fra 2 uker siden",
          "data": {
            "virtual_time_offset_days": "Dager tilbake",
            "time_offset": "Ekstra tidsforskyvning"
          },
          "data_description": {
            "virtual_time_offset_days": "Hvor mange dager å reise tilbake i tid. Glidebryter-område: 0 til 374 dager (≈1 år). Anbefalt: ≥2 dager for å unngå konflikter med \"yesterday\"-entiteter.",
            "time_offset": "Valgfri finjustering: Legg til timer og/eller minutter til dagesforskyvningen. Tiden trekkes automatisk fra (reis lenger tilbake). Merk: Sekunder ignoreres - kun minuttbasert presisjon støttes."
          }
        },
        "init": {
          "title": "Konfigurer tidsforskyvning på nytt",
          "description": "Oppdater tidsforskyvningen for denne tidsreisevisningen.",
          "data": {
            "virtual_time_offset_days": "Dager tilbake",
            "time_offset": "Ekstra tidsforskyvning"
          },
          "data_description": {
            "virtual_time_offset_days": "Hvor mange dager å reise tilbake i tid. Glidebryter-område: 0 til 374 dager (≈1 år). Anbefalt: ≥2 dager for å unngå konflikter med \"yesterday\"-entiteter.",
            "time_offset": "Valgfri finjustering: Legg til timer og/eller minutter til dagesforskyvningen. Tiden trekkes automatisk fra (reis lenger tilbake). Merk: Sekunder ignoreres - kun minuttbasert presisjon støttes."
          }
        }
      },
      "error": {
        "no_time_offset": "Minst én tidsforskyvningsverdi må være negativ (kun historiske data)."
      },
      "abort": {
        "already_configured": "**En tidsreisevisning med denne eksakte tidsforskyvningen eksisterer allerede.**\n\nVelg en annen forskyvning.",
        "no_main_entries": "Ingen hovedkonfigurasjonsoppføringer funnet. Legg til et Tibber-hjem først.",
        "parent_entry_not_found": "Valgt konfigurasjonsoppføring ikke funnet."
      }
    }
  },
  "options": {
    "step": {
      "init": {
        "menu_options": {
          "general_settings": "⚙️ Generelle innstillinger",
          "display_settings": "💱 Valutavisning",
          "current_interval_price_rating": "📊 Prisvurdering",
          "price_level": "🏷️ Prisnivå",
          "volatility": "💨 Prisvolatilitet",
          "best_price": "💚 Beste prisperiode",
          "peak_price": "🔴 Toppprisperiode",
          "price_trend": "📈 Pristrend",
          "chart_data_export": "📊 Diagramdata-eksportsensor",
          "reset_to_defaults": "🔄 Tilbakestill til standard",
          "finish": "⬅️ Tilbake"
        }
      },
      "general_settings": {
        "title": "⚙️ Generelle innstillinger",
        "description": "**Konfigurer generelle innstillinger for Tibber prisinformasjon og vurderinger.**\n\n---\n\n**Bruker:** {user_login}",
        "data": {
          "extended_descriptions": "Utvidede beskrivelser",
          "average_sensor_display": "Gjennomsnittssensor-visning"
        },
        "data_description": {
          "extended_descriptions": "Styrer om entitetsattributter inkluderer detaljerte forklaringer og brukstips.\n\n• Deaktivert (standard): Bare kort beskrivelse\n• Aktivert: Detaljert forklaring + praktiske brukseksempler\n\nEksempel:\nDeaktivert = 1 attributt\nAktivert = 2 ekstra attributter",
          "average_sensor_display": "Velg hvilket statistisk mål som skal vises i sensortilstanden for gjennomsnittspris-sensorer. Den andre verdien vises som attributt.\n\n• **Median (standard)**: Viser den 'typiske' prisen, motstandsdyktig mot ekstreme topper - best for visning og menneskelig tolkning\n• **Aritmetisk gjennomsnitt**: Viser det sanne matematiske gjennomsnittet inkludert alle priser - best når du trenger eksakte kostnadsberegninger\n\nFor automatiseringer, bruk attributtet `price_mean` eller `price_median` for å få tilgang til begge verdier uavhengig av denne innstillingen."
        },
        "submit": "↩ Lagre & tilbake"
      },
      "display_settings": {
        "title": "💱 Valutavisningsinnstillinger",
        "description": "_{step_progress}_\n\n**Konfigurer hvordan strømpriser vises - i basisvaluta (€, kr) eller underenhet (ct, øre).**\n\n---",
        "data": {
          "currency_display_mode": "Visningsmodus"
        },
        "data_description": {
          "currency_display_mode": "Velg hvordan priser vises:\n\n• **Basisvaluta** (€/kWh, kr/kWh): Desimalverdier (f.eks. 0,25 €/kWh) - forskjeller synlige fra 3.-4. desimalplass\n• **Underenhet** (ct/kWh, øre/kWh): Større verdier (f.eks. 25,00 ct/kWh) - forskjeller allerede synlige fra 1. desimalplass\n\nStandard avhenger av valutaen din:\n• EUR → Underenhet (cent) - tysk/nederlandsk preferanse\n• NOK/SEK/DKK → Basisvaluta (kroner) - skandinavisk preferanse\n• USD/GBP → Basisvaluta\n\n**💡 Tips:** Ved valg av underenhet kan du aktivere den ekstra sensoren \"Nåværende strømpris (Energi-dashboard)\" (deaktivert som standard)."
        },
        "submit": "↩ Lagre & tilbake"
      },
      "current_interval_price_rating": {
        "title": "📊 Prisvurderingsinnstillinger",
        "description": "**Konfigurer terskler og stabilisering for prisvurderingsnivåer (lav/normal/høy) basert på sammenligning med etterfølgende 24-timers gjennomsnitt.**{entity_warning}",
        "data": {
          "price_rating_threshold_low": "Lav-terskel",
          "price_rating_threshold_high": "Høy-terskel",
          "price_rating_hysteresis": "Hysterese",
          "price_rating_gap_tolerance": "Gap-toleranse"
        },
        "data_description": {
          "price_rating_threshold_low": "Prosentverdi for hvor mye gjeldende pris må være under det etterfølgende 24-timers gjennomsnittet for å kvalifisere som 'lav' vurdering. Eksempel: -10 betyr minst 10% under gjennomsnitt. Sensorer med denne vurderingen indikerer gunstige tidsvinduer. Standard: -10%",
          "price_rating_threshold_high": "Prosentverdi for hvor mye gjeldende pris må være over det etterfølgende 24-timers gjennomsnittet for å kvalifisere som 'høy' vurdering. Eksempel: 10 betyr minst 10% over gjennomsnitt. Sensorer med denne vurderingen advarer om dyre tidsvinduer. Standard: 10%",
          "price_rating_hysteresis": "Prosentbånd rundt terskler for å unngå raske tilstandsendringer. Når vurderingen allerede er LAV, må prisen stige over (terskel + hysterese) for å bytte til NORMAL. Tilsvarende krever HØY at prisen faller under (terskel - hysterese) for å forlate tilstanden. Dette gir stabilitet for automatiseringer som reagerer på vurderingsendringer. Sett til 0 for å deaktivere. Standard: 2%",
          "price_rating_gap_tolerance": "Maksimalt antall påfølgende intervaller som kan 'jevnes ut' hvis de avviker fra omkringliggende vurderinger. Små isolerte vurderingsendringer slås sammen med den dominerende nabogruppen. Dette gir stabilitet for automatiseringer ved å forhindre at korte vurderingstopper utløser unødvendige handlinger. Eksempel: 1 betyr at et enkelt 'normal'-intervall omgitt av 'høy'-intervaller korrigeres til 'høy'. Sett til 0 for å deaktivere. Standard: 1"
        },
        "submit": "↩ Lagre & tilbake"
      },
      "best_price": {
        "title": "💚 Beste Prisperiode Innstillinger",
        "description": "**Konfigurer innstillinger for Beste Prisperiode binærsensor. Denne sensoren er aktiv i perioder med de laveste strømprisene.**{entity_warning}{override_warning}\n\n---",
        "sections": {
          "period_settings": {
            "name": "Periodeinnstillinger",
            "description": "Konfigurer periodelengde og prisnivåbegrensninger.",
            "data": {
              "best_price_min_period_length": "Minimum periodelengde",
              "best_price_max_level": "Prisnivåfilter",
              "best_price_max_level_gap_count": "Gaptoleranse"
            },
            "data_description": {
              "best_price_min_period_length": "Minimum varighet for at en periode skal regnes som 'beste pris'. Lengre perioder er mer praktiske for å kjøre apparater som oppvaskmaskiner eller varmepumper. Beste pris-perioder krever minimum 60 minutter (sammenlignet med 30 minutter for topppris-advarsler) fordi de skal gi meningsfulle tidsvinduer for forbruksplanlegging, ikke bare kortvarige muligheter.",
              "best_price_max_level": "Vis kun beste pris-perioder hvis de inneholder intervaller med prisnivåer ≤ valgt verdi. For eksempel: å velge '**Billig**' betyr at perioden må ha minst étt '**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å.",
              "best_price_max_level_gap_count": "Maksimalt antall påfølgende intervaller som kan avvike med nøyaktig étt nivåtrinn fra det nødvendige nivået. For eksempel: med '**Billig**' filter og gapantall 1, aksepteres sekvensen '**Billig**, **Billig**, **Normal**, **Billig**' (**Normal** er étt trinn over **Billig**). Dette forhindrer at perioder blir delt opp av tilfeldige nivåavvik. **Merk:** Gaptoleranse krever perioder ≥90 minutter (6 intervaller) for å oppdage avvik effektivt. Standard: 0 (streng filtrering, ingen toleranse)."
            }
          },
          "flexibility_settings": {
            "name": "Fleksibilitetsinnstillinger",
            "description": "Konfigurer prissammenligningsgrenser og filtrering.",
            "data": {
              "best_price_flex": "Fleksibilitet",
              "best_price_min_distance_from_avg": "Minimumsavstand"
            },
            "data_description": {
              "best_price_flex": "Maksimalt over den daglige minimumsprisen der intervaller fortsatt kvalifiserer som 'beste pris'. Anbefalt: 15-20 med lemping aktivert (standard), eller 25-35 uten lemping. Maksimum: 50 (hard grense for pålitelig periodegjenkjenning).",
              "best_price_min_distance_from_avg": "Sikrer at perioder er betydelig billigere enn daglig gjennomsnitt, ikke bare marginalt under det. Dette filtrerer støy og forhindrer at litt-under-gjennomsnittet perioder markeres som 'beste pris' på dager med flate priser. Høyere verdier = strengere filtrering (bare virkelig billige perioder kvalifiserer). Standard: 5 betyr at perioder må være minst 5% under daglig gjennomsnitt."
            }
          },
          "relaxation_and_target_periods": {
            "name": "Lemping & Målperioder",
            "description": "Konfigurer automatisk filterlemping og målperiodeantall. Aktiver 'Oppnå minimumsantall' for å aktivere lemping.",
            "data": {
              "enable_min_periods_best": "Oppnå minimumsantall",
              "min_periods_best": "Minimumsperioder",
              "relaxation_attempts_best": "Lempingsforsøk"
            },
            "data_description": {
              "enable_min_periods_best": "Når aktivert vil filtre gradvis bli lempet hvis ikke nok perioder blir funnet. Dette forsøker å nå det ønskede minimumsantall perioder, som kan inkludere mindre optimale tidsvinduer som beste pris-perioder.",
              "min_periods_best": "Minimumsantall beste pris-perioder å sikte på per dag. Filtre vil bli lempet steg for steg for å forsøke å oppnå dette antallet. Kun aktiv når 'Oppnå minimumsantall' er aktivert. Standard: 1",
              "relaxation_attempts_best": "Hvor mange fleksnivåer (forsøk) å prøve før man gir opp. Hvert forsøk kjører alle filterkombinasjoner på det nye fleksnivået. Flere forsøk øker sjansen for å finne flere perioder på bekostning av lengre behandlingstid."
            }
          },
          "extension_settings": {
            "name": "Utvidelse av perioderender",
            "description": "Utvid eventuelt oppdagede bestprisperioder ved begge ender for å inkludere tilstøtende svært billige intervaller.",
            "data": {
              "best_price_extend_to_very_cheap": "Utvid til svært billige intervaller",
              "best_price_max_extension_intervals": "Maksimale utvidelsesintervaller",
              "best_price_geometric_flex": "Geometrisk fleksbonus",
              "best_price_segment_forcing": "W-form segment-tvinging",
              "best_price_segment_min_periods": "Perioder per segment"
            },
            "data_description": {
              "best_price_extend_to_very_cheap": "Når aktivert, utvider oppdagede bestprisperioder seg utover for å inkludere tilstøtende intervaller med prisnivået 'Svært billig'. Dette fanger opp ekstremt billige intervaller ved kantene av oppdagede perioder.",
              "best_price_max_extension_intervals": "Maksimalt antall ekstra intervaller per side (venstre og høyre kant). Hvert intervall er 15 minutter. Eksempel: 4 intervaller = opptil 1 times utvidelse per kant. Standard: 4",
              "best_price_geometric_flex": "Ekstra fleksprosent for intervaller som faller innenfor en oppdaget prisdal (V-form). Når et dal-mønster oppdages for dagen, får intervaller innen dalsonen denne ekstra toleransen, slik at periodevarslingssystemet er mer tilbøyelig til å inkludere dem. 0 = deaktivert. Standard: 0",
              "best_price_segment_forcing": "Når aktivert deles dager med W-formet priskurve (to daler adskilt av en sentral topp) ved den sentrale toppen. Periodedetektor kjøres uavhengig for hver dalside for å sikre at hvert dal får det påkrevde antallet perioder.",
              "best_price_segment_min_periods": "Minimum antall bestprisperioder per dalside når W-form segment-tvinging er aktivert. Hver side må uavhengig produsere minst dette antallet perioder. Standard: 1"
            }
          }
        },
        "submit": "↩ Lagre & tilbake"
      },
      "peak_price": {
        "title": "🔴 Toppprisperiode Innstillinger",
        "description": "**Konfigurer innstillinger for Toppprisperiode binærsensor. Denne sensoren er aktiv i perioder med de høyeste strømprisene.**{entity_warning}{override_warning}\n\n---",
        "sections": {
          "period_settings": {
            "name": "Periodeinnstillinger",
            "description": "Konfigurer periodelengde og prisnivåbegrensninger.",
            "data": {
              "peak_price_min_period_length": "Minimum periodelengde",
              "peak_price_min_level": "Prisnivåfilter",
              "peak_price_max_level_gap_count": "Gaptoleranse"
            },
            "data_description": {
              "peak_price_min_period_length": "Minimum varighet for at en periode skal regnes som 'topppris'. Topppris-advarsler er tillatt for kortere perioder (minimum 30 minutter sammenlignet med 60 minutter for beste pris) fordi korte dyre topper er verdt å advare om, selv om de er for korte for forbruksplanlegging.",
              "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 étt '**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å.",
              "peak_price_max_level_gap_count": "Maksimalt antall påfølgende intervaller som kan avvike med nøyaktig étt nivåtrinn fra det nødvendige nivået. For eksempel: med '**Dyr**' filter og gapantall 1, aksepteres sekvensen '**Dyr**, **Dyr**, **Normal**, **Dyr**' (**Normal** er étt trinn under **Dyr**). Dette forhindrer at perioder blir delt opp av tilfeldige nivåavvik. **Merk:** Gaptoleranse krever perioder ≥90 minutter (6 intervaller) for å oppdage avvik effektivt. Standard: 0 (streng filtrering, ingen toleranse)."
            }
          },
          "flexibility_settings": {
            "name": "Fleksibilitetsinnstillinger",
            "description": "Konfigurer prissammenligningskriterier og filtrering.",
            "data": {
              "peak_price_flex": "Fleksibilitet",
              "peak_price_min_distance_from_avg": "Minimumsavstand"
            },
            "data_description": {
              "peak_price_flex": "Maksimalt under den daglige maksimumsprisen der intervaller fortsatt kvalifiserer som 'topppris'. Anbefaling: -15 til -20 med lemping aktivert (standard), eller -25 til -35 uten lemping. Maksimum: -50 (hard grense for pålitelig periodegjenkjenning). Merk: Negative verdier angir avstand under maksimum.",
              "peak_price_min_distance_from_avg": "Sikrer at perioder er betydelig dyrere enn daglig gjennomsnitt, ikke bare marginalt over det. Dette filtrerer støy og forhindrer at litt-over-gjennomsnittet perioder markeres som 'topppris' på dager med flate priser. Høyere verdier = strengere filtrering (bare virkelig dyre perioder kvalifiserer). Standard: 5 betyr at perioder må være minst 5% over daglig gjennomsnitt."
            }
          },
          "relaxation_and_target_periods": {
            "name": "Lemping & målperioder",
            "description": "Konfigurer automatisk filterlempelse og målperioder. Aktiver 'Prøv å oppnå minimum antall perioder' for å aktivere lemping.",
            "data": {
              "enable_min_periods_peak": "Prøv å oppnå minimum antall perioder",
              "min_periods_peak": "Minimum antall perioder",
              "relaxation_attempts_peak": "Antall lempingsforsøk"
            },
            "data_description": {
              "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."
            }
          },
          "extension_settings": {
            "name": "Utvidelse av perioderender",
            "description": "Utvid eventuelt oppdagede topprisperioder ved begge ender for å inkludere tilstøtende svært dyre intervaller.",
            "data": {
              "peak_price_extend_to_very_expensive": "Utvid til svært dyre intervaller",
              "peak_price_max_extension_intervals": "Maksimale utvidelsesintervaller",
              "peak_price_geometric_flex": "Geometrisk fleksbonus",
              "peak_price_segment_forcing": "M-form segment-tvinging",
              "peak_price_segment_min_periods": "Perioder per segment"
            },
            "data_description": {
              "peak_price_extend_to_very_expensive": "Når aktivert, utvider oppdagede topprisperioder seg utover for å inkludere tilstøtende intervaller med prisnivået 'Svært dyrt'. Dette fanger opp ekstremt dyre intervaller ved kantene av oppdagede perioder.",
              "peak_price_max_extension_intervals": "Maksimalt antall ekstra intervaller per side (venstre og høyre kant). Hvert intervall er 15 minutter. Eksempel: 4 intervaller = opptil 1 times utvidelse per kant. Standard: 4",
              "peak_price_geometric_flex": "Ekstra fleksprosent for intervaller som faller innenfor en oppdaget pristopp (Λ-form). Når et topp-mønster oppdages for dagen, får intervaller innen toppsonene denne ekstra toleransen, slik at periodevarslingssystemet er mer tilbøyelig til å inkludere dem. 0 = deaktivert. Standard: 0",
              "peak_price_segment_forcing": "Når aktivert deles dager med M-formet priskurve (to topper adskilt av et sentralt dal) ved det sentrale dalet. Periodedetektor kjøres uavhengig for hver toppside for å sikre at hver topp får det påkrevde antallet perioder.",
              "peak_price_segment_min_periods": "Minimum antall topprisperioder per toppside når M-form segment-tvinging er aktivert. Hver side må uavhengig produsere minst dette antallet perioder. Standard: 1"
            }
          }
        },
        "submit": "↩ Lagre & tilbake"
      },
      "price_trend": {
        "title": "📈 Pristrendterskler",
        "description": "**Konfigurer terskler for pristrendsensorer. Disse sensorene sammenligner nåværende pris med gjennomsnittet av de neste N timene for å bestemme om prisene stiger sterkt, stiger, er stabile, faller eller faller sterkt.**{entity_warning}",
        "data": {
          "price_trend_threshold_rising": "Stigende terskel",
          "price_trend_threshold_strongly_rising": "Sterkt stigende terskel",
          "price_trend_threshold_falling": "Fallende terskel",
          "price_trend_threshold_strongly_falling": "Sterkt fallende terskel",
          "price_trend_change_confirmation": "Trendendringsbekreftelse",
          "price_trend_min_price_change": "Min. prisendring (trend)",
          "price_trend_min_price_change_strongly": "Min. prisendring (sterk trend)"
        },
        "data_description": {
          "price_trend_threshold_rising": "Prosentverdi som gjennomsnittet av de neste N timene må være over den nåværende prisen for å kvalifisere som 'stigende' trend. Eksempel: 3 betyr gjennomsnittet er minst 3% høyere → prisene vil stige. Typiske verdier: 3-10%. Standard: 3%",
          "price_trend_threshold_strongly_rising": "Prosentverdi som gjennomsnittet av de neste N timene må være over den nåværende prisen for å kvalifisere som 'sterkt stigende' trend. Må være høyere enn stigende terskel. Typiske verdier: 6-20%. Standard: 9%",
          "price_trend_threshold_falling": "Prosentverdi (negativ) som gjennomsnittet av de neste N timene må være under den nåværende prisen for å kvalifisere som 'synkende' trend. Eksempel: -3 betyr gjennomsnittet er minst 3% lavere → prisene vil falle. Typiske verdier: -3 til -10%. Standard: -3%",
          "price_trend_threshold_strongly_falling": "Prosentverdi (negativ) som gjennomsnittet av de neste N timene må være under den nåværende prisen for å kvalifisere som 'sterkt synkende' trend. Må være lavere (mer negativ) enn fallende terskel. Typiske verdier: -6 til -20%. Standard: -9%",
          "price_trend_change_confirmation": "Antall påfølgende 15-minutters intervaller som må bekrefte en ny trendretning før en trendendring rapporteres. Høyere verdier betyr mer stabilitet og færre falske endringer, lavere verdier betyr raskere oppdagelse. Område: 2 (30 min) til 6 (90 min). Standard: 3 (45 min)",
          "price_trend_min_price_change": "Minste absolutte prisdifferanse (i ct/øre) som kreves for en 'stigende' eller 'synkende' trend. Forhindrer at minimale prisendringer utløser trender ved lave prisnivåer. Sett til 0 for å deaktivere (ren prosentmodus). Standard: 0,5",
          "price_trend_min_price_change_strongly": "Minste absolutte prisdifferanse (i ct/øre) som kreves for en 'sterkt stigende' eller 'sterkt synkende' trend. Bør være høyere enn det vanlige trendminimum. Sett til 0 for å deaktivere. Standard: 1,5"
        },
        "submit": "↩ Lagre & tilbake"
      },
      "volatility": {
        "title": "💨 Volatilitets-terskler",
        "description": "**Konfigurer 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: &lt;moderat = mer følsom, ≥høy = mindre følsom){entity_warning}",
        "data": {
          "volatility_threshold_moderate": "Moderat terskel",
          "volatility_threshold_high": "Høy terskel",
          "volatility_threshold_very_high": "Veldig høy terskel"
        },
        "data_description": {
          "volatility_threshold_moderate": "Variasjonskoeffisient (VK) der prisene anses som 'moderat volatile'. VK = (standardavvik / gjennomsnitt) × 100%. Eksempel: 15 betyr prissvingninger på ±15% rundt gjennomsnittet. Sensorer viser denne klassifiseringen, trendsensorer blir mer følsomme. Standard: 15%",
          "volatility_threshold_high": "Variasjonskoeffisient (VK) der prisene anses som 'svært volatile'. Eksempel: 30 betyr prissvingninger på ±30% rundt gjennomsnittet. Større prishopp forventes, trendsensorer blir mindre følsomme. Standard: 30%",
          "volatility_threshold_very_high": "Variasjonskoeffisient (VK) der prisene anses som 'veldig svært volatile'. Eksempel: 50 betyr ekstreme prissvingninger på ±50% rundt gjennomsnittet. På slike dager er sterke pristoppsannsynlige. Standard: 50%"
        },
        "submit": "↩ Lagre & tilbake"
      },
      "chart_data_export": {
        "title": "📊 Diagram-dataeksport Sensor",
        "description": "Diagram-dataeksport-sensoren gir prisdata som sensorattributter.\n\n⚠️ **Merk:** Denne sensoren er en legacy-funksjon for kompatibilitet med eldre verktøy.\n\n**Anbefalt for nye oppsett:** Bruk `tibber_prices.get_chartdata` **tjenesten direkte** - den er mer fleksibel, effektiv og den moderne Home Assistant-tilnærmingen.\n\n**Når denne sensoren gir mening:**\n\n✅ Dashboardverktøyet ditt kan **kun** lese attributter (ingen tjenestekall)\n✅ Du trenger statiske data som oppdateres automatisk\n❌ **Ikke for automatiseringer:** Bruk `tibber_prices.get_chartdata` direkte der - mer fleksibel og effektiv!\n\n---\n\n{sensor_status_info}",
        "submit": "↩ Ok & tilbake"
      },
      "reset_to_defaults": {
        "title": "🔄 Tilbakestill til standard",
        "description": "⚠️ **Advarsel:** Dette vil tilbakestille **ALLE** innstillinger til fabrikkstandard.\n\n**Hva vil bli tilbakestilt:**\n• Alle prisvurderingsterskler\n• Alle volatilitetsterskler\n• Alle pristrendterskler\n• Alle innstillinger for beste prisperiode\n• Alle innstillinger for toppprisperiode\n• Visningsinnstillinger\n• Generelle innstillinger\n\n**Hva vil IKKE bli tilbakestilt:**\n• Ditt Tibber API-token\n• Valgt hjem\n• Valuta\n\n**💡 Tips:** Dette er nyttig hvis du vil starte på nytt etter å ha eksperimentert med innstillinger.",
        "data": {
          "confirm_reset": "Ja, tilbakestill alt til standard"
        },
        "submit": "Tilbakestill nå"
      },
      "price_level": {
        "title": "🏷️ Prisnivå-innstillinger",
        "description": "**Konfigurer stabilisering for Tibbers prisnivå-klassifisering (veldig billig/billig/normal/dyr/veldig dyr).**\n\nTibbers API gir et prisnivå-felt for hvert intervall. Denne innstillingen jevner ut korte svingninger for å forhindre ustabilitet i automatiseringer.{entity_warning}",
        "data": {
          "price_level_gap_tolerance": "Gap-toleranse"
        },
        "data_description": {
          "price_level_gap_tolerance": "Maksimalt antall påfølgende intervaller som kan 'jevnes ut' hvis de avviker fra omkringliggende prisnivåer. Små isolerte nivåendringer slås sammen med den dominerende nabogruppen. Eksempel: 1 betyr at et enkelt 'normal'-intervall omgitt av 'billig'-intervaller korrigeres til 'billig'. Sett til 0 for å deaktivere. Standard: 1"
        },
        "submit": "↩ Lagre & tilbake"
      }
    },
    "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.",
      "invalid_flex": "Fleksibilitetsprosent må være mellom -50% og +50%",
      "invalid_best_price_distance": "Avstandsprosent må være mellom -50% og 0% (negativ = under gjennomsnitt)",
      "invalid_peak_price_distance": "Avstandsprosent må være mellom 0% og 50% (positiv = over gjennomsnitt)",
      "invalid_min_periods": "Minimumsantall perioder må være mellom 1 og 10",
      "invalid_period_length": "Periodelengden må være minst 15 minutter (multipler av 15).",
      "invalid_gap_count": "Gaptoleranse må være mellom 0 og 8",
      "invalid_relaxation_attempts": "Lempingsforsøk må være mellom 1 og 12",
      "invalid_price_rating_low": "Lav prisvurderingsgrense må være mellom -50% og -5%",
      "invalid_price_rating_high": "Høy prisvurderingsgrense må være mellom 5% og 50%",
      "invalid_price_rating_thresholds": "Lav grense må være mindre enn høy grense",
      "invalid_volatility_threshold_moderate": "Moderat volatilitetsgrense må være mellom 5% og 25%",
      "invalid_volatility_threshold_high": "Høy volatilitetsgrense må være mellom 20% og 40%",
      "invalid_volatility_threshold_very_high": "Svært høy volatilitetsgrense må være mellom 35% og 80%",
      "invalid_volatility_thresholds": "Grensene må være i stigende rekkefølge: moderat < høy < svært høy",
      "invalid_price_trend_rising": "Stigende trendgrense må være mellom 1% og 50%",
      "invalid_price_trend_falling": "Fallende trendgrense må være mellom -50% og -1%",
      "invalid_price_trend_strongly_rising": "Sterkt stigende trendgrense må være mellom 2% og 100%",
      "invalid_price_trend_strongly_falling": "Sterkt fallende trendgrense må være mellom -100% og -2%",
      "invalid_trend_strongly_rising_less_than_rising": "Sterkt stigende-grense må være høyere enn stigende-grense",
      "invalid_trend_strongly_falling_greater_than_falling": "Sterkt fallende-grense må være lavere (mer negativ) enn fallende-grense"
    },
    "abort": {
      "entry_not_found": "Tibber-konfigurasjonsoppføring ikke funnet.",
      "reset_cancelled": "Tilbakestilling avbrutt. Ingen endringer ble gjort i konfigurasjonen din.",
      "reset_successful": "✅ Alle innstillinger har blitt tilbakestilt til fabrikkstandard. Konfigurasjonen din er nå som en ny installasjon.",
      "finished": "Konfigurasjon fullført."
    }
  },
  "entity": {
    "sensor": {
      "current_interval_price": {
        "name": "Nåværende strømpris"
      },
      "current_interval_price_base": {
        "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_outlook_1h": {
        "name": "Prisutblikk (1t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_outlook_2h": {
        "name": "Prisutblikk (2t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_outlook_3h": {
        "name": "Prisutblikk (3t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_outlook_4h": {
        "name": "Prisutblikk (4t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_outlook_5h": {
        "name": "Prisutblikk (5t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_outlook_6h": {
        "name": "Prisutblikk (6t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_outlook_8h": {
        "name": "Prisutblikk (8t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_outlook_12h": {
        "name": "Prisutblikk (12t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_trajectory_2h": {
        "name": "Prisforløp (2t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_trajectory_3h": {
        "name": "Prisforløp (3t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_trajectory_4h": {
        "name": "Prisforløp (4t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_trajectory_5h": {
        "name": "Prisforløp (5t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_trajectory_6h": {
        "name": "Prisforløp (6t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_trajectory_8h": {
        "name": "Prisforløp (8t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "price_trajectory_12h": {
        "name": "Prisforløp (12t)",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "current_price_trend": {
        "name": "Nåværende pristrend",
        "state": {
          "strongly_rising": "Sterkt stigende",
          "rising": "Stigende",
          "stable": "Stabil",
          "falling": "Fallende",
          "strongly_falling": "Sterkt fallende"
        }
      },
      "next_price_trend_change": {
        "name": "Neste trendendring"
      },
      "next_price_trend_change_in": {
        "name": "Neste trendendring om"
      },
      "daily_rating": {
        "name": "Daglig prisvurdering"
      },
      "monthly_rating": {
        "name": "Månedlig prisvurdering"
      },
      "data_lifecycle_status": {
        "name": "Datalivssyklus-status",
        "state": {
          "cached": "Hurtigbufret",
          "fresh": "Fersk",
          "refreshing": "Oppdaterer",
          "searching_tomorrow": "Søker morgendagens data",
          "turnover_pending": "Midnattskifte venter",
          "error": "Feil"
        }
      },
      "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"
      },
      "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"
        }
      },
      "day_pattern_yesterday": {
        "name": "Prismønster i går",
        "state": {
          "valley": "Dal",
          "peak": "Topp",
          "double_dip": "Dobbel bunn",
          "duck_curve": "Andekurve",
          "flat": "Flat",
          "rising": "Stigende",
          "falling": "Fallende",
          "mixed": "Blandet"
        }
      },
      "day_pattern_today": {
        "name": "Prismønster i dag",
        "state": {
          "valley": "Dal",
          "peak": "Topp",
          "double_dip": "Dobbel bunn",
          "duck_curve": "Andekurve",
          "flat": "Flat",
          "rising": "Stigende",
          "falling": "Fallende",
          "mixed": "Blandet"
        }
      },
      "day_pattern_tomorrow": {
        "name": "Prismønster i morgen",
        "state": {
          "valley": "Dal",
          "peak": "Topp",
          "double_dip": "Dobbel bunn",
          "duck_curve": "Andekurve",
          "flat": "Flat",
          "rising": "Stigende",
          "falling": "Fallende",
          "mixed": "Blandet"
        }
      },
      "current_price_phase": {
        "name": "Gjeldende Prisfase",
        "state": {
          "rising": "Stigende",
          "falling": "Fallende",
          "flat": "Flat"
        }
      },
      "next_price_phase": {
        "name": "Neste Prisfase",
        "state": {
          "rising": "Stigende",
          "falling": "Fallende",
          "flat": "Flat"
        }
      },
      "current_price_phase_end_time": {
        "name": "Current Phase End Time"
      },
      "current_price_phase_remaining_minutes": {
        "name": "Current Phase Remaining"
      },
      "current_price_phase_duration": {
        "name": "Current Phase Duration"
      },
      "current_price_phase_progress": {
        "name": "Current Phase Progress"
      },
      "next_rising_phase_start_time": {
        "name": "Next Rising Phase Start"
      },
      "next_falling_phase_start_time": {
        "name": "Next Falling Phase Start"
      },
      "next_flat_phase_start_time": {
        "name": "Next Flat Phase Start"
      },
      "next_rising_phase_in_minutes": {
        "name": "Time to Next Rising Phase"
      },
      "next_falling_phase_in_minutes": {
        "name": "Time to Next Falling Phase"
      },
      "next_flat_phase_in_minutes": {
        "name": "Time to Next Flat Phase"
      },
      "chart_data_export": {
        "name": "Diagramdataeksport",
        "state": {
          "pending": "Venter",
          "ready": "Klar",
          "error": "Feil"
        }
      },
      "chart_metadata": {
        "name": "Diagrammetadata",
        "state": {
          "pending": "Venter",
          "ready": "Klar",
          "error": "Feil"
        }
      },
      "current_interval_price_rank_today": {
        "name": "Aktuell prisrang (i dag)"
      },
      "current_interval_price_rank_tomorrow": {
        "name": "Aktuell prisrang (i morgen)"
      },
      "current_interval_price_rank_today_tomorrow": {
        "name": "Aktuell prisrang (i dag+i morgen)"
      },
      "next_interval_price_rank_today": {
        "name": "Neste prisrang (i dag)"
      },
      "next_interval_price_rank_today_tomorrow": {
        "name": "Neste prisrang (i dag+i morgen)"
      },
      "previous_interval_price_rank_today": {
        "name": "Forrige prisrang (i dag)"
      },
      "previous_interval_price_rank_today_tomorrow": {
        "name": "Forrige prisrang (i dag+i morgen)"
      },
      "current_hour_price_rank_today": {
        "name": "⌀ Timesprisrang nå (i dag)"
      },
      "current_hour_price_rank_today_tomorrow": {
        "name": "⌀ Timesprisrang nå (i dag+i morgen)"
      },
      "next_hour_price_rank_today": {
        "name": "⌀ Timesprisrang neste (i dag)"
      },
      "next_hour_price_rank_today_tomorrow": {
        "name": "⌀ Timesprisrang neste (i dag+i morgen)"
      }
    },
    "binary_sensor": {
      "peak_price_period": {
        "name": "Toppris-periode"
      },
      "best_price_period": {
        "name": "Lavpris-periode"
      },
      "in_rising_price_phase": {
        "name": "In Rising Price Phase"
      },
      "in_falling_price_phase": {
        "name": "In Falling Price Phase"
      },
      "in_flat_price_phase": {
        "name": "In Flat Price Phase"
      },
      "connection": {
        "name": "Tibber API-tilkobling"
      },
      "tomorrow_data_available": {
        "name": "Morgendagens data tilgjengelig"
      },
      "has_ventilation_system": {
        "name": "Har ventilasjonsanlegg"
      },
      "realtime_consumption_enabled": {
        "name": "Sanntidsforbruk aktivert"
      }
    },
    "number": {
      "best_price_flex_override": {
        "name": "Beste pris: Fleksibilitet"
      },
      "best_price_min_distance_override": {
        "name": "Beste pris: Minimumsavstand"
      },
      "best_price_min_period_length_override": {
        "name": "Beste pris: Minimum periodelengde"
      },
      "best_price_min_periods_override": {
        "name": "Beste pris: Minimum perioder"
      },
      "best_price_relaxation_attempts_override": {
        "name": "Beste pris: Lemping forsøk"
      },
      "best_price_gap_count_override": {
        "name": "Beste pris: Gaptoleranse"
      },
      "peak_price_flex_override": {
        "name": "Topppris: Fleksibilitet"
      },
      "peak_price_min_distance_override": {
        "name": "Topppris: Minimumsavstand"
      },
      "peak_price_min_period_length_override": {
        "name": "Topppris: Minimum periodelengde"
      },
      "peak_price_min_periods_override": {
        "name": "Topppris: Minimum perioder"
      },
      "peak_price_relaxation_attempts_override": {
        "name": "Topppris: Lemping forsøk"
      },
      "peak_price_gap_count_override": {
        "name": "Topppris: Gaptoleranse"
      }
    },
    "switch": {
      "best_price_enable_relaxation_override": {
        "name": "Beste pris: Oppnå minimumsantall"
      },
      "peak_price_enable_relaxation_override": {
        "name": "Topppris: Oppnå minimumsantall"
      }
    }
  },
  "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."
    },
    "tomorrow_data_missing": {
      "title": "Prisdata for i morgen mangler for {home_name}",
      "description": "Strømprisdata for i morgen er fortsatt utilgjengelig etter {warning_hour}:00. Dette er uvanlig, da Tibber vanligvis publiserer morgendagens priser på ettermiddagen (rundt 13:00-14:00 CET).\n\nMulige årsaker:\n- Tibber har ikke publisert morgendagens priser ennå\n- Midlertidige API-problemer\n- Strømleverandøren din har ikke sendt inn priser til Tibber\n\nDette problemet vil løse seg automatisk når morgendagens data blir tilgjengelig. Hvis dette vedvarer etter 20:00, vennligst sjekk Tibber-appen eller kontakt Tibber-support."
    },
    "rate_limit_exceeded": {
      "title": "API-hastighetsbegrensning overskredet for {home_name}",
      "description": "Tibber-APIet har hastighetsbegrenset denne integrasjonen etter {error_count} påfølgende feil. Dette betyr at forespørsler blir gjort for hyppig.\n\nIntegrasjonen vil automatisk prøve på nytt med økende forsinkelser. Dette problemet vil løse seg når hastighetsbegrensningen utløper.\n\nHvis dette vedvarer i flere timer, vurder:\n- Å sjekke om flere Home Assistant-instanser bruker samme API-token\n- Å verifisere at ingen andre applikasjoner bruker Tibber-API-tokenet ditt mye\n- Å redusere oppdateringsfrekvensen hvis du har tilpasset den"
    },
    "home_not_found": {
      "title": "Hjemmet {home_name} ble ikke funnet i Tibber-kontoen",
      "description": "Hjemmet konfigurert i denne integrasjonen (oppførings-ID: {entry_id}) er ikke lenger tilgjengelig i Tibber-kontoen din. Dette skjer vanligvis når:\n- Hjemmet ble slettet fra Tibber-kontoen din\n- Hjemmet ble flyttet til en annen Tibber-konto\n- Tilgang til dette hjemmet ble tilbakekalt\n\nVennligst fjern denne integrasjonsoppføringen og legg den til på nytt hvis hjemmet fortsatt skal overvåkes. For å fjerne denne oppføringen, gå til Innstillinger → Enheter og tjenester → Tibber Prices og slett {home_name}-konfigurasjonen."
    },
    "entity_migration": {
      "title": "Tibber Prices: Handling kreves etter oppdatering ({home_name})",
      "description": "Denne oppdateringen inkluderer endringer som ble brukt automatisk.\n\n**Omdøpte entiteter ({count})**\n\nFølgende entity-nøkler ble omdøpt. Dine eksisterende entity-ID-er og automatiseringer forblir intakte:\n\n{entity_list}\n\n**Endrede varighetssensorverdier**\n\nAlle varighetssensorer (gjenværende tid, starter om, periodevarighet, trendendrings-nedtelling) rapporterer nå tilstandsverdien i **minutter** i stedet for timer. Visningsenheten i dashboards forblir timer som standard.\n\nHvis du har automatiseringer med numeriske sammenligninger på disse sensorene, oppdater tersklene:\n- Gammelt: `state < 0.25` (15 minutter som timer)\n- Nytt: `state < 15` (15 minutter)\n\nAvvis dette varselet etter å ha gjennomgått automatiseringene dine."
    },
    "currency_display_mode_changed": {
      "title": "Valutavisningsenhet endret for {home_name}",
      "description": "Du endret valutavisningsmodusen for **{home_name}**. Alle prissensorverdier og -attributter bruker nå den nye enheten (f.eks. 25,34 øre → 0,2534 kr eller omvendt).\n\nHome Assistants Recorder viser separat en **„Enheten har endret seg“**-dialog for berørte sensorer — dette kan ta noen minutter eller til neste statistikkjøring (advarsler i loggen dukker opp tidligere). Når den vises, velg **Slett alle gamle statistikkdata** for en ren start. Ikke velg „Oppdater enheten uten konvertering“: det beholder de gamle tallene med ny enhet uten å justere verdiene, og gjør de historiske dataene faktisk feil.\n\n**Gjennomgå manuelt:**\n\n1. **Automatiseringer & maler:** Oppdater alle automatiseringer og malsensorer som bruker numeriske pristerskler.\n2. **Dashboard-kort:** Oppdater kort med hardkodede terskelverdier eller enhetsetiketter.\n\nAvvis denne meldingen når du har gjennomgått automatiseringer, dashboards og statistikk."
    }
  },
  "exceptions": {
    "no_entries_found": {
      "message": "Ingen Tibber Prices integrasjonsoppføringer funnet. Vennligst sett opp integrasjonen først."
    },
    "multiple_entries_no_entry_id": {
      "message": "Flere Tibber Prices oppføringer funnet. Vennligst angi 'entry_id' for å velge hvilken oppføring som skal brukes."
    },
    "invalid_entry_id": {
      "message": "Ugyldig eller utilgjengelig konfigurasjonsoppføring. Vennligst sjekk oppførings-ID-en og sørg for at integrasjonen er lastet."
    },
    "missing_home_id": {
      "message": "Hjemme-ID ikke funnet i konfigurasjonsoppføringen. Vennligst rekonfigurer integrasjonen."
    },
    "user_data_not_available": {
      "message": "Brukerdata er ikke tilgjengelig ennå. Vennligst vent til den første dataoppdateringen er fullført."
    },
    "timezone_not_found": {
      "message": "Kunne ikke bestemme hjemmets tidssone. Vennligst sjekk hjemmekonfigurasjonen i Tibber-kontoen din."
    },
    "end_before_start": {
      "message": "Sluttidspunktet ({search_end}) må være etter starttidspunktet ({search_start}). Sjekk tid-parameterne og eventuelle day-offsets."
    },
    "price_fetch_failed": {
      "message": "Unable to fetch price data for the requested search range."
    },
    "invalid_search_scope": {
      "message": "Ugyldig søkeområde. Gyldige verdier er: today, tomorrow, remaining_today, next_24h, next_48h."
    },
    "scope_conflicts_with_range": {
      "message": "search_scope kan ikke kombineres med eksplisitte områdeparametre: {params}. Bruk enten search_scope ELLER eksplisitte start-/sluttparametre."
    },
    "day_offset_requires_time": {
      "message": "{offset_param} krever at {time_param} er satt. Dagsforskyvning endrer kun datoen til en eksplisitt tidsparameter."
    },
    "min_level_exceeds_max": {
      "message": "min_price_level {min_level} er høyere enn max_price_level {max_level}. Minimumsnivået må være lik eller lavere enn maksimumsnivået."
    },
    "power_profile_length_mismatch": {
      "message": "power_profile har {profile_length} oppføringer, men varigheten krever {interval_count} intervaller ({duration_minutes} minutter). power_profile må ha nøyaktig én oppføring per 15-minutters intervall."
    },
    "level_and_rating_filter_conflict": {
      "message": "level_filter og rating_level_filter kan ikke brukes sammen. Bruk kun én filtertype per forespørsel."
    },
    "insert_nulls_requires_filter": {
      "message": "insert_nulls-modus {mode} krever en level_filter, rating_level_filter eller period_filter for å definere segmenter. Uten filter, bruk insert_nulls: none."
    },
    "connect_segments_requires_segments_mode": {
      "message": "connect_segments krever at insert_nulls er satt til 'segments'. Sett insert_nulls: segments for å bruke segmentforbindelse."
    },
    "array_fields_requires_array_format": {
      "message": "array_fields kan kun brukes med output_format: array_of_arrays. Endre utdataformatet eller fjern array_fields."
    },
    "invalid_array_fields": {
      "message": "Verdien {template} for array_fields er ugyldig. Feltnavn må omsluttes av krøllparenteser, f.eks. '{start_time}, {price_per_kwh}, {level}'."
    },
    "min_segment_exceeds_duration": {
      "message": "min_segment_duration ({min_segment_minutes} min) kan ikke overstige total varighet ({duration_minutes} min). Reduser min_segment_duration eller øk duration."
    },
    "start_time_conflict": {
      "message": "search_start og search_start_time angir begge starttidspunktet — bruk bare én. Velg search_start for eksakt dato/klokkeslett eller search_start_time for et tidspunkt på dagen."
    },
    "end_time_conflict": {
      "message": "search_end og search_end_time angir begge sluttidspunktet — bruk bare én. Velg search_end for eksakt dato/klokkeslett eller search_end_time for et tidspunkt på dagen."
    },
    "insert_nulls_all_with_period_filter": {
      "message": "insert_nulls: all støttes ikke med period_filter. Bruk insert_nulls: segments i stedet — dette legger til tomrom mellom separate perioder i diagrammet."
    },
    "connect_segments_with_period_filter": {
      "message": "connect_segments kan ikke brukes med period_filter. Perioder er allerede sammenhengende — connect_segments har bare effekt med level_filter eller rating_level_filter."
    },
    "duplicate_task_names": {
      "message": "Oppgavenavn må være unike. Duplikat: {names}. Gi hver oppgave et unikt navn slik at resultatene kan matches til riktig oppgave."
    },
    "tasks_exceed_search_window": {
      "message": "Total oppgavetid inkludert pauser ({total_minutes} min) overstiger søkevinduet ({window_minutes} min). Reduser oppgavevarighetene, senk gap_minutes, eller utvid søkeperioden."
    },
    "must_finish_by_conflicts_with_end": {
      "message": "must_finish_by kan ikke kombineres med sluttgrenseparametere ({params}). Bruk must_finish_by alene — det setter søkeslutt til fristen automatisk."
    },
    "invalid_entity_reference": {
      "message": "'{reference}' er ikke en gyldig entitetsreferanse. Bruk formatet 'domain.entity_id' eller 'domain.entity_id@attributt'."
    },
    "entity_not_found": {
      "message": "Entitet '{entity_id}' ble ikke funnet. Kontroller at entiteten finnes og er tilgjengelig."
    },
    "entity_attribute_not_found": {
      "message": "Entitet '{entity_id}' har ikke attributtet '{attribute}'."
    },
    "entity_state_unavailable": {
      "message": "Entitet '{entity_id}' har tilstanden '{state}'. Entiteten må ha en gyldig tilstandsverdi."
    },
    "entity_value_conversion_failed": {
      "message": "Kan ikke konvertere verdi '{raw_value}' fra '{entity_id}' ({attribute}) til {expected_type}. Kontroller at entiteten gir en kompatibel verdi."
    },
    "capacity_required_for_percent": {
      "message": "battery_capacity_kwh is required when current or target SoC is provided as a percentage."
    },
    "ambiguous_soc_input": {
      "message": "The field {field} was provided both as percent and as kWh. Use only one representation."
    },
    "already_at_target": {
      "message": "Current state of charge is already at or above the target. No charging schedule is needed."
    },
    "target_exceeds_capacity": {
      "message": "Target SoC ({target_soc_kwh} kWh) exceeds battery capacity ({capacity_kwh} kWh)."
    },
    "energy_unreachable": {
      "message": "The requested charging target cannot be reached within the available search window and charging constraints."
    },
    "missing_current_soc": {
      "message": "Provide either current_soc_percent or current_soc_kwh."
    },
    "missing_target_soc": {
      "message": "Provide either target_soc_percent or target_soc_kwh."
    },
    "missing_deadline_for_must_reach": {
      "message": "Provide must_reach_by or must_reach_by_event when using must_reach_soc_percent or must_reach_soc_kwh."
    },
    "missing_must_reach_soc": {
      "message": "Provide must_reach_soc_percent or must_reach_soc_kwh when using a must_reach deadline."
    },
    "invalid_must_reach_soc": {
      "message": "The minimum state of charge by deadline must be between current and target state of charge."
    },
    "power_strategy_conflict": {
      "message": "Use either min_charge_power_w or charge_power_steps_w, not both at the same time."
    },
    "grid_limit_too_low": {
      "message": "grid_import_limit_w is lower than the minimum required charging power."
    },
    "deadline_conflict": {
      "message": "Use either must_reach_by or must_reach_by_event, not both at the same time."
    },
    "deadline_event_not_available": {
      "message": "The selected deadline event is not available in the current coordinator data."
    },
    "deadline_outside_search_range": {
      "message": "The resolved deadline must be inside the selected search range."
    }
  },
  "services": {
    "get_price": {
      "name": "Hent prisdata",
      "description": "Hent prisdata for et spesifikt tidsrom med automatisk ruting. Utviklings- og testtjeneste for price_info_for_range API-funksjonen. Bruker automatisk PRICE_INFO, PRICE_INFO_RANGE eller begge basert på tidsromgrensen.",
      "fields": {
        "entry_id": {
          "name": "Oppførings-ID",
          "description": "Konfigurasjonsoppførings-IDen for Tibber-integrasjonen."
        },
        "start_time": {
          "name": "Starttid",
          "description": "Start av tidsrommet (inklusiv, tidssonetilpasset)."
        },
        "end_time": {
          "name": "Sluttid",
          "description": "Slutt av tidsrommet (eksklusiv, tidssonetilpasset)."
        }
      }
    },
    "get_apexcharts_yaml": {
      "name": "Hent ApexCharts-kort YAML",
      "description": "⚠️ VIKTIG: Denne tjenesten genererer en GRUNNLEGGENDE EKSEMPEL-konfigurasjon for ApexCharts-kort som et utgangspunkt. Det er IKKE en komplett løsning for alle ApexCharts-funksjoner. Denne integrasjonen er primært en DATALEVERANDØR. Den genererte YAML-en demonstrerer hvordan du bruker `get_chartdata`-tjenesten for å hente prisdata. På grunn av den segmenterte naturen til våre data (forskjellige tidsperioder per serie) og bruken av Home Assistants service-API i stedet for entitetsattributter, er mange avanserte ApexCharts-funksjoner (som in_header, visse transformasjoner) ikke kompatible eller krever manuell tilpasning. Du er velkommen til å tilpasse den genererte YAML for dine spesifikke behov, men vær oppmerksom på at omfattende ApexCharts-konfigurasjonsstøtte er utenfor rammen av denne integrasjonen. Bidrag fra fellesskapet med forbedrede konfigurasjoner er alltid velkomne - hvis du finner en bedre oppsett som fungerer, vennligst del det slik at alle kan dra nytte av det! For direkte datatilgang for å bygge dine egne diagrammer, bruk `get_chartdata`-tjenesten i stedet.",
      "fields": {
        "entry_id": {
          "name": "Oppførings-ID",
          "description": "Konfigureringsoppførings-IDen for Tibber-integrasjonen."
        },
        "day": {
          "name": "Dag",
          "description": "Hvilken dag som skal visualiseres (standard: Rullerende vindu). Faste dagalternativer (I går/I dag/I morgen) viser 24t-spenn uten ekstra avhengigheter. Dynamiske alternativer krever config-template-card: Rullerende vindu lager et fast 48t-vindu som automatisk skifter mellom i går+i dag og i dag+i morgen basert på datatilgjengelighet. Rullerende vindu (Auto-Zoom) oppfører seg likt, men zoomer i tillegg automatisk inn (2t tilbakeblikk + gjenværende tid til midnatt, graph_span reduseres hvert 15. minutt)."
        },
        "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)."
        },
        "highlight_best_price": {
          "name": "Fremhev beste prisperioder",
          "description": "Legg til et halvgjennomsiktig grønt overlegg for å fremheve de beste prisperiodene i diagrammet. Dette gjør det enkelt å visuelt identifisere de optimale tidene for energiforbruk."
        },
        "highlight_peak_price": {
          "name": "Fremhev høyeste prisperioder",
          "description": "Legg til et halvgjennomsiktig rødt overlegg for å fremheve de høyeste prisperiodene i diagrammet. Dette gjør det enkelt å visuelt identifisere tidene når energi er dyrest."
        },
        "resolution": {
          "name": "Oppløsning",
          "description": "Tidsoppløsning for diagramdata. 'interval' (standard): Opprinnelige 15-minutters intervaller (96 punkter per dag). 'hourly': Aggregerte timeverdier med et rullende 60-minutters vindu (24 punkter per dag) for et ryddigere og mindre rotete diagram."
        }
      }
    },
    "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.",
      "sections": {
        "general": {
          "name": "Generelt",
          "description": "Basisalternativer for henting av diagramdata."
        },
        "selection": {
          "name": "Valg",
          "description": "Velg hvilke data som skal inkluderes i utdataene."
        },
        "filters": {
          "name": "Filtre",
          "description": "Filtrer data basert på prisnivåer, prisvurderinger eller spesielle perioder."
        },
        "transformation": {
          "name": "Transformer data",
          "description": "Transformer datautdataene for bedre diagramkompatibilitet."
        },
        "format": {
          "name": "Format",
          "description": "Tilpass utdataformatet."
        },
        "arrays_of_arrays": {
          "name": "Avanserte utdatainnstillinger: Array av arrays",
          "description": "Innstillinger for utdataformat ved bruk av array av arrays."
        },
        "arrays_of_objects": {
          "name": "Avanserte utdatainnstillinger: Array av objekter",
          "description": "Innstillinger for utdataformat ved bruk av array av objekter."
        }
      },
      "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 et rullerende 2-dagers vindu: i dag+i morgen (når morgendagens data er tilgjengelig) eller i går+i dag (når morgendagens data ikke er tilgjengelig ennå). Dette gir kontinuerlig diagramvisning uten hull."
        },
        "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",
          "description": "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)."
        },
        "subunit_currency": {
          "name": "Underenhet valuta",
          "description": "Returner priser i underenhet valutaenheter (øre for NOK/SEK, cent for EUR) i stedet for basisvalutaenheter. 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 basisvaluta, 2 for underenhet valuta)."
        },
        "include_level": {
          "name": "Inkluder prisnivå",
          "description": "Inkluder Tibber-prisnivåfeltet (veldig billig/billig/normal/dyr/veldig dyr) i hvert datapunkt."
        },
        "include_rating_level": {
          "name": "Inkluder prisvurdering",
          "description": "Inkluder det beregnede prisvurderingsfeltet (lav/normal/høy) basert på dine konfigurerte terskler i hvert datapunkt."
        },
        "include_average": {
          "name": "Inkluder gjennomsnitt",
          "description": "Inkluder daglig gjennomsnittspris i hvert datapunkt for sammenligning."
        },
        "include_energy": {
          "name": "Inkluder energipris",
          "description": "Inkluder rå energi-/spotpris (ekskludert skatter og avgifter) i hvert datapunkt. Dette er 'energy'-feltet fra Tibber-APIet, nyttig for innmatings-/nettomålingsberegninger."
        },
        "include_tax": {
          "name": "Inkluder skatt",
          "description": "Inkluder skatteandelen av prisen i hvert datapunkt. Dette er 'tax'-feltet fra Tibber-APIet, som representerer avgifter, skatter og nettleie."
        },
        "level_filter": {
          "name": "Prisnivåfilter",
          "description": "Filtrer intervaller for å bare inkludere spesifikke Tibber-prisnivåer (veldig billig/billig/normal/dyr/veldig dyr). Hvis ikke angitt, inkluderes alle nivåer."
        },
        "rating_level_filter": {
          "name": "Prisvurderingsfilter",
          "description": "Filtrer intervaller for å inkludere bare spesifikke prisvurderinger (lav/normal/høy). 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)."
        },
        "connect_segments": {
          "name": "Koble segmenter",
          "description": "[KUN MED 'Sett inn NULL-verdier'] Når aktivert, legges tilkoblingspunkter til ved segmentgrenser for å visuelt koble ulike prisnivå-segmenter i trinnlinjediagrammer. Når prisen går NED, legges et punkt med lavere pris til på slutten av gjeldende segment. Når prisen går OPP, legges et holdepunkt til før hullet. Dette skaper jevne visuelle overganger mellom segmenter i stedet for brå hull."
        },
        "add_trailing_null": {
          "name": "Legg til avsluttende null-punkt",
          "description": "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",
          "description": "Egendefinert navn for starttid-feltet i utdata. Standard er 'start_time' hvis ikke angitt."
        },
        "end_time_field": {
          "name": "Sluttid-feltnavn",
          "description": "Egendefinert navn for sluttid-feltet i utdata. Standard er 'end_time' hvis ikke angitt. Brukes kun med period_filter."
        },
        "price_field": {
          "name": "Prisfelt-navn",
          "description": "Tilpasset navn for prisfeltet i utdata. Standard er 'price_per_kwh'."
        },
        "level_field": {
          "name": "Prisnivåfelt-navn",
          "description": "Tilpasset navn for prisnivåfeltet i utdata. Standard er 'level'. Brukes bare når include_level er aktivert."
        },
        "rating_level_field": {
          "name": "Prisvurderingsfelt-navn",
          "description": "Tilpasset navn for prisvurderingsfeltet i utdata. Standard er 'rating_level'. Brukes bare når include_rating_level er aktivert."
        },
        "average_field": {
          "name": "Gjennomsnittsfelt-navn",
          "description": "Tilpasset navn for gjennomsnittsfeltet i utdata. Standard er 'average'. Brukes bare når include_average er aktivert."
        },
        "energy_field": {
          "name": "Energiprisfelt-navn",
          "description": "Tilpasset navn for energiprisfeltet i utdata. Standard er 'energy_price'. Brukes bare når include_energy er aktivert."
        },
        "tax_field": {
          "name": "Skattefelt-navn",
          "description": "Tilpasset navn for skattefeltet i utdata. Standard er 'tax'. Brukes bare når include_tax er aktivert."
        },
        "metadata": {
          "name": "Metadata",
          "description": "Kontroller metadata-inkludering i svaret. 'include' (standard): Returnerer både diagramdata og metadata med prisstatistikk, valutainformasjon, Y-akse forslag og tidsperiode. 'only': Returnerer bare metadata uten å behandle diagramdata (raskt, nyttig for dynamisk Y-akse konfigurasjon). 'none': Returnerer bare diagramdata uten metadata."
        },
        "data_key": {
          "name": "Datanøkkel",
          "description": "Tilpasset navn for datanøkkelen på toppnivå i svaret. Standard er 'data' hvis ikke angitt."
        }
      }
    },
    "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."
        }
      }
    },
    "find_cheapest_block": {
      "name": "Finn billigste blokk",
      "description": "Finner det billigste sammenhengende tidsvinduet med en gitt varighet. Designet for apparatplanlegging: oppvaskmaskin, vaskemaskin, tørketrommel osv. Returnerer det billigste vinduet med start-/sluttider og prisstatistikk.",
      "sections": {
        "search_range": {
          "name": "Egendefinert søkeområde",
          "description": "Definer presise start- og sluttider for søket. Overstyrer søkeomfanget når satt."
        },
        "time_alternatives": {
          "name": "Avanserte tidsalternativer",
          "description": "Alternative måter å definere søkeområdet med klokkeslett og minuttforskyvninger."
        },
        "price_filter": {
          "name": "Prisnivåfilter",
          "description": "Begrens søket til intervaller innenfor det angitte Tibber-prisnivåområdet."
        },
        "search_tuning": {
          "name": "Finjustering av søkealgoritme",
          "description": "Finjuster hvordan søket håndterer uteliggere, minimumskvalitetsgrenser og reserveoppførsel."
        },
        "cost_estimation": {
          "name": "Kostnadsberegning",
          "description": "Oppgi en effektprofil for å få nøyaktige energikostnadsestimater basert på faktisk forbruk."
        },
        "output": {
          "name": "Utdataalternativer",
          "description": "Kontroller utdataformat: sammenligningsdetaljer og valutaenhet."
        }
      },
      "fields": {
        "entry_id": {
          "name": "Oppførings-ID",
          "description": "Konfig-oppførings-ID for Tibber-integrasjonen."
        },
        "duration": {
          "name": "Varighet",
          "description": "Lengden på det ønskede sammenhengende vinduet. Rundes automatisk opp til nærmeste kvarter. Maksimum: 12 timer."
        },
        "search_start": {
          "name": "Søkestart",
          "description": "Start av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre startalternativer. Standard er nå hvis ikke angitt."
        },
        "search_end": {
          "name": "Søkeslutt",
          "description": "Slutt av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre sluttalternativer. Standard er slutten av i morgen hvis ikke angitt."
        },
        "must_finish_by": {
          "name": "Må være ferdig innen",
          "description": "Frist: apparatet må være ferdig innen dette tidspunktet. Søkeområdet slutter ved denne fristen — tjenesten finner det billigste vinduet som fullføres før det. Kan ikke kombineres med Søkeslutt, Søkeslutt-tid eller Søkeslutt-offset."
        },
        "search_start_time": {
          "name": "Søkestart-klokkeslett",
          "description": "Alternativ: Start søk fra dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkestart (dato/tid) er satt."
        },
        "search_start_day_offset": {
          "name": "Søkestart dagsforskyvning",
          "description": "Dagsforskyvning for Søkestart-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkestart-klokkeslett."
        },
        "search_end_time": {
          "name": "Søkeslutt-klokkeslett",
          "description": "Alternativ: Søk til dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkeslutt (dato/tid) er satt."
        },
        "search_end_day_offset": {
          "name": "Søkeslutt dagsforskyvning",
          "description": "Dagsforskyvning for Søkeslutt-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkeslutt-klokkeslett."
        },
        "search_start_offset_minutes": {
          "name": "Søkestart-forskyvning (minutter)",
          "description": "Alternativ: Start søk dette antall minutter fra nå. Positiv = fremtid (60 = om 1 time), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkestart eller Søkestart-klokkeslett er satt."
        },
        "search_end_offset_minutes": {
          "name": "Søkeslutt-forskyvning (minutter)",
          "description": "Alternativ: Stopp søk dette antall minutter fra nå. Positiv = fremtid (480 = om 8 timer), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkeslutt eller Søkeslutt-klokkeslett er satt."
        },
        "include_current_interval": {
          "name": "Inkluder gjeldende intervall",
          "description": "Inkluder det pågående 15-minutters intervallet i søket. Når aktivert (standard), starter søket ved begynnelsen av gjeldende intervall slik at det kan være en del av resultatet."
        },
        "use_base_unit": {
          "name": "Bruk basisvaluta",
          "description": "Tving priser i basisvaluta (EUR, NOK) i stedet for konfigurert visningsenhet (ct, øre). Nyttig for beregninger."
        },
        "search_scope": {
          "name": "Soekeomfang (snarvei)",
          "description": "Snarvei for vanlige soekeomraader. Overstyrer alle andre tidsalternativer. today/tomorrow = hele kalenderdagen, remaining_today = naa til midnatt, next_24h/next_48h = rullende vindu fra naa."
        },
        "max_price_level": {
          "name": "Maksimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller under dette Tibber-prisnivaeet. very_cheap = mest restriktivt, very_expensive = ingen begrensning."
        },
        "min_price_level": {
          "name": "Minimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller over dette Tibber-prisnivaeet. Nyttig for find_most_expensive for aa fokusere paa virkelig dyre intervaller."
        },
        "include_comparison_details": {
          "name": "Inkluder sammenligningsdetaljer",
          "description": "Berik price_comparison-resultatet med tilleggsfelter: comparison_price_min, comparison_price_max og (kun blokk) comparison_window_end."
        },
        "power_profile": {
          "name": "Effektprofil",
          "description": "Variabelt effektforbruk i watt per 15-minuttersintervall. Naa satt, gjenspeiler estimated_total_cost faktisk forbruk i stedet for en fast 1 kW-last."
        },
        "smooth_outliers": {
          "name": "Glatt utliggere",
          "description": "Glatt prisutliggere før søk. Utligger-intervaller erstattes midlertidig med gjennomsnittet av naboene, slik at en enkelt topp eller bunn ikke dominerer resultatet. Svaret viser alltid de originale (uglattede) prisene. Standard: aktivert."
        },
        "min_distance_from_avg": {
          "name": "Min. avstand fra gjennomsnitt",
          "description": "Krev at resultatet avviker fra søkeområdets gjennomsnitt med minst denne prosenten. For billigst: resultatet må være minst X% under gjennomsnittet. For dyrest: minst X% over. Hvis betingelsen ikke oppfylles, returneres intet resultat (reason: selection_above/below_distance_threshold). La stå tom for å deaktivere."
        },
        "allow_relaxation": {
          "name": "Tillat slakking",
          "description": "Slakk filtre gradvis for å garantere et resultat. Faser: 1) Reduser/fjern avstandsterskel 2) Utvid prisnivåfiltre 3) Reduser varighet. Standard: aktivert."
        },
        "duration_flexibility_minutes": {
          "name": "Varighetsfleksibilitet",
          "description": "Maks minutter varigheten kan forkortes under slakking (0–120, steg 15). La stå tom for automatisk beregning (~20% av varigheten, maks 60 min)."
        }
      }
    },
    "find_most_expensive_block": {
      "name": "Finn dyreste blokk",
      "description": "Finner det dyreste sammenhengende tidsvinduet med en gitt varighet. Nyttig for å identifisere topprisperioder som bør unngås. Returnerer det dyreste vinduet med start-/sluttider og prisstatistikk.",
      "sections": {
        "search_range": {
          "name": "Egendefinert søkeområde",
          "description": "Definer presise start- og sluttider for søket. Overstyrer søkeomfanget når satt."
        },
        "time_alternatives": {
          "name": "Avanserte tidsalternativer",
          "description": "Alternative måter å definere søkeområdet med klokkeslett og minuttforskyvninger."
        },
        "price_filter": {
          "name": "Prisnivåfilter",
          "description": "Begrens søket til intervaller innenfor det angitte Tibber-prisnivåområdet."
        },
        "search_tuning": {
          "name": "Finjustering av søkealgoritme",
          "description": "Finjuster hvordan søket håndterer uteliggere, minimumskvalitetsgrenser og reserveoppførsel."
        },
        "cost_estimation": {
          "name": "Kostnadsberegning",
          "description": "Oppgi en effektprofil for å få nøyaktige energikostnadsestimater basert på faktisk forbruk."
        },
        "output": {
          "name": "Utdataalternativer",
          "description": "Kontroller utdataformat: sammenligningsdetaljer og valutaenhet."
        }
      },
      "fields": {
        "entry_id": {
          "name": "Oppførings-ID",
          "description": "Konfig-oppførings-ID for Tibber-integrasjonen."
        },
        "duration": {
          "name": "Varighet",
          "description": "Lengden på det ønskede sammenhengende vinduet. Rundes automatisk opp til nærmeste kvarter. Maksimum: 12 timer."
        },
        "search_start": {
          "name": "Søkestart",
          "description": "Start av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre startalternativer. Standard er nå hvis ikke angitt."
        },
        "search_end": {
          "name": "Søkeslutt",
          "description": "Slutt av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre sluttalternativer. Standard er slutten av i morgen hvis ikke angitt."
        },
        "must_finish_by": {
          "name": "Må være ferdig innen",
          "description": "Frist: apparatet må være ferdig innen dette tidspunktet. Søkeområdet slutter ved denne fristen — tjenesten finner det dyreste vinduet som fullføres før den. Kan ikke kombineres med Søkeslutt, Søkeslutt-klokkeslett, Søkeslutt-forskyvning eller Søkeomfang."
        },
        "search_start_time": {
          "name": "Søkestart-klokkeslett",
          "description": "Alternativ: Start søk fra dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkestart (dato/tid) er satt."
        },
        "search_start_day_offset": {
          "name": "Søkestart dagsforskyvning",
          "description": "Dagsforskyvning for Søkestart-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkestart-klokkeslett."
        },
        "search_end_time": {
          "name": "Søkeslutt-klokkeslett",
          "description": "Alternativ: Søk til dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkeslutt (dato/tid) er satt."
        },
        "search_end_day_offset": {
          "name": "Søkeslutt dagsforskyvning",
          "description": "Dagsforskyvning for Søkeslutt-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkeslutt-klokkeslett."
        },
        "search_start_offset_minutes": {
          "name": "Søkestart-forskyvning (minutter)",
          "description": "Alternativ: Start søk dette antall minutter fra nå. Positiv = fremtid (60 = om 1 time), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkestart eller Søkestart-klokkeslett er satt."
        },
        "search_end_offset_minutes": {
          "name": "Søkeslutt-forskyvning (minutter)",
          "description": "Alternativ: Stopp søk dette antall minutter fra nå. Positiv = fremtid (480 = om 8 timer), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkeslutt eller Søkeslutt-klokkeslett er satt."
        },
        "include_current_interval": {
          "name": "Inkluder gjeldende intervall",
          "description": "Inkluder det pågående 15-minutters intervallet i søket. Når aktivert (standard), starter søket ved begynnelsen av gjeldende intervall slik at det kan være en del av resultatet."
        },
        "use_base_unit": {
          "name": "Bruk basisvaluta",
          "description": "Tving priser i basisvaluta (EUR, NOK) i stedet for konfigurert visningsenhet (ct, øre). Nyttig for beregninger."
        },
        "search_scope": {
          "name": "Soekeomfang (snarvei)",
          "description": "Snarvei for vanlige soekeomraader. Overstyrer alle andre tidsalternativer. today/tomorrow = hele kalenderdagen, remaining_today = naa til midnatt, next_24h/next_48h = rullende vindu fra naa."
        },
        "max_price_level": {
          "name": "Maksimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller under dette Tibber-prisnivaeet. very_cheap = mest restriktivt, very_expensive = ingen begrensning."
        },
        "min_price_level": {
          "name": "Minimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller over dette Tibber-prisnivaeet. Nyttig for find_most_expensive for aa fokusere paa virkelig dyre intervaller."
        },
        "include_comparison_details": {
          "name": "Inkluder sammenligningsdetaljer",
          "description": "Berik price_comparison-resultatet med tilleggsfelter: comparison_price_min, comparison_price_max og (kun blokk) comparison_window_end."
        },
        "power_profile": {
          "name": "Effektprofil",
          "description": "Variabelt effektforbruk i watt per 15-minuttersintervall. Naa satt, gjenspeiler estimated_total_cost faktisk forbruk i stedet for en fast 1 kW-last."
        },
        "smooth_outliers": {
          "name": "Glatt utliggere",
          "description": "Glatt prisutliggere før søk. Utligger-intervaller erstattes midlertidig med gjennomsnittet av naboene, slik at en enkelt topp eller bunn ikke dominerer resultatet. Svaret viser alltid de originale (uglattede) prisene. Standard: aktivert."
        },
        "min_distance_from_avg": {
          "name": "Min. avstand fra gjennomsnitt",
          "description": "Krev at resultatet avviker fra søkeområdets gjennomsnitt med minst denne prosenten. For billigst: resultatet må være minst X% under gjennomsnittet. For dyrest: minst X% over. Hvis betingelsen ikke oppfylles, returneres intet resultat (reason: selection_above/below_distance_threshold). La stå tom for å deaktivere."
        },
        "allow_relaxation": {
          "name": "Tillat slakking",
          "description": "Slakk filtre gradvis for å garantere et resultat. Faser: 1) Reduser/fjern avstandsterskel 2) Utvid prisnivåfiltre 3) Reduser varighet. Standard: aktivert."
        },
        "duration_flexibility_minutes": {
          "name": "Varighetsfleksibilitet",
          "description": "Maks minutter varigheten kan forkortes under slakking (0–120, steg 15). La stå tom for automatisk beregning (~20% av varigheten, maks 60 min)."
        }
      }
    },
    "find_cheapest_hours": {
      "name": "Finn billigste timer",
      "description": "Finner de billigste intervallene for en gitt total varighet, ikke nødvendigvis sammenhengende. Designet for fleksible laster: batterilading, elbil, varmtvannsbereder. Returnerer en tidsplan med intervaller gruppert i sammenhengende segmenter.",
      "sections": {
        "search_range": {
          "name": "Egendefinert søkeområde",
          "description": "Definer presise start- og sluttider for søket. Overstyrer søkeomfanget når satt."
        },
        "time_alternatives": {
          "name": "Avanserte tidsalternativer",
          "description": "Alternative måter å definere søkeområdet med klokkeslett og minuttforskyvninger."
        },
        "price_filter": {
          "name": "Prisnivåfilter",
          "description": "Begrens søket til intervaller innenfor det angitte Tibber-prisnivåområdet."
        },
        "search_tuning": {
          "name": "Finjustering av søkealgoritme",
          "description": "Finjuster hvordan søket håndterer uteliggere, minimumskvalitetsgrenser og reserveoppførsel."
        },
        "cost_estimation": {
          "name": "Kostnadsberegning",
          "description": "Oppgi en effektprofil for å få nøyaktige energikostnadsestimater basert på faktisk forbruk."
        },
        "output": {
          "name": "Utdataalternativer",
          "description": "Kontroller utdataformat: sammenligningsdetaljer og valutaenhet."
        }
      },
      "fields": {
        "entry_id": {
          "name": "Oppførings-ID",
          "description": "Konfig-oppførings-ID for Tibber-integrasjonen."
        },
        "duration": {
          "name": "Varighet",
          "description": "Nødvendig billig total tid. Rundes automatisk opp til nærmeste kvarter. Maksimum: 24 timer."
        },
        "search_start": {
          "name": "Søkestart",
          "description": "Start av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre startalternativer. Standard er nå hvis ikke angitt."
        },
        "search_end": {
          "name": "Søkeslutt",
          "description": "Slutt av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre sluttalternativer. Standard er slutten av i morgen hvis ikke angitt."
        },
        "must_finish_by": {
          "name": "Må være ferdig innen",
          "description": "Frist: apparatet må være ferdig innen dette tidspunktet. Søkeområdet slutter ved denne fristen — tjenesten finner det billigste vinduet som fullføres før det. Kan ikke kombineres med Søkeslutt, Søkeslutt-tid eller Søkeslutt-offset."
        },
        "search_start_time": {
          "name": "Søkestart-klokkeslett",
          "description": "Alternativ: Start søk fra dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkestart (dato/tid) er satt."
        },
        "search_start_day_offset": {
          "name": "Søkestart dagsforskyvning",
          "description": "Dagsforskyvning for Søkestart-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkestart-klokkeslett."
        },
        "search_end_time": {
          "name": "Søkeslutt-klokkeslett",
          "description": "Alternativ: Søk til dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkeslutt (dato/tid) er satt."
        },
        "search_end_day_offset": {
          "name": "Søkeslutt dagsforskyvning",
          "description": "Dagsforskyvning for Søkeslutt-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkeslutt-klokkeslett."
        },
        "search_start_offset_minutes": {
          "name": "Søkestart-forskyvning (minutter)",
          "description": "Alternativ: Start søk dette antall minutter fra nå. Positiv = fremtid (60 = om 1 time), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkestart eller Søkestart-klokkeslett er satt."
        },
        "search_end_offset_minutes": {
          "name": "Søkeslutt-forskyvning (minutter)",
          "description": "Alternativ: Stopp søk dette antall minutter fra nå. Positiv = fremtid (480 = om 8 timer), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkeslutt eller Søkeslutt-klokkeslett er satt."
        },
        "include_current_interval": {
          "name": "Inkluder gjeldende intervall",
          "description": "Inkluder det pågående 15-minutters intervallet i søket. Når aktivert (standard), starter søket ved begynnelsen av gjeldende intervall slik at det kan være en del av resultatet."
        },
        "min_segment_duration": {
          "name": "Minimum segmentvarighet",
          "description": "Minimum sammenhengende kjøretid. Forhindrer rask av/på-sykling for enheter med minimum kjøretid. Rundes automatisk opp til nærmeste kvarter. Standard: 15 minutter. Maksimum: 4 timer."
        },
        "use_base_unit": {
          "name": "Bruk basisvaluta",
          "description": "Tving priser i basisvaluta (EUR, NOK) i stedet for konfigurert visningsenhet (ct, øre). Nyttig for beregninger."
        },
        "search_scope": {
          "name": "Soekeomfang (snarvei)",
          "description": "Snarvei for vanlige soekeomraader. Overstyrer alle andre tidsalternativer. today/tomorrow = hele kalenderdagen, remaining_today = naa til midnatt, next_24h/next_48h = rullende vindu fra naa."
        },
        "max_price_level": {
          "name": "Maksimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller under dette Tibber-prisnivaeet. very_cheap = mest restriktivt, very_expensive = ingen begrensning."
        },
        "min_price_level": {
          "name": "Minimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller over dette Tibber-prisnivaeet. Nyttig for find_most_expensive for aa fokusere paa virkelig dyre intervaller."
        },
        "include_comparison_details": {
          "name": "Inkluder sammenligningsdetaljer",
          "description": "Berik price_comparison-resultatet med tilleggsfelter: comparison_price_min, comparison_price_max og (kun blokk) comparison_window_end."
        },
        "power_profile": {
          "name": "Effektprofil",
          "description": "Variabelt effektforbruk i watt per 15-minuttersintervall. Naa satt, gjenspeiler estimated_total_cost faktisk forbruk i stedet for en fast 1 kW-last."
        },
        "smooth_outliers": {
          "name": "Glatt utliggere",
          "description": "Glatt prisutliggere før søk. Utligger-intervaller erstattes midlertidig med gjennomsnittet av naboene, slik at en enkelt topp eller bunn ikke dominerer resultatet. Svaret viser alltid de originale (uglattede) prisene. Standard: aktivert."
        },
        "min_distance_from_avg": {
          "name": "Min. avstand fra gjennomsnitt",
          "description": "Krev at resultatet avviker fra søkeområdets gjennomsnitt med minst denne prosenten. For billigst: resultatet må være minst X% under gjennomsnittet. For dyrest: minst X% over. Hvis betingelsen ikke oppfylles, returneres intet resultat (reason: selection_above/below_distance_threshold). La stå tom for å deaktivere."
        },
        "allow_relaxation": {
          "name": "Tillat slakking",
          "description": "Slakk filtre gradvis for å garantere et resultat. Faser: 1) Reduser/fjern avstandsterskel 2) Utvid prisnivåfiltre 3) Reduser varighet. Standard: aktivert."
        },
        "duration_flexibility_minutes": {
          "name": "Varighetsfleksibilitet",
          "description": "Maks minutter varigheten kan forkortes under slakking (0–120, steg 15). La stå tom for automatisk beregning (~20% av varigheten, maks 60 min)."
        }
      }
    },
    "find_most_expensive_hours": {
      "name": "Finn dyreste timer",
      "description": "Finner de dyreste intervallene for en gitt total varighet, ikke nødvendigvis sammenhengende. Nyttig for å identifisere topprisperioder som bør unngås. Returnerer en tidsplan med intervaller gruppert i sammenhengende segmenter.",
      "sections": {
        "search_range": {
          "name": "Egendefinert søkeområde",
          "description": "Definer presise start- og sluttider for søket. Overstyrer søkeomfanget når satt."
        },
        "time_alternatives": {
          "name": "Avanserte tidsalternativer",
          "description": "Alternative måter å definere søkeområdet med klokkeslett og minuttforskyvninger."
        },
        "price_filter": {
          "name": "Prisnivåfilter",
          "description": "Begrens søket til intervaller innenfor det angitte Tibber-prisnivåområdet."
        },
        "search_tuning": {
          "name": "Finjustering av søkealgoritme",
          "description": "Finjuster hvordan søket håndterer uteliggere, minimumskvalitetsgrenser og reserveoppførsel."
        },
        "cost_estimation": {
          "name": "Kostnadsberegning",
          "description": "Oppgi en effektprofil for å få nøyaktige energikostnadsestimater basert på faktisk forbruk."
        },
        "output": {
          "name": "Utdataalternativer",
          "description": "Kontroller utdataformat: sammenligningsdetaljer og valutaenhet."
        }
      },
      "fields": {
        "entry_id": {
          "name": "Oppførings-ID",
          "description": "Konfig-oppførings-ID for Tibber-integrasjonen."
        },
        "duration": {
          "name": "Varighet",
          "description": "Dyr total tid som skal finnes. Rundes automatisk opp til nærmeste kvarter. Maksimum: 24 timer."
        },
        "search_start": {
          "name": "Søkestart",
          "description": "Start av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre startalternativer. Standard er nå hvis ikke angitt."
        },
        "search_end": {
          "name": "Søkeslutt",
          "description": "Slutt av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre sluttalternativer. Standard er slutten av i morgen hvis ikke angitt."
        },
        "must_finish_by": {
          "name": "Må være ferdig innen",
          "description": "Frist: apparatet må være ferdig innen dette tidspunktet. Søkeområdet slutter ved denne fristen — tjenesten finner det dyreste vinduet som fullføres før den. Kan ikke kombineres med Søkeslutt, Søkeslutt-klokkeslett, Søkeslutt-forskyvning eller Søkeomfang."
        },
        "search_start_time": {
          "name": "Søkestart-klokkeslett",
          "description": "Alternativ: Start søk fra dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkestart (dato/tid) er satt."
        },
        "search_start_day_offset": {
          "name": "Søkestart dagsforskyvning",
          "description": "Dagsforskyvning for Søkestart-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkestart-klokkeslett."
        },
        "search_end_time": {
          "name": "Søkeslutt-klokkeslett",
          "description": "Alternativ: Søk til dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkeslutt (dato/tid) er satt."
        },
        "search_end_day_offset": {
          "name": "Søkeslutt dagsforskyvning",
          "description": "Dagsforskyvning for Søkeslutt-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkeslutt-klokkeslett."
        },
        "search_start_offset_minutes": {
          "name": "Søkestart-forskyvning (minutter)",
          "description": "Alternativ: Start søk dette antall minutter fra nå. Positiv = fremtid (60 = om 1 time), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkestart eller Søkestart-klokkeslett er satt."
        },
        "search_end_offset_minutes": {
          "name": "Søkeslutt-forskyvning (minutter)",
          "description": "Alternativ: Stopp søk dette antall minutter fra nå. Positiv = fremtid (480 = om 8 timer), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkeslutt eller Søkeslutt-klokkeslett er satt."
        },
        "include_current_interval": {
          "name": "Inkluder gjeldende intervall",
          "description": "Inkluder det pågående 15-minutters intervallet i søket. Når aktivert (standard), starter søket ved begynnelsen av gjeldende intervall slik at det kan være en del av resultatet."
        },
        "min_segment_duration": {
          "name": "Minimum segmentvarighet",
          "description": "Minimum sammenhengende kjøretid. Forhindrer rask av/på-sykling for enheter med minimum kjøretid. Rundes automatisk opp til nærmeste kvarter. Standard: 15 minutter. Maksimum: 4 timer."
        },
        "use_base_unit": {
          "name": "Bruk basisvaluta",
          "description": "Tving priser i basisvaluta (EUR, NOK) i stedet for konfigurert visningsenhet (ct, øre). Nyttig for beregninger."
        },
        "search_scope": {
          "name": "Soekeomfang (snarvei)",
          "description": "Snarvei for vanlige soekeomraader. Overstyrer alle andre tidsalternativer. today/tomorrow = hele kalenderdagen, remaining_today = naa til midnatt, next_24h/next_48h = rullende vindu fra naa."
        },
        "max_price_level": {
          "name": "Maksimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller under dette Tibber-prisnivaeet. very_cheap = mest restriktivt, very_expensive = ingen begrensning."
        },
        "min_price_level": {
          "name": "Minimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller over dette Tibber-prisnivaeet. Nyttig for find_most_expensive for aa fokusere paa virkelig dyre intervaller."
        },
        "include_comparison_details": {
          "name": "Inkluder sammenligningsdetaljer",
          "description": "Berik price_comparison-resultatet med tilleggsfelter: comparison_price_min, comparison_price_max og (kun blokk) comparison_window_end."
        },
        "power_profile": {
          "name": "Effektprofil",
          "description": "Variabelt effektforbruk i watt per 15-minuttersintervall. Naa satt, gjenspeiler estimated_total_cost faktisk forbruk i stedet for en fast 1 kW-last."
        },
        "smooth_outliers": {
          "name": "Glatt utliggere",
          "description": "Glatt prisutliggere før søk. Utligger-intervaller erstattes midlertidig med gjennomsnittet av naboene, slik at en enkelt topp eller bunn ikke dominerer resultatet. Svaret viser alltid de originale (uglattede) prisene. Standard: aktivert."
        },
        "min_distance_from_avg": {
          "name": "Min. avstand fra gjennomsnitt",
          "description": "Krev at resultatet avviker fra søkeområdets gjennomsnitt med minst denne prosenten. For billigst: resultatet må være minst X% under gjennomsnittet. For dyrest: minst X% over. Hvis betingelsen ikke oppfylles, returneres intet resultat (reason: selection_above/below_distance_threshold). La stå tom for å deaktivere."
        },
        "allow_relaxation": {
          "name": "Tillat slakking",
          "description": "Slakk filtre gradvis for å garantere et resultat. Faser: 1) Reduser/fjern avstandsterskel 2) Utvid prisnivåfiltre 3) Reduser varighet. Standard: aktivert."
        },
        "duration_flexibility_minutes": {
          "name": "Varighetsfleksibilitet",
          "description": "Maks minutter varigheten kan forkortes under slakking (0–120, steg 15). La stå tom for automatisk beregning (~20% av varigheten, maks 60 min)."
        }
      }
    },
    "find_cheapest_schedule": {
      "name": "Finn billigste tidsplan",
      "description": "Planlegger flere apparater optimalt uten tidsoverlapp. Hver oppgave tildeles det billigste tilgjengelige sammenhengende tidsvinduet.",
      "sections": {
        "search_range": {
          "name": "Egendefinert søkeområde",
          "description": "Definer presise start- og sluttider for søket. Overstyrer søkeomfanget når satt."
        },
        "time_alternatives": {
          "name": "Avanserte tidsalternativer",
          "description": "Alternative måter å definere søkeområdet med klokkeslett og minuttforskyvninger."
        },
        "price_filter": {
          "name": "Prisnivåfilter",
          "description": "Begrens søket til intervaller innenfor det angitte Tibber-prisnivåområdet."
        },
        "search_tuning": {
          "name": "Finjustering av søkealgoritme",
          "description": "Finjuster hvordan søket håndterer uteliggere, minimumskvalitetsgrenser og reserveoppførsel."
        },
        "output": {
          "name": "Utdataalternativer",
          "description": "Kontroller utdataformat: sammenligningsdetaljer og valutaenhet."
        }
      },
      "fields": {
        "entry_id": {
          "name": "Oppførings-ID",
          "description": "Konfig-oppførings-ID for Tibber-integrasjonen."
        },
        "tasks": {
          "name": "Oppgaver",
          "description": "Liste over oppgaver som skal planlegges. Hver oppgave trenger name (tekst) og duration (hh:mm:ss). Eventuelt power_profile (watt per 15-min-intervall). Maks 4 oppgaver."
        },
        "gap_minutes": {
          "name": "Pause mellom oppgaver (minutter)",
          "description": "Minimum pause i minutter mellom paafoeglende planlagte oppgaver. Avrundes opp til 15 minutter. Standard: 0 (ingen pause)."
        },
        "sequential": {
          "name": "Sekvensiell rekkefølge",
          "description": "Planlegg oppgaver i rekkefølgen de står i oppgavelisten. Hver oppgave starter etter at den forrige er ferdig (pluss pause). Bruk dette for avhengige apparater som vaskemaskin → tørketrommel. Standard: deaktivert (oppgaver sorteres etter varighet for optimal fordeling)."
        },
        "search_scope": {
          "name": "Soekeomfang (snarvei)",
          "description": "Snarvei for vanlige soekeomraader. Overstyrer alle andre tidsalternativer. today/tomorrow = hele kalenderdagen, remaining_today = naa til midnatt, next_24h/next_48h = rullende vindu fra naa."
        },
        "search_start": {
          "name": "Søkestart",
          "description": "Start av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre startalternativer. Standard er nå hvis ikke angitt."
        },
        "search_end": {
          "name": "Søkeslutt",
          "description": "Slutt av søkeområdet som eksakt dato og tid. Høyeste prioritet — overstyrer alle andre sluttalternativer. Standard er slutten av i morgen hvis ikke angitt."
        },
        "must_finish_by": {
          "name": "Må være ferdig innen",
          "description": "Frist: apparatet må være ferdig innen dette tidspunktet. Søkeområdet slutter ved denne fristen — tjenesten finner det billigste vinduet som fullføres før det. Kan ikke kombineres med Søkeslutt, Søkeslutt-tid eller Søkeslutt-offset."
        },
        "search_start_time": {
          "name": "Søkestart-klokkeslett",
          "description": "Alternativ: Start søk fra dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkestart (dato/tid) er satt."
        },
        "search_start_day_offset": {
          "name": "Søkestart dagsforskyvning",
          "description": "Dagsforskyvning for Søkestart-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkestart-klokkeslett."
        },
        "search_end_time": {
          "name": "Søkeslutt-klokkeslett",
          "description": "Alternativ: Søk til dette klokkeslettet. Kombiner med dagsforskyvning. Ignoreres hvis Søkeslutt (dato/tid) er satt."
        },
        "search_end_day_offset": {
          "name": "Søkeslutt dagsforskyvning",
          "description": "Dagsforskyvning for Søkeslutt-klokkeslett. -7 til 2: -1 = i går, 0 = i dag, 1 = i morgen. Negative verdier søker i fortiden. Brukes kun med Søkeslutt-klokkeslett."
        },
        "search_start_offset_minutes": {
          "name": "Søkestart-forskyvning (minutter)",
          "description": "Alternativ: Start søk dette antall minutter fra nå. Positiv = fremtid (60 = om 1 time), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkestart eller Søkestart-klokkeslett er satt."
        },
        "search_end_offset_minutes": {
          "name": "Søkeslutt-forskyvning (minutter)",
          "description": "Alternativ: Stopp søk dette antall minutter fra nå. Positiv = fremtid (480 = om 8 timer), negativ = fortid (-60 = 1 time siden). Ignoreres hvis Søkeslutt eller Søkeslutt-klokkeslett er satt."
        },
        "max_price_level": {
          "name": "Maksimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller under dette Tibber-prisnivaeet. very_cheap = mest restriktivt, very_expensive = ingen begrensning."
        },
        "min_price_level": {
          "name": "Minimalt prisnivaae",
          "description": "Ta bare med intervaller paa eller over dette Tibber-prisnivaeet. Nyttig for find_most_expensive for aa fokusere paa virkelig dyre intervaller."
        },
        "include_comparison_details": {
          "name": "Inkluder sammenligningsdetaljer",
          "description": "Legger til ekstra price_comparison-detaljer per oppgave (comparison_price_min, comparison_price_max, comparison_window_end) for aa sammenligne valgt vindu med motsatt ekstremvindu med samme varighet."
        },
        "use_base_unit": {
          "name": "Bruk basisvaluta",
          "description": "Tving priser i basisvaluta (EUR, NOK) i stedet for konfigurert visningsenhet (ct, øre). Nyttig for beregninger."
        },
        "smooth_outliers": {
          "name": "Glatt utliggere",
          "description": "Glatt prisutliggere før søk. Utligger-intervaller erstattes midlertidig med gjennomsnittet av naboene, slik at en enkelt topp eller bunn ikke dominerer resultatet. Svaret viser alltid de originale (uglattede) prisene. Standard: aktivert."
        },
        "allow_relaxation": {
          "name": "Tillat slakking",
          "description": "Slakk filtre gradvis for å garantere et resultat. Faser: 1) Reduser/fjern avstandsterskel 2) Utvid prisnivåfiltre 3) Reduser varighet. Standard: aktivert."
        },
        "duration_flexibility_minutes": {
          "name": "Varighetsfleksibilitet",
          "description": "Maks minutter varigheten kan forkortes under slakking (0–120, steg 15). La stå tom for automatisk beregning (~20% av varigheten, maks 60 min)."
        }
      }
    },
    "plan_charging": {
      "name": "Plan Charging",
      "description": "Creates a lowest-cost charging schedule from battery parameters instead of a fixed duration. Supports fixed, continuous, or stepped charging power, optional deadline-aware minimum SoC planning, and economic filtering for later discharge use cases. Returns a per-interval charging plan with power, energy, SoC progression, segment grouping, total cost, and profitability details. If no schedule is found, the response includes a stable reason code in the reason field (for example: already_at_target, no_data_in_range, no_intervals_matching_level_filter, no_intervals_after_economic_filter, energy_unreachable, energy_unreachable_by_deadline, selection_above_distance_threshold).",
      "sections": {
        "battery": {
          "name": "Battery Parameters",
          "description": "Describe the battery: usable capacity, current and target SoC, and charging efficiency. You can provide SoC in percent (requires capacity) or directly in kWh."
        },
        "charging": {
          "name": "Charging Strategy",
          "description": "Configure variable-power charging behavior, grid limits, and minimum run-time constraints."
        },
        "deadline": {
          "name": "Deadline Planning",
          "description": "Require a minimum state of charge by a specific moment (for example before a peak period). Set both the Minimum SoC by Deadline and when it must be reached — either as an absolute time (Must Reach By) or from a known event (Deadline Event)."
        },
        "search_range": {
          "name": "Custom Search Range",
          "description": "Define precise start and end times for the search. Overrides Search Scope when set."
        },
        "time_alternatives": {
          "name": "Advanced Time Options",
          "description": "Alternative ways to define the search range using time-of-day and minute offsets."
        },
        "price_filter": {
          "name": "Price Level Filter",
          "description": "Restrict search to intervals within the specified Tibber price level range."
        },
        "search_tuning": {
          "name": "Search Algorithm Tuning",
          "description": "Fine-tune how the search handles outliers, minimum quality thresholds, and fallback behavior."
        },
        "economics": {
          "name": "Economic Filters",
          "description": "Filter charging intervals by maximum cost or expected later discharge value."
        },
        "output": {
          "name": "Output Options",
          "description": "Control output format: comparison details and currency unit."
        }
      },
      "fields": {
        "entry_id": {
          "name": "Entry ID",
          "description": "The config entry ID for the Tibber integration."
        },
        "max_charge_power_w": {
          "name": "Maximum Charge Power",
          "description": "Maximum charging power in watts. This defines the upper bound for fixed, continuous, or stepped charging schedules."
        },
        "battery_capacity_kwh": {
          "name": "Battery Capacity",
          "description": "Usable battery capacity in kWh. Required when current or target SoC is provided as a percentage."
        },
        "current_soc_percent": {
          "name": "Current SoC (%)",
          "description": "Current battery state of charge in percent. Cannot be combined with Current SoC (kWh)."
        },
        "current_soc_kwh": {
          "name": "Current SoC (kWh)",
          "description": "Current battery state of charge in kWh. Cannot be combined with Current SoC (%)."
        },
        "target_soc_percent": {
          "name": "Target SoC (%)",
          "description": "Desired battery state of charge in percent. Cannot be combined with Target SoC (kWh)."
        },
        "target_soc_kwh": {
          "name": "Target SoC (kWh)",
          "description": "Desired battery state of charge in kWh. Cannot be combined with Target SoC (%)."
        },
        "charging_efficiency": {
          "name": "Charging Efficiency",
          "description": "Fraction of grid energy that is stored in the battery. Example: 0.92 means 8% charging losses."
        },
        "search_scope": {
          "name": "Search Scope",
          "description": "Shorthand for common search ranges. Overrides all other time range options. today / tomorrow = full calendar day, remaining_today = now until midnight, next_24h / next_48h = rolling window from now."
        },
        "include_current_interval": {
          "name": "Include Current Interval",
          "description": "Include the currently running 15-minute interval in the search. When enabled, charging may begin in the current interval if it is part of the cheapest result."
        },
        "search_start": {
          "name": "Search Start",
          "description": "Start of the search range as exact date and time. Highest priority — overrides all other start options. Defaults to now if not specified."
        },
        "search_end": {
          "name": "Search End",
          "description": "End of the search range as exact date and time. Highest priority — overrides all other end options. Defaults to end of tomorrow if not specified."
        },
        "must_finish_by": {
          "name": "Must Finish By",
          "description": "Deadline: charging must be finished by this time. The search range ends at this deadline — the service finds the cheapest intervals that complete before it. Cannot be combined with Search End, Search End Time, or Search End Offset."
        },
        "search_start_time": {
          "name": "Search Start Time",
          "description": "Alternative: start searching at this time of day. Combine with day offset. Ignored if Search Start (datetime) is set."
        },
        "search_start_day_offset": {
          "name": "Search Start Day Offset",
          "description": "Day offset for Search Start Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search Start Time."
        },
        "search_end_time": {
          "name": "Search End Time",
          "description": "Alternative: stop searching at this time of day. Combine with day offset. Ignored if Search End (datetime) is set."
        },
        "search_end_day_offset": {
          "name": "Search End Day Offset",
          "description": "Day offset for Search End Time. -7 to 2: -1 = yesterday, 0 = today, 1 = tomorrow. Only used with Search End Time."
        },
        "search_start_offset_minutes": {
          "name": "Search Start Offset (minutes)",
          "description": "Alternative: start searching this many minutes from now. Positive = future, negative = past. Ignored if Search Start or Search Start Time is set."
        },
        "search_end_offset_minutes": {
          "name": "Search End Offset (minutes)",
          "description": "Alternative: stop searching this many minutes from now. Positive = future, negative = past. Ignored if Search End or Search End Time is set."
        },
        "max_price_level": {
          "name": "Maximum Price Level",
          "description": "Only consider intervals at or below this Tibber price level. very_cheap = most restrictive, very_expensive = no restriction."
        },
        "min_price_level": {
          "name": "Minimum Price Level",
          "description": "Only consider intervals at or above this Tibber price level. Useful to exclude unrealistically cheap negative-price-only windows from mixed searches."
        },
        "include_comparison_details": {
          "name": "Include Comparison Details",
          "description": "Enrich the price_comparison result with additional fields: comparison_price_min and comparison_price_max."
        },
        "use_base_unit": {
          "name": "Use Base Currency Unit",
          "description": "Force prices in base currency (EUR, NOK) instead of the configured display unit (ct, øre). Useful for calculations."
        },
        "smooth_outliers": {
          "name": "Smooth Outliers",
          "description": "Smooth price outliers before searching. Outlier intervals are temporarily replaced by the average of their neighbors, so a single spike or dip does not dominate the result. The response always shows the original (unsmoothed) prices. Default: enabled."
        },
        "min_distance_from_avg": {
          "name": "Min. Distance from Average",
          "description": "Require the selected charging intervals to be at least this percentage below the average price of the full search range. Leave empty to disable."
        },
        "allow_relaxation": {
          "name": "Allow relaxation",
          "description": "Progressively relax filters to guarantee a result when possible. Phases: 1) Reduce/remove distance threshold 2) Expand level filters 3) Reduce duration. Default: enabled."
        },
        "duration_flexibility_minutes": {
          "name": "Duration flexibility",
          "description": "Maximum minutes the automatically calculated charging duration may be shortened during relaxation (0–120, step 15). Leave empty for automatic calculation."
        },
        "must_reach_soc_percent": {
          "name": "Minimum SoC by Deadline (%)",
          "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (kWh)."
        },
        "must_reach_soc_kwh": {
          "name": "Minimum SoC by Deadline (kWh)",
          "description": "Minimum battery state of charge that must be reached by the deadline. Cannot be combined with Minimum SoC by Deadline (%)."
        },
        "min_charge_power_w": {
          "name": "Minimum Charge Power",
          "description": "Enable continuous charging mode. The planner may reduce the last interval down to this minimum power instead of always using the maximum."
        },
        "charge_power_steps_w": {
          "name": "Charge Power Steps",
          "description": "Enable stepped charging mode. Provide the allowed power steps in watts as a list, for example [1380, 4140, 11000]. The planner picks the smallest step that still covers the remaining energy in the final interval. Mutually exclusive with Minimum Charge Power."
        },
        "grid_import_limit_w": {
          "name": "Grid Import Limit",
          "description": "Upper limit for charging power drawn from the grid in watts. Useful when the charger must share available power with other loads."
        },
        "must_reach_by": {
          "name": "Must Reach By",
          "description": "Absolute deadline for must_reach_soc_*. The planner first guarantees the minimum SoC before this moment, then continues with the remaining target if possible."
        },
        "must_reach_by_event": {
          "name": "Deadline Event",
          "description": "Alternative deadline derived from coordinator data. Use this instead of Must Reach By to plan around midnight, the next peak period, or the next best-price period end."
        },
        "discharging_efficiency": {
          "name": "Discharging Efficiency",
          "description": "Fraction of stored battery energy that is still usable when later discharged. Used for profitability calculations."
        },
        "expected_discharge_price": {
          "name": "Expected Discharge Price",
          "description": "Expected value of each discharged kWh. Intervals above the break-even price can be filtered when Reserve For Discharge is enabled."
        },
        "reserve_for_discharge": {
          "name": "Reserve For Discharge",
          "description": "Keep only intervals that are economically sensible for a later discharge based on expected discharge price and round-trip efficiency."
        },
        "max_cost_per_kwh": {
          "name": "Maximum Charge Price",
          "description": "Discard candidate intervals above this price per kWh before scheduling. Uses the selected price unit."
        },
        "min_charge_duration_minutes": {
          "name": "Minimum Charge Duration",
          "description": "Merge short isolated intervals into longer charging blocks where possible. Useful for chargers that should avoid very short runs."
        },
        "max_cycles_per_day": {
          "name": "Maximum Charge Cycles Per Day",
          "description": "Limit how many separate charging segments may be used per day. The planner keeps the cheapest segments within this limit."
        }
      }
    }
  },
  "selector": {
    "account_choice": {
      "options": {
        "new_token": "Legg til ny Tibber-konto med API-token"
      }
    },
    "day": {
      "options": {
        "yesterday": "I går",
        "today": "I dag",
        "tomorrow": "I morgen",
        "rolling_window": "Rullerende vindu",
        "rolling_window_autozoom": "Rullerende vindu (Auto-Zoom)"
      }
    },
    "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"
      }
    },
    "metadata": {
      "options": {
        "include": "Inkluder (data + metadata)",
        "only": "Kun metadata",
        "none": "Ingen (kun data)"
      }
    },
    "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"
      }
    },
    "currency_display_mode": {
      "options": {
        "base": "Basisvaluta (€, kr)",
        "subunit": "Underenhet valuta (ct, øre)"
      }
    },
    "average_sensor_display": {
      "options": {
        "median": "Median",
        "mean": "Aritmetisk gjennomsnitt"
      }
    },
    "search_scope": {
      "options": {
        "today": "I dag",
        "tomorrow": "I morgen",
        "remaining_today": "Resten av dagen",
        "next_24h": "Neste 24 timer",
        "next_48h": "Neste 48 timer"
      }
    },
    "charging_deadline_event": {
      "options": {
        "midnight": "Midnight",
        "next_peak_period": "Next Peak Period",
        "next_best_period_end": "End of Next Best-Price Period"
      }
    }
  }
}
