Ja das ist gruselig, allerdings, und das ist ziemlich normal, gibt es halt viele Lösungen die sich nicht wirklich an der Spezifikation orientieren, sondern diese sozusagen als Basis nehmen um es dann einfach für die jeweils eigenen Belange zu implementieren.
Und das Resultat ist dann meistens das es natürlich für eine absolut identische Konfiguration dann funktioniert, aber sobald etwas abweicht klappt es dann nicht mehr.
Bestes Bespiel (und daran kranken auch Dinge wie die sunspec Integration.
Ein outWRte hat einen Wert von -100 bis +100 denkt man.
Richtig ist: Defines maximum Discharge rate. If not used than the default is 100. See WChaMax for details.
Schaue ich nun bei WChaMax steht dort:
Setpoint for maximum charge.
Mit dem Hinweis
Reference Value for maximu Charge and Discharge.
Aber wichtiger ist der Zusatz
Every rate between this tow limits is allowed. The inverter is not fully capable of translerring power as reported by this refenrece value.
Und das ist halt ein SEHR WICHTIGER Satz der gerne überlesen wird.
Sprich genau das meint nämlich das eine BYD HVS 10.2 eben mit 10240W geladen oder entladen werden kann, je nach Fronius Wechselrichter sind aber mit nichten die Grenzen die er tatsächlich NUR kann.
Und das bedeutet in Folge das der Fronius leider bei WChaMax die Angabe der BYD stumpf übernimmt die da besagt 100% Ladeleistung sind 10240W während es bein einem Gen24 10.0 eben nur 9100W sind.
Es geht aber natürlich noch weiter. Divserse Register/Adressen arbeiten mit einem sogenannten SF (Scale Factor) das ist auch gut so, in der Regel sind diese aber in den meisten Fällen fix.
Da machen es sich die Leute einfach und sagen, ok wenn ein Wert -100 bis +100 sein kann und mit einem Scaliing Faktor von -2 zusammenwirkt, warum nicht gleich -10000 bis +10000 benutzen. Ja kann man machen, man kann es aber auch richtig implementieren und dann sagen die -100 sind mein inWRte (raw) mit einem scaliing_factor InOutWRte_SF und das ergibt dann halt den finalen inWRte.
Hat den Vorteil das man sich als inWRte den tatsächlichen Wert anzeigen lassen kann und dann auch mit Werten die dieser haben darf Werte zurückschreiben kann. Und eben nicht glaubt das der inWRte sozusagen um den Faktor 100 größer ist um sich dann beim zurückschreiben von geändertern Werten zu wundern warum es nicht klappt und e einen modbus Fehler gibt. Kunststück wenn der Wert komplett ausserhalb der zulässigen Range liegt.
Ich glaub aber eins meiner Beispiele war noch flasch da ist in der Hektik nicht dran gedacht haben das man beim inWRte und outWRte immer daran denken muss das falls
((storctl_mod=3) AND ((-1) * inWRte > outWRte)) TRUE ist das Leistungsfenster das man versucht hat zu beschreiben ungültig ist.
Und das ist etwas bei dem home assistant und dessen modbus Integration schlichtweg ne Offenbarung ist. Ich kann zwart ein modbus.write_register machen, aber es bietet leider direkt keine Möglichkeit den Responsecode auszuwerten, sprich ob der Befehl nicht nur abgesetzt sondern auch als gültig angenommen wurde oder nicht. Und das ist fatal.
Hier mal ein Schritt der dich in die richtige Richtung bringen sollte.
Du kannst über
Einstellungen> Entwickleroptionen>Aktionen ja modbus writes losjagen.
Also z.B. so hier
der Name bei HUB ist der Name den du deinem Wechselrichter in home assistant modbus Integration verpasst hasdt. Sprich darüber holt er sich die IP. Das was hier Server genannt wird ist in modbus Sprache der Slave.
Kriegt man schnell raus wenn man mal auf den blauen Text “zum YAML Modus” drückt denn dann sieht man folgendes:
action: modbus.write_register
data:
hub: gen24plus
address: 40348
slave: 1
value: 3
jetzt kannst du mal folgendes probieren.
storclr_mod (40348) auf 3
outWRte (40355) auf 65000
inWRte (40356) auf 10000
dann auf Aktion ausführen klicken und im solarweb oder in der Fronius Integration (2tes Fenster) die Lade- bzw. Entladeleistung beobachten
ditto dann mal
storctr_mod auf 3
outWRte auf 64000
inWRte auf 10000
wieder auf Aktion ausführen klicken
und dann hangelst du dich mal runter bis der Wert von outWRte so klein wird das entweder
a) die Aktion nicht mehr funktioniert und etwas ROT angezeigt wird oder
b) sich gar keine Änderung mehr zeigt
Dann weisst du das du die maximale (in deiner jetzigen Denke -100% erreicht hast).
Sprich mehr kann der Fronius dann nicht oder die BYD nicht, eins von beidem.
Wenn du Wert hat sagen wir mal z.B. es sind 60767 dann kennst du auch den Wert am anderen Ende, also dort wo zu aktuell z.B. beim inWRte 10000 benutzt hast.
Denn 60767 - 65535 = -4768 sprich da der minimale Wert als -4768 ist (nur als 60767 für modbus positiv dargestellt weil modbus keine negativen Zahlen kann) also die -4768 denn -100% Laderate entsprechend ist die positive maximale Laderate ebenfalls 4768.
Sprich die Annahme wie es auch Fronius bis auf den Hinweis erklärt das eine Laderate von -100% bis +100% geht sagt aufgrund des unplausiblen WChaMax leider wenig aus.
Denn in absoluten Werte ist das dann halt von -4768 bis +4768
Das ist ein sehr wichtiger Wert den du dir so recht einfach ermitteln kannst, denn wenn du den erstmal kennst bist du eigentlich am Ziel.
Sprich du kennst den negativen outWRte Wert und du kennst die daraus resultierende Ladeleistung deiner Batterie.
Ganz wichtig … sowas ermittelt man NACH SONNENUNTERGANG und VOR SONNENAUFGANG. Warum?
Weil gemäß der Fronius Doku der inWRte ja immer größer sein muss als der outWRte *-1
Was wiederum folgendes bedeutet: ein inWRte > 0 bedeutet der Speicher lädt von der PV.
Sollte also während du das laden vom Netz testen willst auch etwas vom Dach kommen wird das logischerweise addiert und die ermittelte Ladeleistung passt nicht mehr zum outWRte Wert. 
Mal ne getürkte EXCEL
A B C D E F G H I J K L
1 Laderate % -100 -80 -60 -40 -20 0 20 40 60 80 100
2 Ladeleistung W Y
3 outWRte (neg.) X
4 outWRte
Trag dir bei X den ermittelten maximalen Wert des outWRte ein an dem die Ladeleistung die größte war. Sagen wir mal es wären 60767. Aber nicht den Wert sondern Wert-65535
Das ergibt einen negativen Wert, logo. in der Spalten bei L1 kannst du den direkt positiv eintragen. Der Rest ist ja klar, den Wert von $B$3/$B$1C1 ist dann der von Zelle C3 und so weiter.
Bei Y trägst du die Ladeleistung ein die du gesehen hast
Und ditto C2 ist dann logischerweise $B$2/$B$1C1 und so weiter
In den Zellen B4 bis F4 nimmst du einfach immer in Wert darüber + 65535
In den Zellen G4 bis L4 sind die Werte von G3 bis L3 die richtigen, sind ja schon positiv.
Du solltest dann eine Excel haben in der du die outWRte (und logischerweise auch die inWRte) Werte kennst die -100% oder +100% Ladeleistung bedeuten und auch die Ladeleistungen zu diesen einzelnen %-Punkten.
Bei mir sieht das wie gesagt wie folgt aus: 2*BYD HVS10.2 an Gen24 10.0
Laderate % -100 -80 -60 -40 -20 0 20 40 60 80 100
Ladeleistung W 9765 7812 5859 3906 1953 0 -1953 -3906 -5859 -7812 -9765
outWRte neg. -4768 -3814 -2861 -1907 -954 0 954 1907 2861 3814 4768
outWRte 60767 61721 62674 63628 64581 0 954 1907 2861 3814 4768
Hat weder mit der lustigen Excel und deren Werten zu tun die man im Netz findet, passt auch nicht du den Template formeln von libenet aber dafür passt es zu meiner Konstellation und ich kann laden und entladen von 0W bis zum maximalen was die Kombination aus Speicher und Wechselrichter bietet, und nix anderes wollte ich ja letztendlich 
Und ja die Werte können bei dir deutlich anders aussehen, keine Ahnung was du genau an Hardware hast.
Und a propo Doku und am liebsten ne präzise.
Kannst dich ja mal auf die Suche nach einer modbus Doku für den Fronius Ohmpiloten machen. Hahaha .. die gibts nirgends, denn Fronius hats nicht dokumentiert. Aber der Ohmpilot hat einen eigenen modbus Server und man kann du endlose Nächte in denen man probiert und nochmals probiert und halbrichtige Infos aus dem Netz durchstöbert dann am Ende zumindest mal 60-70% rausfinden nach dem Motto Versuch macht Klug. Da ist wirklich gruselig.
Denn speziell solche Dinge wie “scale_factoren” rauszufinden oder überhaupt die Frage ob es sich um Werte handelt die in einer Adresse oder in mehreren stehen … brrrrrrr.
Wie sagt man immer so schön “einmal mit Profis arbeiten …” das hätte was.