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
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!
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?
@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?
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…
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.
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:
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”?
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.
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.
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
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.
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”.