Building an ESS with Multiplus 48, a venus GX and a LiIon Battery

I have bought a venus Multiplus 48 to charge a battery when there is PV production (and overproduction than my consumption) and discharge my Battery tipically the night.
I was adviced to also buy a Venus GX to be able to control my Multiplus by VE.BUS. I was adviced to use modbus to control the charge/discharge requests (i was forecacting to use python on a raspberry Pi to do the control).
However, i cannot find the registers and how to access to do this control. Can someone help me ?

I attach bellow the desired setup with main informations (i use my own battery and bms with raspberry to obtain SOC and balance the cells of my battery, this part is ok).
I would like to have feedback on the wiring too (i guess i only need to wire AC_OUT for my installation?).

I thank you.

Samuel

Hi Samuel,
Have you seen : (1. ESS introduction & features)

Do note that in youe schematic, it is essential for an ESS system that the battery ESS communicates with the GX device, this is usually a CAN interface, so may be a bit tricky to set up on a Pi.

For modbus see: GX Modbus-TCP Manual [Victron Energy]
the Gx register list can be accessed through the Victron downloads pages.

1 Like

Hi Mike,

Thank for your reply.

For the 1st link, this document present ESS function that can be activated inside GX device, but indeed it requires to have battery information to work (ie SOC information of the battery to decide charge or discharge).

In my setup, I want to control the Multiplus behavior (charge the battery from grid) and discharge (inverter only) by writing into the registers of the multiplus.
Do you think it is possible to access the registers of the multiplus (through the Venus GX device) ? if yes , how can i access ?

For example write registers 33-37-38 from ‘MODBUS-TCP register list’;

i thank you in advance,

BR

Samuel

Incorrect.
If there are no loads being used for battery back up you only connect ac in.

It cannot synchronise and charge from grid otherwise.

This can be done without ESs. You need to install Venus large in the gx device and then use node red. Modbus is also an option.

Are you sure that your battery pack is LiIon and not LiFePo? I guess you plan to use a 16s LiIon pack? LiIon isnt that commonly used with these installations, and a 16s may be a bit much for the Multiplus, since the MP is only rated up to 66VDC. Consider using only a 15s LiIon pack

1 Like

Nice spotting @chrigu.

Hi Mike,

Thank you very much for your help.

After some troubles, i have updated to Venus large on my GX, and i can see Node-Red working.

I will continue to learn because i don’t know Node-Red (if you have adviced on tuto , please tell me).

I will check also if i stay with modbus (on rsapberry pi)

I thank you, BR

Samuel

PS:

I see more registers:

:white_check_mark: Registre 800 : 12336
:white_check_mark: Registre 801 : 13109
:white_check_mark: Registre 802 : 26214
:white_check_mark: Registre 803 : 13876
:white_check_mark: Registre 804 : 13413
:white_check_mark: Registre 805 : 12596
:white_check_mark: Registre 806 : 0
:white_check_mark: Registre 807 : 0
:white_check_mark: Registre 808 : 0
:white_check_mark: Registre 809 : 0
:white_check_mark: Registre 810 : 0
:white_check_mark: Registre 811 : 0
:white_check_mark: Registre 812 : 0
:white_check_mark: Registre 813 : 0
:white_check_mark: Registre 814 : 0
:white_check_mark: Registre 815 : 0
:white_check_mark: Registre 816 : 0
:white_check_mark: Registre 817 : 0
:white_check_mark: Registre 818 : 0
:white_check_mark: Registre 819 : 0
:white_check_mark: Registre 820 : 3
:white_check_mark: Registre 821 : 0
:white_check_mark: Registre 822 : 0
:white_check_mark: Registre 823 : 0
:white_check_mark: Registre 824 : 0
:white_check_mark: Registre 825 : 0
:white_check_mark: Registre 826 : 1
:white_check_mark: Registre 840 : 625
:white_check_mark: Registre 841 : 0
:white_check_mark: Registre 842 : 0
:white_check_mark: Registre 843 : 0
:white_check_mark: Registre 844 : 0
:white_check_mark: Registre 845 : 0
:white_check_mark: Registre 846 : 0
:white_check_mark: Registre 850 : 0
:white_check_mark: Registre 851 : 0
:white_check_mark: Registre 855 : 0
:white_check_mark: Registre 860 : 0
:white_check_mark: Registre 865 : 0
:white_check_mark: Registre 866 : 3
:white_check_mark: Registre 2700 : 0
:white_check_mark: Registre 2701 : 0
:white_check_mark: Registre 2702 : 0
:white_check_mark: Registre 2703 : 0
:white_check_mark: Registre 2704 : 0
:white_check_mark: Registre 2705 : 65535
:white_check_mark: Registre 2706 : 0
:white_check_mark: Registre 2707 : 0
:white_check_mark: Registre 2708 : 0
:white_check_mark: Registre 2710 : 0
:white_check_mark: Registre 2900 : 1
:white_check_mark: Registre 2901 : 100
:white_check_mark: Registre 2902 : 0
:white_check_mark: Scan terminé.

