hass.tibber_prices/custom_components/tibber_prices/translations/en.json

1278 lines
73 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"config": {
"step": {
"account_choice": {
"title": "Choose Account",
"description": "You can add another home of an existing Tibber account or enter a new API token for a different account.",
"data": {
"account_choice": "Account"
},
"submit": "Continue →"
},
"new_token": {
"title": "Enter API Token",
"description": "Set up Tibber Price Information & Ratings.\n\nTo generate an API access token, visit https://developer.tibber.com.",
"data": {
"access_token": "API access token"
},
"submit": "Validate Token"
},
"user": {
"description": "Set up Tibber Price Information & Ratings.\n\nTo generate an API access token, visit https://developer.tibber.com.",
"data": {
"access_token": "API access token"
},
"submit": "Validate Token"
},
"select_home": {
"description": "Select a home to fetch price information and ratings.",
"data": {
"home_id": "Home"
},
"title": "Pick a Home",
"submit": "Select Home"
},
"finish": {
"description": "Select a home to fetch price information and ratings.",
"data": {
"home_id": "Home ID"
},
"title": "Pick a home",
"submit": "Select Home"
},
"reauth_confirm": {
"title": "Reauthenticate Tibber Price Integration",
"description": "The access token for Tibber is no longer valid. Please enter a new API access token to continue using this integration.\n\nTo generate a new API access token, visit https://developer.tibber.com.",
"data": {
"access_token": "API access token"
},
"submit": "Update Token"
}
},
"error": {
"auth": "The Tibber Access Token is invalid.",
"connection": "Unable to connect to Tibber. Please check your internet connection.",
"unknown": "Unexpected error",
"cannot_connect": "Failed to connect",
"invalid_access_token": "Invalid access token",
"missing_homes": "The new access token does not have access to all configured homes. Please use an access token that has access to the same Tibber homes.",
"home_already_configured": "This home is already configured in another entry. Each home can only be configured once.",
"no_active_subscription": "This home does not have an active Tibber contract. Only homes with active electricity contracts can be added to Home Assistant.",
"subscription_expired": "The Tibber contract for this home has expired. Only homes with active or future electricity contracts can be added to Home Assistant.",
"future_subscription_warning": "Note: This home's Tibber contract has not started yet. Functionality may be limited until the contract becomes active.",
"invalid_yaml_syntax": "Invalid YAML syntax. Please check indentation, colons, and special characters.",
"invalid_yaml_structure": "YAML must be a dictionary/object (key: value pairs), not a list or plain text.",
"service_call_failed": "Service call validation failed: {error_detail}",
"missing_entry_id": "Entry ID is required but was not provided.",
"invalid_entry_id": "Invalid entry ID or entry not found.",
"missing_home_id": "Home ID is missing from the configuration entry.",
"user_data_not_available": "User data is not available. Please refresh user data first.",
"price_fetch_failed": "Failed to fetch price data. Please check logs for details."
},
"abort": {
"already_configured": "All available Tibber homes are already configured. Each home can only be configured once.",
"entry_not_found": "Tibber configuration entry not found.",
"setup_complete": "Setup complete! You can change additional options for Tibber Prices in the integration's options after closing this dialog.",
"reauth_successful": "Reauthentication successful. The integration has been updated with the new access token."
}
},
"common": {
"step_progress": "{step_num} / {total_steps}",
"override_warning_template": "⚠️ {fields} controlled by config entity",
"override_warning_and": "and",
"override_field_label_best_price_min_period_length": "Minimum Period Length",
"override_field_label_best_price_max_level_gap_count": "Gap Tolerance",
"override_field_label_best_price_flex": "Flexibility",
"override_field_label_best_price_min_distance_from_avg": "Minimum Distance",
"override_field_label_enable_min_periods_best": "Achieve Minimum Count",
"override_field_label_min_periods_best": "Minimum Periods",
"override_field_label_relaxation_attempts_best": "Relaxation Attempts",
"override_field_label_peak_price_min_period_length": "Minimum Period Length",
"override_field_label_peak_price_max_level_gap_count": "Gap Tolerance",
"override_field_label_peak_price_flex": "Flexibility",
"override_field_label_peak_price_min_distance_from_avg": "Minimum Distance",
"override_field_label_enable_min_periods_peak": "Achieve Minimum Count",
"override_field_label_min_periods_peak": "Minimum Periods",
"override_field_label_relaxation_attempts_peak": "Relaxation Attempts"
},
"config_subentries": {
"home": {
"entry_type": "Time-Travel View",
"initiate_flow": {
"user": "Create Time-Travel View"
},
"title": "Create Time-Travel View",
"step": {
"user": {
"title": "Select Configuration Entry",
"description": "Select the configuration entry for which you want to create a time-travel view.\n\n**Time-travel views** allow you to see historical price data as if it were the current time. This is useful for testing automations or analyzing past price patterns.",
"data": {
"parent_entry_id": "Configuration Entry"
}
},
"time_offset": {
"title": "Configure Time Offset",
"description": "Configure how far back in time this view should travel.\n\n**Recommended:** Use **≥2 days** offset to avoid conflicts with \"yesterday\" entities that also provide historical data.\n\n**Examples:**\n• **-7 days**: View prices from 7 days ago\n• **-2 days, 3 hours**: View prices from 2 days and 3 hours ago\n• **-14 days**: View prices from 2 weeks ago",
"data": {
"virtual_time_offset_days": "Days Back",
"time_offset": "Additional Time Offset"
},
"data_description": {
"virtual_time_offset_days": "How many days to travel back in time. Slider range: 0 to 374 days (≈1 year). Recommended: ≥2 days to avoid conflicts with \"yesterday\" entities.",
"time_offset": "Optional fine-tuning: Add hours and/or minutes to the day offset. The time will be automatically subtracted (travel back further). Note: Seconds are ignored - only minute-level precision is supported."
}
},
"init": {
"title": "Reconfigure Time Offset",
"description": "Update the time offset for this time-travel view.",
"data": {
"virtual_time_offset_days": "Days Back",
"time_offset": "Additional Time Offset"
},
"data_description": {
"virtual_time_offset_days": "How many days to travel back in time. Slider range: 0 to 374 days (≈1 year). Recommended: ≥2 days to avoid conflicts with \"yesterday\" entities.",
"time_offset": "Optional fine-tuning: Add hours and/or minutes to the day offset. The time will be automatically subtracted (travel back further). Note: Seconds are ignored - only minute-level precision is supported."
}
}
},
"error": {
"no_time_offset": "At least one time offset value must be negative (historical data only)."
},
"abort": {
"already_configured": "**A time-travel view with this exact time offset already exists.**\n\nPlease choose a different offset.",
"no_main_entries": "No main configuration entries found. Please add a Tibber home first.",
"parent_entry_not_found": "Selected configuration entry not found."
}
}
},
"options": {
"step": {
"init": {
"menu_options": {
"general_settings": "⚙️ General Settings",
"display_settings": "💱 Currency Display",
"current_interval_price_rating": "📊 Price Rating",
"price_level": "🏷️ Price Level",
"volatility": "💨 Price Volatility",
"best_price": "💚 Best Price Period",
"peak_price": "🔴 Peak Price Period",
"price_trend": "📈 Price Trend",
"chart_data_export": "📊 Chart Data Export Sensor",
"reset_to_defaults": "🔄 Reset to Defaults",
"finish": "⬅️ Back"
}
},
"general_settings": {
"title": "⚙️ General Settings",
"description": "**Configure general settings for Tibber Price Information & Ratings.**\n\n---\n\n**User:** {user_login}",
"data": {
"extended_descriptions": "Extended Descriptions",
"average_sensor_display": "Average Sensor Display"
},
"data_description": {
"extended_descriptions": "Controls whether entity attributes include detailed explanations and usage tips.\n\n• Disabled (default): Brief description only\n• Enabled: Detailed explanation + practical usage examples\n\nExample:\nDisabled = 1 attribute\nEnabled = 2 additional attributes",
"average_sensor_display": "Choose which statistical measure to display in the sensor state for average price sensors. The other value will be shown as an attribute.\n\n• **Median (default)**: Shows the 'typical' price, resistant to extreme spikes - best for display and human interpretation\n• **Arithmetic Mean**: Shows the true mathematical average including all prices - best when you need exact cost calculations\n\nFor automations, use the attribute `price_mean` or `price_median` to access both values regardless of this setting."
},
"submit": "↩ Save & Back"
},
"display_settings": {
"title": "💱 Currency Display Settings",
"description": "**Configure how electricity prices are displayed - in base currency (€, kr) or subunit (ct, øre).**\n\n---",
"data": {
"currency_display_mode": "Display Mode"
},
"data_description": {
"currency_display_mode": "Choose how prices are displayed:\n\n• **Base Currency** (€/kWh, kr/kWh): Decimal values (e.g., 0.25 €/kWh) - differences visible from 3rd-4th decimal place\n• **Subunit Currency** (ct/kWh, øre/kWh): Larger values (e.g., 25.00 ct/kWh) - differences visible from 1st decimal place\n\nDefault depends on your currency:\n• EUR → Subunit (cents) - German/Dutch preference\n• NOK/SEK/DKK → Base (kroner) - Scandinavian preference\n• USD/GBP → Base currency\n\n**💡 Tip:** When selecting Subunit Currency, you can enable the additional \"Current Electricity Price (Energy Dashboard)\" sensor (disabled by default)."
},
"submit": "↩ Save & Back"
},
"current_interval_price_rating": {
"title": "📊 Price Rating Settings",
"description": "**Configure thresholds and stabilization for price rating levels (low/normal/high) based on comparison with trailing 24-hour average.**{entity_warning}",
"data": {
"price_rating_threshold_low": "Low Threshold",
"price_rating_threshold_high": "High Threshold",
"price_rating_hysteresis": "Hysteresis",
"price_rating_gap_tolerance": "Gap Tolerance"
},
"data_description": {
"price_rating_threshold_low": "Percentage below the trailing 24-hour average that the current price must be to qualify as 'low' rating. Example: -10 means at least 10% below average. Sensors with this rating indicate favorable time windows. Default: -10%",
"price_rating_threshold_high": "Percentage above the trailing 24-hour average that the current price must be to qualify as 'high' rating. Example: 10 means at least 10% above average. Sensors with this rating warn about expensive time windows. Default: 10%",
"price_rating_hysteresis": "Percentage band around thresholds to prevent rapid state changes. When the rating is already LOW, the price must rise above (threshold + hysteresis) to switch to NORMAL. Similarly, HIGH requires the price to fall below (threshold - hysteresis) to leave. This provides stability for automations that react to rating changes. Set to 0 to disable. Default: 2%",
"price_rating_gap_tolerance": "Maximum number of consecutive intervals that can be 'smoothed out' if they differ from surrounding ratings. Small isolated rating changes are merged into the dominant neighboring block. This provides stability for automations by preventing brief rating spikes from triggering unnecessary actions. Example: 1 means a single 'normal' interval surrounded by 'high' intervals gets corrected to 'high'. Set to 0 to disable. Default: 1"
},
"submit": "↩ Save & Back"
},
"price_level": {
"title": "🏷️ Price Level Settings",
"description": "**Configure stabilization for Tibber's price level classification (very cheap/cheap/normal/expensive/very expensive).**\n\nTibber's API provides a price level field for each interval. This setting smooths out brief fluctuations to prevent automation instability.{entity_warning}",
"data": {
"price_level_gap_tolerance": "Gap Tolerance"
},
"data_description": {
"price_level_gap_tolerance": "Maximum number of consecutive intervals that can be 'smoothed out' if they differ from surrounding price levels. Small isolated level changes are merged into the dominant neighboring block. Example: 1 means a single 'normal' interval surrounded by 'cheap' intervals gets corrected to 'cheap'. Set to 0 to disable. Default: 1"
},
"submit": "↩ Save & Back"
},
"best_price": {
"title": "💚 Best Price Period Settings",
"description": "**Configure settings for the Best Price Period binary sensor. This sensor is active during periods with the lowest electricity prices.**{entity_warning}{override_warning}\n\n---",
"sections": {
"period_settings": {
"name": "Period Duration & Levels",
"description": "Configure how long periods should be and which price levels to include.",
"data": {
"best_price_min_period_length": "Minimum Period Length",
"best_price_max_level": "Price Level Filter",
"best_price_max_level_gap_count": "Gap Tolerance"
},
"data_description": {
"best_price_min_period_length": "Minimum duration for a period to be considered as 'best price'. Longer periods are more practical for running appliances like dishwashers or heat pumps. Best price periods require 60 minutes minimum (vs. 30 minutes for peak price warnings) because they should provide meaningful time windows for consumption planning, not just brief opportunities.",
"best_price_max_level": "Only show best price periods if they contain intervals with price levels ≤ selected value. For example, selecting '**Cheap**' means the period must have at least one '**Very cheap**' or '**Cheap**' interval. This ensures 'best price' periods are not just relatively cheap for the day, but actually cheap in absolute terms. Select '**Any**' to show best prices regardless of their absolute price level.",
"best_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with '**Cheap**' filter and gap count 1, a sequence '**Cheap**, **Cheap**, **Normal**, **Cheap**' is accepted (**Normal** is one step above **Cheap**). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance)."
}
},
"flexibility_settings": {
"name": "Flexibility & Thresholds",
"description": "Control how much prices can deviate and still qualify as 'best price'.",
"data": {
"best_price_flex": "Flexibility",
"best_price_min_distance_from_avg": "Minimum Distance"
},
"data_description": {
"best_price_flex": "Maximum above the daily minimum price that intervals can be and still qualify as 'best price'. Recommended: 15-20 with relaxation enabled (default), or 25-35 without relaxation. Maximum: 50 (hard cap for reliable period detection).",
"best_price_min_distance_from_avg": "Ensures periods are significantly cheaper than the daily average, not just marginally below it. This filters out noise and prevents marking slightly-below-average periods as 'best price' on days with flat prices. Higher values = stricter filtering (only truly cheap periods qualify). Default: 5 means periods must be at least 5% below the daily average."
}
},
"relaxation_and_target_periods": {
"name": "Relaxation & Target Periods",
"description": "Configure automatic filter relaxation and target period counts. Enable 'Achieve Minimum Count' to activate relaxation.",
"data": {
"enable_min_periods_best": "Achieve Minimum Count",
"min_periods_best": "Minimum Periods",
"relaxation_attempts_best": "Relaxation Attempts"
},
"data_description": {
"enable_min_periods_best": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods, which may include less optimal time windows as best-price periods.",
"min_periods_best": "Minimum number of best price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Achieve Minimum Count' is enabled. Default: 1",
"relaxation_attempts_best": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional periods at the cost of longer processing time."
}
}
},
"submit": "↩ Save & Back"
},
"peak_price": {
"title": "🔴 Peak Price Period Settings",
"description": "**Configure settings for the Peak Price Period binary sensor. This sensor is active during periods with the highest electricity prices.**{entity_warning}{override_warning}\n\n---",
"sections": {
"period_settings": {
"name": "Period Settings",
"description": "Configure period duration and price level constraints.",
"data": {
"peak_price_min_period_length": "Minimum Period Length",
"peak_price_min_level": "Price Level Filter",
"peak_price_max_level_gap_count": "Gap Tolerance"
},
"data_description": {
"peak_price_min_period_length": "Minimum duration for a period to be considered as 'peak price'. Peak price warnings are allowed for shorter periods (30 minutes minimum vs. 60 minutes for best price) because brief expensive spikes are worth alerting about, even if they're too short for consumption planning.",
"peak_price_min_level": "Only show peak price periods if they contain intervals with price levels ≥ selected value. For example, selecting '**Expensive**' means the period must have at least one '**Expensive**' or '**Very expensive**' interval. This ensures 'peak price' periods are not just relatively expensive for the day, but actually expensive in absolute terms. Select '**Any**' to show peak prices regardless of their absolute price level.",
"peak_price_max_level_gap_count": "Maximum number of consecutive intervals allowed that deviate by exactly one level step from the required level. For example: with '**Expensive**' filter and gap count 2, a sequence '**Expensive**, **Normal**, **Normal**, **Expensive**' is accepted (**Normal** is one step below **Expensive**). This prevents periods from being split by occasional level deviations. **Note:** Gap tolerance requires periods ≥90 minutes (6 intervals) to detect outliers effectively. Default: 0 (strict filtering, no tolerance)."
}
},
"flexibility_settings": {
"name": "Flexibility Settings",
"description": "Configure price comparison thresholds and filtering.",
"data": {
"peak_price_flex": "Flexibility",
"peak_price_min_distance_from_avg": "Minimum Distance"
},
"data_description": {
"peak_price_flex": "Maximum below the daily maximum price that intervals can be and still qualify as 'peak price'. Recommended: -15 to -20 with relaxation enabled (default), or -25 to -35 without relaxation. Maximum: -50 (hard cap for reliable period detection). Note: Negative values indicate distance below maximum.",
"peak_price_min_distance_from_avg": "Ensures periods are significantly more expensive than the daily average, not just marginally above it. This filters out noise and prevents marking slightly-above-average periods as 'peak price' on days with flat prices. Higher values = stricter filtering (only truly expensive periods qualify). Default: 5 means periods must be at least 5% above the daily average."
}
},
"relaxation_and_target_periods": {
"name": "Relaxation & Target Periods",
"description": "Configure automatic filter relaxation and target period counts. Enable 'Achieve Minimum Count' to activate relaxation.",
"data": {
"enable_min_periods_peak": "Achieve Minimum Count",
"min_periods_peak": "Minimum Periods",
"relaxation_attempts_peak": "Relaxation Attempts"
},
"data_description": {
"enable_min_periods_peak": "When enabled, filters will be gradually relaxed if not enough periods are found. This attempts to reach the desired minimum number of periods to ensure you're warned about expensive periods even on days with unusual price patterns.",
"min_periods_peak": "Minimum number of peak price periods to aim for per day. Filters will be relaxed step-by-step to try achieving this count. Only active when 'Achieve Minimum Count' is enabled. Default: 1",
"relaxation_attempts_peak": "How many flex levels (attempts) to try before giving up. Each attempt runs all filter combinations at the new flex level. More attempts increase the chance of finding additional peak periods at the cost of longer processing time."
}
}
},
"submit": "↩ Save & Back"
},
"price_trend": {
"title": "📈 Price Trend Thresholds",
"description": "**Configure thresholds for price trend sensors.** These sensors compare current price with the average of the next N hours to determine if prices are rising, falling, or stable.\n\n**5-Level Scale:** Uses strongly_falling (-2), falling (-1), stable (0), rising (+1), strongly_rising (+2) for automation comparisons via trend_value attribute.{entity_warning}",
"data": {
"price_trend_threshold_rising": "Rising Threshold",
"price_trend_threshold_strongly_rising": "Strongly Rising Threshold",
"price_trend_threshold_falling": "Falling Threshold",
"price_trend_threshold_strongly_falling": "Strongly Falling Threshold"
},
"data_description": {
"price_trend_threshold_rising": "Percentage that the average of the next N hours must be above the current price to qualify as 'rising' trend. Example: 3 means average is at least 3% higher → prices will rise. Typical values: 3-10%. Default: 3%",
"price_trend_threshold_strongly_rising": "Percentage for 'strongly rising' trend. Must be higher than rising threshold. Example: 6 means average is at least 6% higher → prices will rise significantly. Typical values: 6-15%. Default: 6%",
"price_trend_threshold_falling": "Percentage (negative) that the average of the next N hours must be below the current price to qualify as 'falling' trend. Example: -3 means average is at least 3% lower → prices will fall. Typical values: -3 to -10%. Default: -3%",
"price_trend_threshold_strongly_falling": "Percentage (negative) for 'strongly falling' trend. Must be lower (more negative) than falling threshold. Example: -6 means average is at least 6% lower → prices will fall significantly. Typical values: -6 to -15%. Default: -6%"
},
"submit": "↩ Save & Back"
},
"volatility": {
"title": "💨 Price Volatility Thresholds",
"description": "**Configure thresholds for volatility classification.** Volatility measures relative price variation using the coefficient of variation (CV = standard deviation / mean × 100%). These thresholds are percentage values that work across all price levels.\n\nUsed by:\n• Volatility sensors (classification)\n• Trend sensors (adaptive threshold adjustment: <moderate = more sensitive, ≥high = less sensitive){entity_warning}",
"data": {
"volatility_threshold_moderate": "Moderate Threshold",
"volatility_threshold_high": "High Threshold",
"volatility_threshold_very_high": "Very High Threshold"
},
"data_description": {
"volatility_threshold_moderate": "Coefficient of Variation (CV) at which prices are considered 'moderately volatile'. CV = (standard deviation / mean) × 100%. Example: 15 means price fluctuations of ±15% around average. Sensors show this classification, trend sensors become more sensitive. Default: 15%",
"volatility_threshold_high": "Coefficient of Variation (CV) at which prices are considered 'highly volatile'. Example: 30 means price fluctuations of ±30% around average. Larger price jumps expected, trend sensors become less sensitive. Default: 30%",
"volatility_threshold_very_high": "Coefficient of Variation (CV) at which prices are considered 'very highly volatile'. Example: 50 means extreme price fluctuations of ±50% around average. On such days, strong price spikes are likely. Default: 50%"
},
"submit": "↩ Save & Back"
},
"chart_data_export": {
"title": "📊 Chart Data Export Sensor",
"description": "The Chart Data Export Sensor provides price data as sensor attributes.\n\n⚠ **Note:** This sensor is a legacy feature for compatibility with older tools.\n\n**Recommended for new setups:** Use the `tibber_prices.get_chartdata` **service directly** - it's more flexible, efficient, and the modern Home Assistant approach.\n\n**When this sensor makes sense:**\n\n✅ Your dashboard tool can **only** read attributes (no service calls)\n✅ You need static data that updates automatically\n❌ **Not for automations:** Use `tibber_prices.get_chartdata` directly there - more flexible and efficient!\n\n---\n\n{sensor_status_info}",
"submit": "↩ Ok & Back"
},
"reset_to_defaults": {
"title": "🔄 Reset to Defaults",
"description": "⚠️ **Warning:** This will reset **ALL** settings to factory defaults.\n\n**What will be reset:**\n• All price rating thresholds\n• All volatility thresholds\n• All price trend thresholds\n• All best price period settings\n• All peak price period settings\n• Display settings\n• General settings\n\n**What will NOT be reset:**\n• Your Tibber API token\n• Selected home\n• Currency\n\n**💡 Tip:** This is useful if you want to start fresh after experimenting with settings.",
"data": {
"confirm_reset": "Yes, reset everything to defaults"
},
"submit": "Reset Now"
}
},
"error": {
"auth": "The Tibber Access Token is invalid.",
"connection": "Unable to connect to Tibber. Please check your internet connection.",
"unknown": "An unexpected error occurred. Please check the logs for details.",
"cannot_connect": "Failed to connect",
"invalid_access_token": "Invalid access token",
"different_home": "The access token is not valid for the home ID this integration is configured for.",
"invalid_period_length": "Period length must be at least 15 minutes (multiples of 15).",
"invalid_flex": "Flexibility percentage must be between -50% and +50%",
"invalid_best_price_distance": "Distance percentage must be between -50% and 0% (negative = below average)",
"invalid_peak_price_distance": "Distance percentage must be between 0% and 50% (positive = above average)",
"invalid_min_periods": "Minimum periods count must be between 1 and 10",
"invalid_gap_count": "Gap count must be between 0 and 8",
"invalid_relaxation_attempts": "Relaxation attempts must be between 1 and 12",
"invalid_price_rating_low": "Low price rating threshold must be between -50% and -5%",
"invalid_price_rating_high": "High price rating threshold must be between 5% and 50%",
"invalid_price_rating_thresholds": "Low threshold must be less than high threshold",
"invalid_volatility_threshold_moderate": "Moderate volatility threshold must be between 5% and 25%",
"invalid_volatility_threshold_high": "High volatility threshold must be between 20% and 40%",
"invalid_volatility_threshold_very_high": "Very high volatility threshold must be between 35% and 80%",
"invalid_volatility_thresholds": "Thresholds must be in ascending order: moderate < high < very high",
"invalid_price_trend_rising": "Rising trend threshold must be between 1% and 50%",
"invalid_price_trend_falling": "Falling trend threshold must be between -50% and -1%",
"invalid_price_trend_strongly_rising": "Strongly rising trend threshold must be between 2% and 100%",
"invalid_price_trend_strongly_falling": "Strongly falling trend threshold must be between -100% and -2%",
"invalid_trend_strongly_rising_less_than_rising": "Strongly rising threshold must be greater than rising threshold",
"invalid_trend_strongly_falling_greater_than_falling": "Strongly falling threshold must be less (more negative) than falling threshold"
},
"abort": {
"entry_not_found": "Tibber configuration entry not found.",
"reset_cancelled": "Reset cancelled. No changes were made to your configuration.",
"reset_successful": "✅ All settings have been reset to factory defaults. Your configuration is now like a fresh installation.",
"finished": "Configuration completed."
}
},
"entity": {
"sensor": {
"current_interval_price": {
"name": "Current Electricity Price"
},
"current_interval_price_base": {
"name": "Current Electricity Price (Energy Dashboard)"
},
"next_interval_price": {
"name": "Next Electricity Price"
},
"previous_interval_price": {
"name": "Previous Electricity Price"
},
"current_hour_average_price": {
"name": "⌀ Hourly Price Current"
},
"next_hour_average_price": {
"name": "⌀ Hourly Price Next"
},
"current_interval_price_level": {
"name": "Current Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"next_interval_price_level": {
"name": "Next Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"previous_interval_price_level": {
"name": "Previous Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"current_hour_price_level": {
"name": "Current Hour Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"next_hour_price_level": {
"name": "Next Hour Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"lowest_price_today": {
"name": "Today's Lowest Price"
},
"highest_price_today": {
"name": "Today's Highest Price"
},
"average_price_today": {
"name": "⌀ Price Today"
},
"lowest_price_tomorrow": {
"name": "Tomorrow's Lowest Price"
},
"highest_price_tomorrow": {
"name": "Tomorrow's Highest Price"
},
"average_price_tomorrow": {
"name": "⌀ Price Tomorrow"
},
"yesterday_price_level": {
"name": "Yesterday's Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"today_price_level": {
"name": "Today's Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"tomorrow_price_level": {
"name": "Tomorrow's Price Level",
"state": {
"very_cheap": "Very Cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very Expensive"
}
},
"yesterday_price_rating": {
"name": "Yesterday's Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"today_price_rating": {
"name": "Today's Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"tomorrow_price_rating": {
"name": "Tomorrow's Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"trailing_price_average": {
"name": "⌀ Price Trailing 24h"
},
"leading_price_average": {
"name": "⌀ Price Leading 24h"
},
"trailing_price_min": {
"name": "Trailing 24h Minimum Price"
},
"trailing_price_max": {
"name": "Trailing 24h Maximum Price"
},
"leading_price_min": {
"name": "Leading 24h Minimum Price"
},
"leading_price_max": {
"name": "Leading 24h Maximum Price"
},
"current_interval_price_rating": {
"name": "Current Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"next_interval_price_rating": {
"name": "Next Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"previous_interval_price_rating": {
"name": "Previous Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"current_hour_price_rating": {
"name": "Current Hour Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"next_hour_price_rating": {
"name": "Next Hour Price Rating",
"state": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"next_avg_1h": {
"name": "⌀ Price Next 1h"
},
"next_avg_2h": {
"name": "⌀ Price Next 2h"
},
"next_avg_3h": {
"name": "⌀ Price Next 3h"
},
"next_avg_4h": {
"name": "⌀ Price Next 4h"
},
"next_avg_5h": {
"name": "⌀ Price Next 5h"
},
"next_avg_6h": {
"name": "⌀ Price Next 6h"
},
"next_avg_8h": {
"name": "⌀ Price Next 8h"
},
"next_avg_12h": {
"name": "⌀ Price Next 12h"
},
"price_trend_1h": {
"name": "Price Trend (1h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"price_trend_2h": {
"name": "Price Trend (2h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"price_trend_3h": {
"name": "Price Trend (3h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"price_trend_4h": {
"name": "Price Trend (4h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"price_trend_5h": {
"name": "Price Trend (5h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"price_trend_6h": {
"name": "Price Trend (6h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"price_trend_8h": {
"name": "Price Trend (8h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"price_trend_12h": {
"name": "Price Trend (12h)",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"current_price_trend": {
"name": "Current Price Trend",
"state": {
"strongly_rising": "Strongly Rising",
"rising": "Rising",
"stable": "Stable",
"falling": "Falling",
"strongly_falling": "Strongly Falling"
}
},
"next_price_trend_change": {
"name": "Next Price Trend Change"
},
"daily_rating": {
"name": "Daily Price Rating"
},
"monthly_rating": {
"name": "Monthly Price Rating"
},
"data_lifecycle_status": {
"name": "Data Lifecycle Status",
"state": {
"cached": "Cached",
"fresh": "Fresh",
"refreshing": "Refreshing",
"searching_tomorrow": "Searching Tomorrow",
"turnover_pending": "Turnover Pending",
"error": "Error"
}
},
"today_volatility": {
"name": "Today's Price Volatility",
"state": {
"low": "Low",
"moderate": "Moderate",
"high": "High",
"very_high": "Very High"
}
},
"tomorrow_volatility": {
"name": "Tomorrow's Price Volatility",
"state": {
"low": "Low",
"moderate": "Moderate",
"high": "High",
"very_high": "Very High"
}
},
"next_24h_volatility": {
"name": "Next 24h Price Volatility",
"state": {
"low": "Low",
"moderate": "Moderate",
"high": "High",
"very_high": "Very High"
}
},
"today_tomorrow_volatility": {
"name": "Today+Tomorrow Price Volatility",
"state": {
"low": "Low",
"moderate": "Moderate",
"high": "High",
"very_high": "Very High"
}
},
"best_price_end_time": {
"name": "Best Price End"
},
"best_price_period_duration": {
"name": "Best Price Duration"
},
"best_price_remaining_minutes": {
"name": "Best Price Remaining Time"
},
"best_price_progress": {
"name": "Best Price Progress"
},
"best_price_next_start_time": {
"name": "Best Price Start"
},
"best_price_next_in_minutes": {
"name": "Best Price Starts In"
},
"peak_price_end_time": {
"name": "Peak Price End"
},
"peak_price_period_duration": {
"name": "Peak Price Duration"
},
"peak_price_remaining_minutes": {
"name": "Peak Price Remaining Time"
},
"peak_price_progress": {
"name": "Peak Price Progress"
},
"peak_price_next_start_time": {
"name": "Peak Price Start"
},
"peak_price_next_in_minutes": {
"name": "Peak Price Starts In"
},
"home_type": {
"name": "Home Type",
"state": {
"apartment": "Apartment",
"rowhouse": "Rowhouse",
"house": "House",
"cottage": "Cottage"
}
},
"home_size": {
"name": "Home Size"
},
"main_fuse_size": {
"name": "Main Fuse Size"
},
"number_of_residents": {
"name": "Number of Residents"
},
"primary_heating_source": {
"name": "Primary Heating Source",
"state": {
"air2air_heatpump": "Air-to-Air Heat Pump",
"air2water_heatpump": "Air-to-Water Heat Pump",
"boiler": "Boiler",
"central_heating": "Central Heating",
"district_heating": "District Heating",
"district": "District Heating",
"electric_boiler": "Electric Boiler",
"electricity": "Electricity",
"floor": "Floor Heating",
"gas": "Gas",
"ground_heatpump": "Ground Heat Pump",
"ground": "Ground Heat Pump",
"oil": "Oil",
"other": "Other",
"waste": "Waste Heat"
}
},
"grid_company": {
"name": "Grid Company"
},
"grid_area_code": {
"name": "Grid Area Code"
},
"price_area_code": {
"name": "Price Area Code"
},
"consumption_ean": {
"name": "Consumption EAN"
},
"production_ean": {
"name": "Production EAN"
},
"energy_tax_type": {
"name": "Energy Tax Type"
},
"vat_type": {
"name": "VAT Type"
},
"estimated_annual_consumption": {
"name": "Estimated Annual Consumption"
},
"subscription_status": {
"name": "Subscription Status",
"state": {
"running": "Running",
"ended": "Ended",
"pending": "Pending",
"unknown": "Unknown"
}
},
"chart_data_export": {
"name": "Chart Data Export",
"state": {
"pending": "Pending",
"ready": "Ready",
"error": "Error"
}
},
"chart_metadata": {
"name": "Chart Metadata",
"state": {
"pending": "Pending",
"ready": "Ready",
"error": "Error"
}
}
},
"binary_sensor": {
"peak_price_period": {
"name": "Peak Price Period"
},
"best_price_period": {
"name": "Best Price Period"
},
"connection": {
"name": "Tibber API Connection"
},
"tomorrow_data_available": {
"name": "Tomorrow's Data Available"
},
"has_ventilation_system": {
"name": "Has Ventilation System"
},
"realtime_consumption_enabled": {
"name": "Realtime Consumption Enabled"
}
},
"number": {
"best_price_flex_override": {
"name": "Best Price: Flexibility"
},
"best_price_min_distance_override": {
"name": "Best Price: Minimum Distance"
},
"best_price_min_period_length_override": {
"name": "Best Price: Minimum Period Length"
},
"best_price_min_periods_override": {
"name": "Best Price: Minimum Periods"
},
"best_price_relaxation_attempts_override": {
"name": "Best Price: Relaxation Attempts"
},
"best_price_gap_count_override": {
"name": "Best Price: Gap Tolerance"
},
"peak_price_flex_override": {
"name": "Peak Price: Flexibility"
},
"peak_price_min_distance_override": {
"name": "Peak Price: Minimum Distance"
},
"peak_price_min_period_length_override": {
"name": "Peak Price: Minimum Period Length"
},
"peak_price_min_periods_override": {
"name": "Peak Price: Minimum Periods"
},
"peak_price_relaxation_attempts_override": {
"name": "Peak Price: Relaxation Attempts"
},
"peak_price_gap_count_override": {
"name": "Peak Price: Gap Tolerance"
}
},
"switch": {
"best_price_enable_relaxation_override": {
"name": "Best Price: Achieve Minimum Count"
},
"peak_price_enable_relaxation_override": {
"name": "Peak Price: Achieve Minimum Count"
}
}
},
"issues": {
"new_homes_available": {
"title": "New Tibber homes detected",
"description": "We detected {count} new home(s) on your Tibber account: {homes}. You can add them to Home Assistant through the Tibber integration configuration."
},
"homes_removed": {
"title": "Tibber homes removed",
"description": "We detected that {count} home(s) have been removed from your Tibber account: {homes}. Please review your Tibber integration configuration."
},
"tomorrow_data_missing": {
"title": "Tomorrow's price data missing for {home_name}",
"description": "Tomorrow's electricity price data is still unavailable after {warning_hour}:00. This is unusual, as Tibber typically publishes tomorrow's prices in the afternoon (around 13:00-14:00 CET).\n\nPossible causes:\n- Tibber has not yet published tomorrow's prices\n- Temporary API issues\n- Your electricity provider has not submitted prices to Tibber\n\nThis issue will automatically resolve once tomorrow's data becomes available. If this persists beyond 20:00, please check the Tibber app or contact Tibber support."
},
"rate_limit_exceeded": {
"title": "API rate limit exceeded for {home_name}",
"description": "The Tibber API has rate-limited this integration after {error_count} consecutive errors. This means requests are being made too frequently.\n\nThe integration will automatically retry with increasing delays. This issue will resolve once the rate limit expires.\n\nIf this persists for several hours, consider:\n- Checking if multiple Home Assistant instances are using the same API token\n- Verifying no other applications are heavily using your Tibber API token\n- Reducing the update frequency if you've customized it"
},
"home_not_found": {
"title": "Home {home_name} not found in Tibber account",
"description": "The home configured in this integration (entry ID: {entry_id}) is no longer available in your Tibber account. This typically happens when:\n- The home was deleted from your Tibber account\n- The home was moved to a different Tibber account\n- Access to this home was revoked\n\nPlease remove this integration entry and re-add it if the home should still be monitored. To remove this entry, go to Settings → Devices & Services → Tibber Prices and delete the {home_name} configuration."
}
},
"services": {
"get_price": {
"name": "Get Price Data",
"description": "Fetch price data for a specific time range with automatic routing. Development and testing service for the price_info_for_range API function. Automatically uses PRICE_INFO, PRICE_INFO_RANGE, or both based on the time range boundary.",
"fields": {
"entry_id": {
"name": "Entry ID",
"description": "The config entry ID for the Tibber integration."
},
"start_time": {
"name": "Start Time",
"description": "Start of the time range (inclusive, timezone-aware)."
},
"end_time": {
"name": "End Time",
"description": "End of the time range (exclusive, timezone-aware)."
}
}
},
"get_apexcharts_yaml": {
"name": "Get ApexCharts Card YAML",
"description": "⚠️ IMPORTANT: This service generates a BASIC EXAMPLE configuration for ApexCharts Card as a starting point. It is NOT a complete solution for all ApexCharts features. This integration is primarily a DATA PROVIDER. The generated YAML demonstrates how to use the `get_chartdata` service to fetch price data. Due to the segmented nature of our data (different time periods per series) and the use of Home Assistant's service API instead of entity attributes, many advanced ApexCharts features (like in_header, certain transformations) are not compatible or require manual customization. You are welcome to customize the generated YAML for your specific needs, but please understand that comprehensive ApexCharts configuration support is beyond the scope of this integration. Community contributions with improved configurations are always appreciated - if you find a better setup that works, please share it so everyone can benefit! For direct data access to build your own charts, use the `get_chartdata` service instead.",
"fields": {
"entry_id": {
"name": "Entry ID",
"description": "The config entry ID for the Tibber integration."
},
"day": {
"name": "Day",
"description": "Which day to visualize (default: Rolling Window). Fixed day options (Yesterday/Today/Tomorrow) show 24h spans without additional dependencies. Dynamic options require config-template-card: Rolling Window displays a fixed 48h window that automatically shifts between yesterday+today and today+tomorrow based on data availability. Rolling Window (Auto-Zoom) behaves the same but additionally auto-zooms in (2h lookback + remaining time until midnight, graph_span decreases every 15 minutes)."
},
"level_type": {
"name": "Level Type",
"description": "Select which price level classification to visualize: 'rating_level' (low/normal/high based on your configured thresholds) or 'level' (Tibber API levels: very cheap/cheap/normal/expensive/very expensive)."
},
"highlight_best_price": {
"name": "Highlight Best Price Periods",
"description": "Add a semi-transparent green overlay to highlight the best price periods on the chart. This makes it easy to visually identify the optimal times for energy consumption."
},
"highlight_peak_price": {
"name": "Highlight Peak Price Periods",
"description": "Add a semi-transparent red overlay to highlight the peak price periods on the chart. This makes it easy to visually identify times when energy is most expensive."
},
"resolution": {
"name": "Resolution",
"description": "Time resolution for the chart data. 'interval' (default): Original 15-minute intervals (96 points per day). 'hourly': Aggregated hourly values using a rolling 60-minute window (24 points per day) for a cleaner, less cluttered chart."
}
}
},
"get_chartdata": {
"name": "Get Chart Data",
"description": "Returns price data in a simple chart-friendly format compatible with the Tibber Core integration output structure. Perfect for use with popular chart cards like ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card, or the built-in History Graph Card. Field names and data structure can be customized to match your specific chart requirements.",
"sections": {
"general": {
"name": "General",
"description": "General settings for fetching chart data."
},
"selection": {
"name": "Selection",
"description": "Select which data to include in the output."
},
"filters": {
"name": "Filters",
"description": "Filter data based on price levels, rating levels, or special periods."
},
"transformation": {
"name": "Transform Data",
"description": "Transform the data output for better chart compatibility."
},
"format": {
"name": "Format",
"description": "Customize the output format."
},
"arrays_of_arrays": {
"name": "Advanced Output Settings: Array of Arrays",
"description": "Settings for output format when using an array of arrays."
},
"arrays_of_objects": {
"name": "Advanced Output Settings: Array of Objects",
"description": "Settings for output format when using an array of objects."
}
},
"fields": {
"entry_id": {
"name": "Entry ID",
"description": "The config entry ID for the Tibber integration."
},
"day": {
"name": "Day",
"description": "Which day(s) to fetch prices for. You can select multiple days. If not specified, returns a rolling 2-day window: today+tomorrow (when tomorrow data is available) or yesterday+today (when tomorrow data is not yet available). This provides continuous chart display without gaps."
},
"resolution": {
"name": "Resolution",
"description": "Time resolution for the returned data. Options: 'interval' (default, 15-minute intervals, 96 points per day), 'hourly' (hourly averages, 24 points per day)."
},
"output_format": {
"name": "Output Format",
"description": "Output format for the returned data. Options: 'array_of_objects' (default, array of objects with customizable field names), 'array_of_arrays' (array of [timestamp, price] arrays with trailing null point for stepline charts)."
},
"array_fields": {
"name": "Array Fields",
"description": "Define which fields to include. Use field names in curly braces, separated by commas. Available fields: start_time, price_per_kwh, level, rating_level, average. Fields will be automatically enabled even if include_* options are not set. Leave empty for default (timestamp and price only)."
},
"subunit_currency": {
"name": "Subunit Currency",
"description": "Return prices in subunit currency units (cents for EUR, øre for NOK/SEK) instead of base currency units. Disabled by default."
},
"round_decimals": {
"name": "Round Decimals",
"description": "Number of decimal places to round prices to (0-10). If not specified, uses default precision (4 decimals for base currency, 2 for subunit currency)."
},
"data_key": {
"name": "Data Key",
"description": "Custom name for the top-level data key in the response. Defaults to 'data' if not specified."
},
"include_level": {
"name": "Include Level",
"description": "Include the Tibber price level field (very cheap/cheap/normal/expensive/very expensive) in each data point."
},
"include_rating_level": {
"name": "Include Rating Level",
"description": "Include the calculated rating level field (low/normal/high) based on your configured thresholds in each data point."
},
"include_average": {
"name": "Include Average",
"description": "Include the daily average price in each data point for comparison."
},
"level_filter": {
"name": "Level Filter",
"description": "Filter intervals to include only specific Tibber price levels (very cheap/cheap/normal/expensive/very expensive). If not specified, all levels are included."
},
"rating_level_filter": {
"name": "Rating Level Filter",
"description": "Filter intervals to include only specific rating levels (low/normal/high). If not specified, all rating levels are included."
},
"period_filter": {
"name": "Period Filter",
"description": "Filter intervals to include only those within Best Price or Peak Price periods. Options: 'best_price' (only intervals in Best Price periods), 'peak_price' (only intervals in Peak Price periods). If not specified, all intervals are included. This uses the precomputed period data from binary sensors."
},
"insert_nulls": {
"name": "Insert NULL Values",
"description": "Control NULL value insertion for filtered data. 'none' (default): No NULL values, only matching intervals. 'segments': Add NULL points at segment boundaries for clean gaps in charts (recommended for stepline charts). 'all': Insert NULL for all timestamps where filter doesn't match (useful for continuous time series visualization)."
},
"connect_segments": {
"name": "Connect Segments",
"description": "[ONLY WITH 'Insert NULL Values'] When enabled, adds connecting points at segment boundaries to visually connect different price level segments in stepline charts. When price goes DOWN at a boundary, adds a point with the lower price at the end of the current segment. When price goes UP, adds a hold point before the gap. This creates smooth visual transitions between segments instead of abrupt gaps."
},
"add_trailing_null": {
"name": "Add Trailing Null Point",
"description": "Add a final data point with null values (except timestamp) at the end. Some chart libraries need this to prevent extrapolation/interpolation to the viewport edge when using stepline rendering. Leave disabled unless your chart requires it."
},
"start_time_field": {
"name": "Start Time Field Name",
"description": "Custom name for the start time field in the output. Defaults to 'start_time' if not specified."
},
"end_time_field": {
"name": "End Time Field Name",
"description": "Custom name for the end time field in the output. Defaults to 'end_time' if not specified. Only used with period_filter."
},
"price_field": {
"name": "Price Field Name",
"description": "Custom name for the price field in the output. Defaults to 'price_per_kwh' if not specified."
},
"level_field": {
"name": "Level Field Name",
"description": "Custom name for the level field in the output. Defaults to 'level' if not specified. Only used when include_level is enabled."
},
"rating_level_field": {
"name": "Rating Level Field Name",
"description": "Custom name for the rating_level field in the output. Defaults to 'rating_level' if not specified. Only used when include_rating_level is enabled."
},
"average_field": {
"name": "Average Field Name",
"description": "Custom name for the average field in the output. Defaults to 'average' if not specified. Only used when include_average is enabled."
},
"metadata": {
"name": "Metadata",
"description": "Control metadata inclusion in the response. 'include' (default): Returns both chart data and metadata with price statistics, currency info, Y-axis suggestions, and time range. 'only': Returns only metadata without processing chart data (fast, useful for dynamic Y-axis configuration). 'none': Returns only chart data without metadata."
}
}
},
"refresh_user_data": {
"name": "Refresh User Data",
"description": "Forces a refresh of the user data (homes, profile information) from the Tibber API. This can be useful after making changes to your Tibber account or when troubleshooting connectivity issues.",
"fields": {
"entry_id": {
"name": "Entry ID",
"description": "The config entry ID for the Tibber integration."
}
}
},
"debug_clear_tomorrow": {
"name": "Debug: Clear Tomorrow Data",
"description": "DEBUG/TESTING: Removes tomorrow's price data from the interval pool cache. Use this to test the tomorrow data refresh cycle without waiting for the next day. After calling this service, the lifecycle sensor will show 'searching_tomorrow' (after 13:00) and the next Timer #1 cycle will fetch new data from the API.",
"fields": {
"entry_id": {
"name": "Entry ID",
"description": "Optional config entry ID. If not provided, uses the first available entry."
}
}
}
},
"selector": {
"account_choice": {
"options": {
"new_token": "Add new Tibber account API token"
}
},
"day": {
"options": {
"yesterday": "Yesterday",
"today": "Today",
"tomorrow": "Tomorrow",
"rolling_window": "Rolling Window",
"rolling_window_autozoom": "Rolling Window (Auto-Zoom)"
}
},
"resolution": {
"options": {
"interval": "Interval (15 min)",
"hourly": "Hourly"
}
},
"output_format": {
"options": {
"array_of_objects": "Array of Objects",
"array_of_arrays": "Array of Arrays"
}
},
"level_type": {
"options": {
"rating_level": "Rating Level (low/normal/high)",
"level": "Tibber Level (very cheap to very expensive)"
}
},
"level_filter": {
"options": {
"very_cheap": "Very cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very expensive"
}
},
"rating_level_filter": {
"options": {
"low": "Low",
"normal": "Normal",
"high": "High"
}
},
"insert_nulls": {
"options": {
"none": "None",
"segments": "Segments",
"all": "All"
}
},
"period_filter": {
"options": {
"best_price": "Best Price Periods",
"peak_price": "Peak Price Periods"
}
},
"metadata": {
"options": {
"include": "Include (data + metadata)",
"only": "Only metadata",
"none": "None (data only)"
}
},
"volatility": {
"options": {
"low": "Low",
"moderate": "Moderate",
"high": "High",
"very_high": "Very high"
}
},
"current_interval_price_level": {
"options": {
"any": "Any",
"very_cheap": "Very cheap",
"cheap": "Cheap",
"normal": "Normal",
"expensive": "Expensive",
"very_expensive": "Very expensive"
}
},
"currency_display_mode": {
"options": {
"base": "Base Currency (€, kr)",
"subunit": "Subunit Currency (ct, øre)"
}
},
"average_sensor_display": {
"options": {
"median": "Median",
"mean": "Arithmetic Mean"
}
}
},
"title": "Tibber Price Information & Ratings"
}