- Home
- Modbus register maps
- Victron Energy
- GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX)
Battery inverter (GX gateway for inverter/chargers, batteries and solar chargers) · Modbus register map
Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX) Modbus register map
Updated 24 October 2026
A Victron GX device is a Modbus-TCP gateway: one IP address on port 502, with the unit ID choosing which connected product you talk to (unit ID 100 for whole-system totals and ESS settings, other IDs for each Multi/Quattro, battery monitor or MPPT). Every register in this map is a single 16-bit integer whose raw value is divided by Victron's scale factor. The map covers system power flows and battery summary, VE.Bus AC/DC measurements, state, alarms and ESS mode 3 control, battery monitor/BMS values and alarms, solar charger readings, and the ESS mode 2 settings.
This page lists 128 Modbus registers for the Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX) — 21 writable — with the table, 0-based wire address, data type, word order, scale, units and access of each, re-typed from Victron Energy’s own free documentation (linked below) and checked against it.
- Manufacturer
- Victron Energy
- Model
- GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX)
- Registers
- 128 (21 writable)
- Transport
- Modbus TCP
- Default unit ID
- 100
- TCP port
- 502
- Documented addressing
- 0-based (the number printed is the address on the wire)
- Firmware
- Venus OS; register list 3.81. Some registers need a minimum Venus version (e.g. 2716 needs 3.50+).
- Also known as
- Cerbo GX, Cerbo-S GX, Venus GX, Color Control GX, CCGX, Ekrano GX, Octo GX, MultiPlus-II GX, EasySolar-II GX, Venus OS, dbus-modbustcp
Integration notes: Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX)
Enable the Modbus-TCP service on the GX, read the 'Available services' list to get each device's unit ID, then poll unit ID 100 (registers 817-866) for the system picture and the VE.Bus unit ID (registers 3-36) for the inverter/charger. All listed values are one 16-bit register each: apply the scale, and treat INT16 rows as signed.
Minimum registers to map
Addresses are 0-based wire addresses. Enough to monitor and run the unit; map more as the job needs.
| Register | Name | Type | Why | Access |
|---|---|---|---|---|
| HR 843 | Battery state of charge (system) [unit ID 100] | UINT16 | System battery state of charge (unit ID 100) | Read |
| HR 842 | Battery power (system) [unit ID 100] | INT16 | System battery power, + charging / - discharging (unit ID 100) | Read |
| HR 820 | Grid power L1 [unit ID 100] | INT16 | Grid power L1 (unit ID 100) | Read |
| HR 817 | AC consumption L1 [unit ID 100] | UINT16 | AC consumption L1 (unit ID 100) | Read |
| HR 850 | DC-coupled PV power [unit ID 100] | UINT16 | Total DC-coupled PV power (unit ID 100) | Read |
| HR 31 | VE.Bus state [VE.Bus unit ID] | UINT16 | VE.Bus state (VE.Bus unit ID) | Read |
| HR 32 | VE.Bus error [VE.Bus unit ID] | UINT16 | VE.Bus error (VE.Bus unit ID) | Read |
| HR 33 | Switch position (mode) [VE.Bus unit ID] | UINT16 | Switch position: remote on/off/charger-only (VE.Bus unit ID) | Read/write |
| HR 22 | Active input current limit [VE.Bus unit ID] | INT16 | AC input current limit (VE.Bus unit ID) | Read/write |
Enable Modbus control & writes
Modbus-TCP is off by default. On the GX, enable it under Settings > Services > Modbus TCP (newer Venus OS: Settings > Integrations > Modbus TCP server). The same menu lists 'Available services' with each device's unit ID and shows the last Modbus error. ESS mode 3 control needs ESS mode set to external control (register 2902 = 3, or the GUI).
Communication loss & watchdog
ESS mode 3: the VE.Bus power setpoints (37, 40, 41) must be rewritten at least every 60 seconds or the Multi drops to passthru. No general Modbus timeout is documented for other writes.
Byte order & addressing
- The unit ID picks the device, not the register: the same register number means different things on different unit IDs, and a register read on the wrong unit ID returns exception 02.
- Unit ID 100 and unit ID 0 both reach the system service and the ESS settings; use 100 because many clients reject 0.
- Since Venus OS 2.60 unit IDs are assigned dynamically and generally equal the device instance (up to 247). The 'Unit ID mapping' sheet keeps the old preferred IDs: 246 = CCGX VE.Bus port, 242 = Venus GX VE.Bus port, 227 = Cerbo GX VE.Bus port, 225 = CAN-bus BMS, 223/224/226 = Cerbo GX VE.Direct ports. Always confirm on the GX's Available services page.
- Scale factors are divisors in Victron's sheet; several power registers have scalefactor 0.1 or 0.01, meaning the raw value must be MULTIPLIED (by 10 or 100).
- Function 3 and 4 return the same data.
- A block read must not include any register the device lacks (Victron's example: reading 1-100 on the VE.Bus unit fails because 1 and 2 do not exist).
Network setup
- Give the GX a fixed IP (or DHCP reservation); Modbus-TCP listens on port 502.
- No serial settings: RS485 is not used for this interface.
- Unit IDs do not change after a reboot or power loss, per the GX Modbus-TCP manual.
Watch out for
- Parallel or three-phase VE.Bus systems cannot be addressed unit by unit; read the per-phase registers instead.
- Inverter/charger configuration (absorption voltage etc.) cannot be changed over Modbus-TCP.
- Exception 0A means the unit ID is known but no device answers on that port; 0B means the unit ID is not in the mapping list.
- Battery history registers (284, 303 and similar) are not available from CAN-bus BMS batteries.
- For ESS mode 2 grid setpoints on Venus 3.50 and later, Victron recommends the 32-bit register 2716 to avoid flash wear; it is not listed here because the word order is not documented, so 2700/2703 remain the documented 16-bit option.
Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX) Modbus registers
Address = 0-based wire address (the documented number is shown under it when it differs) · Order: ABCD = high word first, CDAB = low word first · Scale: engineering value = raw × scale.
| Table | Address | Name | Description | Type | Order | Scale | Units | Access | Values / bits |
|---|---|---|---|---|---|---|---|---|---|
| HR | 3 | Input voltage L1 [VE.Bus unit ID] | Voltage on the active AC input, phase 1. | UINT16 | × 0.1 | V | Read | ||
| HR | 4 | Input voltage L2 [VE.Bus unit ID] | UINT16 | × 0.1 | V | Read | |||
| HR | 5 | Input voltage L3 [VE.Bus unit ID] | UINT16 | × 0.1 | V | Read | |||
| HR | 6 | Input current L1 [VE.Bus unit ID] | Positive from mains into the Multi; negative when feeding back. | INT16 | × 0.1 | A | Read | ||
| HR | 7 | Input current L2 [VE.Bus unit ID] | INT16 | × 0.1 | A | Read | |||
| HR | 8 | Input current L3 [VE.Bus unit ID] | INT16 | × 0.1 | A | Read | |||
| HR | 9 | Input frequency L1 [VE.Bus unit ID] | INT16 | × 0.01 | Hz | Read | |||
| HR | 12 | Input power L1 [VE.Bus unit ID] | Same sign as input current. Raw value times 10 gives W. | INT16 | × 10 | W | Read | ||
| HR | 13 | Input power L2 [VE.Bus unit ID] | Raw value times 10 gives W. | INT16 | × 10 | W | Read | ||
| HR | 14 | Input power L3 [VE.Bus unit ID] | Raw value times 10 gives W. | INT16 | × 10 | W | Read | ||
| HR | 15 | Output voltage L1 [VE.Bus unit ID] | UINT16 | × 0.1 | V | Read | |||
| HR | 16 | Output voltage L2 [VE.Bus unit ID] | UINT16 | × 0.1 | V | Read | |||
| HR | 17 | Output voltage L3 [VE.Bus unit ID] | UINT16 | × 0.1 | V | Read | |||
| HR | 18 | Output current L1 [VE.Bus unit ID] | Positive from the Multi to the loads. | INT16 | × 0.1 | A | Read | ||
| HR | 19 | Output current L2 [VE.Bus unit ID] | INT16 | × 0.1 | A | Read | |||
| HR | 20 | Output current L3 [VE.Bus unit ID] | INT16 | × 0.1 | A | Read | |||
| HR | 21 | Output frequency [VE.Bus unit ID] | INT16 | × 0.01 | Hz | Read | |||
| HR | 22 | Active input current limit [VE.Bus unit ID] | AC input current limit; may be locked by a VE.Bus BMS or DMC. | INT16 | × 0.1 | A | Read/write | ||
| HR | 23 | Output power L1 [VE.Bus unit ID] | Same sign as output current. Raw value times 10 gives W. | INT16 | × 10 | W | Read | ||
| HR | 24 | Output power L2 [VE.Bus unit ID] | Raw value times 10 gives W. | INT16 | × 10 | W | Read | ||
| HR | 25 | Output power L3 [VE.Bus unit ID] | Raw value times 10 gives W. | INT16 | × 10 | W | Read | ||
| HR | 26 | Battery voltage (VE.Bus) [VE.Bus unit ID] | DC voltage measured by the inverter/charger. | UINT16 | × 0.01 | V | Read | ||
| HR | 27 | Battery current (VE.Bus) [VE.Bus unit ID] | Positive when the Multi charges the DC side. | INT16 | × 0.1 | A | Read | ||
| HR | 28 | Phase count [VE.Bus unit ID] | Number of AC phases in the VE.Bus system. | UINT16 | Read | ||||
| HR | 29 | Active AC input [VE.Bus unit ID] | UINT16 | Read | 0 = AC Input 1; 1 = AC Input 2; 240 = Disconnected | ||||
| HR | 30 | VE.Bus state of charge [VE.Bus unit ID] | SoC as known to the VE.Bus system; listed as writable. | UINT16 | × 0.1 | % | Read/write | ||
| HR | 31 | VE.Bus state [VE.Bus unit ID] | Operating state of the inverter/charger. | UINT16 | Read | 0 = Off; 1 = Low Power; 2 = Fault; 3 = Bulk; 4 = Absorption; 5 = Float; 6 = Storage; 7 = Equalize; 8 = Passthru; 9 = Inverting; 10 = Power assist; 11 = Power supply; 244 = Sustain; 252 = External control | |||
| HR | 32 | VE.Bus error [VE.Bus unit ID] | VE.Bus error number; 0 means no error. | UINT16 | Read | 0 = No error; 1 = VE.Bus Error 1: Device is switched off because one of the other phases in the system has switched off; 2 = VE.Bus Error 2: New and old types MK2 are mixed in the system; 3 = VE.Bus Error 3: Not all- or more than- the expected devices were found in the system; 4 = VE.Bus Error 4: No other device whatsoever detected; 5 = VE.Bus Error 5: Overvoltage on AC-out; 6 = VE.Bus Error 6: Error in DDC Program; 7 = VE.Bus BMS connected- which requires an Assistant- but no assistant found; 10 = VE.Bus Error 10: System time synchronisation problem occurred; 14 = VE.Bus Error 14: Device cannot transmit data; 16 = VE.Bus Error 16: Dongle missing; 17 = VE.Bus Error 17: One of the devices assumed master status because the original master failed; 18 = VE.Bus Error 18: AC Overvoltage on the output of a slave has occurred while already switched off; 22 = VE.Bus Error 22: This device cannot function as slave; 24 = VE.Bus Error 24: Switch-over system protection initiated; 25 = VE.Bus Error 25: Firmware incompatibility. The firmware of one of the connected device is not sufficiently up to date to operate in conjunction with this device; 26 = VE.Bus Error 26: Internal error | |||
| HR | 33 | Switch position (mode) [VE.Bus unit ID] | Remote on / off / charger-only / inverter-only command. | UINT16 | Read/write | 1 = Charger Only; 2 = Inverter Only; 3 = On; 4 = Off | |||
| HR | 34 | High temperature alarm [VE.Bus unit ID] | UINT16 | Read | 0 = Ok; 1 = Warning; 2 = Alarm | ||||
| HR | 35 | Low battery alarm [VE.Bus unit ID] | UINT16 | Read | 0 = Ok; 1 = Warning; 2 = Alarm | ||||
| HR | 36 | Overload alarm [VE.Bus unit ID] | UINT16 | Read | 0 = Ok; 1 = Warning; 2 = Alarm | ||||
| HR | 37 | ESS power setpoint L1 [VE.Bus unit ID] | ESS mode 3 AC-input power target, positive = import. Rewrite within 60 s. | INT16 | W | Read/write | |||
| HR | 38 | ESS disable charge [VE.Bus unit ID] | ESS mode 3: 1 blocks charging, which also blocks feed-back. | UINT16 | Read/write | 0 = Charge allowed; 1 = Charge disabled | |||
| HR | 39 | ESS disable feed-in [VE.Bus unit ID] | ESS mode 3: 1 stops the inverter feeding the grid. | UINT16 | Read/write | 0 = Feed in allowed; 1 = Feed in disabled | |||
| HR | 40 | ESS power setpoint L2 [VE.Bus unit ID] | ESS mode 3, phase 2. Rewrite within 60 s. | INT16 | W | Read/write | |||
| HR | 41 | ESS power setpoint L3 [VE.Bus unit ID] | ESS mode 3, phase 3. Rewrite within 60 s. | INT16 | W | Read/write | |||
| HR | 56 | Disable PV inverter [VE.Bus unit ID] | Curtails AC-out PV inverters by frequency shift; inverter mode only. | UINT16 | Read/write | 0 = PV enabled; 1 = PV disabled | |||
| HR | 61 | Battery temperature (VE.Bus) [VE.Bus unit ID] | INT16 | × 0.1 | °C | Read | |||
| HR | 63 | Phase rotation warning [VE.Bus unit ID] | UINT16 | Read | 0 = Ok; 1 = Warning | ||||
| HR | 64 | Grid lost alarm [VE.Bus unit ID] | UINT16 | Read | 0 = Ok; 2 = Alarm | ||||
| HR | 94 | Low cell voltage imminent [VE.Bus unit ID] | BMS pre-alarm. | UINT16 | Read | 0 = OK; 1 = Warning | |||
| HR | 95 | Charge state [VE.Bus unit ID] | Charger stage of the inverter/charger. | UINT16 | Read | 0 = Initialising; 1 = Bulk; 2 = Absorption; 3 = Float; 4 = Storage; 5 = Absorb repeat; 6 = Forced absorb; 7 = Equalise; 8 = Bulk stopped; 9 = Unknown | |||
| HR | 259 | Battery voltage [battery unit ID] | UINT16 | × 0.01 | V | Read | |||
| HR | 260 | Starter battery voltage [battery unit ID] | Auxiliary input on a battery monitor used for a starter battery. | UINT16 | × 0.01 | V | Read | ||
| HR | 261 | Battery current [battery unit ID] | Positive while charging, negative while discharging. | INT16 | × 0.1 | A | Read | ||
| HR | 262 | Battery temperature [battery unit ID] | INT16 | × 0.1 | °C | Read | |||
| HR | 263 | Mid-point voltage [battery unit ID] | Battery bank mid-point voltage. | UINT16 | × 0.01 | V | Read | ||
| HR | 264 | Mid-point deviation [battery unit ID] | UINT16 | × 0.01 | % | Read | |||
| HR | 265 | Consumed Ah [battery unit ID] | Always negative, matching the sign of discharge current. | UINT16 | × -0.1 | Ah | Read | ||
| HR | 266 | State of charge [battery unit ID] | UINT16 | × 0.1 | % | Read | |||
| HR | 268 | Low voltage alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 269 | High voltage alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 272 | Low SoC alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 273 | Low temperature alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 274 | High temperature alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 280 | Battery relay state [battery unit ID] | Writable on some batteries only; not on CAN-bus BMS batteries. | UINT16 | Read/write | 0 = Open; 1 = Closed | |||
| HR | 284 | Charge cycles [battery unit ID] | Not available from CAN-bus BMS batteries. | UINT16 | Read | ||||
| HR | 303 | Time to go [battery unit ID] | Raw value times 100 gives seconds; 0 while charging. Not on CAN-bus BMS. | UINT16 | × 100 | s | Read | ||
| HR | 304 | State of health [battery unit ID] | Third-party CAN-bus batteries and Lynx; not every Victron product. | UINT16 | × 0.1 | % | Read | ||
| HR | 305 | Max charge voltage (CVL) [battery unit ID] | Limit requested by a managed battery. | UINT16 | × 0.1 | V | Read | ||
| HR | 306 | Min discharge voltage [battery unit ID] | Low-voltage limit reported by a managed battery. | UINT16 | × 0.1 | V | Read | ||
| HR | 307 | Max charge current (CCL) [battery unit ID] | Limit requested by a managed battery. | UINT16 | × 0.1 | A | Read | ||
| HR | 308 | Max discharge current (DCL) [battery unit ID] | Limit requested by a managed battery. | UINT16 | × 0.1 | A | Read | ||
| HR | 309 | Capacity [battery unit ID] | Battery capacity. | UINT16 | × 0.1 | Ah | Read | ||
| HR | 318 | Minimum cell temperature [battery unit ID] | INT16 | × 0.1 | °C | Read | |||
| HR | 319 | Maximum cell temperature [battery unit ID] | INT16 | × 0.1 | °C | Read | |||
| HR | 320 | High charge current alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 321 | High discharge current alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 322 | Cell imbalance alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 323 | Internal failure alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 2 = Alarm | ||||
| HR | 326 | Low cell voltage alarm [battery unit ID] | UINT16 | Read | 0 = No alarm; 1 = Almost discharged; 2 = Alarm | ||||
| HR | 771 | Battery voltage (solar charger) [solar charger unit ID] | UINT16 | × 0.01 | V | Read | |||
| HR | 772 | Battery current (solar charger) [solar charger unit ID] | Charge current into the battery. | INT16 | × 0.1 | A | Read | ||
| HR | 774 | Charger on/off [solar charger unit ID] | Remote on/off; VE.Can MPPTs only. | UINT16 | Read/write | 1 = On; 4 = Off | |||
| HR | 775 | Charge state [solar charger unit ID] | UINT16 | Read | 0 = Off; 2 = Fault; 3 = Bulk; 4 = Absorption; 5 = Float; 6 = Storage; 7 = Equalize; 11 = Other (Hub-1); 245 = Wake-up; 252 = External control | ||||
| HR | 776 | PV voltage [solar charger unit ID] | Not available when several VE.Can chargers are combined. | UINT16 | × 0.01 | V | Read | ||
| HR | 777 | PV current [solar charger unit ID] | Derived from PV power and PV voltage. | INT16 | × 0.1 | A | Read | ||
| HR | 784 | Yield today [solar charger unit ID] | UINT16 | × 0.1 | kWh | Read | |||
| HR | 785 | Max charge power today [solar charger unit ID] | UINT16 | W | Read | ||||
| HR | 786 | Yield yesterday [solar charger unit ID] | UINT16 | × 0.1 | kWh | Read | |||
| HR | 788 | Error code [solar charger unit ID] | Solar charger error number; 0 means no error. | UINT16 | Read | 0 = No error; 1 = Battery temperature too high; 2 = Battery voltage too high; 3 = Battery temperature sensor miswired (+); 4 = Battery temperature sensor miswired (-); 5 = Battery temperature sensor disconnected; 6 = Battery voltage sense miswired (+); 7 = Battery voltage sense miswired (-); 8 = Battery voltage sense disconnected; 9 = Battery voltage wire losses too high; 17 = Charger temperature too high; 18 = Charger over-current; 19 = Charger current polarity reversed; 20 = Bulk time limit reached; 22 = Charger temperature sensor miswired; 23 = Charger temperature sensor disconnected; 34 = Input current too high | |||
| HR | 789 | PV power [solar charger unit ID] | Older 16-bit PV power with 0.1 W resolution. | UINT16 | × 0.1 | W | Read | ||
| HR | 790 | User yield [solar charger unit ID] | Energy since the last user reset. | UINT16 | × 0.1 | kWh | Read | ||
| HR | 791 | MPP operation mode [solar charger unit ID] | UINT16 | Read | 0 = Off; 1 = Voltage/current limited; 2 = MPPT active; 255 = Not available | ||||
| HR | 806 | GX relay 1 state [unit ID 100] | Open/close GX relay 1 when its function is set to manual. | UINT16 | Read/write | 0 = Open; 1 = Closed | |||
| HR | 807 | GX relay 2 state [unit ID 100] | Second GX relay, on models that have one. | UINT16 | Read/write | 0 = Open; 1 = Closed | |||
| HR | 808 | AC-coupled PV on output L1 [unit ID 100] | Total of AC-coupled PV inverters on the AC output, phase 1. | UINT16 | W | Read | |||
| HR | 809 | AC-coupled PV on output L2 [unit ID 100] | UINT16 | W | Read | ||||
| HR | 810 | AC-coupled PV on output L3 [unit ID 100] | UINT16 | W | Read | ||||
| HR | 811 | AC-coupled PV on input L1 [unit ID 100] | Total of AC-coupled PV inverters on the grid side, phase 1. | UINT16 | W | Read | |||
| HR | 812 | AC-coupled PV on input L2 [unit ID 100] | UINT16 | W | Read | ||||
| HR | 813 | AC-coupled PV on input L3 [unit ID 100] | UINT16 | W | Read | ||||
| HR | 817 | AC consumption L1 [unit ID 100] | Power delivered to AC loads, phase 1. | UINT16 | W | Read | |||
| HR | 818 | AC consumption L2 [unit ID 100] | UINT16 | W | Read | ||||
| HR | 819 | AC consumption L3 [unit ID 100] | UINT16 | W | Read | ||||
| HR | 820 | Grid power L1 [unit ID 100] | Power taken from the grid, phase 1; signed. | INT16 | W | Read | |||
| HR | 821 | Grid power L2 [unit ID 100] | INT16 | W | Read | ||||
| HR | 822 | Grid power L3 [unit ID 100] | INT16 | W | Read | ||||
| HR | 823 | Genset power L1 [unit ID 100] | Power supplied by a generator, phase 1. | INT16 | W | Read | |||
| HR | 824 | Genset power L2 [unit ID 100] | INT16 | W | Read | ||||
| HR | 825 | Genset power L3 [unit ID 100] | INT16 | W | Read | ||||
| HR | 826 | Active AC input source [unit ID 100] | What the active AC input is configured as; 240 = nothing connected. | INT16 | Read | 0 = Unknown; 1 = Grid; 2 = Generator; 3 = Shore power; 240 = Not connected | |||
| HR | 840 | Battery voltage (system) [unit ID 100] | Best available battery voltage: BMV first, then Multi, MPPT, charger. | UINT16 | × 0.1 | V | Read | ||
| HR | 841 | Battery current (system) [unit ID 100] | Positive while charging, negative while discharging. | INT16 | × 0.1 | A | Read | ||
| HR | 842 | Battery power (system) [unit ID 100] | Positive while charging, negative while discharging. | INT16 | W | Read | |||
| HR | 843 | Battery state of charge (system) [unit ID 100] | Best available SoC across the system's battery measurements. | UINT16 | % | Read | |||
| HR | 844 | Battery state (system) [unit ID 100] | UINT16 | Read | 0 = idle; 1 = charging; 2 = discharging | ||||
| HR | 845 | Battery consumed Ah (system) [unit ID 100] | Scale is negative, so the result is a negative Ah figure. | UINT16 | × -0.1 | Ah | Read | ||
| HR | 846 | Battery time to go (system) [unit ID 100] | Raw value times 100 gives seconds; 0 while charging. | UINT16 | × 100 | s | Read | ||
| HR | 850 | DC-coupled PV power [unit ID 100] | Sum of output power of all solar chargers. | UINT16 | W | Read | |||
| HR | 851 | DC-coupled PV current [unit ID 100] | Sum of output current of all solar chargers. | INT16 | × 0.1 | A | Read | ||
| HR | 855 | Charger power [unit ID 100] | DC power from AC chargers on the system. | UINT16 | W | Read | |||
| HR | 860 | DC system power [unit ID 100] | Power the battery supplies to DC loads. | INT16 | W | Read | |||
| HR | 865 | VE.Bus DC current (system) [unit ID 100] | Positive: Multi charging the DC side; negative: Multi drawing from it. | INT16 | × 0.1 | A | Read | ||
| HR | 866 | VE.Bus DC power (system) [unit ID 100] | Positive: Multi charging the DC side; negative: Multi drawing from it. | INT16 | W | Read | |||
| HR | 1290 | Minimum cell voltage [battery unit ID] | Lowest single-cell voltage in the battery system. | UINT16 | × 0.01 | V | Read | ||
| HR | 1291 | Maximum cell voltage [battery unit ID] | Highest single-cell voltage in the battery system. | UINT16 | × 0.01 | V | Read | ||
| HR | 2700 | ESS grid power setpoint [unit ID 100] | ESS mode 2 grid target, positive = import. Prefer 2716 on Venus 3.50+. | INT16 | W | Read/write | |||
| HR | 2703 | ESS grid power setpoint (x100 W) [unit ID 100] | Same setpoint as 2700; raw value times 100 W, for over 32 kW. | INT16 | × 100 | W | Read/write | ||
| HR | 2705 | DVCC max system charge current [unit ID 100] | Combined battery charge current limit; -1 = no limit. | INT16 | A | Read/write | |||
| HR | 2706 | Max system grid feed-in [unit ID 100] | Raw value times 100 gives W; raw -1 = no limit. | INT16 | × 100 | W | Read/write | ||
| HR | 2707 | Feed excess DC-coupled PV [unit ID 100] | 1 = feed surplus DC-coupled PV into the grid. | INT16 | Read/write | 0 = Don’t feed excess DC-tied PV into grid; 1 = Feed excess DC-tied PV into the grid | |||
| HR | 2708 | Block excess AC-coupled PV feed-in [unit ID 100] | Inverted logic: 1 = do not feed AC-coupled PV surplus. | INT16 | Read/write | 0 = Feed excess AC-tied PV into grid; 1 = Don’t feed excess AC-tied PV into the grid | |||
| HR | 2709 | Grid feed-in limiting active [unit ID 100] | INT16 | Read | 0 = Feed-in limiting is inactive; 1 = Feed-in limiting is active | ||||
| HR | 2901 | ESS minimum SoC [unit ID 100] | Minimum SoC kept unless the grid fails; same as the GUI setting. | UINT16 | × 0.1 | % | Read/write | ||
| HR | 2902 | ESS mode [unit ID 100] | 3 hands control to an external system (ESS mode 3). | UINT16 | Read/write | 1 = ESS with Phase Compensation; 2 = ESS without phase compensation; 3 = Disabled/External Control | |||
| HR | 2903 | ESS BatteryLife SoC limit [unit ID 100] | Dynamic BatteryLife limit; the active limit is the lower of this and 2901. | UINT16 | × 0.1 | % | Read |
Notes on this map
- Scale: Victron's 'Scalefactor' column is a divisor (engineering value = raw / scalefactor). It is converted here to a multiplier: scalefactor 10 -> scale 0.1, 100 -> 0.01, 0.1 -> 10, 0.01 -> 100, -10 -> -0.1 (consumed Ah is published as a positive raw number that means a negative Ah figure).
- Left out on purpose: every 32-bit and 64-bit register (int32/uint32/uint64, e.g. system 868-918, VE.Bus energy counters 74-93 and ESS setpoints 96-101, battery 256 and 330, solar charger 792 and 3728, ESS 2716/2720/2722). Neither the register list nor Victron's GX Modbus-TCP manual or data communication whitepaper states the word order of multi-register values, so they are not listed. Each has a 16-bit equivalent listed here except the VE.Bus energy counters.
- Left out: 2704 (ESS max inverter power). The register list gives scalefactor 0.1 (raw x 10 W) while Victron's ESS mode 2 and 3 guide describes the value as plain watts; the scale cannot be settled from the sources.
- Left out: deprecated registers whose value is always 0 (267, 276-277, 297-300, 781), the deprecated ESS percentage switches 2701/2702, and the microgrid block 200-246 (213-222 are marked unsupported).
- Not every product fills every register. A register that the selected device does not provide returns Modbus exception 02 (illegal data address); a block read that includes one fails as a whole.
- ESS details (setpoint sign, 60-second rewrite rule in mode 3, inverted logic of 2708, 100 W units of 2706, -1 for no limit) come from Victron's 'ESS mode 2 and 3' guide, https://www.victronenergy.com/live/ess:ess_mode_2_and_3 (last modified 2024-10-14). Function codes, unit ID 0/100 and the error codes come from the 'GX Modbus-TCP Manual', https://www.victronenergy.com/live/ccgx:modbustcp_faq. Port 502 is stated in 'Data communication with Victron Energy products' (whitepaper on victronenergy.com).
- Enum meanings are copied from the register list's dbus-unit column; VE.Bus error 32 and solar charger error 788 list only the codes the register list defines.
Check it against the live device. A register map tells you what the controller can expose; the unit in front of you may differ by firmware or options. Read a few registers and compare them with the unit’s own display; for a 32-bit value the float and byte-order decoder shows all four word orders at once, so a wrong word order or scale is obvious. New to this? Read what a register map is and why addresses are off by one.
Questions about the Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX)
What Modbus registers does the Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX) have?
This map lists 128 registers: 128 holding registers. 21 of them can be written. Registers vary with firmware, options and configuration, so confirm against the device.
Are the Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX) Modbus addresses 0-based or 1-based?
The manufacturer's document numbers registers 0-based (the number printed is the address on the wire). Every address on this page is the 0-based wire address you put in the request; the documented number is shown under it where it differs. The 'Address' column of Victron's register list goes into the request as-is. Victron's GX Modbus-TCP manual reads VE.Bus input voltage (register 3) by setting the first request register to 3, so the listed number is the wire address. Clients that add or subtract one (Modicon 4xxxx entry) will be off by one register. Function codes 3 and 4 return identical data; all registers are listed here as holding registers, and writes use 6 or 16.
What are the minimum Modbus registers to integrate the Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX)?
Start with HR 843 Battery state of charge (system) [unit ID 100] (System battery state of charge (unit ID 100)); HR 842 Battery power (system) [unit ID 100] (System battery power, + charging / - discharging (unit ID 100)); HR 820 Grid power L1 [unit ID 100] (Grid power L1 (unit ID 100)); HR 817 AC consumption L1 [unit ID 100] (AC consumption L1 (unit ID 100)); HR 850 DC-coupled PV power [unit ID 100] (Total DC-coupled PV power (unit ID 100)); HR 31 VE.Bus state [VE.Bus unit ID] (VE.Bus state (VE.Bus unit ID)); HR 32 VE.Bus error [VE.Bus unit ID] (VE.Bus error (VE.Bus unit ID)); HR 33 Switch position (mode) [VE.Bus unit ID] (Switch position: remote on/off/charger-only (VE.Bus unit ID)); HR 22 Active input current limit [VE.Bus unit ID] (AC input current limit (VE.Bus unit ID)).
How do I enable Modbus control of the Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX)?
Modbus-TCP is off by default. On the GX, enable it under Settings > Services > Modbus TCP (newer Venus OS: Settings > Integrations > Modbus TCP server). The same menu lists 'Available services' with each device's unit ID and shows the last Modbus error. ESS mode 3 control needs ESS mode set to external control (register 2902 = 3, or the GUI).
What happens when the Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX) loses Modbus communication?
ESS mode 3: the VE.Bus power setpoints (37, 40, 41) must be rewritten at least every 60 seconds or the Multi drops to passthru. No general Modbus timeout is documented for other writes.
Where is the official Victron Energy GX device Modbus-TCP (Cerbo GX, Venus GX, Color Control GX) Modbus documentation?
The source is Modbus-TCP register list (CCGX-Modbus-TCP-register-list-3.81.xlsx) (Register list 3.81, document revision Rev 54), published free by Victron Energy at https://www.victronenergy.com/upload/documents/CCGX-Modbus-TCP-register-list-3.81.xlsx.
Source: Modbus-TCP register list (CCGX-Modbus-TCP-register-list-3.81.xlsx) · Register list 3.81, document revision Rev 54. Register numbers, types, scaling and units are reproduced as published; descriptions are our own.