Skip to content

Reference — VE.Direct gateway ​

The equipment this gateway recognises ​

A device is recognised from the product identifier it repeats in every text block — the PID record. Nothing else is matched: not the serial number, not the firmware version, not the model name. If the identifier falls in one of the ranges below, the device is published; otherwise the port stays silent.

Product identifier PIDFamilyBecomes on the boatFunction
0x0300, 0xA040 – 0xA117MPPT solar charge controllera MUXEN solar charger10
0x0200 – 0x0205battery monitor — BMV-700, BMV-702, BMV-700Ha MUXEN battery5
0xA381 – 0xA383battery monitor — BMV-712 Smart, BMV-710H Smart, BMV-712 Smart Rev2a MUXEN battery5
0xA389 – 0xA38B, 0xC038shunta MUXEN battery5
0xA201 – 0xA2FCinvertera MUXEN converter6
0xA340 – 0xA347chargera MUXEN converter6
0xA3F0buck-boost DC/DC convertera MUXEN converter6

The ranges are the firmware's, not Victron's catalogue: a model released after this firmware can carry an identifier just outside the range that covers its predecessors, and it is then ignored. Read the PID on the device before assuming it is covered — routine 2 below reports it.

The MUXEN devices this gateway publishes ​

DeviceFunctionInstance
Battery5the port index (0…3) on first sight, then whatever InstanceNum holds
Converter (inverter, charger, DC/DC)6idem
Solar charger10idem
Generic I/O — the box itself17configured by hand (InstanceNum)

MQTT topics on the Brain follow device/<function>/<instance>/<frame>, so device/10/0/life is the solar charger on port 1 and device/10/0/state its panel side.

How the instance is settled. Each port stores its device's configuration in flash under its own port index (0 for port 1 … 3 for port 4) together with the function code. A device seen for the first time has no instance number yet and takes the port index. Writing InstanceNum changes the number the device publishes on, but not the slot it occupies — which is why a device renumbered into the 0…3 range takes the slot of another port and keeps the device on that port from ever registering. See Common mistakes — VE.Direct gateway.

What each device publishes ​

Solar charger — function 10

FrameContents
lifebattery voltage, battery current, charge state, off reason. Temperature is not published here
statefault code as reported by the device, regulator temperature, panel voltage, panel current computed from panel power ÷ panel voltage

Battery — function 5

FrameContents
lifevoltage, current, temperature, state of charge, the parc it belongs to, alarm state, charge request
statethe four charge and discharge limits taken from this device's configuration — the monitor supplies none

The charge request is derived, not read:

SituationRequest
the monitor's only alarm is low state of chargelow battery
voltage above AlertVmaxno charge
otherwisemid load

Converter — function 6

FrameContents
lifeinput and output type, DC voltage, DC current, state, whether the input is available
stateDC voltage, DC current
FamilyIn → outReversibleInput counted as availableDC current published
inverterDC → ACyesAC output at 60 V or moreno
chargerAC → DCnothe device is not offyes
buck-boostDC → DCnoDC input at 18 V or moreyes

Charge state is translated from the device's own charge-state record:

Device reportsSolar chargerCharger and DC/DCInverter
0offoffoff
2faultfaultfault
3bulkbulkinverting
4absorptionabsorptioninverting
5floatfloatinverting
anything elseoffoffinverting

What the gateway writes back ​

On and off, and nothing else. The gateway sends a VE.Direct set command on register 0x0200, value 1 to switch the device on and 4 to switch it off. It sends nothing else down the cable, and it does not read back an acknowledgement.

Battery monitors and shunts are never commanded.

Automatically, whenever the device is bound to a battery parc and no screen has taken over:

DeviceSwitched off when the parc asksSwitched on when the parc asks
solar charger, RevertControl = 0no charge, offmid load, overload, low battery
solar charger, RevertControl = 1off, overload, low batteryno charge, mid load
chargerno charge, offmid load, overload, low battery
inverteroffno charge, mid load, overload, low battery
buck-boostoffno charge, mid load, overload, low battery

The gateway never tries to switch a device on while that device reports off-reason 1.

By hand, from a MUXEN screen, with a command frame addressed to the device:

CommandEffect
neither on nor offback to automatic
offforced off, automatic suspended
onforced on, automatic suspended
on and off togetherignored

Battery parcs ​

BindToParc decides which parc a battery reports into, and which parc's charge request a charger obeys.

ValueMeaning
254automatic — the default
255standalone: the device is not tied to any battery, and a charger bound here is always allowed to run
0 – 253that parc

