Kommentare: Fronius & BYD Akku über Modbus steuern, Home Assistant
Fragen / Kommentare zu Fronius & BYD Akku über Modbus steuern, Home Assistant
(neueste zuerst)[5 weitere Kommentare in English]
Hallo, auch von mir erstmal danke für die tolle und gut verständliche Anleitung. Bei mir scheint nach Anpassung der Startadresse auf 40355 (nach Excel Gen24_Primo_Symo_Inverter_Register_Map_Float_storage.xlsx) auch das Auslesen der Werte zu klappen. Leider funktioniert das Schreiben bzw. Ausführen der Skripte nicht. Sobald ich auf dem Dashboard auf "Ausführen" egal welchem Skript klicke, ändert sich "nichts", also die gewünschte Umsetzung kommt nicht am Wechselrichter an und auch die angezeigten Werte ändern sich nicht. Was mir aufgefallen ist, ist alle Werte auf dem Dashboard beim Draufklicken als Aktualisierungsdatum immer den Zeitpunkt des letzten HA Restarts anzeigen. Ist das normal oder gibt es evtl. ein Kommunikationsproblem ? Hat jemand eine Idee wie ich hier weiter debuggen kann ? Danke und Gruß Philipp
Hallo Bernhard, vielen Dank für diesen Artikel. Habe nun einen Fronius Verto Plus WR und eine Fronius Reserva Batterie. Ich habe auf gut Glück mal versucht ob deine Anleitung auch für diese Kombination funktioniert. Nachdem ich nun alle Skripte angelegt habe, sehe ich aber daß der Zustand der Sensoren InWRte und OutWEte keine Prozentwerte anzugeben scheint (aktuelle Werte -122.92 und -207.11 .. diese schwanken aber immer wieder). Nun traue ich mich die Skripte nicht auszuführen, weil ich ja nicht weiß welche Register ich überschreiben werde. 1) Weißt du ob die neue Verto-Serie die gleichen Registernummern anbietet wie Gen24? 2) Ist es egal ob es ein BYD oder ein Fronius Reserva Speicher ist, da der Wechselrichter einen Wrapper für die Batterie macht also entsprechend für den Speicher richtig mappt? Danke und viele Grüße!
Woher bekommt der "Helfer Batterie mit einer bestimmten Leistung entladen (erzwingen)" den Wert mit welcher Leistung er entladen darf? Zwangsladung aus dem Netz, Ladung und Entladung Sperren und das Zurücksetzen funktionieren einwandfrei. Die Zwangsentladung macht aber einfach nichts.
Dazu wird in dem Beispiel der Wert von input_number.charging_power verwendet.
Beitrag erstellt von Bernhard
Das zwangsweise Laden hat bei mir bisher auch ohne diesen Helfer einwandfrei einfach mit der maximal möglichen Leistung funktioniert. Ich habe den Helfer jetzt erstellt, greift der dort eingestellte Wert dann sowohl beim zwangsweisen Laden und Entladen? Oder wird aus dem Netz automatisch immer mit der vollen möglichen Leistung geladen? Kann ich als obere und untere Grenze auch andere Werte eingeben? Mein Akku schafft auch gut 8 KW Ent-/Ladeleistung.
Beitrag erstellt von anonym
Hallo Fangemeinde, ich habe das Batterie Management Skript wie angegeben eingefügt es kommt jedoch die Meldung: Extra keys not allowed @data ‘trigger‘ Bin schon am verzweifeln
Hab die Automation gerade selbst nochmal kopiert und getestet. Ev. sind auch die Entitäten bei dir anders? Um den Fehler einzuschränken, könntest du mal versuchen Teile des Skripts zu entfernen: Trigger oder bedingte Aktion: bis der Fehler nicht mehr auftaucht ..
Beitrag erstellt von Bernhard
Danke für die Mühe, ich „Idiot“ hab es vorher nicht in automation Script geschrieben sondern ins normale Script Jetz funktioniert es wie angegeben Vielen Dank für die Informationen welche äußerst hilfreich sind und zudem eine Menge Zeit ersparen Gruß SG aus Austria
Beitrag erstellt von anonym
Hallo zusammen, erstmal danke für die tolle Ausarbeitung und Dokumentation. Eine Frage hätte ich vorab. Muss man, damit das funktioniert am GEN24 im Bereich Eigenverbrauchs-Optimierung von "Automatisch" auf "Manuell" umstellen? LG Roman
Hallo Roman, nein, die Eigenverbrauchsoptimierung kann auf automatisch bleiben. Wird beispielsweise die untere Ladegrenze (SOC) geändert, richtet sich die Eigenverbrauchsoptimierung nach dem geänderten Wert.
Beitrag erstellt von Bernhard
Hi,
ich habe ein Problem mit der Umsetzung.
Das script Force Charging habe ich so angelegt:
alias: Force charging
sequence:
- data:
slave: 1
address: 40348
value: 2
hub: gen24
action: modbus.write_register
- data:
address: 40355
slave: 1
hub: gen24
value: "{{ 65536 - (states('input_number.charging_power')|int(0) / states('sensor.wchamax')|int(1) * 10000)|int }}"
action: modbus.write_register
- data:
address: 40356
slave: 1
hub: gen24
value: "{{ (states('input_number.charging_power')|int(0) / states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int }}"
action: modbus.write_register
- data:
slave: 1
address: 40350
value: 9900
hub: gen24
action: modbus.write_register
mode: single
icon: mdi:battery-charging
Sobald ich gespeichert habe, sieht das beim nächsten öffnen dann so aus:
alias: Force charging
sequence:
- data:
slave: 1
address: 40348
value: 2
hub: gen24
action: modbus.write_register
- data:
address: 40355
slave: 1
hub: gen24
value: >-
{{ 65536 - (states('input_number.charging_power')|int(0) /
states('sensor.wchamax')|int(1) * 10000)|int }}
action: modbus.write_register
- data:
address: 40356
slave: 1
hub: gen24
value: >-
{{ (states('input_number.charging_power')|int(0) /
states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000)
| int }}
action: modbus.write_register
- data:
slave: 1
address: 40350
value: 9900
hub: gen24
action: modbus.write_register
mode: single
icon: mdi:battery-charging
Ich bekomme immer beim ausfführen:
Fehler: value must be at least 0 @ data['value'][0]
Was mache ich falsch?
Vielen Dank für das script!
Noch eine Info hierzu: Wenn ich das script "Force charging" starte kommt im trace der Fehler "value must be at least 0 @ data['value'][0]" Der value Wert zeigt hier "-15934464" Ich denke das kann nicht stimmen?! Die anderen scripte, wie z.b. "Reset charging 30%" funktionieren. Hier wird auch geladen. Auch habe ich nicht so richtig verstanden, was das script " Charge limit" tut?
Beitrag erstellt von FlyByWire
Den Input-Helfer (Nummer) hast du angelegt: input_number.charging_power ? Habs nochmal kontrolliert: Mein Script schaut identisch aus und wenn ich den Helfer auf 500 stelle, lädt mein Akku mit 500 Watt. Charge Limit sollte die maximale Ladeleistung limitieren .. Also, wenn der Input-Helfer auf 500 wird die Ladeleistung auf 500 Watt limitiert.
Beitrag erstellt von Bernhard
Hallo Bernhard,
ja, den Input helper habe ich angelegt. Wenn ich chargin_power verändere, änder sich auch der Wert von BYD.InWRte. Denke das funktioniert soweit?! Leider funktioniert das script Force charging aber weiterhin nicht. Bekomme immer die selbe Fehlermeldung für diese Sequenz:
- data:
address: 40355
slave: 1
hub: gen24
value: >-
{{ 65536 - (states('input_number.charging_power')|int(0) /
states('sensor.wchamax')|int(1) * 10000)|int }}
action: modbus.write_register
Fehler: value must be at least 0 @ data['value'][0]
Wie sieht denn der value Wert bei Dir im trace von dem script aus?Beitrag erstellt von FlyByWire
Moin, Ich war eben auch am basteln und stand vor der gleichen Herausforderung. Lösung bei mir: Der Sensor für wchamax heißt bei mir im HA „sensor.storage_wchamax“ (im Skript steht sensor.wchamax). Schau mal in deinen Entitäten, wie er bei dir heißt und ändere dies manuell im Skript ab.
Beitrag erstellt von anonym
Erstmal vielen Dank für die geniale Anleitung, ich hätte aber noch eine Frage zu dem Input-Helfer für die Ladeleistung. Und zwar wie man auf die in der Anleitung verwendeten Werte 500 bis 5000 kommt, meines Verständnisses nach müsste ja am Ende ein Prozentwert übergeben werden? Was genau wird denn mit {{ (states('input_number.charging_power')|int(0) / states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int }} ausgerechnet, wenn ich den Input-Helfer wie in der Anleitung erstelle und dann z.B. 5000 einstelle? Bei mir wird dann das Register, wenn ich es richtig sehe, nämlich auf 0 gestellt.
Der Template-Sensor rechnet Prozent aus: Ladeleistung / Akku-Kapazität * 10000 z.B. bei einer Akkukapazität von 10240Wh und einer Ladeleistung von 500Watt: 10240/500 * 10000 = 488 Sollte 4,88 % bedeuten.
Beitrag erstellt von Bernhard
Hallo, vielen Dank für die Anleitung! Fast alles hat wie beschrieben funktioniert. Ich habe jedoch das Problem, dass beim Aktivieren des Scripts "FastCharging" mein Akku mit voller Leistung geladen wird. Wenn ich einen Wert über input_number setze und dann das Script "Limit Charging" ausführe, passiert leider nichts. Hat vielleicht jemand eine Idee, woran das liegen könnte? Viele Grüße! Andre
Hey, ich habe leider das gleiche Problem. Folgendes ist mir aufgefallen: Wenn der Akku mittels Skript erzwungen geladen wird und ich danach das Skript "Charge-limit" ausführe, wird egal welche Zahl unter input_number.charging_power erfasst war die Ladeleistung auf 500 w gestellt. Wenn ich das Skript "Charge-limit" als erstes ausführe und danach erst "Force charging". Klappt es manchmal (z. B. bei Eingabe von 2000) und manchmal nicht (z. B. bei Eingabe von 3570). Mache ich/wir (gruß an Andre) etwas falsch? Gibts hier eine Lösung? LG Robert
Beitrag erstellt von anonym
Hallo Andre, Hallo Robert, hilft das Ausführen von "Reset Charging" vor dem Start von z.B. Force Charging oder Charge Limit?
Beitrag erstellt von Bernhard
Hallo, habe es eben probiert. 1. Reset charging Skript 2. 1500w bei Input……. 3. charge-Limit Skript 4. force charging 5. Abbruch, da die Ladeleistung auf über 2kw gestiegen ist 6. nochmaliger Test, Ladeleistung steigt aufs Maximum an Ich glaube dass der Akku immer mit voller Leistung lädt, egal was ich eingebe. Wenn ich das Skript charge-Limit nach force charging ausführe, wird wie gesagt immer auf 0,5kw limitiert - egal was ich unter Input….. eingegeben habe. Hast du noch einen Tipp? LG Robert
Beitrag erstellt von anonym
Nach dem Reset sollte nur ein Script für die jeweilige Aktion ausgeführt werden. Lass mal 3 weg, force charge sollte eigenständig die 1500 von Input verwenden.
Beitrag erstellt von Bernhard
Hallo Bernhard, danke für deine Hilfe. Leider klappt dass auch nicht, habe es wie oben beschrieben getestet, jedoch wie vorgeschlagen ohne dem charge-Limit Skript. Getestet wurde zb 1100 als Input, die Leistung stieg jedoch wieder weiter an, habe dann bei 2800 wieder abgebrochen. Was kann ich denn kontrollieren um auf einen Fehler auf meiner Seite zu kommen? Der battery reading Sensor meldet (meiner Meinung nach) korrekte Werte zb im Hinblick auf die Speichergröße. Lg Robert
Beitrag erstellt von anonym
Hallo Robert, sorry da hätte ich schon früher nochmal genauer testen sollen. Ich habe das Template "alias: Force charging" anhand der Dokumentation nochmal neu aufgebaut und hier aktualisiert: Eventuell kannst du damit nochmal testen, ob es jetzt funktioniert. Wäre super, wenn du kurz ein Feedback geben könntest, ob es mit dem neuen Template klappt?
Beitrag erstellt von Bernhard
Hallo Bernhard,
danke für deine Hilfe/Arbeit! :)
Die ersten paar Tests waren alle erfolgreich. Ich denke also dass es nun funktioniert.
Ablauf:
1. Skript "Reset charging" ausführen
2. Gewünschte Leistung bei "input_number.charging_power" erfassen
3. Skript "Force charging" (in aktualisierter Version) ausführen
4. Klappt!
Ich habe auf Basis deiner Änderungen eine zweite Version des Skripts "Force charging erstellt". Dazu war noch die Anlage eines weiteren Sensors (sensor.wchamax) nötig. Diesen habe ich mit Infos aus der verlinkten Github Seite erstellt. -> "{{ states('sensor.reading_battery_settings').split(',')[0]|int(0) }}"
Sollte so passen denke ich? Wenn ja, solltest du es in der Anleitung ergänzen, da ohne diesen Sensor das Skript bei mir nicht funktioniert hat.
Wofür ist dann das Skript "Charge-limit" eigentlich vorgesehen?
Um die Leistung (Ladung und Entladung?) generell zu limitieren? Kann dadurch bspw. die Ladung des Akkus durch die PV Anlage oder aber die Entladeleistung beschränkt werden?
Nochmals danke für diese Anleitung und deine Hilfe!
LG RobertBeitrag erstellt von anonym
All real registers +1 except 40345, means: 40349 StorCtl_Mod, 40356 OutWRte 40357 InWRte From fronius doc: 40349 40349 1 RW 0x03 0x06 0x10 StorCtl_Mod 40356 40356 1 RW 0x03 0x06 0x10 OutWRte 40357 40357 1 RW 0x03 0x06 0x10 InWRte Fault comes from HA 40345 declaration i guess. Wbr,
Danke für die super Anleitung ich möchte gerne das Register ChaGriSet auslesen was muss ich dazu in den Template Sensor für einen Code schreiben (bin leider nicht der Programmierer), bei den andren konnte ich es mir durch die Beispielcodes zusammenreimen.
Ich hätte diesen Ansatz getroffen:
{% set ChaGriSet_mod= states('sensor.reading_battery_settings').split(',')[15] | int%}
{{ "NETZ AUS" if ChaGriSet_mod == 0 else
"NETZ EIN" if ChaGriSet_mod == 1 else
else "Fehler" }}
Ich bekomme jedoch folgende Anzeige in der Vorschau:
Dieses Template überwacht keine Ereignisse und wird nicht automatisch aktualisiert.
Danke für deine Unterstützung
Hallo,
auf Anhieb sehe ich 2mal else: am Ende der vorletzten und zu Beginn der letzten Zeile.
Ansonsten kannst dich mal schrittweise nähern indem du mal nur {{ChaGriSet_mod}} ausgibts und die Ausgabe nach und nach erweiterst.Beitrag erstellt von Bernhard
Servus, vielen lieben Dank für die rasche Rückmeldung!
Du hattest natürlich recht mit dem else richtig schaut das Yaml so aus:
{% set ChaGriSet_mod= states('sensor.reading_battery_settings').split(',')[15] | int%}
{{ "Netzladen erlaubt" if ChaGriSet_mod == 0 else
"Netzladen nicht erlaubt" if ChaGriSet_mod == 1
else "FEHLER" }}
Schönen Tag noch, sonnige Grüße aus ÖsterreichBeitrag erstellt von anonym
Hallo! Danke für die tolle Anleitung. Funktioniert, jedoch wenn ich den Akku aus dem Netz laden möchte, lädt der Akku nur mit deutlich unter 1kW. Gesetzt habe ich aber 40356 = 10000 (also 100%). Ist noch ein anderes Limit einzustellen?
Hallo Philipp, meinst du mit dem Anpassen der Startadresse die Modbus-Konfiguration in der configuration.yaml-Datei von Home Assistant?: modbus: - type: tcp ... sensors: - name: reading_battery_settings slave: 1 count: 24 address: 40345 ... Sollte dein Setup mit 40355 anstelle von 40345 funktionieren, schätze ich müssen für das Ausführen und Schreiben wahrscheinlich auch angepasste Adressen verwendet werden? Eventuell hat das was mit den Komponenten in der Gerätekonfiguration zu tun? Wie schaut dein Setup dazu aus? Weicht das von meinem Setup ab? Ich habe im Menü Gerätekonfiguration / Komponenten an erster Stelle den PV Generator, dann als Primärzähler den Fronius Smart Meter (RTU, Modbus Adresse: 1) und am Ende die Batterie: BYD Premium HVS/M Menü Kommunikation / Modbus: Modbus RTU-Schnittstelle 0: Master, Modbus RTU-Schnittstelle 1: Master und Slave als modbus TCP Port: 502, SunSpec: int+SF und Zähleradresse: 200.Beitrag erstellt von Bernhard
Beitrag erstellt von Philipp
Beitrag erstellt von anonym
Beitrag erstellt von Lobotschobi
Beitrag erstellt von anonym
Beitrag erstellt von Bernhard