Sunday, April 16, 2023

Maretron NMEA 2000 Incompatibilities

There is a fundamental incompatibility between Maretron and a number of other manufacturers, including Victron.  With Victron, one prominent place it shows up when trying to display battery data and MPPT charger data on a Maretron display. 

The issue is not limited to battery data - that's just an example - it's really a fundamental incompatibility between how Maretron differentiates the same data (like battery status) for different devices on the network.  The easiest way to explain is probably with an example.

Consider two Victron MPPT chargers.  Each of those chargers sends two different battery status messages;  one for the connected battery, and one for the connected solar panel(s).  Since they use the same N2K message, the two need to somehow be distinguished from each other.  N2K does this using a Data Instance number which is a number in the message indicating which "instance" of data the message is reporting.  The battery status is in Data Instance 0, and the panels are Data Instance 1.  Now anyone on the network listening to the data can tell which is which.  All good so far.

Now consider the second MPPT.  It's sending out the same two messages with Data Instances 0 and 1.  To distinguish these new messages from those sent by the first MPPT, any listening device has to pay attention to which device is sending the data.  The N2K spec is very clear that Data Instances MUST be unique for messages sent from the same device (makes sense).  But it is equally clear that they are NOT required to be unique across devices.  In other words, it's not required that MPPT 1 use Data Instances 0 and 1, and that MPPT 2 use Data Instances 2 and 3.  So Data Instances must be unique within a device, but they are not required to be globally unique across all devices on the network.  The problem is that Maretron DOES require that Data Instances be globally unique across all devices, and that's not possible with some devices, and/or breaks other devices and applications that expect Data Instancing to follow the rules.  This is a short cut for Maretron because all they need to do is look at each message and decide what to do with it based on the Data Instance number.  They don't have to pay attention to which device sent it.  If they were compatible with N2K, they would have to look at BOTH which device sent the message, and what the Data Instance is to decide how to handle the message.  It's more work, and more info to keep track of.

Victron's devices follow the rules, and that makes the messages they send indistinguishable to Maretron.  I currently have 17 different versions of the same battery status message on my N2K bus, 2 each from 4 MPPT chargers, 3 each from 3 different BMS devices, and Maretron can't reliably or controllably display any of them.  There is a way to change the Victron Data Instances to operate in a non-standard way, but doing so breaks Victron's management application which expects devices to follow the rules.

Needless to say, it's very frustrating, with customers left as Monkey in the Middle between two vendors who both say they are operating correctly and that the other guy is wrong, and cite a specification that few if any of us have (I do not), and where you are bound by confidentiality if you do have the specification.  Right now Maretron is incompatible with about half of the N2K devices on my bus, and probably incompatible with 80% of the non-Maretron devices.  This is just one example of why I am continually backing away from N2K, and increasingly treating Maretron as a strictly proprietary system.