greg-1 avatar image
greg-1 asked

MPPT Hex Protocol: is an answer =1 a confirmation of a good data upload?


Question: is a MPPT hex answer =1 a confirmation of good data upload?

Long story:

I made a python script that uses BMV Hex Protocol to read battery temperature (0xEDEC) and voltage (0xED8D) from BMV-702 (with a temperature sensor) and sends them to a MPPT (BlueSolar 100/50) using MPPT Hex Prorocol (0x2002 Battery voltage sense and 0x2003 Battery temperature sense). The script runs on Raspberry-Pi 4 (Rasbian Buster), connected to the devices by VE.Direct to USB interface cables.

However, when sending the values to the MPPT (with temperature converted from K to C), the answers I'm receiving are not "Acknowledgements with the new value returned" (as per 1.3 Message examples in MPPT Hex Protocol whitepaper), the answers are basically equal to '1'.

  • for :820030002E09F3\n (temp 0x92E or 23.5C) the answer is :820030129\n
  • for :82002000260500\n (voltage 0x526 or 13.18V) the answer is :82002012A\n

This 'issue' has been already mentioned by @Epicycler in his question about 0x200A, unfortunately without any answers.


I have uploaded three scripts and one spreadsheet (with extension changed to .txt, otherwise there were not accepted as attachments).

  • The hex_BMV_to_MPPT.txt script is identifying Victron devices, configuring ports for BMV and MPPT, reading values from the 1st, adding checksums and forwarding them to the 2nd. It can be run as sudo python or with extra parameters -info or -debug for extra verbosity). It's certainly a bit difficult to understand (and still a beta), so I have prepared two simple scripts build from it's parts:
  • The find_victron.txt script will identify BMV and MPPT devices and output their ports to the console (run simply as sudo python
  • The hex_test.txt script will send a hex command to a given port and read the answer, e.g. sudo python /dev/ttyUSB0 82002000260500 (command should be without ':' and '\n')
  • The checksum of the commands can be checked with this spreadsheet Victron HEX protocol Checksum calc spreadsheet.txt (change .txt to .xlsx)

MPPT ControllersBMV Battery MonitorVE.DirectTemperature Sensortemperature compensation
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

2 Answers
fxd avatar image
fxd answered ·

Hi again,

Just looked at your message a bit closer. The Hex protocol requires values to be encoded in the message frame in "little endian" byte order, including the register ID. So it should have looked like:

:80302002E09xx\n xx=<chksum>

:80202002506xx\n xx=<chksum>

Perhaps you just incorrectly typed it in your question above. I suspect that you may have solved this already, given the age of the question.

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

fxd avatar image
fxd answered ·


Based on my reading of the "VE.Direct Protocol BlueSolar and SmartSolar MPPT chargers" documentation, a Flag value of "01" indicates the specified ID does not exist. If the "set" register request is successful, the Flag value should be "00" with the new value returned (i.e. acknowledged as sent). I've had this error sort of error in my earlier Arduino testing of "get" register requests, due to invalid register IDs. From documentation:

Flags Name Meaning

0x01 Unknown ID The specified id does not exist

0x02 Not supported Attempting to write to a read only value

0x04 Parameter error The new value is out of range or inconsistent

A couple of thoughts:

  1. If the ":820030002E09F3\n" above is exactly what's been sent, it doesn't quite look right to me, as there seems to be an extra "0"
  2. What's the firmware version of the MPPT? Some register IDs have only been introduced from specific versions.

Hope this helps, and apologies if you were already across this

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.