Kommentare: Fronius und BYD Akku über Modbus steuern

 

Fragen / Kommentare zu Fronius und BYD Akku über Modbus steuern

(neueste zuerst)


✍solarstation
14.02.2024 06:25
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,

✍Markus
06.02.2024 13:07
Hallo Bernhard,

vielen Dank für den tollen Artikel! Ich habe eine ganz ähnliche Situation, also die Module liefern mehr Spitzenleistung als der WR (Fronius Gen24) verarbeiten kann. Dazu kommt, dass ich weniger Leistung ins Netz liefern darf, als der WR max. produzieren kann. Deshalb möchte ich den WR bei erwartetem Überschuss (Wetter-API) automatisch so konfigurieren, dass die Batterie möglichst geleert wird, es sei denn, der WR läuft in die Limitierung und müsste die Leistung drosseln. In dem Fall soll die überschüssige Leistung in die Batterie geladen werden. Dieses Verhalten lässt sich erreichen, indem in der GUI unter "Battery Management -> Time-dependent battery control" die "Min. discharge power" auf einen positiven Wert eingestellt wird, ansonsten aber keine max. charge/discharge power konfiguriert wird. Das Problem scheint nun zu sein, dass dieser Wert nicht per API (Solar API oder Mosbus) konfigurierbar ist, sondern lediglich per GUI. Per Modbus scheint lediglich die max. charge/discharge power (positiv oder negativ) konfigurierbar zu sein, über welche der gewünschten Effekt aber nicht erreichbar ist.

Die Alternative wäre, Werte fortlaufend anzupassen, aber auch das ist nur heuristisch möglich, weil es ja per API gar nicht ohne Weiteres erkennbar ist, ob die Leistung aktuell gedrosselt wird bzw. wie hoch die Leistung ohne Drosselung wäre.

Liege ich mit meinen Annahmen richtig, oder übersehe ich etwas?

Liebe Grüße
Markus
✍Bernhard
gepostet am 06.02.2024 16:50
Hallo Markus, 

was über Modbus möglich ist, ist die Batterie zum Entladen mit einer bestimmten Entladeleistung zu zwingen. Ich hatte dazu in Home Assistant bereits ein Script und dieses hier hinzugefügt: Batterie mit einer bestimmten Leistung entladen (erzwingen).  
Ich schätze, der Wechselrichter müsste eine eingestellte Einspeisebegrenzung respektieren und dann das Entladen aussetzen? Habe das aber so noch nicht getestet.

Beitrag erstellt von Bernhard
✍Markus
gepostet am 13.02.2024 16:31
Hallo Bernhard,

danke für die Rückmeldung! Sollte in der Nachricht ein Link enthalten sein? Der scheint verlorengegangen zu sein.

Wenn man die Batterie zum Entladen zwingt, aber möchte, dass sie im Falle eines Stromüberschusses (z.B. aufgrund eines beschränkten Netzzuganges) dann doch lädt, dann muss man offenbar die Batterie per Skript laufend überwachend und beim Feststellen eines Überschusses von Entladen auf Laden umstellen. Schön wäre, wenn WR/Batterie das selbst regeln würden. Wenn man per Battery Management eine "min. discharge power" konfiguriert, kann genau dieses Verhalten erreicht werden. Aber wenn ich dich recht verstehe, und so wie ich die Modbus API bisher verstanden habe, ist dieses Verhalten per Modbus nicht konfigurierbar und offenbar auch nicht per offizieller Solar API.

Per undokumnetierter Web API lässt sich das Verhalten aber offenbar konfigurieren, [siehe z.B. hier](https://github.com/home-assistant/core/issues/92279) [oder hier](https://github.com/evcc-io/evcc/blob/master/templates/definition/meter/fronius-solarapi-v1.yaml). Aber bei Nutzung einer undokumentierten API ist's halt mit der Zukunftssicherheit in der Regel nicht weit her. :-)

Beitrag erstellt von Markus
✍Bernhard
gepostet am 13.02.2024 16:34
Hallo Markus, nein es sollte kein Link vorhanden sein: Ich habe die Seite um die Information ergänzt: Überschrift auf dieser Seite: "Batterie mit einer bestimmten Leistung entladen (erzwingen)"

Beitrag erstellt von Bernhard
✍Markus
gepostet am 13.02.2024 17:01
Alles klar, danke! :-)

