Skip to content

Register map ​

All values are input registers (function code 0x04), read at their raw addresses (no 30001 offset). Power registers are signed 32-bit big-endian in watts; SOC and SOH are 16-bit values scaled by ten; energy counters are unsigned big-endian integers scaled by 100 to kWh.

SignalRegisterWordsTypeMeaning
gridPower300052int32 WGrid power (positive import, negative export)
batterySoc300141uint16 ÷10Battery state of charge, percent
sigenPvPower300352int32 WSigenergy DC solar production
ratedEnergyCapacity300832uint32 ÷100Installed battery capacity, kWh
batterySoh300871uint16 ÷10Battery state of health, percent
lifetimePv300884uint64 ÷100Cumulative PV generation, kWh
consumedToday300922uint32 ÷100Home consumption since midnight, kWh
lifetimeConsumed300944uint64 ÷100Cumulative home consumption, kWh
smart-load energy block3009848uint32 ÷100Lifetime energy per Smart Port load, 24 slots of 2 words, kWh
smart-load power block3014648int32 WLive power per Smart Port load, 24 slots of 2 words
thirdPartyPvPower301942int32 WThird-party (AC-coupled) solar, 0 without one
lifetimeBatteryCharge302004uint64 ÷100Cumulative battery charge, kWh
lifetimeBatteryDischarge302044uint64 ÷100Cumulative battery discharge, kWh
lifetimeGridImport302164uint64 ÷100Cumulative grid import, kWh
lifetimeGridExport302204uint64 ÷100Cumulative grid export, kWh
generalLoadPower302822int32 WHouse load excluding EV chargers/smart loads
loadPower302842int32 WHome consumption (total, includes EV)

Solar is the sum of two registers, not one. pvPower (what the dashboard and HomeKit show) is sigenPvPower (30035, the Sigenergy DC arrays) plus thirdPartyPvPower (30194, an AC-coupled third-party inverter the gateway meters via a CT sensor). On a system with no third-party PV the second register reads 0, so pvPower equals sigenPvPower. generalLoadPower (30282) is the house load with the EV chargers and trackable smart loads removed, alongside the total at 30284.

Battery power is derived ​

Battery power is derived, not read. Register 30037 ("ESS power") is the gross battery output, which includes the system's own draw (BMS, cooling, controller, gateway) and so reads higher than the mySigen app's battery figure (by ~0.2–0.3 kW at idle). Instead batteryPower is computed as pvPower + gridPower − loadPower (positive charging, negative discharging), which matches the app and keeps solar, battery, grid, and home in balance; folding third-party PV into pvPower keeps that balance right on AC-coupled systems too. npm run probe still prints raw register 30037 as essPower alongside the derived value for comparison.

Firmware differences ​

If a register returns a Modbus exception (illegal data address, common on older firmware), the poller logs it once and skips that register for the rest of the session; the corresponding state field stays null. The four core power and SoC registers are present on every known firmware version. The others were verified against a specific installation; npm run probe is the quickest way to confirm what yours supports before relying on them (see Local development).

ratedEnergyCapacity feeds the battery time-to-empty estimate as an automatic fallback when the capacity field in Settings → Battery is blank, so the kWh line in the estimate appears without any manual configuration on firmware that reports this register.

Beyond the plant totals

These registers are the plant-level aggregates read on unit 247. For the per-inverter, per-string, and Smart Port reads, see Devices & sources. For the writable holding registers the bridge never touches, see Control registers.

MIT licensed. Not affiliated with or endorsed by Sigenergy, Apple, Google, or Cloudflare.