Victron Victron Battery Modbus TCP template

Victron Battery

Victron Battery is a Modbus TCP template for battery monitors and CAN-bus BMS-connected battery systems integrated through a Victron GX device. The template covers the full com.victronenergy.battery register space: real-time readings for voltage, current, temperature, state of charge, and state of health; a comprehensive alarm set covering low and high voltage, temperature, cell imbalance, fuse, and charge current conditions; deep history data including cycle count, deepest discharge, and lifetime energy throughput; and BMS-reported charge and discharge limits. Use this template in ModbusCloud to centralise battery health monitoring across any Victron installation without custom scripting.

Protocol
Modbus TCP
Connection
Ethernet, Modbus TCP
Registers
84, read only
Brand
Victron
Last updated

Registers (84)

84 read, 0 write

NameUnitAccessAddress (Hidden until you enter your email)Function (hidden)Type (hidden)
voltageVRead
starter_battery_voltageVRead
currentARead
temperature°CRead
mid_voltageVRead
mid_voltage_deviationRead
consumed_amphoursRead
soc%Read
alarmRead
low_voltage_alarmRead
high_voltage_alarmRead
low_starter_voltage_alarmRead
high_starter_voltage_alarmRead
low_state_of_charge_alarmRead
low_temperature_alarmRead
high_temperature_alarmRead
mid_voltage_alarmRead
low_fused_voltage_alarmRead
high_fused_voltage_alarmRead
fuse_blown_alarmRead
high_internal_temperature_alarmRead
relay_statusRead
deepest_dischargeRead
last_dischargeRead
average_dischargeRead
charge_cyclescountRead
full_dischargescountRead
total_amphours_drawnRead
history_min_voltageVRead
history_max_voltageVRead
time_since_last_full_chargehRead
automatic_syncscountRead
low_voltage_alarmscountRead
high_voltage_alarmscountRead
low_starter_voltage_alarmscountRead
high_starter_voltage_alarmscountRead
min_starter_voltageVRead
max_starter_voltageVRead
low_fused_voltage_alarmscountRead
high_fused_voltage_alarmscountRead
min_fused_voltageVRead
max_fused_voltageVRead
dc_discharged_energyWhRead
dc_charged_energyWhRead
time_to_gohRead
soh%Read
charge_max_voltageVRead
discharge_min_voltageVRead
charge_max_currentARead
discharge_max_currentARead
capacity_in_amphoursRead
timestamp_1st_last_errorRead
timestamp_2nd_last_errorRead
timestamp_3rd_last_errorRead
timestamp_4th_last_errorRead
min_cell_temperature°CRead
max_cell_temperature°CRead
high_charge_current_alarmRead
high_discharge_current_alarmRead
cell_imbalance_alarmRead
internal_failure_alarmRead
high_charge_temperature_alarmRead
low_charge_temperature_alarmRead
low_cell_voltage_alarmRead
victron_stateRead
errorRead
system_switchRead
balancingRead
number_of_batteriescountRead
batteries_parallelcountRead
batteries_seriescountRead
number_of_cells_per_batterycountRead
min_cell_voltagemVRead
max_cell_voltagemVRead
shutdowns_due_errorcountRead
diagnostics_1st_last_errorRead
diagnostics_2nd_last_errorRead
diagnostics_3rd_last_errorRead
diagnostics_4th_last_errorRead
allow_to_chargeRead
allow_to_dischargeRead
external_relayRead
history_min_cell_voltageVRead
history_max_cell_voltageVRead

Loading registers…

Send your device list

If a device is not in the library yet, we build the template for free as soon as we have the register data.

Use cases

  • Monitor state of charge and state of health trends over months to detect capacity fade in aging battery banks.
  • Alert on low-state-of-charge or cell imbalance alarm registers before they trigger a protective shutdown.
  • Track cumulative dc_charged_energy and dc_discharged_energy to verify round-trip efficiency across seasons.
  • Compare min_cell_voltage and max_cell_voltage over time to identify cells diverging from pack average.
  • Report charge cycle count and full discharge count to maintenance teams for warranty and lifecycle planning.

Installation

  1. Enable Modbus TCP on the Victron GX device by navigating to Settings, then Services, and switching Modbus TCP to enabled; the service listens on TCP port 502 by default.

  2. Connect the ModbusCloud Gateway to the same LAN as the GX device, ensuring the gateway can reach the GX device IP address on port 502.

  3. In the ModbusCloud portal, add the Gateway, import the Victron Battery template, and set the unit ID to match the battery device instance shown in the GX device list under Settings, then Services, then Modbus TCP, then Available services.

  4. Verify the connection by spot-checking the soc register (address 266) and voltage register (address 259) in the portal live view; confirm the values match what the GX device display shows.

Things to watch for

Voltage and current readings look ten or hundred times too large. Why?

Victron Modbus TCP registers use scale factors. Voltage values are transmitted multiplied by 100, and current values by 10. If your client does not apply these scale factors automatically, divide the raw register value accordingly. The ModbusCloud template handles this internally, so raw inflated values indicate the template is not applied or the wrong unit ID is in use.

The gateway connects but all registers return zero or unavailable. What now?

The most common cause is an incorrect unit ID. The GX device assigns a unit ID per connected battery based on its device instance, not a fixed value. Open the GX device interface, go to Settings, then Services, then Modbus TCP, then Available services, and locate the com.victronenergy.battery entry to find the correct unit ID for your battery.

History registers like deepest_discharge and charge_cycles return empty values on a CAN-bus battery. Is the template broken?

No. History registers such as deepest discharge, charge cycles, and mid-voltage are populated only by BMV battery monitors. CAN-bus BMS-connected batteries do not expose those fields over the com.victronenergy.battery service. The corresponding registers will return no data on BMS batteries; this is expected behaviour documented by Victron.

The time_to_go register reads zero. Does this mean the battery is empty?

A value of zero in the time_to_go register is a special case that means the battery is currently charging, not that runtime is exhausted. A genuinely low remaining runtime will return a small positive value. Cross-check with the soc register to confirm the battery state before raising an alert.

Want to see how it works?

Electrician working in an open distribution board