to_masz
Posiadacz elektryka
Inspiracją do podzielenia się rozwiązaniem jest wątek o całkiem fajnym kompleksowym rozwiązaniu: https://forum.elektrowoz.pl/threads/ladowanie-z-fotowoltaiki.7033/. Dodatkową motywacją był post @nabrU w tym wątku (https://forum.elektrowoz.pl/threads/ladowanie-z-fotowoltaiki.7033/page-3#post-173103), który zwraca uwagę na istotne wyzwania. Dlatego dzielę się jak to u mnie działa.
Założenia ogólne:
Wyliczam sobie nadprodukcję PV takim helperem (Settings > Devices & Services > Helpers > Create helper > Template > Template a sensor).
Wygląda to tak w dzień z lekkim zachmurzeniem - jest to energia, którą można rozporządzać (sprzedać, naładować magazyn energii, zużyć na chłodzenie klimą ALBO naładować samochód). Z powyższego szablonu można zobaczyć, że eksperymentowałem też z klimą, ale niestety nie miałem czasu tego dopracować (tak naprawdę bardzo opóźniona była reakcja sprężarki na zmianę parametrów którymi mogłem sterować - czyli w zasadzie na prędkość wentylatora w zakresie wyłączony-1-2-3).

#2 Sterowanie

Cała automatyzacja
Wcześniej miałem też wyłączanie ładowania jeśli prąd ładowania <5A. No, ale każda chmura wyłączała ładowanie, a np. po minucie się włączało - więc szybko z tego zrezygnowałem. Teraz w sumie akceptuję, że magazyn energii odda trochę energii przy okazji chmur. Ale myślę, że jakoś uśrednię/wygładzę wartość nadprodukcji, bo teraz tak to wygląda:

Założenia ogólne:
- PV wielkości > 3,5kWp - żeby mogło dać więcej niż zapotrzebowanie domu i najniższe ładowanie (5A * 230V * 3 fazy = 3450W lub 13A * 230V * 1 faza = 2990W - nie wiem czy cegła może dawać mniej i czy gra jest warta świeczki wtedy 🤔)
- automatyzacja zrobiona w HomeAssistant
- zintegrowany falownik lub licznik dający informację o produkcji PV i konsumpcji domu (albo w przypadku instalacji bez magazynu energii po prostu o eksporcie do sieci) 👉 u mnie falownik GoodWe raportuje to wszystko
- zintegrowany Wallbox lub samochód udostępniający informację o mocy ładowania i pozwalający na sterowanie tą mocą 👉 u mnie integracja Tesla Wall Connector do odczytu i Tessie do ustawienia natężenia ładowania
Wyliczam sobie nadprodukcję PV takim helperem (Settings > Devices & Services > Helpers > Create helper > Template > Template a sensor).
state_class: measurement
unit_of_measurement: W
device_class: power
friendly_name: PV Energy Excess
Code:
{% set pv_power = states('sensor.pv_power') | float(0) %}
{% set house_consumption = states('sensor.house_consumption') | float(0) %}
{# air conditioning power #}
{#% set ac_power = states('sensor.shelly_em3_channel_a_power') | float(0) %#}
{% set ac_power = 0 %}
{# charger power #}
{% set current_a = states('sensor.tesla_wall_connector_phase_a_current') | float(0) %}
{% set current_b = states('sensor.tesla_wall_connector_phase_b_current') | float(0) %}
{% set current_c = states('sensor.tesla_wall_connector_phase_c_current') | float(0) %}
{% set voltage_a = states('sensor.tesla_wall_connector_napiecie_fazy_a') | float(0) %}
{% set voltage_b = states('sensor.tesla_wall_connector_napiecie_fazy_b') | float(0) %}
{% set voltage_c = states('sensor.tesla_wall_connector_napiecie_fazy_c') | float(0) %}
{% set power_a = voltage_a * current_a %}
{% set power_b = voltage_b * current_b %}
{% set power_c = voltage_c * current_c %}
{% set charger_power = (power_a + power_b + power_c) | round(2) %}
{% set deferrable_consumption = ac_power + charger_power %}
{% set net_consumption = house_consumption - deferrable_consumption %}
{% set pv_excess = pv_power - net_consumption %}
{{ [pv_excess, 0] | max | int }}

#2 Sterowanie
- automatyzacja odpalana jest co 30 sekund
- automatyzacja działa tylko jeśli
- samochód jest podłączony
- ładowanie nie jest ustawione na 16A (taki myk, żeby można było w apce ustawić 16A i wiadomo, że samochód po prostu się naładuje tak szybko jak to możliwe)
- encja z nadprodukcją się zmieniła

Cała automatyzacja
Code:
alias: Adjust Car Charger Power Based on PV Excess
description: ""
trigger:
- platform: time_pattern
seconds: /30
condition:
- alias: Charger Not Disconnected
condition: template
value_template: "{{ states('sensor.charging') != 'disconnected' }}"
- alias: Charge Current Not 16A
condition: template
value_template: "{{ states('number.charge_current') | int != 16 }}"
- alias: Only Run if PV Excess Changed
condition: template
value_template: >
{% set last_excess = states('sensor.pv_energy_excess') %} {% set
previous_excess =
state_attr('automation.adjust_car_charger_power_based_on_pv_excess',
'last_excess') %} {% if previous_excess %}
{{ last_excess != previous_excess }}
{% else %}
true
{% endif %}
action:
- variables:
voltage_a: "{{ states('sensor.on_grid_l1_voltage') | float }}"
voltage_b: "{{ states('sensor.on_grid_l2_voltage') | float }}"
voltage_c: "{{ states('sensor.on_grid_l3_voltage') | float }}"
average_voltage: "{{ (voltage_a + voltage_b + voltage_c) / 3 }}"
excess_power: "{{ states('sensor.pv_energy_excess') | float }}"
calculated_current: "{{ (excess_power / (average_voltage * 3)) | int }}"
- alias: Determine Action Based on Calculated Current
choose:
- alias: If Calculated Current Greater Than or Equal to 5A
conditions:
- condition: template
value_template: "{{ calculated_current >= 5 }}"
sequence:
- alias: Set Charging Current
service: number.set_value
target:
entity_id: number.charge_current
data:
value: "{{ [calculated_current, 16] | min }}"
- alias: Ensure Charger is On
service: switch.turn_on
target:
entity_id: switch.charge
data: {}
mode: single
Wcześniej miałem też wyłączanie ładowania jeśli prąd ładowania <5A. No, ale każda chmura wyłączała ładowanie, a np. po minucie się włączało - więc szybko z tego zrezygnowałem. Teraz w sumie akceptuję, że magazyn energii odda trochę energii przy okazji chmur. Ale myślę, że jakoś uśrednię/wygładzę wartość nadprodukcji, bo teraz tak to wygląda:
