Appearance
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 PID | Family | Becomes on the boat | Function |
|---|---|---|---|
0x0300, 0xA040 – 0xA117 | MPPT solar charge controller | a MUXEN solar charger | 10 |
0x0200 – 0x0205 | battery monitor — BMV-700, BMV-702, BMV-700H | a MUXEN battery | 5 |
0xA381 – 0xA383 | battery monitor — BMV-712 Smart, BMV-710H Smart, BMV-712 Smart Rev2 | a MUXEN battery | 5 |
0xA389 – 0xA38B, 0xC038 | shunt | a MUXEN battery | 5 |
0xA201 – 0xA2FC | inverter | a MUXEN converter | 6 |
0xA340 – 0xA347 | charger | a MUXEN converter | 6 |
0xA3F0 | buck-boost DC/DC converter | a MUXEN converter | 6 |
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
| Device | Function | Instance |
|---|---|---|
| Battery | 5 | the port index (0…3) on first sight, then whatever InstanceNum holds |
| Converter (inverter, charger, DC/DC) | 6 | idem |
| Solar charger | 10 | idem |
| Generic I/O — the box itself | 17 | configured 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
| Frame | Contents |
|---|---|
| life | battery voltage, battery current, charge state, off reason. Temperature is not published here |
| state | fault code as reported by the device, regulator temperature, panel voltage, panel current computed from panel power ÷ panel voltage |
Battery — function 5
| Frame | Contents |
|---|---|
| life | voltage, current, temperature, state of charge, the parc it belongs to, alarm state, charge request |
| state | the four charge and discharge limits taken from this device's configuration — the monitor supplies none |
The charge request is derived, not read:
| Situation | Request |
|---|---|
| the monitor's only alarm is low state of charge | low battery |
voltage above AlertVmax | no charge |
| otherwise | mid load |
Converter — function 6
| Frame | Contents |
|---|---|
| life | input and output type, DC voltage, DC current, state, whether the input is available |
| state | DC voltage, DC current |
| Family | In → out | Reversible | Input counted as available | DC current published |
|---|---|---|---|---|
| inverter | DC → AC | yes | AC output at 60 V or more | no |
| charger | AC → DC | no | the device is not off | yes |
| buck-boost | DC → DC | no | DC input at 18 V or more | yes |
Charge state is translated from the device's own charge-state record:
| Device reports | Solar charger | Charger and DC/DC | Inverter |
|---|---|---|---|
| 0 | off | off | off |
| 2 | fault | fault | fault |
| 3 | bulk | bulk | inverting |
| 4 | absorption | absorption | inverting |
| 5 | float | float | inverting |
| anything else | off | off | inverting |
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:
| Device | Switched off when the parc asks | Switched on when the parc asks |
|---|---|---|
solar charger, RevertControl = 0 | no charge, off | mid load, overload, low battery |
solar charger, RevertControl = 1 | off, overload, low battery | no charge, mid load |
| charger | no charge, off | mid load, overload, low battery |
| inverter | off | no charge, mid load, overload, low battery |
| buck-boost | off | no 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:
| Command | Effect |
|---|---|
| neither on nor off | back to automatic |
| off | forced off, automatic suspended |
| on | forced on, automatic suspended |
| on and off together | ignored |
Battery parcs
BindToParc decides which parc a battery reports into, and which parc's charge request a charger obeys.
| Value | Meaning |
|---|---|
| 254 | automatic — the default |
| 255 | standalone: the device is not tied to any battery, and a charger bound here is always allowed to run |
| 0 – 253 | that 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 read | Parc |
|---|---|
| 43.0 – 60.0 V | 1 |
| 10.0 – 16.0 V | 2 |
| 20.0 – 30.0 V | 3 |
| anything else | 255 — 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
| Parameter | Default | Meaning |
|---|---|---|
InstanceNum | 255 | 255 means not addressed |
BindToParc | 254 | see above |
AlertVmin | 240 | under-voltage alarm threshold, in 0.1 V |
AlertVmax | 285 | over-voltage alarm threshold, in 0.1 V; also the voltage above which the battery stops asking for charge |
VChargeMax | 285 | maximum charge voltage published for this bank, in 0.1 V |
VDischMax | 240 | minimum discharge voltage published for this bank, in 0.1 V |
IChargeMax | 500 | maximum charge current, in 0.1 A |
IDischMax | 500 | maximum 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
| Parameter | Default | Meaning |
|---|---|---|
InstanceNum | 255 | |
BindToParc | 254 | |
RevertControl | 0 | 0 — 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:
| Code | Raised when |
|---|---|
| 10 — over-voltage | voltage above AlertVmax, or the monitor's high-voltage or high-starter-voltage alarm |
| 11 — under-voltage | voltage below AlertVmin, or the monitor's low-voltage or low-starter-voltage alarm |
| 12 — high temperature | the monitor's high-temperature alarm |
| 13 — low temperature | the monitor's low-temperature alarm |
| 20 — low state of charge | the 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.
| Routine | Effect |
|---|---|
| 1 | restore defaults — payload bit 0 restores the instance number, any higher bit restores everything else |
| 2 | list 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 |
| 4 | create a configuration for a port before the equipment has been seen — batteries and solar chargers only |
| 5 | list the configurations held in flash, as function code + port index |
| 6 | forget one stored configuration — refused while that device is still active |
Timings
| Battery, converter and solar frames published every | 500 ms |
| Alarms published every | 500 ms |
| Generic I/O published | on change, and at least every 500 ms — only when EnGenIo = 1 |
| A port counts as alive while a valid block arrived within | 5 s |
| A port is dropped after | about 7.5 s without a valid block |
| System LED | one blink per second |
A block whose checksum is wrong is thrown away whole.
Limits
| VE.Direct ports | 4 |
| Devices published | 4, one per port |
| Battery parcs followed at once | 4 |
| MUXEN instances | 0 – 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
| Hardware | Version | Image |
|---|---|---|
| Serial gateway (990010053) | 5.19 | 010010002-MODBUS-app_vedirect-firmware.srec |
| Serial gateway v2 (990010063) | 6.2 | 010010002-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.
