hass.tibber_prices/custom_components/tibber_prices/services.yaml
Julian Pawlowski c9a7dcdae7 feat(services): add rolling window options with auto-zoom for ApexCharts
Added two new rolling window options for get_apexcharts_yaml service to provide
flexible dynamic chart visualization:

- rolling_window: Fixed 48h window that automatically shifts between
  yesterday+today and today+tomorrow based on data availability
- rolling_window_autozoom: Same as rolling_window but with progressive zoom-in
  (2h lookback + remaining time until midnight, updates every 15min)

Implementation changes:
- Updated service schema validation to accept new day options
- Added entity mapping patterns for both rolling modes
- Implemented minute-based graph_span calculation with quarter-hour alignment
- Added config-template-card integration for dynamic span updates
- Used current_interval_price sensor as 15-minute update trigger
- Unified data loading: both rolling modes omit day parameter for dynamic selection
- Applied ternary operator pattern for cleaner day_param logic
- Made grid lines more subtle (borderColor #f5f5f5, strokeDashArray 0)

Translation updates:
- Added selector options in all 5 languages (de, en, nb, nl, sv)
- Updated field descriptions to include default behavior and new options
- Documented that rolling window is default when day parameter omitted

Documentation updates:
- Updated user docs (actions.md, automation-examples.md) with new options
- Added detailed explanation of day parameter options
- Included examples for both rolling_window and rolling_window_autozoom modes

Impact: Users can now create auto-adapting ApexCharts that show 48h rolling
windows with optional progressive zoom throughout the day. Requires
config-template-card for dynamic behavior.
2025-12-04 14:39:00 +00:00

237 lines
5.4 KiB
YAML

get_price:
fields:
entry_id:
required: true
example: "1234567890abcdef"
selector:
config_entry:
integration: tibber_prices
start_time:
required: true
example: "2025-11-01T00:00:00+01:00"
selector:
datetime:
end_time:
required: true
example: "2025-11-02T00:00:00+01:00"
selector:
datetime:
get_apexcharts_yaml:
fields:
entry_id:
required: true
example: "1234567890abcdef"
selector:
config_entry:
integration: tibber_prices
day:
required: false
example: today
selector:
select:
options:
- yesterday
- today
- tomorrow
- rolling_window
- rolling_window_autozoom
translation_key: day
level_type:
required: false
default: rating_level
example: rating_level
selector:
select:
options:
- rating_level
- level
translation_key: level_type
highlight_best_price:
required: false
default: true
example: true
selector:
boolean:
get_chartdata:
fields:
general:
fields:
entry_id:
required: true
example: "1234567890abcdef"
selector:
config_entry:
integration: tibber_prices
selection:
collapsed: true
fields:
day:
required: false
selector:
select:
options:
- yesterday
- today
- tomorrow
multiple: true
translation_key: day
resolution:
required: false
default: interval
example: hourly
selector:
select:
options:
- interval
- hourly
translation_key: resolution
filters:
collapsed: true
fields:
level_filter:
required: false
selector:
select:
options:
- very_cheap
- cheap
- normal
- expensive
- very_expensive
multiple: true
translation_key: level_filter
rating_level_filter:
required: false
selector:
select:
options:
- low
- normal
- high
multiple: true
translation_key: rating_level_filter
period_filter:
required: false
selector:
select:
options:
- best_price
- peak_price
translation_key: period_filter
transformation:
collapsed: true
fields:
minor_currency:
required: false
default: false
example: true
selector:
boolean:
round_decimals:
required: false
example: 2
selector:
number:
min: 0
max: 10
mode: box
insert_nulls:
required: false
default: none
selector:
select:
options:
- none
- segments
- all
translation_key: insert_nulls
connect_segments:
required: false
default: false
selector:
boolean:
add_trailing_null:
required: false
default: false
selector:
boolean:
format:
collapsed: true
fields:
output_format:
required: false
default: array_of_objects
example: array_of_objects
selector:
select:
options:
- array_of_objects
- array_of_arrays
translation_key: output_format
data_key:
required: false
example: prices
selector:
text:
arrays_of_objects:
collapsed: true
fields:
include_level:
required: false
default: false
example: true
selector:
boolean:
include_rating_level:
required: false
default: false
example: true
selector:
boolean:
include_average:
required: false
default: false
selector:
boolean:
start_time_field:
required: false
example: time
selector:
text:
end_time_field:
required: false
example: end
selector:
text:
price_field:
required: false
example: price
selector:
text:
level_field:
required: false
selector:
text:
rating_level_field:
required: false
selector:
text:
average_field:
required: false
selector:
text:
arrays_of_arrays:
collapsed: true
fields:
array_fields:
required: false
selector:
text:
refresh_user_data:
fields:
entry_id:
required: true
example: "1234567890abcdef"
selector:
config_entry:
integration: tibber_prices