question

image6255 avatar image
image6255 asked

Victron Multiplus II, legacy AIO system and charging/discharging loops

I have a Victron Multiplus II with a set of Pylontech batteries. It's connected to grid through AC In/Out. There is also a legacy PV AIO connected to the grid too. I have some loads on AC Out 1 plus some powerful loads connected directly to the grid.

Victron is set into ESS mode. The grid is measured by an ET112 and the legacy PV is measured by a 3P75CT.

In general it works fine, but there is one issue: when I turn on a powerful appliance on the AC In/Out side, like an oven, both Victron and AIO discharge to assist it. Once I turn off the appliance, Victron continues discharging and the legacy AIO charges its battery, so it creates unnecessary losses due to conversion inefficiency and puts additional stress on the batteries.

This is definitely should be preventable by Victron because it has a dedicated meter for the legacy PV and knows when it's charging from Victron so it should be possible to reduce output in such cases.

Could you please help?

battery charging
2 |3000

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

5 Answers
ejrossouw avatar image
ejrossouw answered ·

@Image6255 Your Victron storage system's ET112 is monitoring and responding to your grid setpoint. I'd expect your AIO to ONLY use excess PV during the day to charge its battery so I am intrigued as to why it introduces an AC load on the grid side to which the Victron responds? One possible reason is that the AIO is very small and drops well below a set SOC threshold (given the large discharge you mentioned) and has to charge back up to it typically from the grid if there is e.g. not enough solar? Was this the case before you added the Victron?

2 |3000

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

image6255 avatar image
image6255 answered ·

When I turn on a big load, both systems start discharging. That's especially easy to reproduce in the evenings, when there isn't enough PV.

When I turn the load off, the AIO senses grid export it immediately starts charging its battery. Victron continues to feed it. The AIO's manufacturer refuses to alter its behavior or add an option to disable charging on export.

Nope, my use case does not include charging from the grid during day time.

2 |3000

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

mrjj avatar image
mrjj answered ·

I would get rid off external batterybank.Put energymeter to legacy PV so it gets integrated to Victron system that way. Use only Victron battery bank. If you need more capacity get another Multiplus but still common battery bank.


2 |3000

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

image6255 avatar image
image6255 answered ·

Ok, that's an obvious idea. Although it should be possible to implement in Victron software - all the data is already there. Multiplus sees my legacy system readings. It just needs to avoid discharging its battery into the legacy system.

2 comments
2 |3000

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

ejrossouw avatar image ejrossouw commented ·

@Image6255 Feature requests are done via the modifications space and I am moving it there. Just some closing thoughts. I have personally never seen an AIO combined with Victron storage, only AC PV (does not mean it has not been done), so is not convinced it warrants the development and testing required. Also, it is a bi-directional device with a consumption and production component (unlike AC couple PV), which will have a knock-on effect so unlikely as simple as you think? Node-red may offer you the functionality you require if you think it is that simple and want to have a go. While nothing is guaranteed, my approach would be to replace the ET112 with a CT, which I personally use after putting multiple devices through their paces on the testbench. Maybe it could be as simple as swapping the ET112 around with the faster VE-3P75CT?

0 Likes 0 ·
image6255 avatar image image6255 ejrossouw commented ·

I've implemented some home assistant rules to disrupt Victron<->AIO feeding. It works but there is some latency associated (my crappy AIO updates its cloud data once per about 5 minutes and I had to reverse-engineer their API).

Seemingly, it does not help to switch back to the clamp from ET112.

> Maybe it could be as simple as swapping the ET112 around with the faster VE-3P75CT?

My 3P75CT monitors my AIO and I don't have another one (also it's kinda expensive). I have two spare CT clamps but Victron software does not support assigning individual clamp roles, unlike MyEnergi Harvi...


0 Likes 0 ·
image6255 avatar image
image6255 answered ·

Ok, I came up with a node-red flow which works and has better latency than my home assistant rule. Still, I think this should be a core feature because node-red itself introduces some unnecessary latency. Competition (myenergi) does have "avoid drain/avoid charge/avoid both" modes specifically for such scenario.

