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 |