Two ESS systems working together

I have a primary ESS consisting of a GX, Quattro, batteries and a DC coupled solar. Due to space/legal limits, I cannot extend this system, but I can add another one approx. 50m away from it.

I am thinking about adding a second set of inverter/charger plus a much larger battery bank (in a shed, can buy cheaper batteries without worrying about burning the house down).

The grid will remain connected to the original system, I am considering connecting the secondary one to AC1 of the quattro.

My question is - is this configuration supported?

Would the primary system be able to request how much the secondary should be providing to match demand? My plan is for it to kick in when the primary system batteries go below 50% and I will follow factor 1 rule.

The plan is to charge the large battery overnight and the use it during the day.

EDIT: second idea is to run DC cabling and use a 50a DC to DC charger to charge the primary battery from the secondary, with a standalone AC charger to charge the secondary battery.

You can cascade, but keep the second system smaller then the primary

It is unsopported, but has been done before

Systems cant communicate or use one GX, but node red can do a lot of tricks :blush:

I have 2 ESS working fine. They are both AC-coupled to the grid with AC-coupled solar. If you want to use the other input you can use it on and try the generating settings. There are so many generator controls, especially with the ESS installed. I have a 48V 5000 36kwh ESS and a 12V 1200 ESS in the shed with about a 10kwh battery. The only problem I found was the 12v or the 48v would charge from each other in certain situations overnight. This was solved by setting the DVCC to 0 overnight using node-red. Also charging using solar and the internal charger on the 12V needed tweaking to prioritise solar. This is what my flows look like. You are unlimited in how you want to configure it.

Thank you very much!

I am quite new with node red/flows, could you please describe what is the flow in the image shared doing/achieving?

It does a couple of things you might not need but this JSON code will check the local time and send a 0 to disable charge. If you decide to AC couple the second ESS, this is how I stopped the charging overnight.

[
{
“id”: “ca8f992f0c0f0bb7”,
“type”: “inject”,
“z”: “1112bdc43019f870”,
“name”: “EVERY 5 SEC SEND 0”,
“props”: [
{
“p”: “payload”
},
{
“p”: “topic”,
“vt”: “str”
}
],
“repeat”: “5”,
“crontab”: “”,
“once”: false,
“onceDelay”: 0.1,
“topic”: “”,
“payload”: “0”,
“payloadType”: “num”,
“x”: 410,
“y”: 540,
“wires”: [
[
“545e4a3a975e9f59”
]
]
},
{
“id”: “545e4a3a975e9f59”,
“type”: “function”,
“z”: “1112bdc43019f870”,
“name”: “TIME FILTER NIGHT DVCC CHARGER”,
“func”: “// Get the current timestamp\nvar now = new Date();\n\n// Adjust for Australia time zone (UTC+10)\n//var localTime = new Date(now.getTime() + (10 * 60 * 60 * 1000));\n\n// Use local time\nvar localTime = new Date(now.getTime() + (0));\n\n// Get the current local hour and minute\nvar currentHour = localTime.getHours();\nvar currentMinute = localTime.getMinutes();\n\n// Define the start and end times (in hours and minutes)\nvar startTime = { hour: 17, minute: 2 }; // 3:25 PM\nvar endTime = { hour: 7, minute: 29 }; // 7:29 AM next day\n\n// Convert start and end times to total minutes for easier comparison\nvar startTotalMinutes = startTime.hour * 60 + startTime.minute;\nvar endTotalMinutes = endTime.hour * 60 + endTime.minute;\nvar currentTotalMinutes = currentHour * 60 + currentMinute;\n\n// Check if the current time is within the allowed range\n// The range spans from 3:25 PM to 7:29 AM the next day\n// To handle the overnight span, we check if the current time is greater than or equal to the start time\n// OR less than or equal to the end time (assuming the end time is the next day)\nif (currentTotalMinutes >= startTotalMinutes || currentTotalMinutes <= endTotalMinutes) {\n // Current time is within the allowed range, let the message pass through\n return msg;\n} else {\n // Current time is outside the allowed range, do not pass the message\n return null;\n}\n”,
“outputs”: 1,
“timeout”: 0,
“noerr”: 0,
“initialize”: “”,
“finalize”: “”,
“libs”: ,
“x”: 740,
“y”: 540,
“wires”: [
[
“5711b23639c1d4fa”
]
]
},
{
“id”: “5711b23639c1d4fa”,
“type”: “victron-output-settings”,
“z”: “1112bdc43019f870”,
“service”: “com.victronenergy.settings”,
“path”: “/Settings/SystemSetup/MaxChargeCurrent”,
“serviceObj”: {
“service”: “com.victronenergy.settings”,
“name”: “Venus settings”
},
“pathObj”: {
“path”: “/Settings/SystemSetup/MaxChargeCurrent”,
“type”: “float”,
“name”: “DVCC system max charge current (A DC)”,
“writable”: true
},
“name”: “”,
“onlyChanges”: false,
“x”: 1190,
“y”: 540,
“wires”:
},
{
“id”: “07b85bf4d24aed70”,
“type”: “victron-input-ess”,
“z”: “1112bdc43019f870”,
“service”: “com.victronenergy.settings”,
“path”: “/Settings/SystemSetup/MaxChargeCurrent”,
“serviceObj”: {
“service”: “com.victronenergy.settings”,
“name”: “Venus settings”
},
“pathObj”: {
“path”: “/Settings/SystemSetup/MaxChargeCurrent”,
“type”: “float”,
“name”: “DVCC Charge current limit (A)”
},
“name”: “”,
“onlyChanges”: false,
“x”: 1160,
“y”: 600,
“wires”: [

]
}
]