253 V ? Ładujemy magazyn w określonych godzinach.
Wielu właścicieli instalacji fotowoltaicznych zauważa, że napięcie w sieci potrafi znacznie wzrosnąć w określonych godzinach dnia. Szczególnie często dzieje się to między 10:00 a 14:00, gdy produkcja energii z paneli PV jest największa, a lokalna sieć energetyczna nie zawsze jest w stanie skutecznie przyjąć nadwyżki. W efekcie falownik może ograniczać moc lub nawet całkowicie wstrzymać produkcję, co prowadzi do strat energii.
Aby temu zapobiec, można zastosować strategię dynamicznego sterowania ładowaniem magazynu energii. W praktyce oznacza to:
- Od wschodu słońca do godziny 10:00 – ograniczamy ładowanie magazynu do 0 A, aby energia mogła być wykorzystana bezpośrednio na potrzeby domowe lub oddana do sieci, zanim napięcie zacznie rosnąć.
- Między 10:00 a 14:00 – aktywujemy ładowanie magazynu np. 100 A, co pozwoli na efektywne wykorzystanie nadmiaru energii.
- Po 14:00 – ponownie ograniczamy ładowanie do 0 A, ponieważ napięcie zazwyczaj zaczyna spadać, a dalsze ładowanie może nie być już konieczne.
W dalszej części wpisu opiszę, jak wdrożyć takie rozwiązanie w praktyce, korzystając z Home Assistant i inteligentnych automatyzacji.
Jak wszyscy wiemy Deye przy dostępności PV zawsze będzie dążyć do naładowania magazynu do 100%. Możemy tego uniknąć zmniejszając prąd ładowania baterii w określonych godzinach. Przechodzimy kolejno Ustawienia => Urządzenia oraz usługi => Rejestr encji i odszukujemy encję z możliwością wpisania prądu ładowania magazynu energii ( w moim przypadku będzie to number.deye_sun_12k_battery_max_charging_current)

Zapamiętujemy tą nazwę i przechodzimy do automatyzacji (Ustawienia => Automatyzację oraz sceny)
Kolejno klikamy utwórz automatyzację (1) i następnie Utwórz nową automatyzację (2)

Zobaczymy nowe menu z możliwością utworzenia automatyzacji.

Teraz możemy przystąpić do tworzenia naszej pierwszej automatyzacji. W pierwszej kolejności dodajemy wyzwalacz (1) :

Następnie wybieramy Czas i lokalizacja (2):

Kolejno Czas (3):

Teraz wpisujemy interesującą nas godzinę (4) , w tym przykładzie 06:00

Ok, mamy ustawiony czas to teraz należy wskazać akcję do wykonania. W tym celu klikamy w Dodaj akcję (5)

Kolejno wybieramy akcję Liczba (6)

Następnie Set (7)

Kolejny krok to wskazanie naszej zapamiętanej encji (8)

Jak już to opisałem wyżej, w moim przypadku jest to number.deye_sun_12k_battery_max_charging_current

Zaznaczamy Value (10) i wpisujemy 0 (11)

Zapisujemy i nadajemy odpowiednią nazwę.

Udało się ! Mamy gotową automatyzację.

Możemy przeprowadzić test czy działa, klikamy na trzy kropki po prawej stronie w widoku automatyzacji, następnie Uruchom akcję.

Jeżeli encja była prawidłowa to wartość zostanie zmieniona na 0A tak jak w przykładzie poniżej.

Aby utworzyć kolejną automatyzację, która o 10:00 zmieni nam ładowanie na 100A najprostszym sposobem będzie zrobienie duplikatu istniejącej. W widoku automatyzacji klikamy na trzy kropi i duplikuj.

Zobaczymy widok „prawie gotowej” automatyzacji

Rozwijamy wyzwalacz i zmieniamy czas na 10:00

Następnie rozwijamy akcję i zmieniamy wartość ładowania na 100

I zapisujemy nadająco odpowiednią nazwę

Ok, gotowe. O godzenie 10:00 prąd ładowania zmieni się na 100A co spowoduje rozpoczęcie ładowania magazynu, nawet jak falownik przejdzie w offgrid (z powodu wysokiego napięcia) nadal będziemy wykorzystywać energię z naszych paneli PV.
Aby zmniejszyć prąd ładowania o godzinie 14:00 postępujemy tak jak w przykładzie powyżej – duplikujemy – zamieniamy dane i zapisujemy z odpowiednią nazwą.
Podsumowanie
Wzrost napięcia w sieci w godzinach szczytu produkcji fotowoltaicznej to problem, który może prowadzić do ograniczania mocy falownika i strat energii. Dzięki odpowiedniemu zarządzaniu ładowaniem magazynu energii możemy skutecznie zmniejszyć to zjawisko.
Dostosowanie ładowania w zależności od pory dnia – wyłączenie ładowania przed 10:00 i po 14:00, a intensywne ładowanie w godzinach 10:00-14:00 – pozwala nie tylko na lepsze wykorzystanie nadwyżek energii, ale także na ochronę falownika przed niepotrzebnymi ograniczeniami.
Dzięki Home Assistant i inteligentnym automatyzacjom możemy wdrożyć to rozwiązanie w sposób w pełni dostosowany do naszych potrzeb. Jeśli masz pytania lub chciałbyś podzielić się swoimi doświadczeniami, zapraszam do dyskusji w komentarzach! 🚀🔋

