Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- alias: Batteri - Automatisk batteristyring
- description: >
- Justerer batterioutput automatisk hver minut baseret på tid, SOC, pris og
- forecast
- triggers:
- - minutes: /1
- trigger: time_pattern
- conditions:
- - condition: template
- value_template: |
- {{ not (
- [
- states('sensor.solcast_pv_forecast_forecast_remaining_today'),
- states('sensor.solcast_pv_forecast_forecast_tomorrow'),
- states('sensor.energi_data_service_salg'),
- states('sensor.esphome_web_b2bf74_sun12k_battery_capacity'),
- states('input_number.sell_soc_stop_' ~ current_interval),
- states('input_number.sell_price_above_' ~ current_interval),
- states('input_number.sell_forecast_above_' ~ current_interval),
- states('input_number.sell_watt_' ~ current_interval),
- states('input_number.charge_soc_below_' ~ current_interval),
- states('input_number.charge_price_limit_' ~ current_interval),
- states('input_number.charge_forecast_below_' ~ current_interval),
- states('input_number.charge_watt_' ~ current_interval)
- ] | select('in', ['unavailable', 'unknown', 'none']) | list | count
- ) > 0 == false }}
- actions:
- - choose:
- - conditions:
- - condition: template
- value_template: |
- {{
- sell and
- (soc > states('input_number.sell_soc_stop_' ~ current_interval) | float(0)) and
- (price > states('input_number.sell_price_above_' ~ current_interval) | float(0)) and
- (expected_production > states('input_number.sell_forecast_above_' ~ current_interval) | float(0))
- }}
- sequence:
- - target:
- entity_id: input_text.output_limit_control_mode
- data:
- value: Selling first
- action: input_text.set_value
- - target:
- entity_id: input_number.output_max_solar_sell_power
- data:
- value: >-
- {{ states('input_number.sell_watt_' ~ current_interval) |
- float(0) }}
- action: input_number.set_value
- - target:
- entity_id: input_boolean.output_grid_charge
- action: input_boolean.turn_off
- data: {}
- - conditions:
- - condition: template
- value_template: |
- {{
- charge and
- (soc < states('input_number.charge_soc_below_' ~ current_interval) | float(0)) and
- (price < states('input_number.charge_price_limit_' ~ current_interval) | float(0)) and
- (expected_production < states('input_number.charge_forecast_below_' ~ current_interval) | float(0))
- }}
- sequence:
- - target:
- entity_id: input_boolean.output_grid_charge
- action: input_boolean.turn_on
- data: {}
- - target:
- entity_id: input_text.output_limit_control_mode
- data:
- value: Zero export to CT
- action: input_text.set_value
- - target:
- entity_id: input_number.output_max_solar_sell_power
- data:
- value: 12000
- action: input_number.set_value
- - target:
- entity_id: input_number.output_maximum_battery_grid_charge_current
- data:
- value: |
- {{
- (states('input_number.charge_watt_' ~ current_interval) | float(0) / 48)
- | round(0, 'floor')
- }}
- action: input_number.set_value
- default:
- - target:
- entity_id: input_text.output_limit_control_mode
- data:
- value: Zero export to CT
- action: input_text.set_value
- - target:
- entity_id: input_boolean.output_grid_charge
- action: input_boolean.turn_off
- data: {}
- - target:
- entity_id: input_number.output_max_solar_sell_power
- data:
- value: 12000
- action: input_number.set_value
- - target:
- entity_id: input_number.output_maximum_battery_grid_charge_current
- data:
- value: 150
- action: input_number.set_value
- - data:
- name: 🔋 Batteristyring
- message: >
- ▶️ Inputværdier: Interval: {{ current_interval }} SOC: {{ soc }} % Pris:
- {{ price }} DKK/kWh Produktion: {{ expected_production }} kWh
- Sælg aktiv: {{ sell }} SOC stop (sell): {{
- states('input_number.sell_soc_stop_' ~ current_interval) }} Prisgrænse
- (sell): {{ states('input_number.sell_price_above_' ~ current_interval)
- }} Forecastgrænse (sell): {{ states('input_number.sell_forecast_above_'
- ~ current_interval) }} Watt (sell): {{ states('input_number.sell_watt_'
- ~ current_interval) }}
- Oplad aktiv: {{ charge }} SOC lav (charge): {{
- states('input_number.charge_soc_below_' ~ current_interval) }}
- Prisgrænse (charge): {{ states('input_number.charge_price_limit_' ~
- current_interval) }} Forecastgrænse (charge): {{
- states('input_number.charge_forecast_below_' ~ current_interval) }} Watt
- (charge): {{ states('input_number.charge_watt_' ~ current_interval) }}
- ✅ Outputbeslutning: output_limit_control_mode: {{
- states('input_text.output_limit_control_mode') }} output_grid_charge: {{
- is_state('input_boolean.output_grid_charge', 'on') }}
- output_max_solar_sell_power: {{
- states('input_number.output_max_solar_sell_power') }}
- output_maximum_battery_grid_charge_current: {{
- states('input_number.output_maximum_battery_grid_charge_current') }}
- action: logbook.log
- - if:
- - condition: template
- value_template: >-
- {{ states('input_text.output_limit_control_mode') !=
- old_limit_control_mode }}
- then:
- - data:
- option: "{{ states('input_text.output_limit_control_mode') }}"
- target:
- entity_id: select.esphome_web_b2bf74_sun12k_limit_control_mode
- action: select.select_option
- - data:
- name: 🔄 Inverter opdatering
- message: >
- output_limit_control_mode ændret til "{{
- states('input_text.output_limit_control_mode') }}"
- action: logbook.log
- - if:
- - condition: template
- value_template: >-
- {{ is_state('input_boolean.output_grid_charge', 'on') !=
- old_grid_charge }}
- then:
- - target:
- entity_id:
- - switch.esphome_web_b2bf74_sun12k_time_point_1_charge_enable
- - switch.esphome_web_b2bf74_sun12k_time_point_2_charge_enable
- - switch.esphome_web_b2bf74_sun12k_time_point_3_charge_enable
- - switch.esphome_web_b2bf74_sun12k_time_point_4_charge_enable
- - switch.esphome_web_b2bf74_sun12k_time_point_5_charge_enable
- - switch.esphome_web_b2bf74_sun12k_time_point_6_charge_enable
- action: >-
- switch.turn_{{ 'on' if is_state('input_boolean.output_grid_charge',
- 'on') else 'off' }}
- - target:
- entity_id:
- - number.esphome_web_b2bf74_sun12k_time_point_1_capacity
- - number.esphome_web_b2bf74_sun12k_time_point_2_capacity
- - number.esphome_web_b2bf74_sun12k_time_point_3_capacity
- - number.esphome_web_b2bf74_sun12k_time_point_4_capacity
- - number.esphome_web_b2bf74_sun12k_time_point_5_capacity
- - number.esphome_web_b2bf74_sun12k_time_point_6_capacity
- data:
- value: |-
- {{
- states('input_number.charge_soc_below_' ~ current_interval) | float(0)
- if is_state('input_boolean.output_grid_charge', 'on')
- else 20
- }}
- action: number.set_value
- - data:
- name: 🔄 Inverter opdatering
- message: >
- output_grid_charge ændret til "{{ 'on' if
- is_state('input_boolean.output_grid_charge', 'on') else 'off' }}"
- ➕ Time point capacities sat til {{
- states('input_number.charge_soc_below_' ~ current_interval) | float(0)
- if is_state('input_boolean.output_grid_charge', 'on')
- else 20
- }} %
- action: logbook.log
- - if:
- - condition: template
- value_template: >-
- {{ (states('input_number.output_max_solar_sell_power') | float(0)) !=
- old_max_solar_sell_power }}
- then:
- - data:
- value: "{{ states('input_number.output_max_solar_sell_power') | float(0) }}"
- target:
- entity_id: number.esphome_web_b2bf74_sun12k_max_solar_sell_power
- action: number.set_value
- - data:
- name: 🔄 Inverter opdatering
- message: >
- output_max_solar_sell_power ændret til {{
- states('input_number.output_max_solar_sell_power') | float(0) }} W
- action: logbook.log
- - if:
- - condition: template
- value_template: >-
- {{ (states('input_number.output_maximum_battery_grid_charge_current')
- | float(0)) != old_grid_charge_current }}
- then:
- - data:
- value: >-
- {{ states('input_number.output_maximum_battery_grid_charge_current')
- | float(0) }}
- target:
- entity_id: number.esphome_web_b2bf74_sun12k_maximum_battery_grid_charge_current
- action: number.set_value
- - data:
- name: 🔄 Inverter opdatering
- message: >
- output_maximum_battery_grid_charge_current ændret til {{
- states('input_number.output_maximum_battery_grid_charge_current') |
- float(0) }} A
- action: logbook.log
- variables:
- current_interval: "{{ '%02d00_%02d00' | format(now().hour, (now().hour + 1) % 24) }}"
- expected_production: |
- {% if now().hour <= 10 %}
- {{ states('sensor.solcast_pv_forecast_forecast_remaining_today') | float(0) }}
- {% else %}
- {{ states('sensor.solcast_pv_forecast_forecast_remaining_today') | float(0)
- + states('sensor.solcast_pv_forecast_forecast_tomorrow') | float(0) }}
- {% endif %}
- price: "{{ states('sensor.energi_data_service_salg') | float(0) }}"
- soc: "{{ states('sensor.esphome_web_b2bf74_sun12k_battery_capacity') | float(0) }}"
- sell: "{{ is_state('input_boolean.sell_' ~ current_interval, 'on') }}"
- charge: "{{ is_state('input_boolean.charge_' ~ current_interval, 'on') }}"
- old_limit_control_mode: "{{ states('input_text.output_limit_control_mode') }}"
- old_grid_charge: "{{ is_state('input_boolean.output_grid_charge', 'on') }}"
- old_max_solar_sell_power: "{{ states('input_number.output_max_solar_sell_power') | float(0) }}"
- old_grid_charge_current: >-
- {{ states('input_number.output_maximum_battery_grid_charge_current') |
- float(0) }}
- mode: single
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement