mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 05:13:40 +00:00
Added comprehensive volatility analysis system: - 4 new volatility sensors (today, tomorrow, next_24h, today+tomorrow) - Volatility classification (LOW/MODERATE/HIGH/VERY HIGH) based on price spread - Configurable thresholds in options flow (step 6 of 6) - Best/Peak price period filters using volatility and price level - Price spread calculation in get_price service Volatility sensors help users decide if price-based optimization is worthwhile. For example, battery optimization only makes sense when volatility ≥ MODERATE. Period filters allow AND-logic combinations: - best_price_min_volatility: Only show cheap periods on volatile days - best_price_max_level: Only show periods when prices reach desired level - peak_price_min_volatility: Only show peaks on volatile days - peak_price_min_level: Only show peaks when expensive levels occur All 5 language files updated (de, en, nb, nl, sv) with: - Volatility sensor translations (name, states, descriptions) - Config flow step 6 "Volatility" with threshold settings - Step progress indicators added to all config steps - Period filter translations with usage tips Impact: Users can now assess daily price volatility and configure period sensors to only activate when conditions justify battery cycling or load shifting. Reduces unnecessary battery wear on low-volatility days.
496 lines
20 KiB
JSON
496 lines
20 KiB
JSON
{
|
|
"config": {
|
|
"step": {
|
|
"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."
|
|
},
|
|
"abort": {
|
|
"already_configured": "Integration is already configured",
|
|
"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 {step_num} of {total_steps}"
|
|
},
|
|
"config_subentries": {
|
|
"home": {
|
|
"initiate_flow": {
|
|
"user": "Add Tibber Home"
|
|
},
|
|
"title": "Add Tibber Home",
|
|
"step": {
|
|
"user": {
|
|
"title": "Add Tibber Home",
|
|
"description": "Select a home to add to your Tibber integration.\n\n**Note:** After adding this home, you can add additional homes from the integration's context menu by selecting \"Add Tibber Home\".",
|
|
"data": {
|
|
"home_id": "Home"
|
|
}
|
|
}
|
|
},
|
|
"error": {
|
|
"api_error": "Failed to fetch homes from Tibber API"
|
|
},
|
|
"abort": {
|
|
"no_parent_entry": "Parent entry not found",
|
|
"no_access_token": "No access token available",
|
|
"home_not_found": "Selected home not found",
|
|
"api_error": "Failed to fetch homes from Tibber API",
|
|
"no_available_homes": "No additional homes available to add. All homes from your Tibber account have already been added."
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"step": {
|
|
"init": {
|
|
"title": "General Settings",
|
|
"description": "{step_progress}\n\nConfigure general settings for Tibber Price Information & Ratings.\n\nUser: {user_login}",
|
|
"data": {
|
|
"extended_descriptions": "Show extended descriptions in entity attributes"
|
|
}
|
|
},
|
|
"price_rating": {
|
|
"title": "Price Rating Thresholds",
|
|
"description": "{step_progress}\n\nConfigure thresholds for price rating levels (LOW/NORMAL/HIGH) based on comparison with trailing 24-hour average.",
|
|
"data": {
|
|
"price_rating_threshold_low": "Low Rating Threshold (below trailing average)",
|
|
"price_rating_threshold_high": "High Rating Threshold (above trailing average)"
|
|
}
|
|
},
|
|
"best_price": {
|
|
"title": "Best Price Period Settings",
|
|
"description": "{step_progress}\n\nConfigure settings for the Best Price Period binary sensor. This sensor is active during periods with the lowest electricity prices.",
|
|
"data": {
|
|
"best_price_min_period_length": "Minimum Period Length",
|
|
"best_price_flex": "Flexibility: Maximum above minimum price",
|
|
"best_price_min_distance_from_avg": "Minimum Distance: Required below daily average",
|
|
"best_price_min_volatility": "Minimum Volatility Filter",
|
|
"best_price_max_level": "Price Level Filter (Optional)"
|
|
},
|
|
"data_description": {
|
|
"best_price_min_volatility": "Only show best price periods when today's volatility meets or exceeds this level. Default: 'Low' (show regardless of volatility) - battery optimization is useful even with small price variations. Select 'Moderate'/'High' to only show periods on more volatile days. Works with AND logic: volatility AND level filter must both pass.",
|
|
"best_price_max_level": "Only show best price periods if at least one interval today has a price level ≤ selected value. Works with AND logic: volatility filter (if set) AND level filter must both pass. Useful to avoid battery charging on expensive days. Select 'Any' to disable this filter."
|
|
}
|
|
},
|
|
"peak_price": {
|
|
"title": "Peak Price Period Settings",
|
|
"description": "{step_progress}\n\nConfigure settings for the Peak Price Period binary sensor. This sensor is active during periods with the highest electricity prices.",
|
|
"data": {
|
|
"peak_price_min_period_length": "Minimum Period Length",
|
|
"peak_price_flex": "Flexibility: Maximum below maximum price (negative value)",
|
|
"peak_price_min_distance_from_avg": "Minimum Distance: Required above daily average",
|
|
"peak_price_min_volatility": "Minimum Volatility Filter",
|
|
"peak_price_min_level": "Price Level Filter (Optional)"
|
|
},
|
|
"data_description": {
|
|
"peak_price_min_volatility": "Only show peak price periods when today's volatility meets or exceeds this level. Default: 'Low' (show regardless of volatility) - peak warnings are relevant even at low spreads since avoiding expensive hours always matters. Select 'Moderate'/'High' to only show peaks on volatile days. Works with AND logic: volatility AND level filter must both pass.",
|
|
"peak_price_min_level": "Only show peak price periods if at least one interval today has a price level ≥ selected value. Works with AND logic: volatility filter (if set) AND level filter must both pass. Typically set to 'Any' since peak periods are relative to the day. Select 'Any' to disable this filter."
|
|
}
|
|
},
|
|
"price_trend": {
|
|
"title": "Price Trend Thresholds",
|
|
"description": "{step_progress}\n\nConfigure thresholds for price trend sensors. These sensors compare the current price with the average of the next N hours to determine if prices are rising, falling, or stable.",
|
|
"data": {
|
|
"price_trend_threshold_rising": "Rising Threshold (above current price)",
|
|
"price_trend_threshold_falling": "Falling Threshold (below current price, negative value)"
|
|
}
|
|
},
|
|
"volatility": {
|
|
"title": "Price Volatility Thresholds",
|
|
"description": "{step_progress}\n\nConfigure thresholds for volatility classification. Volatility measures price variation (spread between min/max) in minor currency units. These thresholds are used by volatility sensors and period filters.",
|
|
"data": {
|
|
"volatility_threshold_moderate": "Moderate Threshold (spread ≥ this value)",
|
|
"volatility_threshold_high": "High Threshold (spread ≥ this value)",
|
|
"volatility_threshold_very_high": "Very High Threshold (spread ≥ this value)"
|
|
}
|
|
}
|
|
},
|
|
"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."
|
|
},
|
|
"abort": {
|
|
"entry_not_found": "Tibber configuration entry not found."
|
|
}
|
|
},
|
|
"entity": {
|
|
"sensor": {
|
|
"current_price": {
|
|
"name": "Current Electricity Price"
|
|
},
|
|
"next_interval_price": {
|
|
"name": "Next Price"
|
|
},
|
|
"previous_interval_price": {
|
|
"name": "Previous Electricity Price"
|
|
},
|
|
"current_hour_average": {
|
|
"name": "Current Hour Average Price"
|
|
},
|
|
"next_hour_average": {
|
|
"name": "Next Hour Average Price"
|
|
},
|
|
"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": "Today's Average Price"
|
|
},
|
|
"lowest_price_tomorrow": {
|
|
"name": "Tomorrow's Lowest Price"
|
|
},
|
|
"highest_price_tomorrow": {
|
|
"name": "Tomorrow's Highest Price"
|
|
},
|
|
"average_price_tomorrow": {
|
|
"name": "Tomorrow's Average Price"
|
|
},
|
|
"trailing_price_average": {
|
|
"name": "Trailing 24h Average Price"
|
|
},
|
|
"leading_price_average": {
|
|
"name": "Leading 24h Average Price"
|
|
},
|
|
"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"
|
|
},
|
|
"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": "Next 1h Average Price"
|
|
},
|
|
"next_avg_2h": {
|
|
"name": "Next 2h Average Price"
|
|
},
|
|
"next_avg_3h": {
|
|
"name": "Next 3h Average Price"
|
|
},
|
|
"next_avg_4h": {
|
|
"name": "Next 4h Average Price"
|
|
},
|
|
"next_avg_5h": {
|
|
"name": "Next 5h Average Price"
|
|
},
|
|
"next_avg_6h": {
|
|
"name": "Next 6h Average Price"
|
|
},
|
|
"next_avg_8h": {
|
|
"name": "Next 8h Average Price"
|
|
},
|
|
"next_avg_12h": {
|
|
"name": "Next 12h Average Price"
|
|
},
|
|
"price_trend_1h": {
|
|
"name": "Price Trend (1h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"price_trend_2h": {
|
|
"name": "Price Trend (2h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"price_trend_3h": {
|
|
"name": "Price Trend (3h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"price_trend_4h": {
|
|
"name": "Price Trend (4h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"price_trend_5h": {
|
|
"name": "Price Trend (5h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"price_trend_6h": {
|
|
"name": "Price Trend (6h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"price_trend_8h": {
|
|
"name": "Price Trend (8h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"price_trend_12h": {
|
|
"name": "Price Trend (12h)",
|
|
"state": {
|
|
"rising": "Rising",
|
|
"falling": "Falling",
|
|
"stable": "Stable"
|
|
}
|
|
},
|
|
"daily_rating": {
|
|
"name": "Daily Price Rating"
|
|
},
|
|
"monthly_rating": {
|
|
"name": "Monthly Price Rating"
|
|
},
|
|
"data_timestamp": {
|
|
"name": "Price Data Expiration"
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"price_forecast": {
|
|
"name": "Price Forecast"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
},
|
|
"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."
|
|
}
|
|
},
|
|
"services": {
|
|
"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."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"selector": {
|
|
"volatility": {
|
|
"options": {
|
|
"LOW": "Low",
|
|
"MODERATE": "Moderate",
|
|
"HIGH": "High",
|
|
"VERY_HIGH": "Very high"
|
|
}
|
|
},
|
|
"price_level": {
|
|
"options": {
|
|
"ANY": "Any",
|
|
"VERY_CHEAP": "Very cheap",
|
|
"CHEAP": "Cheap",
|
|
"NORMAL": "Normal",
|
|
"EXPENSIVE": "Expensive",
|
|
"VERY_EXPENSIVE": "Very expensive"
|
|
}
|
|
}
|
|
},
|
|
"title": "Tibber Price Information & Ratings"
|
|
}
|