Skip to content

Add Support for additional Inverter / BESS Brands #8

Closed

Description

@Roving-Ronin

Hi @mcamposv

Would it be possible to add support for other brands than Huawei / iStore (the Australian OEM rebranded version of Huawei) to your project?
What additional information would you require to support this ?

In the WLCRS repo you mentioned:

"_The one known limitation for other inverters is the startup connectivity check: on boot, the proxy queries a specific Modbus register to read the EMMA/SUN2000 device name and validate the connection is live.
That check is Huawei-specific and would need to be either reparametrized or removed entirely for other inverters. Everything after that handshake is generic Modbus TCP proxying.

If anyone tries it with Sungrow, DEYE, or similar and hits issues, I'd love to know — both to help debug and to make the startup check configurable for non-Huawei setups._"

Here's information for some brands that I'm aware of:

Sungrow device/model register is #4999 (register 5000 minus 1), input_type = input. data_type = uint16.
SolarEdge device/model register is #40020 (was 40115), input_type = holding. data_type = string. count = 16
Goodwe device/model register is #35011, data_type = custom. count = 5.
Fronius device/model register is #40020, input_type = holding. data_type = string. count = 16.

Thanks in Advance.

Activity

  1. mcamposv commented on Sep 10, 2026

    @mcamposv
    Collaborator

    interesting but hard to implement without real testing environment. as you said basically is a matter of change the "function that verifies conectivity"
    I will think on this when I have time. if we can put some short of dropbox. or something.

  2. mcamposv commented on Nov 2, 2026

    @mcamposv
    Collaborator

    Thanks for the register details — this is now addressed in #13 (firmware 6.1-0).

    As noted earlier, everything after the startup handshake was already generic Modbus TCP proxying; the only Huawei-specific part was the boot connectivity check. That check is now fully configurable, which enables other brands:

    New Custom option

    In the web settings (/config) and in the initial Setup portal, under Modbus TCP target → Test Target, choose Device type = Custom and set the 4 fields of the test request:

    • Unit ID of the device
    • Function code (e.g. 3 = read holding registers, 4 = read input registers)
    • Start register
    • Register count

    The check passes with any valid Modbus answer from the device: the normal reply, or a Modbus exception (which still proves the device is alive and listening). If the reply contains text (FC03/FC04 string registers), it is shown as the device model.

    If you know the right values for your device, it works with any brand. Based on the information you shared, starting points would be:

    Brand Function Register Count
    Sungrow 4 (input) 4999 1
    SolarEdge 3 (holding) 40020 16
    Fronius 3 (holding) 40020 16
    Goodwe 3 (holding) 35011 5

    Caveats: these haven't been tested on real devices here. Some vendors document 1-based addresses, so you may need register − 1 (e.g. 40019). The Unit ID depends on your installation (often 1). Values set in Custom are your responsibility — avoid write function codes (5, 6, 15, 16…), as they would modify the device on every attempt.

    When in doubt: disable the check

    Set Connection check on boot = Disabled. The proxy then only waits for the target IP to answer the ping and opens the gateway right away. It works with any Modbus TCP device.

    Closing this as implemented; feel free to reopen or comment with your results if something doesn't work with your inverter/BESS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions