Skip to content

Victron VE.Direct

Purpose

The regulator listens (RX-only) to a Victron VE.Direct serial stream on UART_RX1 and reads voltage, current, and solar/MPPT data from a Victron device (BMV battery monitor, SmartShunt, or MPPT charge controller).

This data is display and logging only — it does not drive any charging or safety decision. Every control and protection loop (field regulation, over-voltage, load-dump, tail-current, rebulk, the maintenance / zero-net-amps mode, and the battery charge-current ceiling) reads the regulator's onboard INA228 shunt directly, regardless of what VE.Direct reports. There are two specific uses:

  • Solar / MPPT stats — panel power and voltage, charge state, tracker mode, error code, and daily/lifetime yield are shown on the dashboard and logged.
  • Battery-monitor readout — if you set Battery Current Source to Victron in Setup, the state-of-charge display uses the Victron monitor's current instead of the onboard shunt. This affects the SoC readout only. It is deliberately not used for charging: VE.Direct updates at about 1 Hz and lags real current by 1–2 s, which is too slow to close a control loop against. The onboard INA228 stays mandatory, and the battery charge-current ceiling only arms when the source is the onboard shunt.

VE.Direct is off by default; enable it with the VE.Direct Data toggle in Setup → System.

There is no TX path; the regulator only listens — it does not send commands to the Victron device.

For the underlying isolation circuit (HCPL2531 optocoupler, current-limiting resistors, pull-ups, ESD), see NMEA0183 and VeDirect Hardware. This page covers the protocol-level configuration and physical wiring.

Planned integration

Deeper Victron integration is on the roadmap but not in the shipped firmware today:

  • Bidirectional VE.Direct — adding a transmit path (VE.Direct HEX protocol) so the regulator can query and command the Victron device, not just listen.
  • Managed-battery coordination (DVCC) — participating in Victron's Distributed Voltage and Current Control so the alternator setpoint follows the system-managed charge voltage and current limits.
  • Richer BMS control — acting on a battery's reported charge-voltage/current limits and warnings, rather than treating an external BMS as a simple charge enable/disable.

If any of these matter for your install, email joe@xengineering.net.

Electrical

Parameter Value Notes
Signal level (Victron side) 3.3 V or 5 V TTL UART, open-collector Victron VE.Direct cables typically 3.3 V logic
Baud rate 19200 baud VE.Direct standard, not configurable
Data format 8 data bits, no parity, 1 stop bit (8N1) Standard
Frame timing TEXT frames sent ~once per second See Victron VE.Direct protocol documentation
Isolation 2500 VRMS via HCPL2531 See linked hardware doc
Internal pull-up 13 kΩ to 3.3 V on UART_RX1_ISOL Inactive line idles HIGH

Connector Pins

UART_RX1 is broken out at two physical locations, in parallel — use whichever is most convenient for your install. Do not wire both at once.

Cable Connector Pin Wire color (T568B) Signal ESP32 GPIO
2 RJ5 — left port 15 Brown/White UART_RX1 GPIO7
3 RJ3 — left port 1 Orange/White UART_RX1 GPIO7

Both pins land on the same trace inside the board, so connecting wires to both will short the two Victron-side cables together — that is electrically OK but mechanically pointless and may cause cable strain.

Wiring to a Victron Device

Victron VE.Direct cables (VE.Direct to bare-wire, part numbers ASS030530200, ASS030530300, etc.) expose three wires:

Victron wire color Function Connects to
Yellow TX from Victron device RJ5 pin 15 (or RJ3 pin 1) — the regulator's UART_RX1
Red RX to Victron device Not connected — regulator does not transmit
Black GND RJ5 pin 16 (Brown / GND) — or RJ3 pin 8 if using the RJ3 path

Tape off the Victron red wire; leaving it floating near the regulator harness is fine, but do not let it touch 3.3 V or 5 V — it is an input on the Victron side and could be damaged.

Why Yellow goes to a pin labelled "RX"

A common confusion. The pin label on the regulator is from the regulator's perspective: UART_RX1 is the regulator's receive input. The Victron device's TX (yellow) is what the regulator wants to receive. So Victron TX → regulator RX is correct.

Software Notes

  • The firmware UART driver expects standard 8N1 framing at 19200 baud.
  • VE.Direct sends two frame types: TEXT frames (human-readable, ~1 Hz) and HEX frames (binary, on demand). The firmware parses TEXT frames; HEX frames are ignored.
  • Field acceptance is gated by VE.Direct's per-frame checksum field. Bad-checksum frames are dropped silently.
  • Recognized VE.Direct field IDs are the battery V and I, the solar PPV/VPV, and the MPPT status/history fields (CS, MPPT, ERR, H20–H23). The regulator does not read the Victron SOC field — it computes its own state of charge from current.

Troubleshooting

Symptom Likely cause
No VE.Direct data appearing in regulator console Wrong wire — confirm Victron Yellow goes to UART_RX1, not Red. Common installer mistake.
Data appears intermittently Long cable run picking up engine RFI — keep the VE.Direct cable away from alternator wiring, or shorten it
Console shows correct frame structure but field values are wrong/stale Victron device firmware version may report different field IDs — confirm against current Victron VE.Direct field documentation
Garbled characters Baud rate mismatch — unlikely since VE.Direct is fixed at 19200, but verify the firmware is configured for 19200 and not 4800
Data stops when alternator engages EMI pickup on unshielded cable — use a shielded twisted-pair extension, ground the shield at the Victron end only