SOC baterii · Automatyka KNK · Odciążanie · Harmonogram taryf · 10 min czytania

Automatyka KNK SOC baterii: Odciążanie, ładowanie nocne i harmonogram taryf

Stan naładowania baterii jest najważniejszą zmienną wejściową dla automatyki energetycznej KNK – określa, kiedy można włączyć dodatkowe obciążenia, kiedy należy je odciąć w celu ochrony baterii, kiedy uruchomić nocne ładowanie poza szczytem oraz jak dostosować strategię między warunkami letnimi a zimowymi. Dobrze zaprojektowana warstwa automatyki SOC może zmniejszyć koszty poboru z sieci o 40–70% w porównaniu z podstawowym sterowaniem autokonsumpcją.

Tabela progów SOC z pasmami histerezy

Tabela progów SOC definiuje dyskretne pasma pracy, z których każde wyzwala określony zestaw akcji KNX. Histereza – offset odzysku powyżej progu – zapobiega szybkiemu przełączaniu, gdy SOC oscyluje w pobliżu granicy progu z powodu wahań obciążenia lub zaszumionego pomiaru SOC.

Pasmo SOCDozwolone akcje KNXOdzysk histerezy
> 90% AND exportingSG Ready Stan 4 + prąd maksymalny EV + grzałka załączonaAktywne, dopóki SOC nie spadnie do 85% lub nie przestanie eksportować
50–90%Normalny autokonsumpcja: SG Ready State 3 + tryb priorytetu EVPozostań w paśmie – brak odciążania
20–50%Tylko podstawowa autokonsumpcja – brak SG Ready State 4, EV min. 6 APowrót do pasma 50-90 %, gdy słońce ładuje akumulator powyżej 55 %
< 20%Wstrzymaj wszystkie sterowalne obciążenia: EV wyłączone, SG Ready → State 2Wznów obciążenia, gdy SOC wzrośnie powyżej 25 % (histereza 5 %)
< 10%Awaryjnie: obniżenie HVAC o −2 °C + alarm obciążenia do wizualizacji KNXAnuluj awaryjne obniżenie, gdy SOC wzrośnie powyżej 15 %

Moduł logiczny MDT — pasma SOC z implementacją histerezy

Logic channel 1: SOC band flags (set on GA 9/1/0 change)
  Flag "soc_critical": SOC < 20 → set; clear when SOC > 25
  Flag "soc_low":      SOC < 10 → set; clear when SOC > 15
  Flag "soc_full":     SOC > 90 → set; clear when SOC < 85
  On-delay timer: 60s before setting any flag (noise rejection)

Logic channel 2: Load enable gate
  IF soc_critical: disable EV (write 0 to GA 10/0/1)
                   set SG Ready → State 2 (S1=0, S2=0)
  IF NOT soc_critical AND surplus > 2500W:
    EV: enable + set current from surplus/230
    SG Ready: State 3 if surplus > 3000W

Logic channel 3: Emergency HVAC setback
  IF soc_low: send HVAC setback scene (reduce setpoint −2°C)
              write 1 to alarm GA 9/9/0 (battery emergency alert)
  IF NOT soc_low AND NOT soc_critical: restore HVAC setpoint

Wyzwalacz ładowania nocnego poza szczytem

Dynamiczne taryfy energii elektrycznej (Tibber, Nordpool, Octopus Agile) oferują okresy, w których energia z sieci kosztuje mniej niż 0,10 EUR/kWh – zazwyczaj między 00:00 a 06:00. Wyzwalanie ładowania akumulatora w tych oknach zmniejsza dzienne koszty energii, gdy produkcja słoneczna jest niewystarczająca do pełnego naładowania akumulatora w ciągu dnia.

Logika ładowania nocnego poza szczytem

KNX time-based trigger (IP-Symcon or HA schedule):
  Trigger time: 01:00 local time
  Condition: GA 9/1/0 (Battery SOC) < 40%
             AND KNX tariff GA 9/9/1 < 10 (price < 0.10 €/kWh)

Action: Set MultiPlus to forced battery charge mode
  Victron (via Cerbo GX Modbus write):
    Write 4 to register 37 (unit ID 227) → force bulk charge
  Fronius GEN24 (via webserver API or EVCC):
    evcc.yaml: scheduled charging at 01:00 with "now" mode

KNX tariff GA update (source: HA automation reading Tibber API):
  HA script (runs at 22:00 daily):
    GET https://api.tibber.com/v1-beta/gql (Tibber price API)
    Find minimum price in next 8 hours
    Write min_price × 100 (integer cents) to GA 9/9/1

  GA 9/9/1 = current electricity price in euro cents (DPT 9.002)
  GA 9/9/2 = off-peak start hour (DPT 5.010)

Cancel condition: 06:00 OR GA 9/1/0 > 90%
  → Stop forced charge → return to normal ESS mode