Czy jest możliwość wymusić ładowanie magazynu z grid-a w HA??
Kolejny suer wpis i kawka postawiona 😉
Myślę że można zaktualizować wpis o ładowanie magazynu w oparciu o ilość oddawanej do sieci energii czyli jako wyzwalacz wartość energii oddawanej do sieci a nie tylko w jakim przedziale czasowym.
W poprzednim wpisie widziałem że zajmowałeś się także tematem prognozy produkcji z paneli. Czy można poprosić o wpis odnośnie planu/prognozy produkcji z SOLCAST lub solcast-solar?
Mimo że SOLCAST już nie działa (https://github.com/hacs/integration/issues/3745) to wydaje się że jest zamiennik (https://github.com/BJReplay/ha-solcast-solar) który mógłby być dodany do Twojego świetnego dashboardu. Dodatkowo pomogłoby to lepiej planować ładowanie/rozładowywanie magazynów!
Dokładnie o taką automatyzację mi chodziło ( nawet godziny się zgadzają). Niestety całość działa jak chce. W najlepszym razie z opóźnieniem 8 – 10 min lub wcale. Automatyzacja ma ustawić o godz. 6:00 ładowanie baterii na 0A , o godz. 10:00 na 50A , a o 14:00 z powrotem 0A. Ponadto dołożyłem warunek na god 22:00 30A , żeby mogło zajść ewentualne ładowanie magazynu w nocy z sieci. Niestety losowo HA niekiedy opuszcza wykonanie poszczególnych akcji i wychodzi sekwencja np. o 6:00 – 0A – o 10:00 dalej zero, o 14:00 nadal zero, o 22:00 30A, rano o 6:00 nadal 30A, o 10:00 dalej 30A, około 12:00 – 50A do wieczora – potem 30A i rano 0A itd. Kaszana! Robi co chce choć wartości prądów wskakują takie jakie były nastawione. Oczywiście wybranie „Uruchom Akcję ” z menu automatyzacji działa z ręki natychmiast (2-3s) i za każdym razem. Co może być przyczyną ? Co tu można zrobić źle? Proszę o pomoc.
W automatyzacji, jak klikniesz 3 kropki to masz Traces
Tam możesz zobaczyć, co się dzieje
ESP potrzebuje na prawdę dobrego zasięgu WIFI, ja to zlekceważyłem i długo się męczyłem z tym losowym zadziała/nie zadziała. Kiedy postawieniu Routera blisko ESP wszystkie automatyzacje zaczęły działać prawidłowo.
Siema to ja może wam tutaj dam jak ja to robię
alias: Inteligentne sterowanie ładowaniem baterii PV (z Solcast i sprawdzaniem sieci)
description: >-
Automatyzacja steruje mocą ładowania baterii PV w oparciu o napięcie sieci,
poziom naładowania baterii, prognozę Solcast oraz różnicę między prognozą a
faktyczną mocą PV. Gdy sieć zostaje odłączona, przełączamy się na pełne
ładowanie baterii.
triggers:
– entity_id:
– sensor.deye_sunsynk_grid_voltage_l1
– sensor.deye_sunsynk_grid_voltage_l2
– sensor.deye_sunsynk_grid_voltage_l3
above: 253
for: ’00:00:05′
trigger: numeric_state
– entity_id:
– sensor.deye_sunsynk_grid_voltage_l1
– sensor.deye_sunsynk_grid_voltage_l2
– sensor.deye_sunsynk_grid_voltage_l3
below: 252.5
for: ’00:00:05′
trigger: numeric_state
– entity_id:
– sensor.deye_sunsynk_battery_soc
– sensor.solcast_pv_forecast_moc_nastepne_60_minut
– weather.forecast_dom
for: ’00:05:00′
trigger: state
– entity_id:
– sensor.deye_sunsynk_pv1_power
– sensor.deye_sunsynk_pv2_power
for: ’00:01:00′
trigger: state
– entity_id: binary_sensor.deye_sunsynk_grid_connected_status
trigger: state
conditions:
– condition: sun
after: sunrise
before: sunset
– condition: template
value_template: |
{{ charge_current|int(0) !=
states(’number.deye_sunsynk_battery_max_charge_current’)|int(0) }}
actions:
– target:
entity_id: number.deye_sunsynk_battery_max_charge_current
data:
value: '{{ charge_current }}’
action: number.set_value
variables:
max_voltage: |-
{{
[
states(’sensor.deye_sunsynk_grid_voltage_l1′)|float(0),
states(’sensor.deye_sunsynk_grid_voltage_l2′)|float(0),
states(’sensor.deye_sunsynk_grid_voltage_l3′)|float(0)
]|max
}}
battery_soc: '{{ states(”sensor.deye_sunsynk_battery_soc”)|float(0) }}’
next_hour_pv: '{{ states(”sensor.solcast_pv_forecast_moc_nastepne_60_minut”)|float(0) }}’
real_pv_power: |-
{{
states(’sensor.deye_sunsynk_pv1_power’)|float(0)
+ states(’sensor.deye_sunsynk_pv2_power’)|float(0)
}}
weather_condition: >-
{{ states(’weather.forecast_dom’)|lower if states(’weather.forecast_dom’)
else 'unknown’ }}
grid_connected: '{{ is_state(”binary_sensor.deye_sunsynk_grid_connected_status”, ”on”) }}’
charge_current: >-
{#
Dodatkowa logika: jeżeli sieć jest odłączona (grid_connected == false),
a battery_soc < 95, ustawiamy ładowanie na 150 A bez względu na inne warunki.
W pozostałych przypadkach – oryginalne reguły.
#}
{% set forecast = next_hour_pv %} {% set real_pv = real_pv_power %} {% set
big_pv_threshold = 4.0 %} # próg dużej prognozy
{# Warunek priorytetowy: sieć odłączona #} {% if not grid_connected and
battery_soc = 253 and battery_soc big_pv_threshold and battery_soc < 40 %}
30
{% elif max_voltage 50 %}
10
{% elif weather_condition not in
[’sunny’,’partlycloudy’,’clear-day’,’clear-night’]
and battery_soc 2.0) and (real_pv < 0.3 * forecast) and battery_soc < 70
%}
30
{% else %}
30
{% endif %}
Poprawny wpis:
alias: Inteligentne sterowanie ładowaniem baterii PV
description: >-
Automatyzacja dynamicznie steruje mocą ładowania baterii PV w oparciu o
napięcie sieci, poziom naładowania baterii, prognozę Solcast na dziś i jutro,
bieżącą pogodę i porę dnia. Jej celem jest maksymalizacja autokonsumpcji i
odpowiednie przygotowanie baterii na kolejny dzień.
triggers:
– entity_id:
– sensor.deye_sunsynk_grid_voltage_l1
– sensor.deye_sunsynk_grid_voltage_l2
– sensor.deye_sunsynk_grid_voltage_l3
above: 253
for: „00:00:05”
trigger: numeric_state
– entity_id:
– sensor.deye_sunsynk_grid_voltage_l1
– sensor.deye_sunsynk_grid_voltage_l2
– sensor.deye_sunsynk_grid_voltage_l3
below: 252.5
for: „00:00:05”
trigger: numeric_state
– entity_id:
– sensor.deye_sunsynk_battery_soc
– weather.forecast_dom
– sensor.solcast_pv_forecast_pozostala_prognoza_na_dzis
– sensor.solcast_pv_forecast_prognoza_na_jutro
– sensor.seplos_bms_1_remaining_capacity
– sensor.seplos_bms_2_remaining_capacity
for: „00:01:00”
trigger: state
conditions:
– condition: template
value_template: |
{{ charge_current|int(0) !=
states(’number.deye_sunsynk_battery_max_charge_current’)|int(0) }}
– condition: sun
after: sunrise
before: sunset
actions:
– target:
entity_id: number.deye_sunsynk_battery_max_charge_current
data:
value: „{{ charge_current }}”
action: number.set_value
– data:
name: Sterowanie ładowaniem PV
message: „{{ log_message }}”
domain: automation
action: logbook.log
variables:
max_voltage: |
{{
[
states(’sensor.deye_sunsynk_grid_voltage_l1′)|float(0),
states(’sensor.deye_sunsynk_grid_voltage_l2′)|float(0),
states(’sensor.deye_sunsynk_grid_voltage_l3′)|float(0)
]|max
}}
battery_soc: „{{ states(’sensor.deye_sunsynk_battery_soc’)|float(0) }}”
weather_condition: >
{{ states(’weather.forecast_dom’)|lower if states(’weather.forecast_dom’)
else 'unknown’ }}
grid_connected: „{{ is_state(’binary_sensor.deye_sunsynk_grid_connected_status’, 'on’) }}”
total_capacity: |
{{
states(’sensor.seplos_bms_1_total_capacity’)|float(0) +
states(’sensor.seplos_bms_2_total_capacity’)|float(0)
}}
remaining_capacity: |
{{
states(’sensor.seplos_bms_1_remaining_capacity’)|float(0) +
states(’sensor.seplos_bms_2_remaining_capacity’)|float(0)
}}
battery_to_fill: |
{{ total_capacity – remaining_capacity }}
solar_forecast_remaining: >
{{ states(’sensor.solcast_pv_forecast_pozostala_prognoza_na_dzis’)|float(0)
}}
solar_forecast_tomorrow: |
{{ states(’sensor.solcast_pv_forecast_prognoza_na_jutro’)|float(0) }}
target_soc: |
{% if solar_forecast_tomorrow < 3 %} 100 {% elif solar_forecast_tomorrow < 6 %} 90 {% else %} 80 {% endif %} charge_current: >
{% set now_hour = now().hour %} {% if not grid_connected %}
150
{% elif now_hour >= 14 and battery_soc < target_soc and solar_forecast_tomorrow < 3 %} 150 {% elif weather_condition == 'partlycloudy' %} {% if solar_forecast_remaining > battery_to_fill * 1.3 %}
20
{% elif solar_forecast_remaining >= battery_to_fill %}
80
{% else %}
150
{% endif %}
{% elif max_voltage >= 253.0 and battery_soc < 95 %} 150 {% elif max_voltage 50 %} 10 {% elif (7 <= now_hour < 11) and (battery_soc < 60) and (weather_condition in ['sunny','partlycloudy','clear-day','clear-night']) and (max_voltage < 252.5) %} 10 {% elif weather_condition not in ['sunny','partlycloudy','clear-day','clear-night'] and battery_soc < 90 %} 100 {% else %} 30 {% endif %} log_message: >
{% set now_hour = now().hour %} {% if not grid_connected %}
Sieć odłączona – wymuszone ładowanie 150A.
{% elif now_hour >= 14 and battery_soc < target_soc and solar_forecast_tomorrow < 3 %} Prognoza na jutro bardzo słaba ({{ solar_forecast_tomorrow }} kWh), SOC {{ battery_soc }}% < cel {{ target_soc }}% – wymuszone ładowanie 150A. {% elif weather_condition == 'partlycloudy' %} {% if solar_forecast_remaining > battery_to_fill * 1.3 %}
Częściowo pochmurno, duża nadwyżka prognozy – ładowanie 20A (eksport).
{% elif solar_forecast_remaining >= battery_to_fill %}
Częściowo pochmurno, wystarczająca prognoza – ładowanie 80A.
{% else %}
Częściowo pochmurno, mało prognozowanej produkcji – ładowanie 150A.
{% endif %}
{% elif max_voltage >= 253.0 and battery_soc < 95 %} Wysokie napięcie w sieci ({{ max_voltage }} V) – ładowanie 150A. {% elif max_voltage 50 %} Niskie napięcie, SoC > 50% – ograniczenie ładowania do 10A.
{% elif (7 <= now_hour < 11) and (battery_soc < 60) and (weather_condition in ['sunny','partlycloudy','clear-day','clear-night']) and (max_voltage < 252.5) %} Rano, dobra pogoda i niski SoC – ładowanie 10A. {% elif weather_condition not in ['sunny','partlycloudy','clear-day','clear-night'] and battery_soc < 90 %} Zła pogoda i SoC < 90% – ładowanie 100A. {% else %} Domyślny tryb – ładowanie 30A. {% endif %} mode: single
Witam, może pokusisz się o poradnik, jak krok po kroku wykonać taką automatyzację?
Dla początkujących to „czarna magia” Pozdrawiam
Najprościej skopiować to i wkleić do nowej automatyzacji w trybie edycji yamla
dostosować encje do swoich (moje mogą się nieco różnić od standardowych) potrzebny dodatek w HA do pogody (ja użyłem solcast https://solcast.com/ trzeba się zarejestrować dodć swoją pozycję paneli kąt nachylenia itp pobrać klucz api i skonfigurować w dodatku w HA) jak już będziesz mieć dodaną automatyzacje to trzeba sobie dostosować pod siebie (moc ładowania bateri godziny w jakich ma działać po skopiowaniu tego do yala i popatrzeniu chwile na to to naprawdę można wiele wywnioskować 😉 sam nie jestem jakimś specem , dodatkowo można posiłkować się chatgpt.com który naprawdę potrafi pomóc w tych teamtach 🙂 Pozdrawiam i jeśli będą konkretne pytania to z chęcią odpowiem.
Wielkie dzięki za inspirację, trafiłem tu przypadkowo. A mógłbyś może wkleić to jako preformatowany tekst lub załącznik, bo zrobiła się sieczka…