Automatisation KNX SOC Batterie : Délestage, Charge Nocturne et Planification Tarifaire
L'état de charge de la batterie est la variable d'entrée la plus importante pour l'automatisation énergétique KNX – il détermine quand autoriser des charges supplémentaires, quand délester pour protéger la batterie, quand déclencher la charge nocturne hors pointe, et comment adapter la stratégie entre les conditions de fonctionnement estivales et hivernales. Une couche d'automatisation SOC bien conçue peut réduire les coûts d'importation du réseau de 40 à 70 % par rapport à un contrôle d'autoconsommation de base.
Tableau de seuils SOC avec bandes d'hystérésis
Le tableau de seuils SOC définit des bandes de fonctionnement discrètes, chacune déclenchant un ensemble spécifique d'actions KNX. L'hystérésis – un décalage de récupération au-dessus du seuil – empêche les commutations rapides lorsque le SOC oscille près d'une limite de seuil en raison de fluctuations de charge ou d'une mesure SOC bruitée.
| Bande SOC | Actions KNX autorisées | Récupération d'hystérésis |
|---|---|---|
| > 90% AND exporting | SG Ready État 4 + courant max EV + chauffage immergé ON | Actif jusqu'à ce que le SOC tombe à 85% ou cesse d'exporter |
| 50–90% | Autoconsommation normale : SG Ready State 3 + mode priorité VE | Rester dans la bande – pas de délestage |
| 20–50% | Autoconsommation de base uniquement – pas de SG Ready State 4, VE à 6 A min | Revenir à la bande 50-90 % lorsque le solaire charge la batterie au-dessus de 55 % |
| < 20% | Suspendre toutes les charges contrôlables : VE désactivé, SG Ready → State 2 | Reprendre les charges lorsque le SOC remonte au-dessus de 25 % (hystérésis 5 %) |
| < 10% | Urgence : abaissement HVAC −2 °C + alerte de charge à la visualisation KNX | Annuler l'abaissement d'urgence lorsque le SOC remonte au-dessus de 15 % |
Module logique MDT — bandes SOC avec implémentation d'hystérésis
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 setpointDéclencheur de charge nocturne hors pointe
Les tarifs dynamiques de l'électricité (Tibber, Nordpool, Octopus Agile) offrent des périodes où l'électricité du réseau coûte moins de 0,10 EUR/kWh — généralement entre 00h00 et 06h00. Déclencher la charge de la batterie pendant ces fenêtres réduit les coûts énergétiques quotidiens lorsque la production solaire est insuffisante pour charger complètement la batterie pendant la journée.
Logique de charge nocturne hors pointe
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 pour l'intégration KNX : Nordpool publie les prix day-ahead à 13h00 CET pour le jour suivant — adapté aux automatisations HA qui récupèrent les prix une fois par jour et planifient la charge en conséquence. Tibber fournit une API de plus haut niveau avec des prévisions de prix horaires et prend en charge les abonnements push WebSocket pour les mises à jour de prix en temps réel, permettant des ajustements dynamiques de seuil dans la GA tarifaire KNX sans sondage.
Précharge matinale avant le tarif de pointe
Les tarifs heures pleines/heures creuses ont souvent des fenêtres de pointe de 07h00 à 11h00 lorsque la charge matinale du bâtiment est élevée mais que la production solaire est encore en croissance. Précharger la batterie à au moins 50 % de SOC avant la fenêtre de pointe en utilisant de l'énergie hors pointe moins chère garantit que le bâtiment tire de la batterie plutôt que du réseau coûteux pendant les heures de pointe.
Automatisation de précharge matinale (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_percentStratégie SOC saisonnière
La stratégie de fonctionnement de la batterie doit s'adapter à la disponibilité solaire saisonnière. En été, la batterie cycle quotidiennement entre presque vide et presque pleine – un cyclage profond quotidien maximise l'autoconsommation mais nécessite une bonne chimie de batterie (LFP préféré au NMC pour la longévité en cyclage profond quotidien). En hiver, avec une production plus faible, la batterie se charge rarement complètement, elle doit donc être maintenue à un SOC intermédiaire pour préserver la capacité de réserve.
| Saison | Plage de SOC cible | Stratégie | Déclencheur de planning KNX |
|---|---|---|---|
| Été (avril–septembre) | 20–95% | Deep daily cycling — max self-consumption. Allow EV + HP loads when SOC > 80%. | Changement de mode saisonnier le 1er avril et le 1er octobre |
| Hiver (oct–mars) | 40–80% | Maintenir un SOC moyen pour la réserve. Précharger à 80 % avant le pic matinal. Pas de décharge profonde. | Basculement vers la stratégie hivernale le 1er octobre |
| Longues périodes nuageuses | 60–80% | Suspendre les cycles profonds — privilégier l'import réseau hors pointe plutôt que la batterie en dessous de 60 %. | Automatic: if SOC < 60% at 09:00 for 3+ days |
| Heatwave (>35°C) | 20–80% | Réduire la limite supérieure pour protéger la température de la batterie (déclassement thermique BMS) | If GA 9/1/2 (battery temp) > 35°C |
Commutation de mode saisonnier via programmation horaire 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");
}Tarif énergétique KNX GA : Tibber et Nordpool via HA
Pour une planification dynamique de la batterie en fonction du tarif, le prix actuel de l'électricité doit être publié sur une adresse de groupe KNX où le module logique KNX peut le comparer à des valeurs de seuil. Home Assistant ou IP-Symcon lit l'API tarifaire et écrit le prix sur une GA KNX à chaque mise à jour horaire.
Automatisation HA Tibber → GA tarifaire 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 importMise en service avec des scénarios de test SOC réels
La mise en service de l'automatisation SOC nécessite de tester chaque bande de seuil en injectant des valeurs SOC simulées via ETS6 Group Monitor – sans attendre que la batterie parcoure naturellement chaque état. Testez chaque seuil séquentiellement et vérifiez que les actions KNX correctes se déclenchent et cessent aux bonnes valeurs SOC, y compris l'hystérésis.
Scénarios de test de mise en service de l'automatisation 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 gridReconnecter le SOC réel après le test
Après avoir terminé les tests SOC simulés, réactivez l'interrogation Intesis pour le registre SOC de la batterie. Vérifiez que la valeur SOC réelle correspond à l'affichage du BMS de la batterie. Confirmez que la logique transitionne correctement avec les données SOC réelles avant de remettre le système.
Vérification du mode saisonnier
Testez le changement de mode saisonnier en écrivant temporairement les drapeaux été et hiver sur GA 9/9/5. Vérifiez que les seuils SOC changent comme prévu : le seuil d'activation EV été (40 % SOC) doit être inférieur au seuil hiver (60 % SOC). Restaurez le mode saisonnier correct après le test.
Besoin d'une automatisation énergétique KNX basée sur le SOC conçue et mise en service ?
Nous concevons et configurons l'automatisation des seuils SOC, les programmes de charge hors pointe, la logique de stratégie saisonnière et l'intégration des tarifs Tibber/Nordpool pour les bâtiments KNX avec stockage sur batterie — entièrement testés et documentés.
Demander un devis →