mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-29 21:03:40 +00:00
Complete terminology migration from confusing "major/minor" to clearer
"base/subunit" currency naming throughout entire codebase, translations,
documentation, tests, and services.
BREAKING CHANGES:
1. **Service API Parameters Renamed**:
- `get_chartdata`: `minor_currency` → `subunit_currency`
- `get_apexcharts_yaml`: Updated service_data references from
`minor_currency: true` to `subunit_currency: true`
- All automations/scripts using these parameters MUST be updated
2. **Configuration Option Key Changed**:
- Config entry option: Display mode setting now uses new terminology
- Internal key: `currency_display_mode` values remain "base"/"subunit"
- User-facing labels updated in all 5 languages (de, en, nb, nl, sv)
3. **Sensor Entity Key Renamed**:
- `current_interval_price_major` → `current_interval_price_base`
- Entity ID changes: `sensor.tibber_home_current_interval_price_major`
→ `sensor.tibber_home_current_interval_price_base`
- Energy Dashboard configurations MUST update entity references
4. **Function Signatures Changed**:
- `format_price_unit_major()` → `format_price_unit_base()`
- `format_price_unit_minor()` → `format_price_unit_subunit()`
- `get_price_value()`: Parameter `in_euro` deprecated in favor of
`config_entry` (backward compatible for now)
5. **Translation Keys Renamed**:
- All language files: Sensor translation key
`current_interval_price_major` → `current_interval_price_base`
- Service parameter descriptions updated in all languages
- Selector options updated: Display mode dropdown values
Changes by Category:
**Core Code (Python)**:
- const.py: Renamed all format_price_unit_*() functions, updated docstrings
- entity_utils/helpers.py: Updated get_price_value() with config-driven
conversion and backward-compatible in_euro parameter
- sensor/__init__.py: Added display mode filtering for base currency sensor
- sensor/core.py:
* Implemented suggested_display_precision property for dynamic decimal places
* Updated native_unit_of_measurement to use get_display_unit_string()
* Updated all price conversion calls to use config_entry parameter
- sensor/definitions.py: Renamed entity key and updated all
suggested_display_precision values (2 decimals for most sensors)
- sensor/calculators/*.py: Updated all price conversion calls (8 calculators)
- sensor/helpers.py: Updated aggregate_price_data() signature with config_entry
- sensor/attributes/future.py: Updated future price attributes conversion
**Services**:
- services/chartdata.py: Renamed parameter minor_currency → subunit_currency
throughout (53 occurrences), updated metadata calculation
- services/apexcharts.py: Updated service_data references in generated YAML
- services/formatters.py: Renamed parameter use_minor_currency →
use_subunit_currency in aggregate_hourly_exact() and get_period_data()
- sensor/chart_metadata.py: Updated default parameter name
**Translations (5 Languages)**:
- All /translations/*.json:
* Added new config step "display_settings" with comprehensive explanations
* Renamed current_interval_price_major → current_interval_price_base
* Updated service parameter descriptions (subunit_currency)
* Added selector.currency_display_mode.options with translated labels
- All /custom_translations/*.json:
* Renamed sensor description keys
* Updated chart_metadata usage_tips references
**Documentation**:
- docs/user/docs/actions.md: Updated parameter table and feature list
- docs/user/versioned_docs/version-v0.21.0/actions.md: Backported changes
**Tests**:
- Updated 7 test files with renamed parameters and conversion logic:
* test_connect_segments.py: Renamed minor/major to subunit/base
* test_period_data_format.py: Updated period price conversion tests
* test_avg_none_fallback.py: Fixed tuple unpacking for new return format
* test_best_price_e2e.py: Added config_entry parameter to all calls
* test_cache_validity.py: Fixed cache data structure (price_info key)
* test_coordinator_shutdown.py: Added repair_manager mock
* test_midnight_turnover.py: Added config_entry parameter
* test_peak_price_e2e.py: Added config_entry parameter, fixed price_avg → price_mean
* test_percentage_calculations.py: Added config_entry mock
**Coordinator/Period Calculation**:
- coordinator/periods.py: Added config_entry parameter to
calculate_periods_with_relaxation() calls (2 locations)
Migration Guide:
1. **Update Service Calls in Automations/Scripts**:
\`\`\`yaml
# Before:
service: tibber_prices.get_chartdata
data:
minor_currency: true
# After:
service: tibber_prices.get_chartdata
data:
subunit_currency: true
\`\`\`
2. **Update Energy Dashboard Configuration**:
- Settings → Dashboards → Energy
- Replace sensor entity:
`sensor.tibber_home_current_interval_price_major` →
`sensor.tibber_home_current_interval_price_base`
3. **Review Integration Configuration**:
- Settings → Devices & Services → Tibber Prices → Configure
- New "Currency Display Settings" step added
- Default mode depends on currency (EUR → subunit, Scandinavian → base)
Rationale:
The "major/minor" terminology was confusing and didn't clearly communicate:
- **Major** → Unclear if this means "primary" or "large value"
- **Minor** → Easily confused with "less important" rather than "smaller unit"
New terminology is precise and self-explanatory:
- **Base currency** → Standard ISO currency (€, kr, $, £)
- **Subunit currency** → Fractional unit (ct, øre, ¢, p)
This aligns with:
- International terminology (ISO 4217 standard)
- Banking/financial industry conventions
- User expectations from payment processing systems
Impact: Aligns currency terminology with international standards. Users must
update service calls, automations, and Energy Dashboard configuration after
upgrade.
Refs: User feedback session (December 2025) identified terminology confusion
507 lines
49 KiB
JSON
507 lines
49 KiB
JSON
{
|
||
"apexcharts": {
|
||
"title_rating_level": "Price Phases Daily Progress",
|
||
"title_level": "Price Level",
|
||
"best_price_period_name": "Best Price Period",
|
||
"notification": {
|
||
"metadata_sensor_unavailable": {
|
||
"title": "Tibber Prices: ApexCharts YAML Generated with Limited Functionality",
|
||
"message": "You just generated an ApexCharts card configuration via Developer Tools. The Chart Metadata sensor is currently disabled, so the generated YAML will only show **basic functionality** (auto-scale axis, fixed gradient at 50%).\n\n**To enable full functionality** (optimized scaling, dynamic gradient colors):\n1. [Open Tibber Prices Integration](https://my.home-assistant.io/redirect/integration/?domain=tibber_prices)\n2. Enable the 'Chart Metadata' sensor\n3. **Generate the YAML again** via Developer Tools\n4. **Replace the old YAML** in your dashboard with the new version\n\n⚠️ Simply enabling the sensor is not enough - you must regenerate and replace the YAML code!"
|
||
},
|
||
"missing_cards": {
|
||
"title": "Tibber Prices: ApexCharts YAML Cannot Be Used",
|
||
"message": "You just generated an ApexCharts card configuration via Developer Tools, but the generated YAML **will not work** because required custom cards are missing.\n\n**Missing cards:**\n{cards}\n\n**To use the generated YAML:**\n1. Click the links above to install the missing cards from HACS\n2. Restart Home Assistant (sometimes needed)\n3. **Generate the YAML again** via Developer Tools\n4. Add the YAML to your dashboard\n\n⚠️ The current YAML code will not work until all cards are installed!"
|
||
}
|
||
}
|
||
},
|
||
"sensor": {
|
||
"current_interval_price": {
|
||
"description": "The current electricity price per kWh",
|
||
"long_description": "Shows the current price per kWh from your Tibber subscription",
|
||
"usage_tips": "Use this to track prices or to create automations that run when electricity is cheap"
|
||
},
|
||
"current_interval_price_base": {
|
||
"description": "Current electricity price in base currency (EUR/kWh, NOK/kWh, etc.) for Energy Dashboard",
|
||
"long_description": "Shows the current price per kWh in base currency units (e.g., EUR/kWh instead of ct/kWh, NOK/kWh instead of øre/kWh). This sensor is specifically designed for use with Home Assistant's Energy Dashboard, which requires prices in standard currency units.",
|
||
"usage_tips": "Use this sensor when configuring the Energy Dashboard under Settings → Dashboards → Energy. Select this sensor as the 'Entity with current price' to automatically calculate your energy costs. The Energy Dashboard multiplies your energy consumption (kWh) by this price to show total costs."
|
||
},
|
||
"next_interval_price": {
|
||
"description": "The next interval electricity price per kWh",
|
||
"long_description": "Shows the price for the next 15-minute interval from your Tibber subscription",
|
||
"usage_tips": "Use this to prepare for upcoming price changes or to schedule devices to run during cheaper intervals"
|
||
},
|
||
"previous_interval_price": {
|
||
"description": "The previous interval electricity price per kWh",
|
||
"long_description": "Shows the price for the previous 15-minute interval from your Tibber subscription",
|
||
"usage_tips": "Use this to review past price changes or track price history"
|
||
},
|
||
"current_hour_average_price": {
|
||
"description": "Rolling 5-interval average price per kWh",
|
||
"long_description": "Shows the average price per kWh calculated from 5 intervals: 2 previous, current, and 2 next intervals (approximately 75 minutes total). This provides a smoothed 'hour price' that adapts as time moves, rather than being fixed to clock hours.",
|
||
"usage_tips": "Use this for a more stable price indicator that smooths out short-term fluctuations while still being responsive to price changes. Better than fixed hourly prices for making consumption decisions."
|
||
},
|
||
"next_hour_average_price": {
|
||
"description": "Rolling 5-interval average price for next hour per kWh",
|
||
"long_description": "Shows the average price per kWh calculated from 5 intervals centered one hour ahead: approximately intervals +2 through +6 from now (covering minutes +30 to +105). This provides a forward-looking smoothed 'hour price' for planning consumption.",
|
||
"usage_tips": "Use this to anticipate price changes in the next hour. Helpful for scheduling high-consumption activities like charging electric vehicles, running dishwashers, or heating systems."
|
||
},
|
||
"lowest_price_today": {
|
||
"description": "The lowest electricity price for today per kWh",
|
||
"long_description": "Shows the lowest price per kWh for the current day from your Tibber subscription",
|
||
"usage_tips": "Use this to compare current prices to the cheapest time of the day"
|
||
},
|
||
"highest_price_today": {
|
||
"description": "The highest electricity price for today per kWh",
|
||
"long_description": "Shows the highest price per kWh for the current day from your Tibber subscription",
|
||
"usage_tips": "Use this to avoid running appliances during peak price times"
|
||
},
|
||
"average_price_today": {
|
||
"description": "The average electricity price for today per kWh",
|
||
"long_description": "Shows the average price per kWh for the current day from your Tibber subscription",
|
||
"usage_tips": "Use this as a baseline for comparing current prices"
|
||
},
|
||
"lowest_price_tomorrow": {
|
||
"description": "The lowest electricity price for tomorrow per kWh",
|
||
"long_description": "Shows the lowest price per kWh for tomorrow from your Tibber subscription. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).",
|
||
"usage_tips": "Use this to plan energy-intensive activities for tomorrow's cheapest time. Perfect for pre-scheduling heating, EV charging, or appliances."
|
||
},
|
||
"highest_price_tomorrow": {
|
||
"description": "The highest electricity price for tomorrow per kWh",
|
||
"long_description": "Shows the highest price per kWh for tomorrow from your Tibber subscription. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).",
|
||
"usage_tips": "Use this to avoid running appliances during tomorrow's peak price times. Helpful for planning around expensive periods."
|
||
},
|
||
"average_price_tomorrow": {
|
||
"description": "The average electricity price for tomorrow per kWh",
|
||
"long_description": "Shows the average price per kWh for tomorrow from your Tibber subscription. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).",
|
||
"usage_tips": "Use this as a baseline for comparing tomorrow's prices and planning consumption. Compare with today's average to see if tomorrow will be more or less expensive overall."
|
||
},
|
||
"yesterday_price_level": {
|
||
"description": "Aggregated price level for yesterday",
|
||
"long_description": "Shows the aggregated price level classification for all intervals in yesterday. Uses the same logic as hourly sensors to determine the overall price level for the entire day.",
|
||
"usage_tips": "Use this to understand yesterday's overall price situation. Compare with today to see daily trends."
|
||
},
|
||
"today_price_level": {
|
||
"description": "Aggregated price level for today",
|
||
"long_description": "Shows the aggregated price level classification for all intervals in today. Uses the same logic as hourly sensors to determine the overall price level for the entire day.",
|
||
"usage_tips": "Use this to understand today's overall price situation at a glance. Helpful for quick assessments of whether today is generally cheap or expensive."
|
||
},
|
||
"tomorrow_price_level": {
|
||
"description": "Aggregated price level for tomorrow",
|
||
"long_description": "Shows the aggregated price level classification for all intervals in tomorrow. Uses the same logic as hourly sensors to determine the overall price level for the entire day. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).",
|
||
"usage_tips": "Use this to understand tomorrow's overall price situation. Compare with today to see if tomorrow will be more or less favorable for energy consumption."
|
||
},
|
||
"yesterday_price_rating": {
|
||
"description": "Aggregated price rating for yesterday",
|
||
"long_description": "Shows the aggregated price rating (low/normal/high) for all intervals in yesterday, based on your configured thresholds. Uses the same logic as hourly sensors to determine the overall rating for the entire day.",
|
||
"usage_tips": "Use this to understand yesterday's price situation relative to your personalized thresholds. Compare with today for trend analysis."
|
||
},
|
||
"today_price_rating": {
|
||
"description": "Aggregated price rating for today",
|
||
"long_description": "Shows the aggregated price rating (low/normal/high) for all intervals in today, based on your configured thresholds. Uses the same logic as hourly sensors to determine the overall rating for the entire day.",
|
||
"usage_tips": "Use this to quickly assess today's price situation relative to your personalized thresholds. Helps make consumption decisions for the current day."
|
||
},
|
||
"tomorrow_price_rating": {
|
||
"description": "Aggregated price rating for tomorrow",
|
||
"long_description": "Shows the aggregated price rating (low/normal/high) for all intervals in tomorrow, based on your configured thresholds. Uses the same logic as hourly sensors to determine the overall rating for the entire day. This sensor becomes unavailable until tomorrow's data is published by Tibber (typically around 13:00-14:00 CET).",
|
||
"usage_tips": "Use this to plan tomorrow's energy consumption based on your personalized price thresholds. Compare with today to decide if you should shift consumption to tomorrow or use energy today."
|
||
},
|
||
"trailing_price_average": {
|
||
"description": "The average electricity price for the past 24 hours per kWh",
|
||
"long_description": "Shows the average price per kWh calculated from the past 24 hours (trailing average) from your Tibber subscription. This provides a rolling average that updates every 15 minutes based on historical data.",
|
||
"usage_tips": "Use this to compare current prices against recent trends. A current price significantly above this average may indicate a good time to reduce consumption."
|
||
},
|
||
"leading_price_average": {
|
||
"description": "The average electricity price for the next 24 hours per kWh",
|
||
"long_description": "Shows the average price per kWh calculated from the next 24 hours (leading average) from your Tibber subscription. This provides a forward-looking average based on available forecast data.",
|
||
"usage_tips": "Use this to plan energy usage. If the current price is below the leading average, it may be a good time to run energy-intensive appliances."
|
||
},
|
||
"trailing_price_min": {
|
||
"description": "The minimum electricity price for the past 24 hours per kWh",
|
||
"long_description": "Shows the minimum price per kWh from the past 24 hours (trailing minimum) from your Tibber subscription. This provides the lowest price seen in the last 24 hours.",
|
||
"usage_tips": "Use this to see the best price opportunity you had in the past 24 hours and compare it with current prices."
|
||
},
|
||
"trailing_price_max": {
|
||
"description": "The maximum electricity price for the past 24 hours per kWh",
|
||
"long_description": "Shows the maximum price per kWh from the past 24 hours (trailing maximum) from your Tibber subscription. This provides the highest price seen in the last 24 hours.",
|
||
"usage_tips": "Use this to see the peak price in the past 24 hours and assess price volatility."
|
||
},
|
||
"leading_price_min": {
|
||
"description": "The minimum electricity price for the next 24 hours per kWh",
|
||
"long_description": "Shows the minimum price per kWh from the next 24 hours (leading minimum) from your Tibber subscription. This provides the lowest price expected in the next 24 hours based on forecast data.",
|
||
"usage_tips": "Use this to identify the best price opportunity coming up and schedule energy-intensive tasks accordingly."
|
||
},
|
||
"leading_price_max": {
|
||
"description": "The maximum electricity price for the next 24 hours per kWh",
|
||
"long_description": "Shows the maximum price per kWh from the next 24 hours (leading maximum) from your Tibber subscription. This provides the highest price expected in the next 24 hours based on forecast data.",
|
||
"usage_tips": "Use this to avoid running appliances during upcoming peak price periods."
|
||
},
|
||
"current_interval_price_level": {
|
||
"description": "The current price level classification",
|
||
"long_description": "Shows Tibber's classification of the current price compared to historical prices",
|
||
"usage_tips": "Use this to create automations based on relative price levels rather than absolute prices"
|
||
},
|
||
"next_interval_price_level": {
|
||
"description": "Price level for the next 15-minute interval",
|
||
"long_description": "Shows the price level classification for the upcoming interval. Helps anticipate short-term price changes for immediate planning.",
|
||
"usage_tips": "Use for quick decisions about starting or stopping high-power devices in the next few minutes."
|
||
},
|
||
"previous_interval_price_level": {
|
||
"description": "Price level for the previous 15-minute interval",
|
||
"long_description": "Shows the price level classification for the last interval. Useful for historical comparison and understanding recent price trends.",
|
||
"usage_tips": "Use to compare current vs recent price levels or analyze consumption patterns against historical prices."
|
||
},
|
||
"current_hour_price_level": {
|
||
"description": "Aggregated price level for current rolling hour (5 intervals)",
|
||
"long_description": "Shows the median price level across 5 intervals (2 before, current, 2 after) covering approximately 75 minutes. Provides a more stable price level indicator that smooths out short-term fluctuations.",
|
||
"usage_tips": "Use for medium-term planning decisions where you want to avoid reacting to brief price spikes or dips."
|
||
},
|
||
"next_hour_price_level": {
|
||
"description": "Aggregated price level for next rolling hour (5 intervals ahead)",
|
||
"long_description": "Shows the median price level across 5 intervals centered one hour ahead. Helps plan consumption based on upcoming price trends rather than instantaneous future prices.",
|
||
"usage_tips": "Use to schedule activities for the next hour based on a smoothed price level forecast."
|
||
},
|
||
"current_interval_price_rating": {
|
||
"description": "How the current interval's price compares to historical data",
|
||
"long_description": "Shows how the current interval's price compares to historical price data as a percentage",
|
||
"usage_tips": "A positive percentage means the current price is above average, negative means below average"
|
||
},
|
||
"next_interval_price_rating": {
|
||
"description": "Price rating for the next 15-minute interval",
|
||
"long_description": "Shows how the next interval's price compares to the rolling 24-hour average. Helps anticipate if upcoming prices are above or below the recent trend.",
|
||
"usage_tips": "Use to make quick decisions about starting activities in the next interval based on relative price position."
|
||
},
|
||
"previous_interval_price_rating": {
|
||
"description": "Price rating for the previous 15-minute interval",
|
||
"long_description": "Shows how the last interval's price compared to the rolling average. Useful for understanding recent price behavior.",
|
||
"usage_tips": "Use for analyzing how price ratings changed over time or validating past consumption decisions."
|
||
},
|
||
"current_hour_price_rating": {
|
||
"description": "Aggregated price rating for current rolling hour (5 intervals)",
|
||
"long_description": "Shows the average rating across 5 intervals (2 before, current, 2 after). Based on the average percentage difference from rolling 24h average, providing a smoothed rating indicator.",
|
||
"usage_tips": "Use for stable medium-term price assessment that doesn't overreact to brief price anomalies."
|
||
},
|
||
"next_hour_price_rating": {
|
||
"description": "Aggregated price rating for next rolling hour (5 intervals ahead)",
|
||
"long_description": "Shows the averaged rating for 5 intervals centered one hour ahead. Helps understand if the next hour will generally be above or below average pricing.",
|
||
"usage_tips": "Use to decide if you should wait an hour before starting high-consumption activities."
|
||
},
|
||
"next_avg_1h": {
|
||
"description": "Average price for the next 1 hour (forward-only from next interval)",
|
||
"long_description": "Forward-looking average: Shows average of next 4 intervals (1 hour) starting from the NEXT 15-minute interval (not including current). Different from current_hour_average_price which includes past intervals. Use for absolute price threshold planning.",
|
||
"usage_tips": "Absolute price threshold: Only start appliances when average stays below your maximum acceptable price (e.g., below 0.25 EUR/kWh). Combine with trend sensor for optimal timing. Note: This is NOT a replacement for hourly prices - use current_hour_average_price for that."
|
||
},
|
||
"next_avg_2h": {
|
||
"description": "Average price for the next 2 hours",
|
||
"long_description": "Shows the average price for the next 8 intervals (2 hours) starting from the next 15-minute interval.",
|
||
"usage_tips": "Absolute price threshold: Set a maximum acceptable average price for standard appliances like washing machines. Ensures you never pay more than your limit."
|
||
},
|
||
"next_avg_3h": {
|
||
"description": "Average price for the next 3 hours",
|
||
"long_description": "Shows the average price for the next 12 intervals (3 hours) starting from the next 15-minute interval.",
|
||
"usage_tips": "Absolute price threshold: For EU Eco programs (dishwashers, 3-4h runtime). Only start when 3h average is below your price limit. Use with trend sensor to find best moment within acceptable price range."
|
||
},
|
||
"next_avg_4h": {
|
||
"description": "Average price for the next 4 hours",
|
||
"long_description": "Shows the average price for the next 16 intervals (4 hours) starting from the next 15-minute interval.",
|
||
"usage_tips": "Absolute price threshold: Set maximum acceptable price for heat pumps or water heaters. Prevents operation during expensive periods regardless of relative trends."
|
||
},
|
||
"next_avg_5h": {
|
||
"description": "Average price for the next 5 hours",
|
||
"long_description": "Shows the average price for the next 20 intervals (5 hours) starting from the next 15-minute interval.",
|
||
"usage_tips": "Absolute price threshold: Bridge between short and long-term planning. Use for extended cycles with hard price limits (e.g., pool pumps, extended heating cycles)."
|
||
},
|
||
"next_avg_6h": {
|
||
"description": "Average price for the next 6 hours",
|
||
"long_description": "Shows the average price for the next 24 intervals (6 hours) starting from the next 15-minute interval.",
|
||
"usage_tips": "Absolute price threshold: Evening planning with price caps. Only schedule tasks if 6h average stays below your maximum acceptable cost."
|
||
},
|
||
"next_avg_8h": {
|
||
"description": "Average price for the next 8 hours",
|
||
"long_description": "Shows the average price for the next 32 intervals (8 hours) starting from the next 15-minute interval.",
|
||
"usage_tips": "Absolute price threshold: Overnight operation decisions. Set hard price limits for night loads (battery charging, thermal storage). Never exceed your budget."
|
||
},
|
||
"next_avg_12h": {
|
||
"description": "Average price for the next 12 hours",
|
||
"long_description": "Shows the average price for the next 48 intervals (12 hours) starting from the next 15-minute interval.",
|
||
"usage_tips": "Absolute price threshold: Strategic decisions with price caps. Only proceed if 12h average is below your maximum acceptable price. Good for postponable large loads."
|
||
},
|
||
"price_trend_1h": {
|
||
"description": "Price trend for the next hour",
|
||
"long_description": "Compares current interval price with average of next 1 hour (4 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: 'falling' = wait, prices dropping. 'rising' = act now or you'll pay more. 'stable' = price doesn't matter much now. Works independent of absolute price level."
|
||
},
|
||
"price_trend_2h": {
|
||
"description": "Price trend for the next 2 hours",
|
||
"long_description": "Compares current interval price with average of next 2 hours (8 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: Ideal for appliances. 'falling' means better prices coming in 2h - postpone if possible. Finds best timing within your available window, regardless of season."
|
||
},
|
||
"price_trend_3h": {
|
||
"description": "Price trend for the next 3 hours",
|
||
"long_description": "Compares current interval price with average of next 3 hours (12 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: For Eco programs. 'falling' means prices dropping >5% - worth waiting. Works in any season. Combine with avg sensor for price cap: only when avg < your limit AND trend not 'falling'."
|
||
},
|
||
"price_trend_4h": {
|
||
"description": "Price trend for the next 4 hours",
|
||
"long_description": "Compares current interval price with average of next 4 hours (16 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: Heat pump/battery decisions. 'falling' means better charging window coming. Always finds relative best time - whether prices are 10 cents or 50 cents. Use avg sensor for absolute limit."
|
||
},
|
||
"price_trend_5h": {
|
||
"description": "Price trend for the next 5 hours",
|
||
"long_description": "Compares current interval price with average of next 5 hours (20 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: Extended operations. Adapts to market - finds best relative timing in any price environment. 'stable/rising' = good time to start within your planning window."
|
||
},
|
||
"price_trend_6h": {
|
||
"description": "Price trend for the next 6 hours",
|
||
"long_description": "Compares current interval price with average of next 6 hours (24 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: Evening decisions. 'falling' = prices improve significantly if you wait. No fixed thresholds needed - automatically adjusts to winter/summer price levels."
|
||
},
|
||
"price_trend_8h": {
|
||
"description": "Price trend for the next 8 hours",
|
||
"long_description": "Compares current interval price with average of next 8 hours (32 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: Night planning. 'falling' means waiting for night pays off (>5% cheaper). Works year-round without manual threshold adjustments. Start when 'stable' or 'rising'."
|
||
},
|
||
"price_trend_12h": {
|
||
"description": "Price trend for the next 12 hours",
|
||
"long_description": "Compares current interval price with average of next 12 hours (48 intervals). Rising if future is >5% higher, falling if >5% lower, stable otherwise.",
|
||
"usage_tips": "Relative optimization: Long-term strategic decisions. 'falling' = significantly better prices coming tonight/tomorrow. Finds optimal timing in any market condition. Best combined with avg sensor price cap."
|
||
},
|
||
"current_price_trend": {
|
||
"description": "Current price trend direction and how long it will last",
|
||
"long_description": "Shows the current price trend (rising/falling/stable) by combining historical momentum (weighted 1h lookback) with future outlook. Recognizes ongoing trends earlier than future-only analysis. Uses ±3% momentum threshold and volatility-adaptive future comparison. Calculates dynamically until the next trend change occurs (or 3h default if no change in 24h). The state shows the current direction, attributes show when it changes and what comes next.",
|
||
"usage_tips": "Status display: Dashboard visibility of 'what's happening now until when'. Perfectly synchronized with next_price_trend_change. Example: Badge showing 'Rising for 2.5h' or 'Falling until 16:45'. Better than time-window sensors because it understands you're ALREADY in a trend, not just predicting future changes. Use for quick visual overview, not automation triggers."
|
||
},
|
||
"next_price_trend_change": {
|
||
"description": "When the next significant price trend change will occur",
|
||
"long_description": "Scans the next 24 hours (96 intervals) to find when the price trend (rising/falling/stable) will change from the current momentum. First determines current trend using weighted 1h lookback (recognizes ongoing trends), then finds when that trend reverses. Uses volatility-adaptive thresholds (3% momentum detection, market-adjusted future comparison). Returns the timestamp when the change is expected.",
|
||
"usage_tips": "Event-based automation: Trigger actions WHEN trend changes, not IN X hours. Example: 'Charge EV when next trend change shows falling prices' or 'Run dishwasher before prices start rising'. More accurate than simple future comparison because it knows if you're already in a trend. Complements time-window sensors (price_trend_Xh) which answer 'WILL prices be higher in X hours?'"
|
||
},
|
||
"daily_rating": {
|
||
"description": "How today's prices compare to historical data",
|
||
"long_description": "Shows how today's prices compare to historical price data as a percentage",
|
||
"usage_tips": "A positive percentage means today's prices are above average, negative means below average"
|
||
},
|
||
"monthly_rating": {
|
||
"description": "How this month's prices compare to historical data",
|
||
"long_description": "Shows how this month's prices compare to historical price data as a percentage",
|
||
"usage_tips": "A positive percentage means this month's prices are above average, negative means below average"
|
||
},
|
||
"data_timestamp": {
|
||
"description": "Timestamp of the latest available price data interval",
|
||
"long_description": "Shows the timestamp of the latest available price data interval from your Tibber subscription"
|
||
},
|
||
"today_volatility": {
|
||
"description": "Price volatility classification for today",
|
||
"long_description": "Shows how much electricity prices vary throughout today based on the spread (difference between highest and lowest price). Classification: low = spread < 5ct, moderate = 5-15ct, high = 15-30ct, very high = >30ct.",
|
||
"usage_tips": "Use this to decide if price-based optimization is worthwhile. For example, with a balcony battery that has 15% efficiency losses, optimization only makes sense when volatility is at least moderate. Create automations that check volatility before scheduling charging/discharging cycles."
|
||
},
|
||
"tomorrow_volatility": {
|
||
"description": "Price volatility classification for tomorrow",
|
||
"long_description": "Shows how much electricity prices will vary throughout tomorrow based on the spread (difference between highest and lowest price). Becomes unavailable until tomorrow's data is published (typically 13:00-14:00 CET).",
|
||
"usage_tips": "Use this for advance planning of tomorrow's energy usage. If tomorrow has high or very high volatility, it's worth optimizing energy consumption timing. If low, you can run devices anytime without significant cost differences."
|
||
},
|
||
"next_24h_volatility": {
|
||
"description": "Price volatility classification for the rolling next 24 hours",
|
||
"long_description": "Shows how much electricity prices vary in the next 24 hours from now (rolling window). This crosses day boundaries and updates every 15 minutes, providing a forward-looking volatility assessment independent of calendar days.",
|
||
"usage_tips": "Best sensor for real-time optimization decisions. Unlike today/tomorrow sensors that switch at midnight, this provides continuous 24h volatility assessment. Use for battery charging strategies that span across day boundaries."
|
||
},
|
||
"today_tomorrow_volatility": {
|
||
"description": "Combined price volatility classification for today and tomorrow",
|
||
"long_description": "Shows volatility across both today and tomorrow combined (when tomorrow's data is available). Provides an extended view of price variation spanning up to 48 hours. Falls back to today-only when tomorrow's data isn't available yet.",
|
||
"usage_tips": "Use this for multi-day planning and to understand if price opportunities exist across the day boundary. The 'today_volatility' and 'tomorrow_volatility' breakdown attributes show individual day contributions. Useful for scheduling charging sessions that might span midnight."
|
||
},
|
||
"data_lifecycle_status": {
|
||
"description": "Current state of price data lifecycle and caching",
|
||
"long_description": "Shows whether the integration is using cached data or fresh data from the API. Displays current lifecycle state: 'cached' (using stored data), 'fresh' (just fetched from API), 'refreshing' (currently fetching), 'searching_tomorrow' (actively polling for tomorrow's data after 13:00), 'turnover_pending' (within 15 minutes of midnight, 23:45-00:00), or 'error' (fetch failed). Includes comprehensive attributes like cache age, next API poll time, data completeness, and API call statistics.",
|
||
"usage_tips": "Use this diagnostic sensor to understand data freshness and API call patterns. Check 'cache_age' attribute to see how old the current data is. Monitor 'next_api_poll' to know when the next update is scheduled. Use 'data_completeness' to see if yesterday/today/tomorrow data is available. The 'api_calls_today' counter helps track API usage. Perfect for troubleshooting or understanding the integration's behavior."
|
||
},
|
||
"best_price_end_time": {
|
||
"description": "When the current or next best price period ends",
|
||
"long_description": "Shows the end timestamp of the current best price period when active, or the end of the next period when no period is active. Always shows a useful time reference for planning. Returns 'Unknown' only when no periods are configured.",
|
||
"usage_tips": "Use this to display a countdown like 'Cheap period ends in 2 hours' (when active) or 'Next cheap period ends at 14:00' (when inactive). Home Assistant automatically shows relative time for timestamp sensors."
|
||
},
|
||
"best_price_period_duration": {
|
||
"description": "Total length of current or next best price period in minutes",
|
||
"long_description": "Shows how long the best price period lasts in total. During an active period, shows the duration of the current period. When no period is active, shows the duration of the next upcoming period. Returns 'Unknown' only when no periods are configured.",
|
||
"usage_tips": "Useful for planning: 'The next cheap period lasts 90 minutes' or 'Current cheap period is 120 minutes long'. Combine with remaining_minutes to calculate when to start long-running appliances."
|
||
},
|
||
"best_price_remaining_minutes": {
|
||
"description": "Minutes remaining in current best price period (0 when inactive)",
|
||
"long_description": "Shows how many minutes are left in the current best price period. Returns 0 when no period is active. Updates every minute. Check binary_sensor.best_price_period to see if a period is currently active.",
|
||
"usage_tips": "Perfect for automations: 'If remaining_minutes > 0 AND remaining_minutes < 30, start washing machine now'. The value 0 makes it easy to check if a period is active (value > 0) or not (value = 0)."
|
||
},
|
||
"best_price_progress": {
|
||
"description": "Progress through current best price period (0% when inactive)",
|
||
"long_description": "Shows progress through the current best price period as 0-100%. Returns 0% when no period is active. Updates every minute. 0% means period just started, 100% means it's about to end.",
|
||
"usage_tips": "Great for visual progress bars. Use in automations: 'If progress > 0 AND progress > 75, send notification that cheap period is ending soon'. Value 0 indicates no active period."
|
||
},
|
||
"best_price_next_start_time": {
|
||
"description": "When the next best price period starts",
|
||
"long_description": "Shows when the next upcoming best price period starts. During an active period, this shows the start of the NEXT period after the current one. Returns 'Unknown' only when no future periods are configured.",
|
||
"usage_tips": "Always useful for planning ahead: 'Next cheap period starts in 3 hours' (whether you're in a period now or not). Combine with automations: 'When next start time is in 10 minutes, send notification to prepare washing machine'."
|
||
},
|
||
"best_price_next_in_minutes": {
|
||
"description": "Minutes until next best price period starts (0 when in transition)",
|
||
"long_description": "Shows minutes until the next best price period starts. During an active period, shows time until the period AFTER the current one. Returns 0 during brief transition moments. Updates every minute.",
|
||
"usage_tips": "Perfect for 'wait until cheap period' automations: 'If next_in_minutes > 0 AND next_in_minutes < 15, wait before starting dishwasher'. Value > 0 always indicates a future period is scheduled."
|
||
},
|
||
"peak_price_end_time": {
|
||
"description": "When the current or next peak price period ends",
|
||
"long_description": "Shows the end timestamp of the current peak price period when active, or the end of the next period when no period is active. Always shows a useful time reference for planning. Returns 'Unknown' only when no periods are configured.",
|
||
"usage_tips": "Use this to display 'Expensive period ends in 1 hour' (when active) or 'Next expensive period ends at 18:00' (when inactive). Combine with automations to resume operations after peak."
|
||
},
|
||
"peak_price_period_duration": {
|
||
"description": "Total length of current or next peak price period in minutes",
|
||
"long_description": "Shows how long the peak price period lasts in total. During an active period, shows the duration of the current period. When no period is active, shows the duration of the next upcoming period. Returns 'Unknown' only when no periods are configured.",
|
||
"usage_tips": "Useful for planning: 'The next expensive period lasts 60 minutes' or 'Current peak is 90 minutes long'. Combine with remaining_minutes to decide whether to wait out the peak or proceed with operations."
|
||
},
|
||
"peak_price_remaining_minutes": {
|
||
"description": "Minutes remaining in current peak price period (0 when inactive)",
|
||
"long_description": "Shows how many minutes are left in the current peak price period. Returns 0 when no period is active. Updates every minute. Check binary_sensor.peak_price_period to see if a period is currently active.",
|
||
"usage_tips": "Use in automations: 'If remaining_minutes > 60, cancel deferred charging session'. Value 0 makes it easy to distinguish active (value > 0) from inactive (value = 0) periods."
|
||
},
|
||
"peak_price_progress": {
|
||
"description": "Progress through current peak price period (0% when inactive)",
|
||
"long_description": "Shows progress through the current peak price period as 0-100%. Returns 0% when no period is active. Updates every minute.",
|
||
"usage_tips": "Visual progress indicator in dashboards. Automation: 'If progress > 0 AND progress > 90, prepare to resume normal heating schedule'. Value 0 indicates no active period."
|
||
},
|
||
"peak_price_next_start_time": {
|
||
"description": "When the next peak price period starts",
|
||
"long_description": "Shows when the next upcoming peak price period starts. During an active period, this shows the start of the NEXT period after the current one. Returns 'Unknown' only when no future periods are configured.",
|
||
"usage_tips": "Always useful for planning: 'Next expensive period starts in 2 hours'. Automation: 'When next start time is in 30 minutes, reduce heating temperature preemptively'."
|
||
},
|
||
"peak_price_next_in_minutes": {
|
||
"description": "Minutes until next peak price period starts (0 when in transition)",
|
||
"long_description": "Shows minutes until the next peak price period starts. During an active period, shows time until the period AFTER the current one. Returns 0 during brief transition moments. Updates every minute.",
|
||
"usage_tips": "Pre-emptive automation: 'If next_in_minutes > 0 AND next_in_minutes < 10, complete current charging cycle now before prices increase'."
|
||
},
|
||
"home_type": {
|
||
"description": "Type of home (apartment, house, etc.)",
|
||
"long_description": "Shows the type of dwelling as configured in your Tibber account. This metadata can be useful for categorizing energy consumption patterns.",
|
||
"usage_tips": "Use this for organizing your smart home system or for analytics purposes."
|
||
},
|
||
"home_size": {
|
||
"description": "Size of home in square meters",
|
||
"long_description": "Shows the size of your home in square meters as configured in your Tibber account. Can be used to calculate energy consumption per square meter.",
|
||
"usage_tips": "Use this in energy efficiency calculations: 'My home uses X kWh per square meter per year'."
|
||
},
|
||
"main_fuse_size": {
|
||
"description": "Main electrical fuse size in amperes",
|
||
"long_description": "Shows the capacity of your main electrical fuse in amperes. This determines the maximum electrical load your home can handle simultaneously.",
|
||
"usage_tips": "Use this to prevent overloading: 'If total current consumption approaches fuse size, postpone starting additional appliances'."
|
||
},
|
||
"number_of_residents": {
|
||
"description": "Number of people living in the home",
|
||
"long_description": "Shows the number of residents as configured in your Tibber account. Useful for per-capita energy consumption calculations.",
|
||
"usage_tips": "Use this for household energy analytics: 'Energy consumption per person per day'."
|
||
},
|
||
"primary_heating_source": {
|
||
"description": "Primary heating system type",
|
||
"long_description": "Shows the type of heating system used in your home as configured in your Tibber account. This can be a heat pump, electric heating, gas, oil, or other heating sources.",
|
||
"usage_tips": "Use this to categorize heating-related automations or for energy consumption analysis by heating type."
|
||
},
|
||
"grid_company": {
|
||
"description": "Name of your electricity grid operator",
|
||
"long_description": "Shows the name of the company operating the electrical grid in your area. This is the distribution system operator (DSO) responsible for delivering electricity to your home.",
|
||
"usage_tips": "Useful for administrative purposes and troubleshooting grid-related issues."
|
||
},
|
||
"grid_area_code": {
|
||
"description": "Grid area identifier code",
|
||
"long_description": "Shows the code identifying your electrical grid area. This code is used by the grid operator for routing and billing purposes.",
|
||
"usage_tips": "Use this for administrative reference or when contacting your grid operator."
|
||
},
|
||
"price_area_code": {
|
||
"description": "Electricity price area code",
|
||
"long_description": "Shows the code for your electricity price area (e.g., NO1, NO2, SE3, DK1). Different areas have different wholesale electricity prices based on regional supply and demand.",
|
||
"usage_tips": "Use this to understand which price region you're in. Useful when comparing prices with others or analyzing regional price patterns."
|
||
},
|
||
"consumption_ean": {
|
||
"description": "EAN code for electricity consumption metering",
|
||
"long_description": "Shows the European Article Number (EAN) code that uniquely identifies your electricity consumption meter. This 18-digit code is used for billing and administrative purposes.",
|
||
"usage_tips": "Use this when communicating with your electricity provider or for administrative documentation."
|
||
},
|
||
"production_ean": {
|
||
"description": "EAN code for electricity production metering",
|
||
"long_description": "Shows the European Article Number (EAN) code for your electricity production meter (if you have solar panels or other generation). This code tracks electricity you feed back into the grid.",
|
||
"usage_tips": "Relevant if you have solar panels or other electricity generation. Use for administrative purposes and when claiming feed-in compensation."
|
||
},
|
||
"energy_tax_type": {
|
||
"description": "Type of energy tax applied",
|
||
"long_description": "Shows the energy tax category applied to your electricity consumption. Tax rates vary by country and sometimes by consumer type (residential, commercial, etc.).",
|
||
"usage_tips": "Use this for understanding your electricity bill breakdown and total cost calculations."
|
||
},
|
||
"vat_type": {
|
||
"description": "VAT (Value Added Tax) category",
|
||
"long_description": "Shows the VAT category applied to your electricity consumption. VAT rates vary by country and may differ for electricity compared to other goods and services.",
|
||
"usage_tips": "Use this for understanding your electricity bill and calculating total costs including taxes."
|
||
},
|
||
"estimated_annual_consumption": {
|
||
"description": "Estimated yearly electricity consumption in kWh",
|
||
"long_description": "Shows your estimated annual electricity consumption in kilowatt-hours as calculated or configured in your Tibber account. This estimate is used for comparing actual consumption to expected values.",
|
||
"usage_tips": "Use this to track if your actual consumption is above or below expectations. Compare monthly consumption to 1/12 of this value to identify unusual patterns."
|
||
},
|
||
"subscription_status": {
|
||
"description": "Status of your Tibber subscription",
|
||
"long_description": "Shows whether your Tibber subscription is currently running, has ended, or is pending activation. A status of 'running' means you're actively receiving electricity through Tibber.",
|
||
"usage_tips": "Use this to monitor your subscription status. Set up alerts if status changes from 'running' to ensure uninterrupted service."
|
||
},
|
||
"chart_data_export": {
|
||
"description": "Data export for dashboard integrations",
|
||
"long_description": "This binary sensor calls the get_chartdata service with your configured YAML parameters and exposes the result as entity attributes. The state is 'on' when the service call succeeds and data is available, 'off' when the call fails or no configuration is set. Perfect for dashboard integrations like ApexCharts that need to read price data from entity attributes.",
|
||
"usage_tips": "Configure the YAML parameters in the integration options to match your get_chartdata service call. The sensor will automatically refresh when price data updates (typically after midnight and when tomorrow's data arrives). Access the service response data directly from the entity's attributes - the structure matches exactly what get_chartdata returns."
|
||
},
|
||
"chart_metadata": {
|
||
"description": "Lightweight metadata for chart configuration",
|
||
"long_description": "Provides essential chart configuration values as sensor attributes. Useful for any chart card that needs Y-axis bounds. The sensor calls get_chartdata with metadata-only mode (no data processing) and extracts: yaxis_min, yaxis_max (suggested Y-axis range for optimal scaling). The state reflects the service call result: 'ready' when successful, 'error' on failure, 'pending' during initialization.",
|
||
"usage_tips": "Configure via configuration.yaml under tibber_prices.chart_metadata_config (optional: day, subunit_currency, resolution). The sensor automatically refreshes when price data updates. Access metadata from attributes: yaxis_min, yaxis_max. Use with config-template-card or any tool that reads entity attributes - perfect for dynamic chart configuration without manual calculations."
|
||
}
|
||
},
|
||
"binary_sensor": {
|
||
"tomorrow_data_available": {
|
||
"description": "Whether price data for tomorrow is available",
|
||
"long_description": "Indicates if price data for the following day has been received from Tibber",
|
||
"usage_tips": "Use this to check if tomorrow's prices are available for planning"
|
||
},
|
||
"peak_price_period": {
|
||
"description": "Whether the current interval is among the most expensive of the day",
|
||
"long_description": "Turns on when the current price is in the top 20% of today's prices",
|
||
"usage_tips": "Use this to avoid running high-consumption appliances during expensive intervals"
|
||
},
|
||
"best_price_period": {
|
||
"description": "Whether the current interval is among the cheapest of the day",
|
||
"long_description": "Turns on when the current price is in the bottom 20% of today's prices",
|
||
"usage_tips": "Use this to run high-consumption appliances during the cheapest intervals"
|
||
},
|
||
"connection": {
|
||
"description": "Whether the connection to the Tibber API is working",
|
||
"long_description": "Indicates if the integration can successfully connect to the Tibber API",
|
||
"usage_tips": "Use this to monitor the connection status to the Tibber API"
|
||
},
|
||
"has_ventilation_system": {
|
||
"description": "Whether your home has a ventilation system",
|
||
"long_description": "Indicates if a ventilation system is registered for your home in the Tibber account. Ventilation systems can be significant electricity consumers that may benefit from smart scheduling.",
|
||
"usage_tips": "Use this to enable ventilation-specific automations or energy monitoring. If true, consider scheduling ventilation during low-price periods."
|
||
},
|
||
"realtime_consumption_enabled": {
|
||
"description": "Whether realtime consumption monitoring is active",
|
||
"long_description": "Indicates if realtime electricity consumption monitoring is enabled and active for your Tibber home. This requires compatible metering hardware (e.g., Tibber Pulse) and an active subscription.",
|
||
"usage_tips": "Use this to verify that realtime consumption data is available. Enable notifications if this changes to 'off' unexpectedly, indicating potential hardware or connectivity issues."
|
||
}
|
||
},
|
||
"home_types": {
|
||
"APARTMENT": "Apartment",
|
||
"ROWHOUSE": "Rowhouse",
|
||
"HOUSE": "House",
|
||
"COTTAGE": "Cottage"
|
||
},
|
||
"time_units": {
|
||
"day": "{count} day",
|
||
"days": "{count} days",
|
||
"hour": "{count} hour",
|
||
"hours": "{count} hours",
|
||
"minute": "{count} minute",
|
||
"minutes": "{count} minutes",
|
||
"ago": "{parts} ago",
|
||
"now": "now"
|
||
},
|
||
"attribution": "Data provided by Tibber"
|
||
}
|