Nordpool vs Tibber dla integracji KNX: Nordpool publikuje ceny dnia następnego o 13:00 CET – odpowiednie dla automatyzacji HA, które pobierają ceny raz dziennie i odpowiednio planują ładowanie. Tibber udostępnia API wyższego poziomu z prognozami cen godzinowych i obsługuje subskrypcje WebSocket push dla aktualizacji cen w czasie rzeczywistym, umożliwiając dynamiczną regulację progów w GA taryfy KNX bez odpytywania.

Poranne ładowanie wstępne przed szczytową taryfą

Taryfy czasowe często mają okna szczytowe od 07:00 do 11:00, gdy poranne obciążenie budynku jest wysokie, ale produkcja słoneczna dopiero rośnie. Wstępne ładowanie akumulatora do co najmniej 50% SOC przed oknem szczytowym przy użyciu tańszej energii poza szczytem zapewnia, że budynek pobiera energię z akumulatora, a nie z drogiej sieci w godzinach szczytu.

Automatyzacja porannego wstępnego ładowania (skrypt IP-Symcon)

// IP-Symcon PHP script — runs at 06:00 daily
$soc = GetValueFloat(IPS_GetVariableIDByName("Battery SOC", $parentID));
$pvForecast = GetValueFloat($pvForecastVariableID); // from PV forecast API

// PV forecast integration: HA reads forecast.solar API
// GET https://api.forecast.solar/estimate/<lat>/<lon>/<dec>/<az>/<kwp>
// Forecast for today: energy in kWh — high forecast means skip pre-charge

if ($soc < 30 && $pvForecast < 15) {
  // Low SOC and low solar forecast — pre-charge to 50% before peak
  SetValueInteger($multiPlusMode, 4); // Force bulk charge
  IPS_RunScriptEx($chargeStopScript, ["targetSOC" => 50]);
}

// In HA automation:
automation:
  - alias: "Morning pre-charge if low SOC"
    trigger:
      - platform: time
        at: "06:00:00"
    condition:
      - condition: numeric_state
        entity_id: sensor.battery_soc
        below: 30
      - condition: template
        value_template: "{{ states('sensor.pv_forecast_today_kwh')|float < 15 }}"
    action:
      - service: script.force_battery_charge_to_50_percent

Sezonowa strategia SOC

Strategia pracy baterii powinna dostosowywać się do sezonowej dostępności energii słonecznej. Latem bateria cyklicznie przechodzi między stanem prawie pustym a prawie pełnym – głębokie codzienne cykle maksymalizują autokonsumpcję, ale wymagają dobrej chemii baterii (preferowany LFP nad NMC dla trwałości przy codziennych głębokich cyklach). Zimą, przy niższej produkcji, bateria rzadko się w pełni ładuje, więc powinna być utrzymywana w średnim zakresie SOC, aby zachować rezerwową pojemność.

SezonDocelowy zakres SOCStrategiaWyzwalacz harmonogramu KNX
Lato (kwiecień–wrzesień)20–95%Deep daily cycling — max self-consumption. Allow EV + HP loads when SOC > 80%.Sezonowe przełączanie trybu 1 kwietnia i 1 października
Zima (paź–mar)40–80%Utrzymuj średni SOC dla rezerwy. Naładuj do 80% przed porannym szczytem. Bez głębokiego rozładowania.Przełączenie trybu na strategię zimową 1 października
Długie okresy zachmurzenia60–80%Zawieś głębokie cykle — preferuj pobór z sieci poza szczytem zamiast baterii poniżej 60%.Automatic: if SOC < 60% at 09:00 for 3+ days
Heatwave (>35°C)20–80%Zmniejsz górny limit, aby chronić temperaturę baterii (termiczne obniżanie mocy BMS)If GA 9/1/2 (battery temp) > 35°C

Sezonowe przełączanie trybu przez harmonogram KNX

KNX time schedule (Gira X1 or MDT Logic Module timer):

April 1 — summer mode:
  Write "summer" flag → GA 9/9/5 value 1
  SOC shedding threshold: 20% (allow deep cycling)
  EV enable threshold SOC: 40% (lower than winter)
  Morning pre-charge: disabled (sufficient solar expected)

October 1 — winter mode:
  Write "winter" flag → GA 9/9/5 value 0
  SOC shedding threshold: 40% (protect from deep discharge)
  EV enable threshold SOC: 60% (higher — conserve battery)
  Morning pre-charge: enabled (low solar, pre-charge from grid)

IP-Symcon monthly schedule (runs on 1st of each month):
  $month = date("n"); // PHP month number
  if ($month >= 4 && $month <= 9) {
    SetValue($seasonMode, "summer");
  } else {
    SetValue($seasonMode, "winter");
  }

KNX taryfa energetyczna GA: Tibber i Nordpool przez HA

W celu dynamicznego, uwzględniającego taryfę harmonogramowania baterii, bieżąca cena energii elektrycznej musi być publikowana na adres grupowy KNX, gdzie moduł logiczny KNX może porównać ją z wartościami progowymi. Home Assistant lub IP-Symcon odczytuje API taryfy i zapisuje cenę na KNX GA przy każdej godzinnej aktualizacji.

