29 lines
1.4 KiB
Django/Jinja
29 lines
1.4 KiB
Django/Jinja
{# Configuration #}
|
|
{% set totalWh = 3200 %}
|
|
{% set maxPower = 600 %}
|
|
{% set targetChargePercent = 100 %}
|
|
{% set sunsetOffset = -3 %}
|
|
|
|
{% set currentChargePercent = states('sensor.system_flos_bkw_sb_state_of_charge') | float(0) %}
|
|
{% set solarAvailable = states('binary_sensor.solar_power_available') | bool(false) %}
|
|
|
|
{% if solarAvailable and currentChargePercent < 100 %}
|
|
{# Current state infos #}
|
|
{% set timeToSunsetHours = ((as_timestamp(state_attr('sun.sun', 'next_setting')) - as_timestamp(now()))) / 3600 + sunsetOffset %}
|
|
|
|
{# Average battery power for the day to reach targetChargePercent #}
|
|
{% set remainingChargePercent = [ 0, targetChargePercent - currentChargePercent ] | max %}
|
|
{% set remainingChargeWh = (remainingChargePercent / 100) * totalWh %}
|
|
{% set remainingAvgPower = (remainingChargeWh / timeToSunsetHours) %}
|
|
|
|
{# Today average production power #}
|
|
{% set todayProductionWh = (states('sensor.balkon_solcast_pv_forecast_balkonsolar_forecast_remaining_today') | float(0)) * 1000 %}
|
|
{% set todayOffsetWh = todayProductionWh - remainingChargeWh %}
|
|
{% set todayOffsetPower = todayOffsetWh / timeToSunsetHours %}
|
|
{% set positiveOffsetPower = [ 0, todayOffsetPower ] | max %}
|
|
{% set limitedOffsetPower = [ maxPower, positiveOffsetPower ] | min %}
|
|
|
|
{{ limitedOffsetPower | round(0) }}
|
|
{% else %}
|
|
{{ 0 }}
|
|
{% endif %} |