Things I learned about Victron's ESS

I'll try to document the non-obvious, less-documented or even weird things that I came across with a Victron 3-phase ESS.

My system is eclectic, the TL;DR is: 3 MultiPlus-II 3000/48, with 560Ah of DIY LFP batteries, and various data sources integrated via MQTT (evcc, Huawei PV Inverter, optionally the grid meter).

(I might do a separate post documenting the whole setup sometime in the future).

External meter data sources

I found that both with the PV inverter and the grid meter, it is not sufficient to provide the total power figure, you also need power values for all phases -- or the ESS will not run (shows "Passthru"). For evcc, this does not affect operation, but the numbers you see in the remote console or the VRM portal are off.

So, for dbus-mqtt-pv and dbus-mqtt-grid, make sure to feed it at least this, as the documented "Minimum required" data is not enough:

{
  "grid": {
    "power": -34,
    "L1": {
      "power": -11.3333333333333
    },
    "L2": {
      "power": -11.3333333333333
    },
    "L3": {
      "power": -11.3333333333333
    }
  }
}

As my grid meter does not provide power figures for the phases, I just divide the total number by 3. I guess that might not work if your "Multiphase regulation" is not "Total of all phases".

You can run the ESS on a slow grid meter

I'm usually using "Inverter/Charger" as my "Grid metering" setting, because all my consumers are on the AC-Out of the Multis.

However, when you run a "grid-parallel ESS", it even works with the data from the utility's grid meter ("Kundenschnittstelle" in Austria) which updates the data only every 5 seconds. There is quite some oscillation in the regulation on big load changes, but eventually it'll settle.

Update: With the Multiplus as the grid meter, I consistently notice 30W-40W of grid export when the setpoint is set to 10W; with the utility's grid meter, it is on point. This is a difference of 1/2 to 3/4 kWh per day, which is a relevant number in the wintertime.

Running on two phases

What do you do when one of the Multis in your 3 phase setup is defective?

Turns out you can use those weird constellations in VE.Bus System Configurator. My Multi on L2 died, so after consulting the Victron Community I configured the remaining Multis to be "Dual phase 240" instead of "Three phase".

Another suggestion was to turn off "Switch as group", but that would prevent the ESS assistant from being used (it works with the "Dual phase 240" setup).

So now while waiting for the unit to be replaced I'm running a grid parallel ESS on two phases, and it seems to work just fine.

In case of a grid failure, I'd have to manually switch over to the Multis and of course only have two of three phases available, but it's still better than nothing

Now to understand, and find an application for, the even weirder "L2&L3 floating" configurations...

Don't put your house behind the ESS without a bypass switch

(This is not really non-obvious, as it's clearly suggested in Victron's documentation, but...)

Multis can fail, and in a 3 phase system they work as a group, so all of them switch off and you'll sit in the dark (ask me how I know). That (and configuration changes that cause the Multis to reset) is why you absolutely want a bypass switch.

The one I have is a "Kraus & Naimer KA40B.T904", and when you turn the lever real fast, it switches fast enough so my Raspberry Pis don't even notice...

dbus-serialbattery is made for USB-RS485 adapters

My JK-BMSes are integrated via dbus-serialbattery, and physically interfaced via a Waveshare Isolated RS485 CAN HAT (B), but all the docs and scripts assume your RS485 is connected via USB.

The solution is to create a new service config, in /data/etc/rs485-hat:

service/run:

#!/bin/sh
echo "* starting dbus-serialbattery for RS485 HAT"
exec 2>&1
exec /opt/victronenergy/dbus-serialbattery/start-serialbattery.sh ttySC0

service/log/run:

#!/bin/sh
exec 2>&1
exec multilog t s25000 n4 /var/log/dbus-serialbattery.ttySC0

and finally, in /data/rc.local, insert:

ln -s /data/etc/rs485-hat/service/ /service/rs485-hat

Add relay functionality to VenusOS on Raspberry PI

Edit /etc/venus/gpio_list and reboot:

5 out relay_1

That adds the RPi's GPIO 5 as relay_1. Now there's a "relay" menu under "settings" and you can set this to various functions; you can also read the relay state via Modbus or MQTT (Modbus unit 100, register 806).

I set this relay to "Alarm" and plan to not actually wire anything to GPIO 5, but just read the state and light a warning light based on that.