Build thread (german) at https://chaos.social/@patagona/113149877881417810
Basically, what drove me to start this project.
Someone was selling three Pylontech battery modules (1x US2000C, 2x US2000, each 15S LiFePo4, 2.4kWh) for really, really cheap (<25€/kWh) because they were water damaged.
So of course, I picked them up and as expected, the BMS PCBs were corroded to the point of not being feasible to repair (mostly due to the half-assed "conformal coating" applied to the PCBs), but the battery cells themselves were fine, albeit still a bit wet, limescale everywhere and a bit unbalanced.
After opening up the packs, letting them dry, cleaning up the limescale/corrosion and balancing them, all of the cells seem to be fine.
For transport, the batteries are mounted in a used flight case. I'm using an Anderson-style connector as interconnect between battery and inverter (and potentially other loads), which I've mounted towards the outside of the case so it can be used with the lids on.
There are two parts two the mount,
one that holds the connector (cad/battery-connector-mount/battery-connector-mount.scad
)
and one for between mount and plug so the mount doesn't get squeezed when tightening the screws (cad/battery-connector-mount/plug-fill-adapter.scad
).
The latter is pretty generic, the first is specific to the case and could be edited to make a lot stronger if it doesn't have to fit this specific case.
To replace the corroded BMS I decided to get DALY 15S 100A "Smart" BMS modules.
To mount the BMS, I designed some adapter / mounting plates that fit the original mounts / standoffs of the Pylontech battery modules.
The design files can be found in cad/bms-mount
.
The BMS has a UART, RS485 and CAN interface. There is already a DALY BMS integration using a UART interface in ESPHome, however that is for the older DALY BMS, not the new H/K/M/S-Series (for which there is already a GitHub issue).
After looking at the Windows software and the protocol documentation provided in the GitHub issue, I implemented the new protocol as an ESPHome integration to (hopefully) upstream in esphome/esphome#7524.
I decided to go with a "EASun ISolar-SMH-II-7KW" (which is produced by the OEM "Voltronic", similar/equal devices are also sold under the names "MPPSolar", "PowMr", "Powland", "FSP", ...), mostly because it was cheap and has a lot of output power.
It wouldn't go up to the advertised 6.2kW in my testing (it already showed 99% load at around 5.4kW), but that might be battery current limited due to the relatively low battery voltage (15S LiFe instead of 16S LiFe or lead acid, still 120A!), so in combination with the solar input or with a higher input voltage, it should go even higher.
The inverter has a RS232/RS485 interface which can be used to read data from the inverter (using a custom mostly-ASCII-based protocol) and which has been implemented by several people already:
The inverter will be mounted in a 60x40x22cm euro container for easy transport and water-resistance, along with all the other necessary support hardware (circuit breakers, etc.).
CAD planning is done in cad/box
.
There will be a front panel exposing all the important connections (DC, AC, PV) on the short side of the euro container.
CAD planning is done in cad/frontpanel
.
The (pretty common) RS485 transceiver modules I used for inverter communication do have a ground pin on the RS485 side. This does, however not mean it is actually connected to anything meaningful.
Actually, there is no connection between the TTL- and RS485-side ground, which means any stray electric current flows directly into the A/B inputs of the RS485 transceiver.
In some cases (for example, when both the PV input and the MCU are ground-referenced, even just through a Y-capacitor of a PSU) there may be something like 90V AC at 700µA between the two sides of the RS485 transceiver, killing it pretty much instantly.
Running a wire from the TTL-side ground to the RS485-side ground fixes that issue by giving the stray currents a direct path to flow.
At one point, the inverter just stopped working (when switching it on, it turned off itself after a few seconds). Turns out, there is an (undocumented) "cold start" voltage, that is hard-coded to be ~4V above the low-voltage cutoff. Means, when the low voltage cutoff is set to 45V, the inverter will just not start below ~49V.
Also, the battery voltage readout was wrong by around 0.7V, however that could be fixed through a serial command.
The DALY BMS comes with two TTL UART ports, CAN and RS485. The DALY BMS RS485 protocol is well-documented and also implemented in ESPHome.
However, as it turns out, the new (2023?) lineup of BMS from DALY (H/K/M/S series) use another communication protocol. This new protocol is called "Modbus" internally in the PC software and looks just like regular Modbus.
After some messing around with Modbus software and not getting it to work, I figured out that the reply from the BMS has a different device id than the request, which makes it completely incompatible with all available Modbus software / libraries, so custom software had to be written again (see above).