J1m Since I changed to GivTCP beta I had an issue where despite the timed battery charge being set around 50% the batteries charged to 100% on Saturday and Sunday night.
I don't know anything about GivTCP, but one thing I encountered when playing with api scripts to control charging: there are two different registers that configure the charge limit. (Depending on which version of the inverter you have.)
In the API list, there's
77 AC Charge Upper % Limit : Value must be between 0 and 100
83 Restart Inverter : Value can only be 100
96 Pause Battery : Value must be one of: 0, 1, 2, 3 (Not Paused, Pause Charge, Pause Discharge, Pause Charge & Discharge)
101 AC Charge 1 Upper SOC % Limit : Value must be between 0 and 100
According to my notes, the app/portal set #77, but my gen-3 inverter actually uses #101. So my script copies the value from #77 to #101 (since it's convenient to use the app).
The corresponding modbus stuff is probably
https://github.com/britkat1980/giv_tcp/blob/90f78b32060b7808a2a055cf29993219bf9d8f66/GivTCP/givenergy_modbus_async/model/inverter.py#L202 defines HR(111), and then line 244 defines HR(242) which looks like the slot-specific limit. ie they must have screwed up when they added support for multiple charging slots.
Oh - there's another one on line 285 (HR313).
- oh, sorry, I think 'battery_charge_limit' is the charging power, not the target SoC. But there's also 'charge_target_soc' in HR116
I can't comment on which registers the higher-level GivTCP code actually uses.
https://github.com/britkat1980/giv_tcp/blob/90f78b32060b7808a2a055cf29993219bf9d8f66/GivTCP/givenergy_modbus_async/client/commands.py#L200 might imply it's register 111 ?