{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Victron Energy",
  "model": "GX solar charger",
  "vendor_website": "victronenergy.com",
  "description": "SmartSolar / BlueSolar MPPT solar chargers, read through a GX device",
  "revision": 1,
  "revised": "2026-10-14",
  "firmware": "Venus OS; register list 3.81",
  "source": "Victron Energy, CCGX Modbus TCP register list 3.81",
  "sources": [
    {
      "title": "CCGX Modbus TCP register list",
      "version": "3.81",
      "url": "https://www.victronenergy.com/upload/documents/CCGX-Modbus-TCP-register-list-3.81.xlsx",
      "note": "Field list, service com.victronenergy.solarcharger"
    }
  ],
  "notes": [
    "Registers of the com.victronenergy.solarcharger service of the GX Modbus TCP server (Settings > Integrations > Modbus TCP server).",
    "Each device on the GX has its own unit ID. Since Venus OS 2.60 they are assigned dynamically: see the list of available services on the GX device.",
    "All registers are holding registers (FC03; FC06/FC16 for the writable ones)."
  ],
  "protocol": "tcp",
  "port": 502,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "x_status": "official",
  "registers": [
    {"name": "Battery voltage", "area": "holding", "address": 771, "type": "uint16", "scale": 0.01, "unit": "V", "description": "D-Bus /Dc/0/Voltage"},
    {"name": "Battery current", "area": "holding", "address": 772, "type": "int16", "scale": 0.1, "unit": "A", "description": "D-Bus /Dc/0/Current"},
    {"name": "Battery temperature", "area": "holding", "address": 773, "type": "int16", "scale": 0.1, "unit": "°C", "description": "D-Bus /Dc/0/Temperature; VE.Can MPPTs only"},
    {"name": "Charger on/off", "area": "holding", "address": 774, "type": "uint16", "enum": {"1": "On", "4": "Off"}, "access": "RW", "description": "D-Bus /Mode; VE.Can MPPTs only"},
    {"name": "Charge state", "area": "holding", "address": 775, "type": "uint16", "enum": {"0": "Off", "2": "Fault", "3": "Bulk", "4": "Absorption", "5": "Float", "6": "Storage", "7": "Equalize", "11": "Other (Hub-1)", "245": "Wake-up", "252": "External control"}, "description": "D-Bus /State"},
    {"name": "PV voltage", "area": "holding", "address": 776, "type": "uint16", "scale": 0.01, "unit": "V", "description": "D-Bus /Pv/V; Not available if multiple VE.Can chargers are combined"},
    {"name": "PV current", "area": "holding", "address": 777, "type": "int16", "scale": 0.1, "unit": "A", "description": "Calculated from /Yield/Power and /Pv/V"},
    {"name": "Equalization pending", "area": "holding", "address": 778, "type": "uint16", "enum": {"0": "No", "1": "Yes", "2": "Error", "3": "Unavailable- Unknown"}, "description": "D-Bus /Equalization/Pending"},
    {"name": "Equalization time remaining", "area": "holding", "address": 779, "type": "uint16", "scale": 0.1, "unit": "s", "description": "D-Bus /Equalization/TimeRemaining"},
    {"name": "Relay on the charger", "area": "holding", "address": 780, "type": "uint16", "enum": {"0": "Open", "1": "Closed"}, "description": "D-Bus /Relay/0/State"},
    {"name": "Yield today", "area": "holding", "address": 784, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/0/Yield; Today's yield"},
    {"name": "Maximum charge power today", "area": "holding", "address": 785, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/0/MaxPower; Today's maximum power"},
    {"name": "Yield yesterday", "area": "holding", "address": 786, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/1/Yield; Yesterday's yield"},
    {"name": "Maximum charge power yesterday", "area": "holding", "address": 787, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/1/MaxPower; Yesterday's maximum power"},
    {"name": "Error code", "area": "holding", "address": 788, "type": "uint16", "enum": {"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"}, "description": "D-Bus /ErrorCode"},
    {"name": "PV power", "area": "holding", "address": 789, "type": "uint16", "scale": 0.1, "unit": "W", "description": "D-Bus /Yield/Power; Older 16-bit variant of 789"},
    {"name": "User yield", "area": "holding", "address": 790, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /Yield/User; Energy generated by the solarcharger since last user reset"},
    {"name": "MPP operation mode", "area": "holding", "address": 791, "type": "uint16", "enum": {"0": "Off", "1": "Voltage/current limited", "2": "MPPT active", "255": "Not available"}, "description": "D-Bus /MppOperationMode"},
    {"name": "PV power (792)", "area": "holding", "address": 792, "type": "uint32", "unit": "W", "description": "D-Bus /Yield/Power"},
    {"name": "PV voltage for tracker 0", "area": "holding", "address": 3700, "type": "uint16", "scale": 0.01, "unit": "V", "description": "D-Bus /Pv/0/V"},
    {"name": "PV voltage for tracker 1", "area": "holding", "address": 3701, "type": "uint16", "scale": 0.01, "unit": "V", "description": "D-Bus /Pv/1/V"},
    {"name": "PV voltage for tracker 2", "area": "holding", "address": 3702, "type": "uint16", "scale": 0.01, "unit": "V", "description": "D-Bus /Pv/2/V"},
    {"name": "PV voltage for tracker 3", "area": "holding", "address": 3703, "type": "uint16", "scale": 0.01, "unit": "V", "description": "D-Bus /Pv/3/V"},
    {"name": "Yield today for tracker 0", "area": "holding", "address": 3708, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/0/Pv/0/Yield"},
    {"name": "Yield today for tracker 1", "area": "holding", "address": 3709, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/0/Pv/1/Yield"},
    {"name": "Yield today for tracker 2", "area": "holding", "address": 3710, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/0/Pv/2/Yield"},
    {"name": "Yield today for tracker 3", "area": "holding", "address": 3711, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/0/Pv/3/Yield"},
    {"name": "Yield yesterday for tracker 0", "area": "holding", "address": 3712, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/1/Pv/0/Yield"},
    {"name": "Yield yesterday for tracker 1", "area": "holding", "address": 3713, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/1/Pv/1/Yield"},
    {"name": "Yield yesterday for tracker 2", "area": "holding", "address": 3714, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/1/Pv/2/Yield"},
    {"name": "Yield yesterday for tracker 3", "area": "holding", "address": 3715, "type": "uint16", "scale": 0.1, "unit": "kWh", "description": "D-Bus /History/Daily/1/Pv/3/Yield"},
    {"name": "Maximum charge power today for tracker 0", "area": "holding", "address": 3716, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/0/Pv/0/MaxPower"},
    {"name": "Maximum charge power today for tracker 1", "area": "holding", "address": 3717, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/0/Pv/1/MaxPower"},
    {"name": "Maximum charge power today for tracker 2", "area": "holding", "address": 3718, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/0/Pv/2/MaxPower"},
    {"name": "Maximum charge power today for tracker 3", "area": "holding", "address": 3719, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/0/Pv/3/MaxPower"},
    {"name": "Maximum charge power yesterday tracker 0", "area": "holding", "address": 3720, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/1/Pv/0/MaxPower"},
    {"name": "Maximum charge power yesterday tracker 1", "area": "holding", "address": 3721, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/1/Pv/1/MaxPower"},
    {"name": "Maximum charge power yesterday tracker 2", "area": "holding", "address": 3722, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/1/Pv/2/MaxPower"},
    {"name": "Maximum charge power yesterday tracker 3", "area": "holding", "address": 3723, "type": "uint16", "unit": "W", "description": "D-Bus /History/Daily/1/Pv/3/MaxPower"},
    {"name": "PV power for tracker 0", "area": "holding", "address": 3724, "type": "uint16", "unit": "W", "description": "D-Bus /Pv/0/P"},
    {"name": "PV power for tracker 1", "area": "holding", "address": 3725, "type": "uint16", "unit": "W", "description": "D-Bus /Pv/1/P"},
    {"name": "PV power for tracker 2", "area": "holding", "address": 3726, "type": "uint16", "unit": "W", "description": "D-Bus /Pv/2/P"},
    {"name": "PV power for tracker 3", "area": "holding", "address": 3727, "type": "uint16", "unit": "W", "description": "D-Bus /Pv/3/P"},
    {"name": "User yield (3728)", "area": "holding", "address": 3728, "type": "uint32", "unit": "kWh", "description": "D-Bus /Yield/User; Energy generated by the solarcharger since last user reset"},
    {"name": "PV power (3730)", "area": "holding", "address": 3730, "type": "uint16", "unit": "W", "description": "D-Bus /Yield/Power"},
    {"name": "MPP operation mode tracker 1", "area": "holding", "address": 3731, "type": "uint16", "enum": {"0": "Off", "1": "Voltage/current limited", "2": "MPPT active", "255": "Not available"}, "description": "D-Bus /Pv/0/MppOperationMode"},
    {"name": "MPP operation mode tracker 2", "area": "holding", "address": 3732, "type": "uint16", "enum": {"0": "Off", "1": "Voltage/current limited", "2": "MPPT active", "255": "Not available"}, "description": "D-Bus /Pv/1/MppOperationMode"},
    {"name": "MPP operation mode tracker 3", "area": "holding", "address": 3733, "type": "uint16", "enum": {"0": "Off", "1": "Voltage/current limited", "2": "MPPT active", "255": "Not available"}, "description": "D-Bus /Pv/2/MppOperationMode"},
    {"name": "MPP operation mode tracker 4", "area": "holding", "address": 3734, "type": "uint16", "enum": {"0": "Off", "1": "Voltage/current limited", "2": "MPPT active", "255": "Not available"}, "description": "D-Bus /Pv/3/MppOperationMode"},
    {"name": "Tracker 1 enabled", "area": "holding", "address": 3735, "type": "uint16", "enum": {"0": "Disabled", "1": "Enabled"}, "description": "D-Bus /Pv/0/Enabled; Only available on MPPT RS"},
    {"name": "Tracker 2 enabled", "area": "holding", "address": 3736, "type": "uint16", "enum": {"0": "Disabled", "1": "Enabled"}, "description": "D-Bus /Pv/1/Enabled"},
    {"name": "Tracker 3 enabled", "area": "holding", "address": 3737, "type": "uint16", "enum": {"0": "Disabled", "1": "Enabled"}, "description": "D-Bus /Pv/2/Enabled"},
    {"name": "Tracker 4 enabled", "area": "holding", "address": 3738, "type": "uint16", "enum": {"0": "Disabled", "1": "Enabled"}, "description": "D-Bus /Pv/3/Enabled"},
    {"name": "Custom Name", "area": "holding", "address": 3740, "type": "string", "length": 8, "access": "RW", "description": "D-Bus /CustomName"}
  ]
}
