Fronius Symo Gen 24 plus Batteries

Hi all,

Apparently the node_red/Homeassistant modbus write and flex_write are only allowing for positive (uint) values during the write. I checked the Fronius examples in their documentation (like example 6) and that worked fine when using QModMaster as client. So, the documentation is correct.
Reported a bug for the node red modbus. https://github.com/BiancoRoyal/node-red-contrib-modbus/issues/340

Cheers, Rick

EDIT: Some findings but one remaining question.

In[Out]WRte are actually just percentages to apply to the WChaMax value, register 40356, which is readonly and magically set to some value on my inverter (it’s 7680 W for me and matches my battery’s capacity but that might be coincidence).
So if you want to (dis)charge a specific amount of power you have to do the math first and set In[Out]WRte to <intended value> / WChaMax * 100 * (10^InOutWRteSF).
You need to set both, OutWRte AND InWRte, to the same value (but one of them * (-1)) to instruct a fixed value instead of allowing for a window, and set StorCtlMode to 3 (= bit pattern 11 to have both limits apply).
Attention, even for inverters in float mode (which I have set now), there is a scale factor InOutWRteSF register 40379 that you have to take into account, too. It’s readonly and showing -2 for me.
If you set InWRte or OutWRte to say 200 (%), then it’s overridden to 2 (%) after some seconds (possibly right away but it takes some seconds to read it back again).

I still wonder which register to read to obtain the current (dis)charge power value from/to battery, to validate if what I am instructing the inverter to do is actually happening.
According to your linked post reading_inverter_multiple_raw is reading 88 registers starting @40265.
Comments say #15 and #19 are battery charge+discharge, so minding offset, that would be registers 40281 and 40285, correct ?
40285 according to Fronius docs is MPPT1 Power which is PV input. Fronius says MPPT2 is for storage. That would mean to use 40305, wouldn’t it ?
I have come across Fronius Hybrid with Modbus TCP - loxwiki en - LoxWiki essentially saying there isn’t any such register to directly read and explaining how to compute the charge value, also using 2_DCW. But the values that 2_DCW shows don’t seem to be right. The value for the last string 4_DCW is a possible match. But it’s pure guessing of mine, I have not seen any mentioning in Fronius docs.

Greate thread and thanks @Klangen82 for the Node-Red flows. This acutally allowed me to setup basic battery management in a glance after ModBus had been activated yesterday evening in my Gen24 Inverter.

However, I am searching a possibility to set the Own Consumption Optimisation (Eigenverbrauchs-Optimierung, see screenshot) via Home Assistant/ModBus:

I did not find anything about that in Fronius’ Modbus documentation, neither for the Smart Meter nor for the Inverter, so I assume it can only be changed via the Inverter’s WebInterface - or did I miss something? Thanks!

I did not find anything in the modbus register about controlling this either, sorry that I don’t know the answer how to do this.

Hey guys,

my goal is to disabled battery discharge if I want to load my car by grid. I am using Fronius Symo Gen24 Plus 8.0 and Byd HVS 10.2. My modbus is on int + SF.

I thought about setting “SoC Minimum” to 99 or 100 for car grid charge and if that is finished putting it back to 5.

With the following configuration it works, so the overview page tells that “minimum SoC is reached”. The only thing that confuses me is that the setting within Fronius is not showing it. It stays with old value. Why is that the case?

modbus:
- type: tcp
  host: 192.168.178.5
  port: 502
  name: gen24
  sensors:
    - name: reading_battery_settings
      slave: 1
      count: 24
      address: 40345
      scan_interval: 5
      data_type: custom
      structure: ">10H2h4H8h"

service: modbus.write_register
data:
  slave: 1
  address: 40350
  value: 500
  hub: gen24

service: modbus.write_register
data:
  slave: 1
  address: 40350
  value: 9900
  hub: gen24
1 Like

Solved it with:

