SMA and Fronius Battery Storage KNX Integration: Gen24 BYD and Sunny Storage Self-Consumption
Both SMA and Fronius offer hybrid solar inverters with integrated battery storage — the Fronius Symo GEN24 Plus with BYD HVS and the SMA Sunny Boy Storage with SMA battery. Each exposes battery SOC, charge power, and discharge power via Modbus TCP, enabling KNX automation to read live battery state and sequence self-consumption loads accordingly.
Fronius GEN24 Plus Modbus TCP register map
The Fronius Symo GEN24 Plus implements both the SunSpec Alliance standard register map and a proprietary Fronius extension. Battery registers are in the Fronius extension block (above address 40350) and are only populated when a compatible battery (BYD HVS, BYD HVM, LG RESU) is connected and communicating via the GEN24 BMS interface.
| Register | Description | Format / Scale | KNX DPT → GA |
|---|---|---|---|
| 40070 | AC power output (PV generation) | int16, W | DPT 13.010 → 9/0/0 |
| 40080 | AC energy today (Wh) | uint32, Wh | DPT 12.001 → 9/0/2 |
| 40225 | Grid power (+import / −export) | int16, W | DPT 13.010 → 9/0/1 |
| 40352 | Battery charge/discharge power (+ charge, − discharge) | int16, W | DPT 13.010 → 9/1/1 |
| 40356 | Battery state of charge (%) | uint16, 0–100% | DPT 5.001 → 9/1/0 |
| 40358 | Battery temperature (°C) | int16, 0.1°C resolution | DPT 9.001 → 9/1/2 |
| 40362 | Battery voltage (V) | uint16, 0.1V | DPT 9.020 → 9/1/3 |
GEN24 battery register availability: registers 40352–40362 are only populated when the GEN24 detects an active battery BMS. If the battery is not connected or the BMS communication has failed, these registers return 0 or the Modbus gateway will report a timeout error. Always verify battery registers are live before configuring the KNX automation logic.
SMA Sunny Boy Storage Modbus TCP register map
The SMA Sunny Boy Storage uses 32-bit unsigned integer registers (two consecutive 16-bit registers, big-endian) for most values, differing from the Fronius int16 convention. The Intesis IN701KNX gateway must be configured with the correct 32-bit register type for SMA signals.
SMA Sunny Boy Storage key Modbus registers (unit ID 3)
Register 30775 → AC power output W (uint32, 2 registers, big-endian) KNX DPT 13.010, scale ×1, GA 9/0/0 Register 30865 → Battery SOC % (uint32, 2 registers) KNX DPT 5.001, scale ×0.01 (register value × 0.01 = %), GA 9/1/0 Register 30593 → Battery charge/discharge power W (int32, 2 registers) Positive = charging, Negative = discharging KNX DPT 13.010, scale ×1, GA 9/1/1 Register 30881 → Battery temperature (int32, 2 registers, 0.1°C) KNX DPT 9.001, scale ×0.1, GA 9/1/2 Register 30513 → Total energy yield today (uint32, 2 registers, Wh) KNX DPT 12.001, GA 9/0/2 Important: SMA uses unit ID 3 by default Verify unit ID in SMA webserver: Settings → External Communication → Modbus → Modbus Unit ID
Comparison: SMA vs Fronius vs Victron Modbus availability
The three major battery storage platforms differ in what Modbus data they expose, which affects the complexity of the KNX automation logic possible.
| Data point | Fronius GEN24 | SMA Sunny Boy Storage | Victron Cerbo GX |
|---|---|---|---|
| Battery SOC % | Reg 40356 (direct) | Reg 30865 (×0.01 scale) | Reg 843 (×0.1 scale) |
| Battery charge/discharge W | Reg 40352 (int16 signed) | Reg 30593 (int32 signed) | Reg 844 (int16 signed) |
| Grid import/export W | Reg 40225 (Fronius SM required) | Separate SMA Energy Meter | Reg 820 (built-in) |
| Battery temperature | Reg 40358 | Reg 30881 | Via BMS unit ID (unit ID 289) |
| Inverter state/mode | Limited (running/fault) | Reg 30521 (operating status) | Reg 28 (full ESS state) |
| Cell-level BMS data | Not available | Not available | Available (via BMS unit IDs) |
| Write registers (control) | Power limit Reg 40149 | Limited — no remote charge control | ESS mode via VEBus unit |
Intesis gateway setup for Fronius GEN24 with BYD
The Intesis IN701KNX gateway configuration for a Fronius GEN24 Plus with BYD battery requires separate signal entries for the SunSpec standard registers (AC power, grid power) and the Fronius extension registers (battery SOC, battery power). Both use the same Modbus TCP master connection to the GEN24 IP address.
Intesis MAPS — Fronius GEN24 + BYD complete signal table
MAPS Protocol: Modbus TCP Master Remote IP: 192.168.1.100 (Fronius GEN24 static IP) Port: 502, Unit ID: 1, Poll: 10s, Byte order: Big-endian Signal table: # Register Type Scale Function KNX DPT GA 1 40070 INT16 ×1 Read DPT 13.010 9/0/0 PV AC Power W 2 40225 INT16 ×1 Read DPT 13.010 9/0/1 Grid Power W 3 40080 UINT32 ×1 Read DPT 12.001 9/0/2 Energy Today Wh 4 40356 UINT16 ×1 Read DPT 5.001 9/1/0 Battery SOC % 5 40352 INT16 ×1 Read DPT 13.010 9/1/1 Battery Power W 6 40358 INT16 ×0.1 Read DPT 9.001 9/1/2 Battery Temp °C 7 40149 UINT16 ×1 Write DPT 5.010 9/0/3 Power Limit % Note: Signal 3 (UINT32) requires setting 32-bit register type in MAPS — it spans registers 40080 and 40081 combined
Self-consumption logic: GEN24 surplus sequencing
With the Fronius GEN24 Plus and BYD battery, the self-consumption sequencing must account for the battery state to avoid the heat pump and EV charger consuming grid power while the battery simultaneously discharges to supply the building — a situation that wastes battery capacity.
GEN24 self-consumption load sequencing
Net available power for controllable loads:
Available = PV power (GA 9/0/0) − building base load
= GA 9/0/0 − max(0, GA 9/0/1 + GA 9/1/1)
(Grid import + battery discharge = base load demand)
Sequence 1 — Heat pump SG Ready (Priority 1):
IF GA 9/0/1 < −2000W AND GA 9/1/0 > 50%:
→ SG Ready State 3 (encouraged mode) — ~1 kW extra HP load
Sequence 2 — EV charger (Priority 2):
IF GA 9/0/1 < −3000W AND GA 9/1/0 > 40%:
→ EV current = (GA 9/0/0 − 3000) ÷ 230 (surplus above 3kW)
→ Write to EV charger current GA
Sequence 3 — Maximum HP (Priority 3):
IF GA 9/0/1 < −6000W AND GA 9/1/0 > 80%:
→ SG Ready State 4 (maximum HP power)
Grid zero injection control (if DNO requires):
IF GA 9/0/1 < −export_limit W AND GA 9/1/0 > 95%:
→ Write 80 to GA 9/0/3 (power limit register 40149)
Throttle PV to reduce export — battery full, loads at maxCommissioning steps for GEN24 + BYD and SMA systems
Commissioning the battery storage KNX integration requires verifying both PV-only registers and battery-specific registers, confirming the sign convention for battery power (charge vs discharge), and testing the SOC-dependent logic at simulated SOC threshold boundaries.
Battery KNX integration commissioning sequence
Step 1 — Fronius webserver register verification: Navigate to http://<GEN24-IP> → Solar API → GetPowerFlowRealtimeData JSON response shows: P_PV, P_Grid, P_Load, P_Akku (battery) Cross-check values with ETS6 Group Monitor GA readings Step 2 — Battery SOC register check: GA 9/1/0 should match GEN24 webserver battery SOC display Compare every 5 minutes for 30 minutes — values should track Step 3 — Battery power sign convention: During solar peak: GA 9/1/1 should be positive (battery charging) Late afternoon (PV declining): GA 9/1/1 should turn negative (discharging) Verify sign matches Fronius webserver P_Akku sign (convention may differ) If reversed: invert sign in Intesis MAPS signal configuration Step 4 — SMA-specific: 32-bit register pair test: SMA SOC register 30865 reads as two 16-bit values Confirm Intesis reads both high and low word correctly Typical commissioning error: reading only register 30865 (high word) gives SOC × 100 instead of SOC % — check scale factor Step 5 — SOC logic threshold test: Write test SOC value to GA 9/1/0 via ETS6 Group Monitor Write 18 (18% SOC) → confirm load shedding activates Write 85 → confirm SG Ready and EV loads re-enable Step 6 — Grid zero injection test (if configured): Write value to GA 9/1/0 = 97 (97% SOC) Verify: if grid is also exporting (GA 9/0/1 < -export_limit) → power limit register 40149 receives 80 (reduce to 80% output)
Need a Fronius or SMA battery panel with KNX integration?
We configure Intesis IN701KNX gateways for Fronius GEN24 Plus BYD and SMA Sunny Boy Storage, with full KNX self-consumption logic, SOC automation, and ETS6 commissioning documentation.
Request a quote →