Sigenergy SigenStor Binding


This binding provides local, read-only monitoring of Sigenergy energy systems (SigenStor / Sigen Hybrid plants and the Sigen EVAC AC charger) over Modbus TCP, without any cloud dependency. It is an extension to the standard Modbus binding, so you configure one generic Modbus TCP bridge and add ready-made things — no generic poller/data things, gain profiles or transformations needed.

The register map follows the official Sigenergy Modbus Protocol V2.9 (2026-05-13) and has been live-verified on a SigenStor EC 10.0 TP (three-phase, 18 kWh ESS, 4.12 kWp PV) and a Sigen EVAC 11 charger.

Features

Plant thing (sigenergy-plant, unit ID 247):

  • EMS work mode, plant running state, on/off-grid status, grid sensor status
  • PV / load / grid / battery power, plus per-phase grid power (great for watching EV-charger load balancing against your main fuse)
  • Battery SOC, SOH, charge/discharge cut-off limits, cell temperature, rated and available capacities
  • Daily PV generation and load consumption + cumulative energy counters (PV, load, battery charged/discharged, grid import/export) — 64-bit safe, ready for persistence-based daily deltas
  • last-successful-update timestamp channel for stale-data detection

Hybrid inverter thing (sigenergy-inverter, own unit ID, usually 1) — new in v0.2:

  • Per-string PV monitoring: voltage, current and derived power per string (PV1-PV4) — spot a shaded, snowed-over or failing string at a glance
  • Inverter AC/DC power, grid frequency, phase voltages/currents, power factor, internal temperature
  • ESS details: SOC/SOH, cell temperature/voltage, daily + cumulative charge/discharge energy
  • The inverter identifies itself on startup: model, serial number and firmware become thing properties

Plant alarms — new in v0.2: the merged alarm registers (30027-30030, 30072, 30280-30281) are decoded into an alarm-active switch and a canonical alarm-summary (53 documented alarm bits with PCS/ESS/GATEWAY/DC_CHARGER/PLANT prefixes, or NONE) — ideal for a push-notification rule. Costs no extra Modbus requests. Registers reading 0xFFFF are treated as “not applicable” (a live-observed firmware quirk).

EV charger thing (sigenergy-evac, own unit ID):

  • IEC 61851-1 system state, charging power, total energy
  • Decoding of all documented alarm bits (aggregate switch + summary + raw masks)
  • Charger ratings (power/current/voltage/input breaker)

Safety by design: the binding is strictly monitoring-only — it issues Modbus FC04 read requests only, defines no writable channels, and never touches holding/control registers. Sigenergy’s own EMS/AI stays fully in control of your system. Unit tests enforce the read-only guarantee.

Robustness: register blocks that only exist on newer firmware (protocol V2.8+) fail independently — on older firmware those channels stay undefined and load power falls back to a derived value, without taking the thing offline.

Channel labels and state options are available in English and Swedish.

Requirements

  • openHAB 5.1.x or 5.2.x with the Modbus binding installed
  • Modbus TCP enabled for your plant in the mySigen app (default plant unit ID 247)
  • For the EVAC charger: the charger’s own Modbus slave address must be configured in the mySigen installer app (it has no address until an installer sets one; the end-user app does not show this setting)

Installation

  1. Download the jar matching your openHAB version and drop it into your addons/ folder:
  2. Configure things (file example):
Bridge modbus:tcp:sigenstor [ host="192.168.1.10", port=502, id=247, enableDiscovery=false, rtuEncoded=false, timeBetweenTransactionsMillis=1000 ] {
    Thing sigenergy-plant plant "SigenStor Plant" [ pollInterval=5000, maxTries=3 ]
    Thing sigenergy-inverter inverter "Hybrid Inverter" [ unitId=1, pollInterval=10000, maxTries=3 ]
    Thing sigenergy-evac evac "EV Charger" [ unitId=2, pollInterval=5000, maxTries=3 ]
}

Full documentation (all channels, sign conventions, polling design, troubleshooting):

Notes

Roadmap / ideas

  • Possibly an upstream PR to openhab-addons once the binding has matured with community feedback

Not planned: write/control support of any kind. This binding is monitoring-only by design — Sigenergy’s EMS/AI remains the sole controller of the system.

Changelog

v0.2 (2026-09-06) — hybrid inverter thing with per-string PV monitoring, plant alarm decoding (53 documented alarm bits), inverter identification as thing properties. 51 unit tests.
v0.1 (2026-09-04) — initial release: plant + EVAC monitoring, EN/SV translations, 38 unit tests. Jars for both 5.1.x and 5.2.x.

v0.2 released! :tada:

New:

  • Hybrid inverter thing with per-string PV monitoring (voltage/current/power per string), ESS details, phase data — and the inverter identifies itself (model/serial/firmware as thing properties)
  • Plant alarm decoding: 53 documented alarm bits across all seven merged-alarm registers decoded into alarm-active + a readable alarm-summary — perfect for push-notification rules. No extra Modbus traffic.

Jars for openHAB 5.1.x and 5.2.x in the release; links in the first post are updated:

Everything remains strictly read-only (FC04 only). Live-verified on a SigenStor EC 10.0 TP + Sigen EVAC 11 over a weekend of production, EV charging and load-balancing tests.