On automatic, the parc is worked out from the first battery voltage the device reports and then written to flash, once and for good:

Voltage readParc
43.0 – 60.0 V1
10.0 – 16.0 V2
20.0 – 30.0 V3
anything else255 — standalone

A parc that exists but carries no battery asks for no charge at all, and every charger bound to it is switched off.

Parameters ​

Every device carries the four read-only identifiers common to all MUXEN gateways. Values below are defaults.

Battery — function 5

ParameterDefaultMeaning
InstanceNum255255 means not addressed
BindToParc254see above
AlertVmin240under-voltage alarm threshold, in 0.1 V
AlertVmax285over-voltage alarm threshold, in 0.1 V; also the voltage above which the battery stops asking for charge
VChargeMax285maximum charge voltage published for this bank, in 0.1 V
VDischMax240minimum discharge voltage published for this bank, in 0.1 V
IChargeMax500maximum charge current, in 0.1 A
IDischMax500maximum discharge current, in 0.1 A

The four limits are published exactly as written, with the charge current forced positive and the discharge current forced negative whatever sign you enter. The defaults describe a 24 V bank at 50 A and are almost certainly wrong for the boat.

The battery parameter table also carries AlertVminHyst, AlertVmaxHyst, MinPercent, PercentHyst and CyclePercent, which this firmware does not use.

Converter — function 6 — InstanceNum, BindToParc.

Solar charger — function 10

ParameterDefaultMeaning
InstanceNum255
BindToParc254
RevertControl00 — the device runs when the parc wants charge
1 — the sense is reversed, for a DC/DC converter feeding a low bank from a high one

VFloat, VAbsorption, IMax and AbsorptionTimeLimit exist in this table and are not used by this firmware — charge parameters live in the Victron device.

Generic I/O — function 17 — the parameters common to every gateway (Reference), plus Relay1Eqn and Relay1Latch, which drive the box's single relay from an equation evaluated on what passes on the MUXEN bus. EnGenIo defaults to 0, so the box does not publish its own I/O frame until you set it to 1; the relay works either way.

Alarms ​

A battery raises these from the monitor's alarm word and from its voltage against AlertVmin / AlertVmax:

CodeRaised when
10 — over-voltagevoltage above AlertVmax, or the monitor's high-voltage or high-starter-voltage alarm
11 — under-voltagevoltage below AlertVmin, or the monitor's low-voltage or low-starter-voltage alarm
12 — high temperaturethe monitor's high-temperature alarm
13 — low temperaturethe monitor's low-temperature alarm
20 — low state of chargethe monitor's low state-of-charge alarm

Solar chargers and converters raise one alarm carrying the device's own error code, and clear it when the device reports no error.

Routines ​

Addressed to the box as generic I/O, function 17.

RoutineEffect
1restore defaults — payload bit 0 restores the instance number, any higher bit restores everything else
2list the four ports: the count 4, then per port the product identifier (2 bytes, FFFF if silent) and the MUXEN function code (FF if silent or unrecognised). Replaces the usual "locate" animation
4create a configuration for a port before the equipment has been seen — batteries and solar chargers only
5list the configurations held in flash, as function code + port index
6forget one stored configuration — refused while that device is still active

Timings ​

Battery, converter and solar frames published every500 ms
Alarms published every500 ms
Generic I/O publishedon change, and at least every 500 ms — only when EnGenIo = 1
A port counts as alive while a valid block arrived within5 s
A port is dropped afterabout 7.5 s without a valid block
System LEDone blink per second

A block whose checksum is wrong is thrown away whole.

Limits ​

VE.Direct ports4
Devices published4, one per port
Battery parcs followed at once4
MUXEN instances0 – 62

Known limitations ​

  • Four devices, and no way to extend that.
  • On and off are the only commands. No charge parameter is written to the Victron device.
  • Recognition is by product identifier alone; a model outside the ranges above is ignored, whatever it is.
  • Inverters, chargers and DC/DC converters are published without a temperature, and inverters without a DC current.
  • A battery monitor's charge and discharge limits come from the gateway's configuration, never from the monitor.

Versions ​

HardwareVersionImage
Serial gateway (990010053)5.19010010002-MODBUS-app_vedirect-firmware.srec
Serial gateway v2 (990010063)6.2010010002-SERIAL-V2-app_vedirect-firmware.srec

An older serial board (990010012) runs the same firmware in the field, but no image is built for it any more.

Integration of multiplexed solutions
MUXEN and the MUXEN logo are trademarks of MUXEN SAS.