Beitrag erstellt von Markus

✍Philipp
03.02.2024 15:41
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
✍Bernhard
gepostet am 03.02.2024 16:29
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
✍Philipp
gepostet am 04.02.2024 12:25
Hallo Bernhard,
danke für die schnelle Rückmeldung. 
Meine Konfig war analog deiner, außer der Zähleradresse, da hatte ich 240, und als Sunspec: float.
Habe dann auf deine Settings umgestellt, jetzt geht es. 
Hast du eine Idee, warum es mit float und der anderen Zähleradresse Probleme geben könnte ? Ich brauche diese Einstellungen für meine Bosch Wärmepumpe, die kommuniziert auch über Modbus mit dem Wechselrichter und verlangt diese Einstellungen (können auch m.W. nach nicht angepasst werden bei Bosch :-(

Gruß Philipp

Beitrag erstellt von Philipp
✍anonym
gepostet am 06.02.2024 18:44
Kurzes update: nach Korrektur der Write Adressen geht es bei mir auch mit float werten. Nur die Einstellungen der Lade/Entladebegrenzung will nicht richtig.

Beitrag erstellt von anonym

✍anonym
27.01.2024 09:26
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
✍Bernhard
gepostet am 27.01.2024 09:37
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
✍anonym
gepostet am 28.01.2024 11:13
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 Österreich

Beitrag erstellt von anonym

✍anonym
26.01.2024 12:16
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?

✍anonym
18.01.2024 23:15
Fronius und BYD Akku über Modbus steuern, vielen Dank es ist eine super Beschreibung, auch die Detail finde ich echt Top!!! Ich hätte eine Frage zum Punkt:
 „Für das Setzen der Register bietet sich ein Skript an: "Einstellungen", "Automatisierungen & Szenen", "Skripte", "NEUES SKRIPT ERSTELLEN":“
Welchen Punkt muss ich wählen bei Sequenz Aktion hinzufügen, ich habe schon einiges probiert wie Szene usw. wäre über eine Unterstützung sehr dankbar.
✍Bernhard
gepostet am 19.01.2024 06:52
Danke für dein Feedback.
Als Aktion für die Sequenz benötigst du hier meist: "Modbus: Register schreiben" oder alternativ den vorbereiten YAML-Text kopieren und gegebenenfalls anpassen.

Beitrag erstellt von Bernhard
✍anonym
gepostet am 19.01.2024 08:37
Danke für die rasche Antwort, ich habe mich wahrscheinlich nicht gut ausgedrückt. Ich würde gerne deinen Code verwenden (welcher unter Inhalt steht), aber ich weiß nicht, wie ich den Yaml einfügen kann. Wenn ich beim Punkt Sequenz hinzufügen anklicke, geht ein Fenster auf wo ich zu Auswahl folgende Punkte habe: Auswählen/Bedingung/Dienste Ausführen usw. welchen Punkt muss ich nehmen um den Inhalt 
„alias: Reset charging
sequence:
  - service: modbus.write_register…
einfügen zu können.
Danke Liebe Grüße Roman

Beitrag erstellt von anonym
✍Bernhard
gepostet am 19.01.2024 08:41
Rechts oben im Editor auf Ebene der Überschrift, bei den 3 Punkten "⁝" und "als YAML bearbeiten"

Beitrag erstellt von Bernhard
✍anonym
gepostet am 19.01.2024 10:55
Danke für die rasche Antwort, das war die Lösung. Wirklich sehr gute Beschreibung vielen Dank dafür!!! Du kannst damit sicher nicht nur mir sondern vielen helfen, den Speicher gut zu nutzen.

Beitrag erstellt von anonym

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details