I have changed script after those old ones.
I have now P1 (HAN) port in electricity meter, and it outputs current readings in 10 second intervalls. That old one rises/lowers current 1A/every measurement, so it Takes 100 secondsfrom 16A to 6A.
Now i have modified it so, that it sets current in one step.
This is to be modified for each own needs
sensor.p1_meter_current_phase_1 = L1 Current in amps (A)
sensor.p1_meter_current_phase_1 = L2 Current in amps (A)
sensor.p1_meter_current_phase_1 = L3 Current in amps (A)
min_charge_current = minimum current charger allows (A)
max_charge_current = maximum current charger allows (A)
max_total_current = breaker size. This is max target total current for L1-L3 (A)
number.go_echarger_xxxxxx_amp = charger current setting entity (A)
alias: "!Uusi kuromanhallinta"
description: Control EV charger amps to avoid overcurrent
triggers:
- entity_id:
- sensor.p1_meter_current_phase_1
- sensor.p1_meter_current_phase_2
- sensor.p1_meter_current_phase_3
trigger: state
conditions:
- condition: state
entity_id: sensor.go_echarger_XXXXXX_car
state: Charging
enabled: true
actions:
- data:
value: >
{% set min_charge_current = 6 %}
{% set max_charge_current = 16 %}
{% set max_total_current = 25 %}
{% set c1 = states('sensor.p1_meter_current_phase_1')|float %}
{% set c2 = states('sensor.p1_meter_current_phase_2')|float %}
{% set c3 = states('sensor.p1_meter_current_phase_3')|float %}
{% set measured_current = [c1, c2, c3] | select('is_number') | map('float') | max | default(none) %}
{% set current_charger_setting = states('number.go_echarger_XXXXXX_amp')|float %}
{% set new_current = max_total_current - measured_current + current_charger_setting %}
{% if new_current > max_charge_current %}
{% set new_current = max_charge_current %}
{% endif %}
{% if new_current < min_charge_current %}
{% set new_current = min_charge_current %}
{% endif %}
{{ new_current|round(0, 'floor') }}
target:
entity_id: number.go_echarger_XXXXXX_amp
action: number.set_value
mode: single
max: 3
Edit. automation edited a bit.