Universal Solar Inverter over Modbus RS485 / TCP custom_component (Growatt, Sofar, SolaX, Solis)

Great help thank you.

In your Github repository you have 3 Solax package files. Are these for different Solax inverters? I can’t work it out!

Sort off.

solax.yaml was based on an earlier hybrid inverter with different battery control to mine, it’s too different to mine so I abandoned it.

solax_x1_hybrid_reduced.yaml is what I use on my X1 Gen 3 Hybrid. It will work with Gen 2 Hybrid’s. But the battery voltages look different unless you scale them differently. At least with Pylontech batteries.

solax_hybrid_g3.yaml Has extra 3-Phase registers and ones that don’t work on my X1 Gen 3 Hybrid. but might be present on Gen 2.

If you are just reading values any will work. The versions are more for battery control. I really need to document better / update. But been very busy with work!

Ah okay thanks. I tried the solax.yaml and it worked straight off. I am too looking for battery control. I have an X1-AC with Solax Battery. I’ll see how I get on and report back.

The battery control doesn’t seem to be working for me. Any ideas how to diagnose this?

Oddly today the battery charged to 80%, then dropped to 75% and will not go any higher. A bit concerning.

Try the battery registers in the hybrid one. Like I say the plain solax was for an older inverter I never finished off.

Are you using Solax Batteries or PylonTech?

Yeh, I changed to using “solax_x1_hybrid_reduced.yaml” when I read what you said.

I’m using a Solax Battery. I switched the inverter “off and on” and now battery SoC is climbing again. Wierd.

@Sparkiemark

Have you tried increasing your baudrate as is discovered by @frimondo

  type: serial
  method: rtu
  port: /dev/ttyUSB0
  baudrate: 115200
  stopbits: 1
  bytesize: 8
  parity: N

@frimondo
If you look at the “solax_x1_hybrid_reduced.yaml” I just pushed to GitHub you will notice I have added a delay and resend the battery control registers. I sometimes found it would miss the message.

I’ll give it a go, cheers.

I have updated the naming on GitHub and included a brief description in the README.md

Still no luck. I’m very new to HA so learning as I go. Is there a way to see a response to the command it sends?

Right, I have just looked at your user manual for the X1-AC.
It looks like yours is the using the older “Remote Control” mode. Which I started out with an abandoned as mine the the Gen2 are different.

I can put a test together for you.
What is the main thing you are trying to achieve? Charge from the Grid?

Thanks Will. I’m trying to achieve the same as you really; charge my car without pulling power from the battery and also Force Charge the battery on command.

EDIT: The X1-AC does not use the older remote control function. It’s the same as the newer X1 Hybrid
Info left incase someone is trying to get an older inverter working.

How I believe the remote control function works as below. You need to enable remote control before you can control the discharge / gridcharge.

  - alias: Solax Remote Control
    trigger:
      platform: state
      entity_id: input_boolean.remote_control
      to: 'on'
    action:
    - service: modbus.write_register # Installer password
      data_template:
        hub: SolaX
        unit: '255'
        address: '0'
        value: '2014' # try 6868 if that doesn't work
    - service: modbus.write_register # Turn remote on
      data_template:
        hub: SolaX
        unit: '255'
        address: '31'
        value: '2'

To control the discharge power you do the following:

  - alias: Solax Output power
    trigger:
      platform: state
      entity_id: input_boolean.remote_control
      to: 'on'
    action:
    - service: modbus.write_register # Output power
      data_template:
        hub: SolaX
        unit: '255'
        address: '82'
        value: '2000' # 0 - 5000 w

To enable the grid charge you need to wake the invertup if there is no solar production, then enable grid charge. If it’s the middle of the day you can probably skip the wake up?

  - alias: Solax Gridcharge
    trigger:
      platform: state
      entity_id: input_boolean.grid_charge
      to: 'on'
    action:
    - service: modbus.write_register # Wake inverter up
      data_template:
        hub: SolaX
        unit: '255'
        address: '144'
        value: '1'
    - service: modbus.write_register # Enable Grid Charge
      data_template:
        hub: SolaX
        unit: '255'
        address: '146'
        value: '1'

To resume normal inverter mode do the following:

  - alias: Resume normal mode
    trigger:
      - platform: state
        entity_id: input_boolean.grid_charge
        to: 'off'
      - platform: state
        entity_id: input_boolean.remote_control
        to: 'off'
    action:
    - service: modbus.write_register # Resume normal mode
      data_template:
        hub: SolaX
        unit: '255'
        address: '31'
        value: '0'

I have a newer inverter so I can’t actually confirm this, but it is what I believe is the process.

I now have the following packages setup for the following Inverter / Battery combos:

SolaX X1-AC using SolaX battery and ModBus over RS485

SolaX X1 Hybrid Gen 2 with PylonTech battery

SolaX X1 Hybrid Gen 3 with SolaX battery

SolaX X3 Hybrid Gen 3 with SolaX battery

Next step is to attempt to turn the into a custom_component …

2 Likes

Happy to test the custom component.

Go down the HACS route for installation and management

@Sparkiemark

Did you get your inverter working?

While helping @frimondo I noticed the following:

Firstly do you have “Remote Control” enabled on your inverter?

Have a look at page 48 assuming I have the correct inverter?

Can you also check page 44 to see what the address is ( RS485 Addr: )

Might be of help.

No I haven’t gotten around to it yet. The Inverter I have is not the x10ac, but the x1-boost. 3.3td. I do not have the modbus options in the menu. So I can’t see what the actual slave adress is. Also don’t have the ‘remote control’ option in the menu. The rs485 communication possibility is mentioned in the manual though. Did’t recieve any anwsers from solax either.

You won’t get anything out of SolaX, they have no interest in supporting ModBus / monitoring.

The only thing I can suggest is double checking the wiring of the RJ45 plug for RS485.

Have tried a different tack, still using ‘Node Red’ - installed a WiFi dongle and left it as an access port. This has the API still operational so can now use HTTP to control the battery. The inverter is still connected to the internet via the physical LAN port so all cloud functions are still available.

Command example urls:
5.8.8.8: /?optType=ReadRealTimeData HTTP/1.1
5.8.8.8: /?optType=ReadSetData HTTP/1.1
5.8.8.8: /?optType=BatteryMinEnergy&BatteryMinEnergyValue={{{payload}}}& HTTP/1.1
5.8.8.8: /?optType=SolarChargerUseMode&SolarChargerUseModeValue={{{payload}}}& HTTP/1.1

Hi Will,

thanks for your work!! it was great follow it to reach a total control of my system. I have a hybrid x1 inverter with a triple power batt. Only one question, is it not possible read the work mode from the modbus map? I can write in the register ‘31’ but no read. Is there any way to do it?

thanks,