Inverter: Sungrow SH10.0RT-20 (Off-Grid / Backup output → Home + 4x Hoymiles HMS ca. 5kW)
BMS: Batrium Watchmon Core with 8x CellMate K9s & Shuntmon
Battery: DIY 128x 340Ah LiFePO4
PV on SH10.0RT-20: 12kW
The Problem:
I am using the Sungrow SH10.0RT-20 (compatible with BYD HVS). I selected CAN protocol “Reserved40 (BYD)” on the Batrium. The communication works, but the Sungrow inverter automatically detects a battery capacity of only 5.1 kWh and limits the charge/discharge current to 10A.
Investigation & Findings:
I suspected the Batrium settings for Base Address, Remote Address, and Group Address were not being transmitted correctly. Using a CAN bridge between the Watchmon Core and the inverter, I confirmed my suspicion:
No Change: Modifying the Batrium settings did not change the values on CAN ID 0x250.
The Fix (CAN Bridge): I manually modified CAN ID 0x250 via the bridge.
Changed Byte 6 from 02 (2 Modules = 5.1kWh) to 04 .
Changed Byte 7 to 02 .
Result: The Sungrow immediately recognized 10.2 kWh capacity and allowed charge/discharge currents exceeding 20A.
The Question:
Does the Batrium “Reserved 40 (BYD-HVS)” profile currently ignore the Base/Remote/Group Address settings for CAN ID 0x250? It appears the Watchmon Core is hardcoding the HVS battery size to “2 modules” (5.1kWh) instead of calculating total capacity or reading user inputs.
Request:
Can you please check the Batrium firmware for the BYD HVS emulation? The bytes for capacity and current limits do not seem to be updating dynamically based on user configuration.
Thanks for the detailed troubleshooting. I have looked at our firmware and confirmed it is hardcoded to 0x02 for pack size. I have passed on this info to our software engineer for inclusion in our next release so that you can set the value from the Remote Address.
Interestingly, our documentation from a while ago hints that this was how it worked already, perhaps the feature got stalled or rolled back?
Either way, it’s a good feature, and I want it in our firmware.
Could you clarify what you mean by byte 6 and 7? Is that starting from zero?
cpp
// ====================================================================
// Function to modify the 0x250 message (only for BMS → Inverter)
// ====================================================================
void modifyMessageFromBMS(CANMessage &msg) {
if (msg.id == 0x250 && msg.len >= 7) {
// Byte4 (Index 4) to 0x05
// Byte5 (Index 5) to 0x14 → capacity 130 kWh
// Byte6 (Index 6) to 0x04 → battery nominal voltage 4 * 102V = 408V
msg.data[4] = 0x05;
msg.data[5] = 0x14;
msg.data[6] = 0x04;
}
}
With this modification, iSolarCloud (Sungrow SH10RT-20) automatically recognizes the battery as 130 kWh. As a result, it permanently allows over 20A (in my case about 24A).
Thank you for including this in the firmware update. Then I can disconnect my CAN bridge workaround in the future.