253 V ? Ładujemy magazyn w określonych godzinach.

Admin/ 9 lutego, 2025/ Inne/ 10Komentarze

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! 🚀🔋

Share this Post

10 Comments

  1. Czy jest możliwość wymusić ładowanie magazynu z grid-a w HA??

  2. 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!

  3. 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.

    1. W automatyzacji, jak klikniesz 3 kropki to masz Traces
      Tam możesz zobaczyć, co się dzieje

    2. 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.

  4. 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 %}

    1. 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

      1. Witam, może pokusisz się o poradnik, jak krok po kroku wykonać taką automatyzację?
        Dla początkujących to „czarna magia” Pozdrawiam

        1. 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.

          1. 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…

Skomentuj Olchanowski Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*
*