mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-29 21:03:40 +00:00
Add two new service actions for intelligent device scheduling: - find_best_start: Find optimal start time for run-once appliances - Considers price, optional energy estimates, optional PV power - Supports flexible time windows (HH:MM, ISO datetime, with/without timezone) - Prefers future candidates over past ones - Includes current interval by default (configurable) - Returns recommended start time with cost analysis - plan_charging: Create optimized charging schedule for energy storage - Supports EV, home battery, balcony battery use cases - Energy target or duration-based planning - Split or continuous charging modes - Efficiency factor support - Includes current interval by default (configurable) - Returns detailed slot-by-slot charging plan Common improvements: - Flexible datetime parsing (ISO 8601, with/without timezone, microseconds) - Time selector in GUI (better UX than text field) - Currency display based on config entry settings - Comprehensive error handling and validation - Detailed response envelopes with warnings/errors Impact: Users can automate appliance scheduling based on electricity prices without external automation rules.
483 lines
11 KiB
YAML
483 lines
11 KiB
YAML
get_price:
|
|
fields:
|
|
entry_id:
|
|
required: false
|
|
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: false
|
|
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:
|
|
highlight_peak_price:
|
|
required: false
|
|
default: false
|
|
example: false
|
|
selector:
|
|
boolean:
|
|
get_chartdata:
|
|
fields:
|
|
general:
|
|
fields:
|
|
entry_id:
|
|
required: false
|
|
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: false
|
|
example: "1234567890abcdef"
|
|
selector:
|
|
config_entry:
|
|
integration: tibber_prices
|
|
find_best_start:
|
|
fields:
|
|
entry_id:
|
|
required: false
|
|
example: "1234567890abcdef"
|
|
selector:
|
|
config_entry:
|
|
integration: tibber_prices
|
|
window:
|
|
collapsed: false
|
|
fields:
|
|
start:
|
|
required: false
|
|
example: "14:00"
|
|
selector:
|
|
time:
|
|
end:
|
|
required: false
|
|
example: "23:00"
|
|
selector:
|
|
time:
|
|
horizon_hours:
|
|
required: false
|
|
default: 36
|
|
selector:
|
|
number:
|
|
min: 1
|
|
max: 72
|
|
mode: box
|
|
unit_of_measurement: h
|
|
job:
|
|
collapsed: false
|
|
fields:
|
|
duration_minutes:
|
|
required: true
|
|
example: 120
|
|
selector:
|
|
number:
|
|
min: 15
|
|
max: 1440
|
|
step: 15
|
|
mode: box
|
|
unit_of_measurement: min
|
|
rounding:
|
|
required: false
|
|
default: ceil
|
|
selector:
|
|
select:
|
|
options:
|
|
- nearest
|
|
- floor
|
|
- ceil
|
|
translation_key: rounding
|
|
costing:
|
|
collapsed: true
|
|
fields:
|
|
estimate_energy_kwh:
|
|
required: false
|
|
example: 1.2
|
|
selector:
|
|
number:
|
|
min: 0.01
|
|
max: 100
|
|
step: 0.01
|
|
mode: box
|
|
unit_of_measurement: kWh
|
|
estimate_avg_power_w:
|
|
required: false
|
|
example: 600
|
|
selector:
|
|
number:
|
|
min: 1
|
|
max: 50000
|
|
step: 1
|
|
mode: box
|
|
unit_of_measurement: W
|
|
pv:
|
|
collapsed: true
|
|
fields:
|
|
pv_entity_id:
|
|
required: false
|
|
selector:
|
|
entity:
|
|
domain: sensor
|
|
preferences:
|
|
collapsed: true
|
|
fields:
|
|
prefer_earlier_start_on_tie:
|
|
required: false
|
|
default: true
|
|
selector:
|
|
boolean:
|
|
include_current_interval:
|
|
required: false
|
|
default: true
|
|
selector:
|
|
boolean:
|
|
plan_charging:
|
|
fields:
|
|
entry_id:
|
|
required: false
|
|
example: "1234567890abcdef"
|
|
selector:
|
|
config_entry:
|
|
integration: tibber_prices
|
|
window:
|
|
collapsed: false
|
|
fields:
|
|
start:
|
|
required: false
|
|
example: "00:00"
|
|
selector:
|
|
time:
|
|
end:
|
|
required: false
|
|
example: "06:00"
|
|
selector:
|
|
time:
|
|
horizon_hours:
|
|
required: false
|
|
default: 36
|
|
selector:
|
|
number:
|
|
min: 1
|
|
max: 72
|
|
mode: box
|
|
unit_of_measurement: h
|
|
charge:
|
|
collapsed: false
|
|
fields:
|
|
energy_target_kwh:
|
|
required: false
|
|
example: 2.0
|
|
selector:
|
|
number:
|
|
min: 0.01
|
|
max: 200
|
|
step: 0.01
|
|
mode: box
|
|
unit_of_measurement: kWh
|
|
duration_minutes:
|
|
required: false
|
|
example: 120
|
|
selector:
|
|
number:
|
|
min: 15
|
|
max: 1440
|
|
step: 15
|
|
mode: box
|
|
unit_of_measurement: min
|
|
max_power_w:
|
|
required: true
|
|
example: 1200
|
|
selector:
|
|
number:
|
|
min: 1
|
|
max: 50000
|
|
step: 1
|
|
mode: box
|
|
unit_of_measurement: W
|
|
min_power_w:
|
|
required: false
|
|
default: 0
|
|
selector:
|
|
number:
|
|
min: 0
|
|
max: 50000
|
|
step: 1
|
|
mode: box
|
|
unit_of_measurement: W
|
|
allow_split:
|
|
required: false
|
|
default: false
|
|
selector:
|
|
boolean:
|
|
rounding:
|
|
required: false
|
|
default: ceil
|
|
selector:
|
|
select:
|
|
options:
|
|
- nearest
|
|
- floor
|
|
- ceil
|
|
translation_key: rounding
|
|
efficiency:
|
|
required: false
|
|
default: 1.0
|
|
example: 0.92
|
|
selector:
|
|
number:
|
|
min: 0.01
|
|
max: 1.0
|
|
step: 0.01
|
|
mode: box
|
|
pv:
|
|
collapsed: true
|
|
fields:
|
|
pv_entity_id:
|
|
required: false
|
|
selector:
|
|
entity:
|
|
domain: sensor
|
|
preferences:
|
|
collapsed: true
|
|
fields:
|
|
prefer_fewer_splits:
|
|
required: false
|
|
default: true
|
|
selector:
|
|
boolean:
|
|
prefer_earlier_completion:
|
|
required: false
|
|
default: true
|
|
selector:
|
|
boolean:
|
|
include_current_interval:
|
|
required: false
|
|
default: true
|
|
selector:
|
|
boolean:
|
|
|
|
debug_clear_tomorrow:
|
|
fields:
|
|
entry_id:
|
|
required: false
|
|
example: "1234567890abcdef"
|
|
selector:
|
|
config_entry:
|
|
integration: tibber_prices
|