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 SOC | Dozwolone akcje KNX | Odzysk histerezy |
|---|---|---|
| > 90% AND exporting | SG Ready Stan 4 + prąd maksymalny EV + grzałka załączona | Aktywne, dopóki SOC nie spadnie do 85% lub nie przestanie eksportować |
| 50–90% | Normalny autokonsumpcja: SG Ready State 3 + tryb priorytetu EV | Pozostań w paśmie – brak odciążania |
| 20–50% | Tylko podstawowa autokonsumpcja – brak SG Ready State 4, EV min. 6 A | Powró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 2 | Wznó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 KNX | Anuluj 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 setpointWyzwalacz ł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 modeNordpool 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_percentSezonowa 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ść.
| Sezon | Docelowy zakres SOC | Strategia | Wyzwalacz 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 zachmurzenia | 60–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 importUruchomienie 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 gridPonowne 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ę →