C:\Users\Public_PERSO\victron\2025>python scan_registres_modbus.py
:magnifying_glass_tilted_left: Scan des registres Modbus TCP sur venus.local unit-id 242

:white_check_mark: Registre 800 : 12336
:white_check_mark: Registre 801 : 13109
:white_check_mark: Registre 802 : 26214
:white_check_mark: Registre 803 : 13876
:white_check_mark: Registre 804 : 13413
:white_check_mark: Registre 805 : 12596
:white_check_mark: Registre 806 : 0
:white_check_mark: Registre 807 : 0
:white_check_mark: Registre 808 : 0
:white_check_mark: Registre 809 : 0
:white_check_mark: Registre 810 : 0
:white_check_mark: Registre 811 : 0
:white_check_mark: Registre 812 : 0
:white_check_mark: Registre 813 : 0
:white_check_mark: Registre 814 : 0
:white_check_mark: Registre 815 : 0
:white_check_mark: Registre 816 : 0
:white_check_mark: Registre 817 : 0
:white_check_mark: Registre 818 : 0
:white_check_mark: Registre 819 : 0
:white_check_mark: Registre 820 : 0
:white_check_mark: Registre 821 : 0
:white_check_mark: Registre 822 : 0
:white_check_mark: Registre 823 : 0
:white_check_mark: Registre 824 : 0
:white_check_mark: Registre 825 : 0
:white_check_mark: Registre 826 : 1
:white_check_mark: Registre 827 : 65535
:white_check_mark: Registre 828 : 65535
:white_check_mark: Registre 829 : 65535
:white_check_mark: Registre 830 : 0
:white_check_mark: Registre 831 : 0
:white_check_mark: Registre 832 : 26998
:white_check_mark: Registre 833 : 27812
:white_check_mark: Registre 834 : 65535
:white_check_mark: Registre 835 : 65535
:white_check_mark: Registre 836 : 65535
:white_check_mark: Registre 837 : 65535
:white_check_mark: Registre 838 : 65535
:white_check_mark: Registre 839 : 65535
:white_check_mark: Registre 840 : 625 My battery voltage :slight_smile:
:white_check_mark: Registre 841 : 0
:white_check_mark: Registre 842 : 0
:white_check_mark: Registre 843 : 0
:white_check_mark: Registre 844 : 0
:white_check_mark: Registre 845 : 0
:white_check_mark: Registre 846 : 0
:white_check_mark: Registre 850 : 0
:white_check_mark: Registre 851 : 0
:white_check_mark: Registre 855 : 0
:white_check_mark: Registre 860 : 0
:white_check_mark: Registre 865 : 0
:white_check_mark: Registre 866 : 3
:white_check_mark: Registre 867 : 65535
:white_check_mark: Registre 868 : 0
:white_check_mark: Registre 869 : 0
:white_check_mark: Registre 870 : 0
:white_check_mark: Registre 871 : 65535
:white_check_mark: Registre 872 : 0
:white_check_mark: Registre 873 : 0
:white_check_mark: Registre 874 : 0
:white_check_mark: Registre 875 : 0
:white_check_mark: Registre 876 : 0
:white_check_mark: Registre 877 : 0
:white_check_mark: Registre 878 : 0
:white_check_mark: Registre 879 : 0
:white_check_mark: Registre 880 : 0
:white_check_mark: Registre 881 : 0
:white_check_mark: Registre 882 : 0
:white_check_mark: Registre 883 : 0
:white_check_mark: Registre 2700 : 50
:white_check_mark: Registre 2701 : 100
:white_check_mark: Registre 2702 : 100
:white_check_mark: Registre 2703 : 1
:white_check_mark: Registre 2704 : 0
:white_check_mark: Registre 2705 : 65535
:white_check_mark: Registre 2706 : 0
:white_check_mark: Registre 2707 : 0
:white_check_mark: Registre 2708 : 0
:white_check_mark: Registre 2710 : 0
:white_check_mark: Registre 2711 : 1
:white_check_mark: Registre 2712 : 2
:white_check_mark: Registre 2713 : 65535
:white_check_mark: Registre 2714 : 65535
:white_check_mark: Registre 2715 : 0
:white_check_mark: Registre 2717 : 0
:white_check_mark: Registre 2900 : 1
:white_check_mark: Registre 2901 : 100
:white_check_mark: Registre 2902 : 1
:white_check_mark: Registre 2903 : 100
:white_check_mark: Registre 4701 : 0
:white_check_mark: Registre 4702 : 0
:white_check_mark: Registre 4703 : 0
:white_check_mark: Registre 4704 : 0
:white_check_mark: Registre 5400 : 0
:white_check_mark: Registre 5401 : 0
:white_check_mark: Registre 5402 : 0
:white_check_mark: Registre 5403 : 0
:white_check_mark: Registre 5404 : 0
:white_check_mark: Registre 5405 : 0
:white_check_mark: Registre 5406 : 0
:white_check_mark: Registre 5407 : 0
:white_check_mark: Registre 5420 : 0
:white_check_mark: Registre 5421 : 2
:white_check_mark: Registre 5422 : 14
:white_check_mark: Registre 5423 : 0
:white_check_mark: Registre 5424 : 0
:white_check_mark: Registre 5425 : 0
:white_check_mark: Registre 5426 : 0
:white_check_mark: Registre 5427 : 100
:white_check_mark: Registre 5428 : 0
:white_check_mark: Registre 5429 : 0