#disable battery usage
  - service: modbus.write_register
    data:
      slave: 1
      address: 40348
      value: 2
      hub: gen24
  - service: modbus.write_register
    data:
      slave: 1
      address: 40355
      value: 0
      hub: gen24

#enable battery usage
  - service: modbus.write_register
    data:
      slave: 1
      address: 40355
      value: 10000
      hub: gen24
  - service: modbus.write_register
    data:
      slave: 1
      address: 40348
      value: 0
      hub: gen24
2 Likes

@dm82m I can’t get the same configuration to work on Symo GEN24 10.0 Plus with BYD 11 kWh. It changes the values, and I have contact with it for read/write, but nothing happens - it just keeps on charging even if I change the values you posted. Did you use some debug tool?

Also does anyone know how to reset the Modbus to default values?

Thank you in advance!

just restart the fronius, this will reset all modbus settings to default.

I have a Symo Gen24 10.0 Plus with BYD 10.2. Not used any debug tool. It just showed me a message on the web interface of the Symo within the battery. Cant test it currently as my battery reached minsoc…

1 Like

As you don’t use node-red I can show you what I do to charge, hope it’s clear on the picture. To charge I send on value 4603 to 40366 wait 500ms then send value 60933 to 40365 wait 500ms send value 2 to 40358.


image

If you want normal operation then you send value 0 to 40358

1 Like

Aah, ok, that’s great info!

How do I force the inverter to be on 24/7 then? It seems like it goes in to “Standby” or something and then restarts during night. Yesterday when I tried, it took like 3 minutes for it to boot up, and before that it said “Off” here:

Strange and I don’t know, mine is on 24/7…

The inverter will enter a standby phase when there is no solar power and no battery power available, and go into MPPT mode when there’s solar. Why do you need to keep it “on”?

This is now at 11pm.

I just thought it needed to be “running” since it didn’t seem I could read Modbus values otherwise. But I was very tired yesterday (2AM) so I might have been wrong.

Don’t need to restart the inverter. Just disable Modbus in Settings and re-enable. This also resets all values to default.

1 Like

@Klangen82

Your work is lovely!
In theory it should work exactly the same on any SunSpec compliant inverter setup

It worked almost without any modifications (different sizes on battery, inverter and IP).
For some reason it sets Soc to 40% and I’m currently struggling to figure out why, I cant see that you change it anywhere in the flow?

Thanks! Do you mean that the battery only get’s charged to 40% and not 100%? It this is the case then you need to alter the msg.outwrte and msg.inwrte so it fit’s your battery size. I don’t remember top on my mind right now as this has been working for me for a while now. But I needed to test different values as it was not super clear to me how it worked so please experiment a bit. As you can see the values are opposite eachother for charge/discharge.

That’s really nice, I just copied your Node-Red to my instance, updated the IP address of my inverter, and it works :smile:

The next step is to control the inverter dependent on the energy tariffs. Did you make this too, in Node red?

I have done a node-red flow where I use https://powersaver.no/ to charge when the price is low and then sell if the price is higher. So I have a sensor checking the buy price compared to the sell price and it it makes sense then I sell.

It’s not the optimal flow so I’m thinking of changing it as I would like to have the full 48h and not only 24h as the power saver node gives me. Also I would like to take into the calculation what my house is consuming depending on whether condition for the upcoming 48h. But I have not done this yet as it’s not that easy so if someone have done this I would be happy to lend it :slight_smile:

ps.
The flow is not just something I can share in it’s current sate, need to clean it up. I have some checking if my EV is charging in the flow etc. But when I find the time I will share if you like to, if you don’t figure out how to use power saver.

@enoch85 see if this will help you automate your car charging

I’m using this now, just got finished actually:

So the buy price is set as an (automatic) variable, then I calculate different price leveles where I think it’s a good idea to sell, which in turn then automatically sell on different levels. Also the car charging is done by an integration automatically. In other words, I think I just made my own “powersaver.no”. :slight_smile:

I’m feeling pretty pleased with everything now.

3 Likes