mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-29 21:03:40 +00:00
Add resolution parameter to get_chartdata and get_apexcharts_yaml services, allowing users to choose between original 15-minute intervals or aggregated hourly values for chart visualization. Implementation uses rolling 5-interval window aggregation (-2, -1, 0, +1, +2 around :00 of each hour = 60 minutes total), matching the sensor rolling hour methodology. Respects user's CONF_AVERAGE_SENSOR_DISPLAY setting for mean vs median calculation. Changes: - formatters.py: Add aggregate_to_hourly() function preserving original field names (startsAt, total, level, rating_level) for unified processing - get_chartdata.py: Pre-aggregate data before processing when resolution is 'hourly', enabling same code path for filters/insert_nulls/connect_segments - get_apexcharts_yaml.py: Add resolution parameter, pass to all 4 get_chartdata service calls in generated JavaScript - services.yaml: Add resolution field with interval/hourly selector - icons.json: Add section icons for get_apexcharts_yaml fields - translations: Add highlight_peak_price and resolution field translations for all 5 languages (en, de, sv, nb, nl) Impact: Users can now generate cleaner charts with 24 hourly data points instead of 96 quarter-hourly intervals. The unified processing approach ensures all chart features (filters, null insertion, segment connection) work identically for both resolutions.
272 lines
6.1 KiB
YAML
272 lines
6.1 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
|
|
resolution:
|
|
required: false
|
|
default: interval
|
|
example: interval
|
|
selector:
|
|
select:
|
|
options:
|
|
- interval
|
|
- hourly
|
|
translation_key: resolution
|
|
highlight_best_price:
|
|
required: false
|
|
default: true
|
|
example: true
|
|
selector:
|
|
boolean:
|
|
highlight_peak_price:
|
|
required: false
|
|
default: false
|
|
example: false
|
|
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:
|
|
subunit_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:
|
|
metadata:
|
|
required: false
|
|
default: include
|
|
selector:
|
|
select:
|
|
options:
|
|
- include
|
|
- only
|
|
- none
|
|
translation_key: metadata
|
|
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
|
|
|
|
debug_clear_tomorrow:
|
|
fields:
|
|
entry_id:
|
|
required: false
|
|
example: "1234567890abcdef"
|
|
selector:
|
|
config_entry:
|
|
integration: tibber_prices
|