My battery voltage will be in this range:

Tension min (à 3.275 V/cell) : 16 × 3.275 V = 2*26.2 = 52.4 V

Tension max (à 4.175 V/cell) : 16 × 4.175V = 2*33.4 = 66.4 V

–> so i will control my system, to stay in this range, and i have to check to avoid overdischarge, but i should never go in overcharge because Multiplus will probably stop if violtage is above 66V isn’t it ?
Can you confirm ?

I thank you,

Samuel

Dear Mike, dear all,

I have compared my modbus readings with the xls file “CCGX-Modbus-TCP-register-list-3.60.xlsx” describing the registers.

I obtain this (here lines filtered with column”writable” to yes):

could you help me with lines register 2700 and register 2703 : what are the differences betwwen them ?
can i write here values to charge or discharge the battery ?

is there other register to write?

I thank you for your help ,

BR

Samuel

@samuel.cregut Do you actually try this?

I will do it with ESP32.

Do u have the inverter already?

I am looking at MP-2 GX which would have already communication unit included. Seems that no extra components needed.

Am I correct?

Hello,

I guess that you have a similar setup , with the same targets as me.

You asked me if i have an inverter ? my setup is a Multiplus 48 + Venus GX (with Large OS) and a LiIon battery.

I don’t use any BMS from Victron ; are you using a BMS fromVictron?

O nmy side, i ‘m today not able to control charge / discharge with python and modbus:

I’ma able to see the voltage of my battery (57,6V) but i don’t what register to write to charge or discharge: (current stay at 0 A):

I have try to test with these registers :slight_smile:

My battery (read only):

:white_check_mark: Registre REG_BATV 840 : 57.6 V
:white_check_mark: Registre REG_BATI 841 : 0.0 A

Writable registers :
:white_check_mark: Registre 807 : 1
:white_check_mark: Registre REG_ESS_SETPOINT 2700 : -100 W
:white_check_mark: Registre REG_ESS_MAX_CHARGE 2701 : 100 %
:white_check_mark: Registre REG_ESS_MAX_DISCHARGE 2702 : 100 %
:white_check_mark: Registre REG_ESS_MAX_DISCHARGE2 2704 : 0 A

Can someone help me at this step? I thank you

BR

Samuel

All galvanic cells operate using the flow of ions. Li-ion is a collective term for all types of lithium-based cells. LiFePO4 cells are one of the many different types of Li-ion cells.

Wikipedia says:
" "Li-ion battery” encompasses battery types of at least 12 chemistries (including 
) Lithium iron phosphate (LiFePO4)"

Yep. Looks like we are looking for same, just slight different hardware.
Now, I have nothing. Just read and study all up and down, to be sure I will know what to do after I buy the items.

The list of registers is available on web.. Most likely you have them as you refer to specific data. (I managed to get an excel “CCGX-Modbus-TCP-register-list-3.60.xlsx”, but can’t find the location anymore.)
Are you sure that your PLC is “talking” in same manner with Victron?
For instance, when reading my energy meter, in order for Arduino to understand it, I had to revert / flip the signal to make it work, even my NMEA/USB cable did work directly. So, you may say correct, but just upside down.
Use a serial terminal to send commands to Victron and see what is doing. If that works, then you are on correct address. And etc. you know how to take it from here.
I have no clue if what I say is correct. Just thinking out of the box.

Yes i’m sure,

I’m working as BMS engineer and i know perfectly all the cell parameters of my modules (it is NMC chemistry) ;

Why this question?

Samuel

Yes i’m sure, because i use Modbuq protocol (on ethernet ) that is more “elaborated” than serial link: and moreover i read perfectly the DC voltage on Modbus (with 0.1V resolution as described in the modbus description), so no flip or such staff to do.
what metering are you using ?

Samuel

XT211 (Sagemcom - Siconia)

Last post is with complete code.

Which question? I didn’t ask any question.

I just wanted to clarify that, contrary to what chrigu said, LiFePO4 cells are also Li-ion cells.

Would it help?