Automatyzacja HA Tibber → KNX GA taryfy

# HA configuration.yaml — Tibber integration
tibber:
  access_token: !secret tibber_access_token

# sensor: current electricity price in EUR/kWh
sensor:
  - platform: tibber
    name: tibber_current_price

# automation: write current price to KNX GA every hour
automation:
  - alias: "Tibber price → KNX tariff GA"
    trigger:
      - platform: time_pattern
        minutes: "0"    # Run at :00 of every hour
    action:
      - service: knx.send
        data:
          address: "9/9/1"
          payload: >
            {{ (states('sensor.tibber_current_price')|float * 1000)|int }}
          # Scale: multiply by 1000 to get milli-EUR (DPT 9.002 compatible)
          type: "2byte_float"

# KNX logic uses GA 9/9/1 value:
#   < 100 (0.10 EUR/kWh): trigger off-peak battery charge
#   > 300 (0.30 EUR/kWh): enable all self-consumption loads aggressively
#   > 500 (0.50 EUR/kWh): emergency: maximise battery discharge, no grid import

Uruchomienie z rzeczywistymi scenariuszami testowymi SOC

Uruchomienie automatyzacji SOC wymaga przetestowania każdego pasma progowego poprzez wstrzyknięcie symulowanych wartości SOC za pomocą ETS6 Group Monitor – bez czekania, aż bateria naturalnie przejdzie przez każdy stan. Przetestuj każdy próg po kolei i sprawdź, czy odpowiednie akcje KNX są uruchamiane i zatrzymywane przy właściwych wartościach SOC, w tym z histerezą.

Scenariusze testowe uruchomienia automatyzacji SOC

Prerequisite: disconnect real battery SOC input to KNX
  (remove Intesis IN701KNX poll for register 843 temporarily)
  → manually write SOC test values to GA 9/1/0 via ETS6

Test 1 — Normal operation (SOC 75%):
  Write 75 to GA 9/1/0
  Expected: no load shedding, self-consumption logic active
  Verify: EV and SG Ready loads enabled (if surplus present)

Test 2 — Enter low SOC zone (SOC 18%):
  Write 18 to GA 9/1/0
  Expected: after 60s on-delay, soc_critical flag sets
  Verify: GA 10/0/1 (EV enable) → 0 (EV disabled)
          SG Ready relays → State 2 (both contacts open)

Test 3 — Hysteresis: recovery insufficient (SOC 22%):
  Write 22 to GA 9/1/0 (above 20% threshold but below 25% recovery)
  Expected: soc_critical flag remains set (hysteresis holds)
  Verify: loads remain disabled — confirm hysteresis working

Test 4 — Hysteresis: recovery sufficient (SOC 27%):
  Write 27 to GA 9/1/0 (above 25% recovery threshold)
  Expected: soc_critical flag clears after 60s
  Verify: loads re-enable (if surplus still present)

Test 5 — Emergency zone (SOC 8%):
  Write 8 to GA 9/1/0
  Expected: HVAC setback scene activates (HVAC −2°C)
            Alarm GA 9/9/0 → 1 (alert fires in Gira X1)
  Verify in HVAC setpoint display: temperature reduced by 2°C

Test 6 — Off-peak charging trigger:
  Write 35 to GA 9/1/0 (SOC 35% — below 40% threshold)
  Set time to 01:05 (test time via IP-Symcon or HA test trigger)
  Write 8 to GA 9/9/1 (price 0.008 EUR/kWh — very cheap)
  Expected: forced battery charge mode activates
  Verify: MultiPlus/GEN24 starts charging from grid

Ponowne podłączenie rzeczywistego SOC po teście

Po zakończeniu symulowanych testów SOC ponownie włącz odpytywanie Intesis dla rejestru SOC baterii. Sprawdź, czy rzeczywista wartość SOC jest zgodna z wyświetlaczem BMS baterii. Potwierdź, że logika przechodzi poprawnie z rzeczywistymi danymi SOC przed przekazaniem systemu.

Weryfikacja trybu sezonowego

Przetestuj przełączanie trybu sezonowego, tymczasowo zapisując flagi letnie i zimowe do GA 9/9/5. Sprawdź, czy progi SOC zmieniają się zgodnie z oczekiwaniami: letni próg włączenia EV (40% SOC) powinien być niższy niż zimowy próg (60% SOC). Po teście przywróć prawidłowy tryb sezonowy.

Potrzebujesz zaprojektowanej i uruchomionej automatyki energetycznej KNX opartej na SOC?

Projektujemy i konfigurujemy automatyzację progów SOC, ładowanie w okresach pozaszczytowych, logikę strategii sezonowej oraz integrację taryf Tibber/Nordpool dla budynków KNX z magazynami energii – w pełni przetestowane i udokumentowane.

Poproś o wycenę →
Ładowanie...
Powrót do góry