Her kommer en annen tanke om hvordan effektbegresningen kan styres.
Jeg har gjort det "relativt" enkelt ved bruk av eksisterende automasjonfilosofi i home assistant.
En kwh_est_hour som beregner effektforbruket for den inneværende timen, samtidig med en on/off sensor som setter i gang effektbegrenser.
Ved frigjøring av effekttrinn sjekkes det opp mot det forrige trinnet om hva maks effekt er der.
På elbil laderen kalkuleres hvor mange A den må stilles ned for å komme seg under effektgrensen.
Samtidig en input_number som settes til maks kwh pr time.
Så kan en bare lage automasjoner som trigges ved endring av input_text.effektbegrenser_pri
#sensor.yaml
- trigger:
- platform: time_pattern
#hours: 0
minutes: "/1"
seconds: 15
sensor:
- name: kwh_est_hour
unit_of_measurement: "kwh"
state: "{{ (((states('sensor.power_avg_20s')|int(default=0) / 1000|int)/60*(60-now().minute))|round(2) + states('sensor.hour_total_kwh')|float(default=0))|round(3)}}"
- binary_sensor:
- name: "Effektbegrenser"
delay_on:
minutes: 4
delay_off:
minutes: 4
state: >
{% if states('sensor.kwh_est_hour')|float(default=0) > states('input_number.effekttariff_max_kwh')|float(default=0) and now().minute|int(default=0) >= 15 %}
on
{% else %}
off
{% endif %}
#automation.yaml
- id: "231120212212"
alias: "Tariff effektbegrenser begrens effekt"
trigger:
- platform: state
entity_id: binary_sensor.effektbegrenser
to: 'on'
action:
repeat:
while:
- condition: state
entity_id: binary_sensor.effektbegrenser
state: 'on'
- condition: template
value_template: "{{ states('input_text.effektbegrenser_pri')|int <= 7}}"
sequence:
- service: input_text.set_value
entity_id: input_text.effektbegrenser_pri
data_template:
value: "{{ states('input_text.effektbegrenser_pri')|int + 1|int }}"
- delay: "00:05:00"
- id: "241120212101"
alias: "Tariff effektbegrenser frigi"
mode: queued
trigger:
- platform: state
entity_id: binary_sensor.effektbegrenser
to: 'off'
- platform: template
value_template: "{{ now().minute is in [0,10,20,30,40,50] and states('input_text.effektbegrenser_pri')|int > 0}}"
action:
repeat:
while:
- condition: template
value_template: >
{% set begrenser = states('input_text.effektbegrenser_pri') %}
{% if begrenser|int == 0 %}
{% set effektbegrenser = 700 %} #Trinn 1 maks effekt 700
{% elif begrenser|int == 1 %}
{% set effektbegrenser = 1000 %} #Trinn 2 maks effekt 1000
{% elif begrenser|int == 2 %}
{% set effektbegrenser = states('sensor.easee_new_kw')|float*1000 %} #Les aktiv effekt uttak elbil lader
{% elif begrenser|int == 3 %}
{% set effektbegrenser = 2000 %} #Trinn 4 maks effekt 2000
{% elif begrenser|int == 4 %}
{% set effektbegrenser = 1300 %} #Trinn 5 maks effekt 1300
{% elif begrenser|int > 4 %}
{% set effektbegrenser = 0 %} #Trinn 6 push varsel mobil
{%endif%}
{% if (states('input_number.effekttariff_max_kwh')|float - states('sensor.kwh_est_hour')|float) - (((effektbegrenser|int / 1000|int)/60*(60-now().minute))|round(2)) > 0 %}
true
{%else%}
false
{%endif%}
sequence:
- service: input_text.set_value
entity_id: input_text.effektbegrenser_pri
data_template:
value: >
{% if states('input_text.effektbegrenser_pri')|int > 0 %}
{{ states('input_text.effektbegrenser_pri')|int - 1|int }}
{%else%}
0
{%endif%}
- delay: "00:05:00"