This rule only blocks Victron -> AIO feed, obviously the reverse feed cannot be blocked without additional data from AIO.

[{"id":"0561360484942e0f","type":"tab","label":"Feed Block","disabled":false,"info":"","env":[]},{"id":"d4ec5adab3f0de05","type":"victron-input-pvinverter","z":"0561360484942e0f","service":"com.victronenergy.pvinverter/40","path":"/Ac/Power","serviceObj":{"service":"com.victronenergy.pvinverter/40","name":"VM-3P75CT HQ24092JUKY"},"pathObj":{"path":"/Ac/Power","type":"float","name":"Total Power (W)"},"name":"Inverter 2 Power","onlyChanges":false,"x":120,"y":120,"wires":[["552c773d21b16b33"]]},{"id":"83d950c12a801345","type":"victron-input-battery","z":"0561360484942e0f","service":"com.victronenergy.battery/512","path":"/Dc/0/Power","serviceObj":{"service":"com.victronenergy.battery/512","name":"Pylontech battery"},"pathObj":{"path":"/Dc/0/Power","type":"float","name":"Battery power (W)"},"name":"Battery Power","onlyChanges":false,"x":110,"y":60,"wires":[["809a2fb6f5b0e48d"]]},{"id":"809a2fb6f5b0e48d","type":"change","z":"0561360484942e0f","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"power_battery","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":60,"wires":[["84e82166eab060db"]]},{"id":"552c773d21b16b33","type":"change","z":"0561360484942e0f","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"power_inverter2","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":120,"wires":[["84e82166eab060db"]]},{"id":"84e82166eab060db","type":"join","z":"0561360484942e0f","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":510,"y":120,"wires":[["7788232521b3ba51"]]},{"id":"7d0a7c849a24adf0","type":"switch","z":"0561360484942e0f","name":"","property":"payload.limit_required = true","propertyType":"jsonata","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":110,"y":240,"wires":[["d494138be9d7c921"],["9d8bebd161cb0a3c"]]},{"id":"9d8bebd161cb0a3c","type":"debug","z":"0561360484942e0f","name":"debug 9","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":280,"y":240,"wires":[]},{"id":"407d3632359c00bf","type":"victron-output-settings","z":"0561360484942e0f","service":"com.victronenergy.settings","path":"/Settings/CGwacs/MaxDischargePower","serviceObj":{"service":"com.victronenergy.settings","name":"Venus settings"},"pathObj":{"path":"/Settings/CGwacs/MaxDischargePower","type":"float","name":"ESS max discharge power (W)","writable":true},"name":"Limit discharge","onlyChanges":false,"x":840,"y":220,"wires":[]},{"id":"7788232521b3ba51","type":"function","z":"0561360484942e0f","name":"define limit","func":"let discharge_threshold = -100;\nlet charge_threshold = -100;\n\nlet power_battery = msg.payload.power_battery;\nlet power_inverter2 = msg.payload.power_inverter2; \n\nvar power_limit = Math.abs(power_battery) - Math.abs(power_inverter2);\nif (power_limit <= 100) {\n    power_limit = 0;\n}\n\nvar locked = flow.get(\"feed-block-locked\");\nif (locked === undefined) {\n    locked = false;\n}\nlet limit_required = power_battery < discharge_threshold && power_inverter2 < charge_threshold && locked == false;\n\nmsg.payload.power_limit = power_limit;\nmsg.payload.locked = locked;\nmsg.payload.timestamp = new Date();\nmsg.payload.limit_required = limit_required;\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":120,"wires":[["7d0a7c849a24adf0"]]},{"id":"bdb7a5f58c059d2a","type":"change","z":"0561360484942e0f","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.power_limit","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":220,"wires":[["407d3632359c00bf"]]},{"id":"02a990089cc2f445","type":"function","z":"0561360484942e0f","name":"log last event","func":"var last = flow.get(\"last_events\");\nif (last == undefined) {\n    last = new Array();\n}\nlast.push(msg);\nlet truncated = last.slice(-10);\nflow.set(\"last_events\", truncated);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":340,"wires":[[]]},{"id":"044cf2225fa49302","type":"inject","z":"0561360484942e0f","name":"test","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"power_battery\":-200,\"power_inverter2\": -200, \"manual_test\": true}","payloadType":"json","x":510,"y":60,"wires":[["7788232521b3ba51"]]},{"id":"7a6b8ec7a3876e35","type":"victron-input-ess","z":"0561360484942e0f","service":"com.victronenergy.settings","path":"/Settings/CGwacs/MaxDischargePower","serviceObj":{"service":"com.victronenergy.settings","name":"Venus settings"},"pathObj":{"path":"/Settings/CGwacs/MaxDischargePower","type":"integer","name":"Max inverter power (W)"},"name":"","onlyChanges":false,"x":170,"y":480,"wires":[["1848b3eb7ba5eb2b"]]},{"id":"1848b3eb7ba5eb2b","type":"debug","z":"0561360484942e0f","name":"debug 10","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":400,"y":480,"wires":[]},{"id":"cf43750b56d38487","type":"delay","z":"0561360484942e0f","name":"","pauseType":"delay","timeout":"15","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":520,"y":280,"wires":[["ea5bbe9b332c6e62"]]},{"id":"ea5bbe9b332c6e62","type":"change","z":"0561360484942e0f","name":"-1","rules":[{"t":"set","p":"payload","pt":"msg","to":"-1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":650,"y":280,"wires":[["3757d10207f4261c","b346b0cd4ea14d62"]]},{"id":"3757d10207f4261c","type":"victron-output-settings","z":"0561360484942e0f","service":"com.victronenergy.settings","path":"/Settings/CGwacs/MaxDischargePower","serviceObj":{"service":"com.victronenergy.settings","name":"Venus settings"},"pathObj":{"path":"/Settings/CGwacs/MaxDischargePower","type":"float","name":"ESS max discharge power (W)","writable":true},"name":"Remove limit","onlyChanges":false,"x":830,"y":280,"wires":[]},{"id":"3a3c018a8cb4e78f","type":"function","z":"0561360484942e0f","name":"lock","func":"flow.set(\"feed-block-locked\", true);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":320,"wires":[["cf43750b56d38487","02a990089cc2f445","4dfdd626435ed670","bdb7a5f58c059d2a"]]},{"id":"b346b0cd4ea14d62","type":"function","z":"0561360484942e0f","name":"unlock","func":"flow.set(\"feed-block-locked\", false);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":340,"wires":[["9dbf0b9a6cd1ae3b"]]},{"id":"4dfdd626435ed670","type":"debug","z":"0561360484942e0f","name":"debug 12","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":520,"y":400,"wires":[]},{"id":"5aba482f7e7bb632","type":"inject","z":"0561360484942e0f","name":"unlock","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":670,"y":60,"wires":[["b346b0cd4ea14d62"]]},{"id":"9dbf0b9a6cd1ae3b","type":"semaphore-plus-release","z":"0561360484942e0f","name":"Semaphore Release","config":"19848404fe9de453","x":780,"y":440,"wires":[[]]},{"id":"d494138be9d7c921","type":"semaphore-plus-take","z":"0561360484942e0f","name":"Semaphore Take","timeout":0,"config":"19848404fe9de453","avoidance":"threshold","threshold":"1","msgPart":"smp_avoidQueue","partType":"msg","x":130,"y":320,"wires":[["3a3c018a8cb4e78f"],["e896d8c8bf04df9e"]]},{"id":"e896d8c8bf04df9e","type":"debug","z":"0561360484942e0f","name":"debug 13","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":100,"y":400,"wires":[]},{"id":"19848404fe9de453","type":"semaphore-plus-config","name":"Feed Block Lock"}]
2 |3000

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