Automazione KNX SOC Batteria: Sgancio Carichi, Ricarica Notturna e Programmazione Tariffaria
Lo stato di carica della batteria è la variabile di input più importante per l'automazione energetica KNX – determina quando consentire carichi aggiuntivi, quando sganciare i carichi per proteggere la batteria, quando attivare la ricarica notturna fuori picco e come adattare la strategia tra condizioni operative estive e invernali. Un livello di automazione SOC ben progettato può ridurre i costi di importazione dalla rete del 40–70% rispetto al controllo di base dell'autoconsumo.
Tabella soglie SOC con bande di isteresi
La tabella delle soglie SOC definisce bande operative discrete, ciascuna delle quali attiva un insieme specifico di azioni KNX. L'isteresi – un offset di recupero al di sopra della soglia – impedisce commutazioni rapide quando il SOC oscilla vicino a un limite di soglia a causa di fluttuazioni di carico o misurazioni rumorose del SOC.
| Banda SOC | Azioni KNX consentite | Recupero isteresi |
|---|---|---|
| > 90% AND exporting | SG Ready Stato 4 + corrente max EV + riscaldatore a immersione ON | Attivo finché SOC non scende all'85% o smette di esportare |
| 50–90% | Autoconsumo normale: SG Ready State 3 + modalità priorità EV | Rimani in banda – nessun distacco |
| 20–50% | Solo autoconsumo base – nessun SG Ready State 4, EV a 6 A min | Ritorno alla banda 50-90 % quando il solare carica la batteria oltre il 55 % |
| < 20% | Sospendi tutti i carichi controllabili: EV disabilitato, SG Ready → State 2 | Riprendi i carichi quando il SOC supera il 25 % (isteresi 5 %) |
| < 10% | Emergenza: riduzione HVAC −2 °C + allarme carico alla visualizzazione KNX | Annulla la riduzione di emergenza quando il SOC supera il 15 % |
Modulo logico MDT — bande SOC con implementazione dell'isteresi
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 setpointTrigger di ricarica notturna fuori punta
Le tariffe dinamiche dell'elettricità (Tibber, Nordpool, Octopus Agile) offrono periodi in cui l'elettricità di rete costa meno di 0,10 EUR/kWh — tipicamente tra le 00:00 e le 06:00. Attivare la ricarica della batteria durante queste finestre riduce i costi energetici giornalieri quando la produzione solare è insufficiente per caricare completamente la batteria durante il giorno.
Logica di ricarica notturna fuori punta
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 per l'integrazione KNX: Nordpool pubblica i prezzi day-ahead alle 13:00 CET per il giorno successivo — adatto per automazioni HA che recuperano i prezzi una volta al giorno e programmano la ricarica di conseguenza. Tibber fornisce un'API di livello superiore con previsioni orarie dei prezzi e supporta abbonamenti push WebSocket per aggiornamenti in tempo reale dei prezzi, consentendo regolazioni dinamiche delle soglie nel GA tariffario KNX senza polling.
Precarica mattutina prima della tariffa di punta
Le tariffe a fasce orarie hanno spesso finestre di punta dalle 07:00 alle 11:00 quando il carico mattutino dell'edificio è elevato ma la produzione solare è ancora in crescita. Precaricare la batteria ad almeno il 50% di SOC prima della finestra di punta utilizzando energia fuori punta più economica garantisce che l'edificio attinga dalla batteria piuttosto che dalla costosa rete durante le ore di punta.
Automazione pre-carica mattutina (script 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_percentStrategia SOC stagionale
La strategia operativa della batteria dovrebbe adattarsi alla disponibilità solare stagionale. In estate, la batteria cicla quotidianamente tra quasi scarica e quasi piena – il ciclo profondo giornaliero massimizza l'autoconsumo ma richiede una buona chimica della batteria (LFP preferito a NMC per la longevità nei cicli profondi giornalieri). In inverno, con una generazione inferiore, la batteria raramente si carica completamente, quindi dovrebbe essere mantenuta a un SOC medio per preservare la capacità di riserva.
| Stagione | Intervallo SOC target | Strategia | Trigger di pianificazione KNX |
|---|---|---|---|
| Estate (aprile–settembre) | 20–95% | Deep daily cycling — max self-consumption. Allow EV + HP loads when SOC > 80%. | Cambio modalità stagionale il 1° aprile e il 1° ottobre |
| Inverno (ott–mar) | 40–80% | Mantieni SOC medio per riserva. Precarica all'80% prima del picco mattutino. Nessuna scarica profonda. | Passaggio alla strategia invernale il 1° ottobre |
| Lunghi periodi nuvolosi | 60–80% | Sospendi cicli profondi — preferisci importazione dalla rete in ore non di punta piuttosto che batteria sotto il 60%. | Automatic: if SOC < 60% at 09:00 for 3+ days |
| Heatwave (>35°C) | 20–80% | Ridurre il limite superiore per proteggere la temperatura della batteria (derating termico BMS) | If GA 9/1/2 (battery temp) > 35°C |
Commutazione modalità stagionale tramite programma orario 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");
}Tariffa energetica KNX GA: Tibber e Nordpool via HA
Per una programmazione dinamica della batteria in base alla tariffa, il prezzo corrente dell'elettricità deve essere pubblicato su un indirizzo di gruppo KNX dove il modulo logico KNX può confrontarlo con valori di soglia. Home Assistant o IP-Symcon legge l'API della tariffa e scrive il prezzo su un GA KNX ad ogni aggiornamento orario.
Automazione HA Tibber → GA tariffa KNX
# 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 importMessa in servizio con scenari di test SOC reali
La messa in servizio dell'automazione SOC richiede il test di ogni banda di soglia iniettando valori SOC simulati tramite ETS6 Group Monitor – senza attendere che la batteria cicli naturalmente attraverso ogni stato. Testare ogni soglia in sequenza e verificare che le azioni KNX corrette vengano attivate e cessino ai giusti valori SOC, inclusa l'isteresi.
Scenari di test per la messa in servizio dell'automazione 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 gridRiconnettere il SOC reale dopo il test
Dopo aver completato i test SOC simulati, riattivare il polling Intesis per il registro SOC della batteria. Verificare che il valore SOC reale corrisponda al display del BMS della batteria. Confermare che la logica transiti correttamente con i dati SOC reali prima di consegnare il sistema.
Verifica della modalità stagionale
Testare il cambio di modalità stagionale scrivendo temporaneamente i flag estate e inverno su GA 9/9/5. Verificare che le soglie SOC cambino come previsto: la soglia di abilitazione EV estiva (40% SOC) dovrebbe essere inferiore alla soglia invernale (60% SOC). Ripristinare la modalità stagionale corretta dopo il test.
Hai bisogno di automazione energetica KNX basata su SOC progettata e messa in servizio?
Progettiamo e configuriamo automazione delle soglie SOC, programmi di ricarica fuori picco, logica di strategia stagionale e integrazione tariffaria Tibber/Nordpool per edifici KNX con accumulo a batteria — completamente testati e documentati.
Richiedi un preventivo →