SRNE ASP48120SH3 Modbus Register Map (validated) Validated Modbus register map for the SRNE ASP48120SH3 three-phase hybrid inverter, confirmed against the live unit on 2026-07-21. Bus : RS485, 9600 8N1, function code 03 (read holding registers), slave address 1. Source of truth : src/inverter/registers.py in nfe-modbus-energy-logger (declarative, grouped by OpenEMS nature). This page is the human-readable copy. Live telemetry registers Address Field OpenEMS nature / channel Scale Signed Unit 0x0210 state_code System / STATE enum no code 0x0212 bus_v System / DC_BUS_VOLTAGE 0.1 no V 0x0228 pbus_v System / DC_BUS_P_VOLTAGE 0.1 no V 0x0229 nbus_v System / DC_BUS_N_VOLTAGE 0.1 no V 0x0213 grid_v_l1 ElectricityMeter(grid) / VOLTAGE_L1 0.1 no V 0x022A grid_v_l2 ElectricityMeter(grid) / VOLTAGE_L2 0.1 no V 0x022B grid_v_l3 ElectricityMeter(grid) / VOLTAGE_L3 0.1 no V 0x0214 grid_i_l1 ElectricityMeter(grid) / CURRENT_L1 0.1 no A 0x0215 grid_freq ElectricityMeter(grid) / FREQUENCY 0.01 no Hz 0x0216 backup_v_l1 ElectricityMeter(backup) / VOLTAGE_L1 0.1 no V 0x022C backup_v_l2 ElectricityMeter(backup) / VOLTAGE_L2 0.1 no V 0x022D backup_v_l3 ElectricityMeter(backup) / VOLTAGE_L3 0.1 no V 0x0217 backup_i_l1 ElectricityMeter(backup) / CURRENT_L1 0.1 no A 0x022E backup_i_l2 ElectricityMeter(backup) / CURRENT_L2 0.1 no A 0x022F backup_i_l3 ElectricityMeter(backup) / CURRENT_L3 0.1 no A 0x0218 backup_freq ElectricityMeter(backup) / FREQUENCY 0.01 no Hz 0x0219 load_i_l1 Load / CURRENT_L1 0.1 no A 0x021B load_active_w Load / ACTIVE_POWER 1 no W 0x021C load_apparent_va Load / APPARENT_POWER 1 no VA 0x021F load_ratio_pct Load / LOAD_RATIO 1 no % 0x0100 battery_soc SymmetricEss / SOC 1 no % 0x0101 battery_v SymmetricEss / VOLTAGE 0.1 no V 0x0102 battery_i SymmetricEss / CURRENT 0.1 yes A 0x0220 temp_heatsink_a Temp / TEMPERATURE_A 0.1 yes C 0x0221 temp_heatsink_b Temp / TEMPERATURE_B 0.1 yes C 0x0222 temp_heatsink_c Temp / TEMPERATURE_C 0.1 yes C Derived values Power factor = active power (0x021B) / apparent power (0x021C). Battery flow direction from the sign of battery current (0x0102): positive is charging, negative is discharging. Machine state label from the code at 0x0210 (see gotchas below). Registers deliberately NOT used (validated wrong on this model) Address Reason 0x021A load PF Reads 0 (unpopulated). Derive PF from active/apparent instead. 0x0103 device temp Reads 0. Use the heat-sink temps 0x0220 to 0x0222. 0x0223 heatsink D Reads 120.0 (bogus/unused). 0x0107 to 0x0111 PV This backup unit has no PV, reads 0. Machine state (0x0210) Only code 2 is verified. The generic SRNE V1.7 state table does NOT match this model (generic says 2 is "initialization"; the live unit at 2 is fully running). Verify the rest by observing transitions. 2 = running (mains/bypass) [VERIFIED] other codes: treat as unverified until observed. Writes Config/control registers reject FC06 ("Illegal function"). Use FC16 (write multiple registers), e.g. pymodbus write_registers. Control area starts at 0xDF00 (power on/off) plus the setting parameters.