Load balancing current to EV-charger

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.

5 Likes