{
  "spec_version": 1,
  "slug": "victron-gx-cerbo",
  "manufacturer": "Victron Energy",
  "model": "GX device (Cerbo GX / Venus GX / Ekrano GX) Modbus TCP server",
  "category": "Home battery",
  "supplier_url": "https://www.victronenergy.com/support-and-downloads/technical-information",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 100,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 806,
      "count": 1,
      "name": "Relay 1 state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "GX device relay 1: 0 = open, 1 = closed. Writable."
    },
    {
      "address": 807,
      "count": 1,
      "name": "Relay 2 state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "GX device relay 2: 0 = open, 1 = closed. Only present on devices with a second relay (e.g. Venus GX)."
    },
    {
      "address": 808,
      "count": 1,
      "name": "PV AC-coupled on output L1",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Sum of all AC-coupled PV inverters on AC output, phase L1. Saturates above 65 kW; the 32-bit variant starts at 884."
    },
    {
      "address": 809,
      "count": 1,
      "name": "PV AC-coupled on output L2",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 810,
      "count": 1,
      "name": "PV AC-coupled on output L3",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 811,
      "count": 1,
      "name": "PV AC-coupled on input L1",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Sum of all AC-coupled PV inverters on AC input (grid side), phase L1. 32-bit variant starts at 890."
    },
    {
      "address": 812,
      "count": 1,
      "name": "PV AC-coupled on input L2",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 813,
      "count": 1,
      "name": "PV AC-coupled on input L3",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 817,
      "count": 1,
      "name": "AC consumption L1",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power supplied by the system to the loads, phase L1. 32-bit variant starts at 902."
    },
    {
      "address": 818,
      "count": 1,
      "name": "AC consumption L2",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 819,
      "count": 1,
      "name": "AC consumption L3",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 820,
      "count": 1,
      "name": "Grid L1",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power supplied by the grid to the system, phase L1. Negative when feeding in. 32-bit variant starts at 908."
    },
    {
      "address": 821,
      "count": 1,
      "name": "Grid L2",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 822,
      "count": 1,
      "name": "Grid L3",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 826,
      "count": 1,
      "name": "Active input source",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = unknown, 1 = grid, 2 = generator, 3 = shore power, 240 = not connected. 0 also means an active input that is not configured in the GX settings."
    },
    {
      "address": 834,
      "count": 1,
      "name": "GX firmware major version",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Shown as hexadecimal, which is the textual version number, e.g. 0x0324 = v3.24."
    },
    {
      "address": 835,
      "count": 1,
      "name": "GX firmware beta release",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Zero on official releases."
    },
    {
      "address": 840,
      "count": 1,
      "name": "Battery voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Battery voltage chosen by the GX device from BMV, Multi, MPPT or charger measurements."
    },
    {
      "address": 841,
      "count": 1,
      "name": "Battery current",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Positive = charging, negative = discharging."
    },
    {
      "address": 842,
      "count": 1,
      "name": "Battery power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Positive = charging, negative = discharging."
    },
    {
      "address": 843,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 844,
      "count": 1,
      "name": "Battery state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = idle, 1 = charging, 2 = discharging."
    },
    {
      "address": 845,
      "count": 1,
      "name": "Battery consumed amp-hours",
      "data_type": "UInt16",
      "units": "Ah",
      "scale_factor": -0.1,
      "offset": 0,
      "access": "R",
      "description": "Consumed Ah; the manufacturer's scalefactor is -10, hence the negative factor so the value reads as a negative amount."
    },
    {
      "address": 846,
      "count": 1,
      "name": "Battery time to go",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "0 = charging (no estimate available)."
    },
    {
      "address": 850,
      "count": 1,
      "name": "PV DC-coupled power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Sum of the output power of all connected solar chargers (MPPT)."
    },
    {
      "address": 851,
      "count": 1,
      "name": "PV DC-coupled current",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 855,
      "count": 1,
      "name": "Charger power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power of AC-connected battery chargers (e.g. Skylla)."
    },
    {
      "address": 860,
      "count": 1,
      "name": "DC system power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power supplied by the battery to the DC system."
    },
    {
      "address": 865,
      "count": 1,
      "name": "VE.Bus charge current",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Current flowing from the Multi/Quattro to the DC system; negative when the DC system supplies the inverter/charger."
    },
    {
      "address": 866,
      "count": 1,
      "name": "VE.Bus charge power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 868,
      "count": 2,
      "name": "Inverter/charger current",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 870,
      "count": 2,
      "name": "Inverter/charger power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 872,
      "count": 2,
      "name": "Power between meter and inverter/charger L1",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Value shown in the Loads box of the GX overview, phase L1."
    },
    {
      "address": 874,
      "count": 2,
      "name": "Power between meter and inverter/charger L2",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 876,
      "count": 2,
      "name": "Power between meter and inverter/charger L3",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 878,
      "count": 2,
      "name": "Power on output of inverter/charger L1",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 880,
      "count": 2,
      "name": "Power on output of inverter/charger L2",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 882,
      "count": 2,
      "name": "Power on output of inverter/charger L3",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 902,
      "count": 2,
      "name": "AC consumption L1 (32-bit)",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Same value as 817 with the full 32-bit range."
    },
    {
      "address": 904,
      "count": 2,
      "name": "AC consumption L2 (32-bit)",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 906,
      "count": 2,
      "name": "AC consumption L3 (32-bit)",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 908,
      "count": 2,
      "name": "Grid L1 (32-bit)",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Same value as 820 with the full 32-bit range; negative when feeding in."
    },
    {
      "address": 910,
      "count": 2,
      "name": "Grid L2 (32-bit)",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 912,
      "count": 2,
      "name": "Grid L3 (32-bit)",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5400,
      "count": 1,
      "name": "Dynamic ESS state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = active."
    },
    {
      "address": 5402,
      "count": 1,
      "name": "Dynamic ESS available",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the installation is capable of Dynamic ESS."
    },
    {
      "address": 5403,
      "count": 1,
      "name": "Dynamic ESS calculated rate of charge/discharge",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5406,
      "count": 1,
      "name": "Dynamic ESS strategy for current time slot",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = target SOC, 1 = self-consumption, 2 = pro battery, 3 = pro grid."
    },
    {
      "address": 5407,
      "count": 1,
      "name": "Dynamic ESS target SOC",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Target state of charge for the current time slot."
    }
  ],
  "combined_registers": [
    {
      "id": "grid-power-l1-l2",
      "label": "Grid power L1 + L2 (calculated)",
      "operator": "+",
      "operand_a": {
        "register_type": "holding_registers",
        "register_address": 908
      },
      "operand_b": {
        "register_type": "holding_registers",
        "register_address": 910
      },
      "units": "W",
      "scale_factor": 1,
      "offset": 0
    },
    {
      "id": "grid-power-total",
      "label": "Grid power, all phases (calculated)",
      "operator": "+",
      "operand_a": {
        "combined_id": "grid-power-l1-l2"
      },
      "operand_b": {
        "register_type": "holding_registers",
        "register_address": 912
      },
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "description": "Positive = drawn from the grid, negative = fed into the grid."
    },
    {
      "id": "pv-ac-coupled-l1-l2",
      "label": "PV AC-coupled L1 + L2 (calculated)",
      "operator": "+",
      "operand_a": {
        "register_type": "holding_registers",
        "register_address": 808
      },
      "operand_b": {
        "register_type": "holding_registers",
        "register_address": 809
      },
      "units": "W",
      "scale_factor": 1,
      "offset": 0
    },
    {
      "id": "pv-ac-coupled-total",
      "label": "PV AC-coupled, all phases (calculated)",
      "operator": "+",
      "operand_a": {
        "combined_id": "pv-ac-coupled-l1-l2"
      },
      "operand_b": {
        "register_type": "holding_registers",
        "register_address": 810
      },
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "description": "AC-coupled PV on the AC output only; add 811 to 813 for PV on the AC input."
    },
    {
      "id": "pv-total-dc-plus-ac",
      "label": "PV total, DC-coupled + AC-coupled (calculated)",
      "operator": "+",
      "operand_a": {
        "register_type": "holding_registers",
        "register_address": 850
      },
      "operand_b": {
        "combined_id": "pv-ac-coupled-total"
      },
      "units": "W",
      "scale_factor": 1,
      "offset": 0
    },
    {
      "id": "ac-consumption-l1-l2",
      "label": "AC consumption L1 + L2 (calculated)",
      "operator": "+",
      "operand_a": {
        "register_type": "holding_registers",
        "register_address": 902
      },
      "operand_b": {
        "register_type": "holding_registers",
        "register_address": 904
      },
      "units": "W",
      "scale_factor": 1,
      "offset": 0
    },
    {
      "id": "ac-consumption-total",
      "label": "AC consumption, all phases (calculated)",
      "operator": "+",
      "operand_a": {
        "combined_id": "ac-consumption-l1-l2"
      },
      "operand_b": {
        "register_type": "holding_registers",
        "register_address": 906
      },
      "units": "W",
      "scale_factor": 1,
      "offset": 0
    }
  ],
  "notes": "Addresses are the decimal addresses in Victron's CCGX Modbus TCP register list (checked against version 3.81) and are used as wire addresses. All of these entries belong to the com.victronenergy.system service, which always uses unit ID 100 (unit ID 0 maps to the same data, but many clients cannot use 0). Since Venus OS 2.60 other services (VE.Bus, battery monitor, grid meter, PV inverter, solar charger) get dynamic unit IDs; check Settings > Integrations > Modbus TCP server > Available services on the GX device and look up their own register blocks in the Victron list. The manufacturer's \"Scalefactor\" column is a divisor (10 means 0.1), so the factors here are the equivalent multipliers. Registers 1 to 3999 and 2600 to 3999 belong to other services (VE.Bus, Multi, battery monitor, grid meter at 2600, PV inverter, solar charger) and have to be read with that service's own unit ID; they are not included here. Only 32-bit counters are listed because the format has no 64-bit integer type (the system time counter at 830 is a uint64). Holding registers 806 and 807 are the only writable system registers in this file. Source: Victron Energy CCGX Modbus TCP register list, linked on the supplier page. Category changed from Energy storage gateway to Home battery (storage-centred)."
}
