wbec icon indicating copy to clipboard operation
wbec copied to clipboard

Support für Fronius Inverter / Smart Meter and Kostal KSEM

Open andy5macht opened this issue 2 years ago • 21 comments

Da die Firma Fronius den Modbus auch über TCP verbreitet und auch die Daten dazu veröffentlich hat, möchte ich die Fronius WR samt Smart Meter mit in dieses Projekt einbinden.

Das ganze hat das Ziel die Wallbox automatisch auf die Ladeleistung zu setzen, die dem PV Überschuss entspricht.

Es gibt bereits hilfreiche Informationen zum Thema Fronius Modbus TCP und dessen Register. https://github.com/Brovning/fronius/blob/main/README.md Fronius_Modbus-TCP.pdf Bis ich aktiven und getesteten Code teilen kann wird noch einige Wochen dauern, da ich den Wechselrichter noch nicht in Betrieb habe.

andy5macht avatar Mar 15 '22 14:03 andy5macht

Hi @andy5macht, hab gerade deinen Code aus dem Fork rübergezogen. Von einem anderen Nutzer hab ich das hier bekommen, bzgl. Kostal KSEM: https://www.kostal-solar-electric.com/en-gb/products/accessories/smart-energy-meter/-/media/document-library-folder---kse/2020/12/15/14/22/ba_kostal_interface_ksem_de.pdf

Das hab ich jetzt noch angefügt.

Die nötigen Parameter wären jetzt:

  • cfgInverterIp: IP-Adresse vom Wechselrichter oder Zähler (ersetzt das alte cfgSolarEdgeIp)
  • cfgInverterType: 0=off, 1=SolarEdge, 2=Fronius, 3=Kostal

Aktuell ist aber alles noch ungetestet.

steff393 avatar Apr 29 '22 21:04 steff393

Hi @steff393 ich hänge mich mal dran, habe ebenfalls einen Fronius WR und den Fronius SmartMeter dazu. leider bekomme ich die Werte nicht angezeigt. Verstehe ich es richtig, dass ich nur die cfg.json anpassen muss?

{"cfgApSsid":"wbec","cfgApPass":"wbec1234","cfgCntWb":1,"cfgMqttIp":"192.168.0.xxx","cfgMqttPort":1884,"cfgMqttLp":[3,1],"cfgMqttUser":"xxx","cfgMqttPass":"xxx","cfgInverterIp":"192.168.0.xxx","cfgInverterType":"2"}

würde es gern weiter testen und gerne auch dokumentieren, Gruß

anselra avatar May 01 '22 20:05 anselra

Hi Ralf, danke für die Unterstützung! "cfgInverterType":2 d.h. die Anführungszeichen müssten noch weg. Danach bitte wbec resetten (/reset). Wichtig ist auch, noch zu beachten, was per MQTT parallel an Anforderungen kommt. Nicht dass sich da Änderungen überlagern. Bin schon gespannt ;-)

steff393 avatar May 01 '22 20:05 steff393

Für's Debuggen eignen sich wahrscheinlich die Seiten /inverter (Rohwerte) und /pfox (--> watt = Bezug/Einspeisung)

steff393 avatar May 01 '22 20:05 steff393

Danke für den Hinweis :-) unter /inverter bekomme ich diese Ausgabe, nach ca 30 sec nach reset allerdings immer die gleichen Werte {"inverter":{"isConnected":"1"},"power":{"AC_Total":"0","house":"0","inverter":"65","inverter_scale":"18034","meter":"26997","meter_scale":"29440"}} allerdings verändert sich diese nicht.

unter /pfox {"box":{"chgStat":0,"power":0,"currLim":0,"resCode":"e4"},"modbus":{"millis":191811},"pv":{"mode":0,"watt":0}} hier ändern sich die millis

über MQTT kommen bei mir keine zusätzliche Werte an. Testaufbau ist ein NODEMCU, dieser ist nicht verbunden mit der Wallbox, da ich davon ausgehe, dass dies für PV nicht notwendig ist, falls doch auch kein Problem :-)

anselra avatar May 02 '22 07:05 anselra

Cool, dass es hier weiter geht mit Fronius. Ihr seid mir zuvor gekommen! Die Adressen für Fronius waren bisher nur als Dummies ausgeführt:

#define REG_FR_I_AC_Power       40003 // modbus register for "AC Power value", int16 in Watts 
#define REG_FR_I_AC_Power_SF    40004 // modbus register for "AC Power scale factor" int16

#define REG_FR_M_AC_Power       40006 // modbus register for "Total Real Power (sum of active phases)" int16 in Watts
#define REG_FR_M_AC_Power_SF    40007 // modbus register for "AC Real Power Scale Factor" int16 SF

diese vier Zeilen müssen also angepasst werden. Hierfür wäre mein erster Versuch:

#define REG_FR_I_AC_Power       40084 // modbus register for "AC Power value", int16 in Watts 
#define REG_FR_I_AC_Power_SF    40085 // modbus register for "AC Power scale factor" int16

#define REG_FR_M_AC_Power       40088 // modbus register for "Total Real Power (sum of active phases)" int16 in Watts
#define REG_FR_M_AC_Power_SF    40092 // modbus register for "AC Real Power Scale Factor" int16 SF

Diese Werte sind nur meine erste Idee, keine Garantie, dass die stimmen! Hatte eigentlich vor bevor ich meinen Code fertig mache. Die Adressen erstmal am PC alle auszulesen und diese zu verfizieren. Wenn ihr schneller seid - gerne ausprobieren.

Damit das auch funktioniert muss der Fronius Wechselrichter seine Daten auch im Integer-Format ausgeben. Die genannten Adressen sowie man das einstellt, steht ebenfalls in meiner oben verlinkten PDF: Fronius_Modbus-TCP.pdf

andy5macht avatar May 02 '22 11:05 andy5macht

ich benutze noch den IoBroker mit der Fronius App, da ist mir aufgefallen, dass man (zumindest bei der App) nur positive Werte bekommt und nicht einen positiven oder negativen auf einem Register wie z.B. bei Kostal wenn ich mich recht entsinne

anselra avatar May 03 '22 12:05 anselra

Hallo, ich konnte endlich meinen Fronius Wechselrichter samt Smartmeter in Betrieb nehmen. Die Register dazu sind:

#define REG_FR_I_AC_Power       40083 // modbus register for "AC Power value", int16 in Watts 
#define REG_FR_I_AC_Power_SF    40084 // modbus register for "AC Power scale factor" int16
#define REG_FR_M_AC_Power       40087 // modbus register for "Total Real Power (sum of active phases)" int16 in Watts
#define REG_FR_M_AC_Power_SF    40091 // modbus register for "AC Real Power Scale Factor" int16 SF

Die Einstellungen am Wechselrichter müssen dann folgende sein: grafik

Ich verstehe allerdings nicht, wieso der Hausverbrauch falsch berechnet wird? Das ist laut source eine einfache Subtraktion... grafik Hier werden 2487W produziert und 2244W eingespeist = 243W verbraucht.

Edit: Hab die Ursache gefunden! Das Smartmeter gibt die Werte invertiert aus (also Einspeisung = Negativ). Deshalb musste ich zwei Zeilen umschreiben:

power_house = pwrInv + pwrMet;
pv_setWatt(pwrMet); // pvAlgo expects the value inverted

andy5macht avatar Aug 27 '22 13:08 andy5macht

Hallo Andy, super, danke für die Anleitung. Ich hab's gerade so angepasst (die Invertierung hab ich ein Stück weiter oben gemacht, damit die anderen Wechselrichter nicht beeinflusst werden). Wäre super, wenn du's damit nochmal testen könntest!

steff393 avatar Sep 03 '22 18:09 steff393

@andy5macht @anselra @AMiketta Ich habe jetzt mal versucht, die PV-Funktion übersichtlicher zu beschreiben: https://github.com/steff393/wbec/wiki/PV-Überschussladen

Da ich selber keinen der genannten Wechselrichter habe, wäre interessant, welche Typen ihr habt und welche Einstellungen man ggf. dort vornehmen muss (ähnlich wie Andy es oben für den Fronius gemacht hat). Wäre super, wenn ihr das im Wiki ändern könntet, oder hier im Issue beschreiben könnt (dann würd ich es übertragen). Ich glaube das wäre für andere Nutzer ganz hilfreich.

steff393 avatar Sep 03 '22 20:09 steff393

@andy5macht @steff393 ich habe es gerade getestet allerdings passt es noch nicht ganz. Hardware, Fronius Symo 10.0-3-M und Fronius Smart Meter, Wechselrichter Einstellungen wie andy beschrieben, die API passen auch. Ich bekomme folgende Werte ip/inverter

{"inverter":{"isConnected":"1"},"power":{"AC_Total":"0","house":"11515","inverter":"6023","inverter_scale":"0","meter":"-5492","meter_scale":"0"}}

house wird addiert, da der Wert negativ übermittelt wird. Daher denke ich dass die Invertierung nicht richtig läuft

noch ein Update,

{"inverter":{"isConnected":"1"},"power":{"AC_Total":"0","house":"309","inverter":"4680","inverter_scale":"-1","meter":"15970","meter_scale":"-2"}}

bei Netzbezug passt es nicht zusammen

Gruß Ralf

anselra avatar Sep 04 '22 13:09 anselra

Du hast den aktuellen Stand von gestern abend verwendet, oder? Die Bedeutung von "meter" bei /inverter ist für alle Wechselrichter gleich: Pos. = Einspeisung, Neg. = Bezug Fronius liefert es zwar erst anders rum, aber unmittelbar nach dem Einlesen wird es ja sofort negiert (Zeile 92 in inverter.cpp).

PV-Leistung: 6023W Zählerwert: -5492W (negativ, also Bezug aus dem Netz) => Damit wäre house = 11515W

PV-Leistung: 468W Zählerwert: 159W (positiv, also Einspeisung ins Netz) => Damit wäre house = 309W

Insofern wären die Werte erst mal für mich stimmig. Wenn das aber nicht zu der realen Situation bei dir passt, kann es vielleicht sein, dass eure Smart Meters sich da unterschiedlich verhalten?

steff393 avatar Sep 04 '22 17:09 steff393

Habe es ebenfalls getestet. Der Betrag passt. Allerdings stimmt das Vorzeichen nicht. Bezug(+)/Einsp.(-) -25 W => sollte ohne "-" sein.

andy5macht avatar Sep 04 '22 17:09 andy5macht

Du hast den aktuellen Stand von gestern abend verwendet, oder? Die Bedeutung von "meter" bei /inverter ist für alle Wechselrichter gleich: Pos. = Einspeisung, Neg. = Bezug Fronius liefert es zwar erst anders rum, aber unmittelbar nach dem Einlesen wird es ja sofort negiert (Zeile 92 in inverter.cpp).

PV-Leistung: 6023W Zählerwert: -5492W (negativ, also Bezug aus dem Netz) => Damit wäre house = 11515W

PV-Leistung: 468W Zählerwert: 159W (positiv, also Einspeisung ins Netz) => Damit wäre house = 309W

Insofern wären die Werte erst mal für mich stimmig. Wenn das aber nicht zu der realen Situation bei dir passt, kann es vielleicht sein, dass eure Smart Meters sich da unterschiedlich verhalten?

Ja habe den aktuellen stand genommen.

PV-Leistung: 6023W Zählerwert: -5492W (negativ, also Bezug aus dem Netz) => Damit wäre house = 11515W hier wäre richtig gewesen 6023W Erzeugung - 5492W Netzeinspeisung = 531 W Verbrauch

Aktuell wird bei mir über /inverter {"inverter":{"isConnected":"1"},"power":{"AC_Total":"0","house":"64870","inverter":"0","inverter_scale":"-2","meter":"6663","meter_scale":"-1"}}

Aktuell ist es über fronius: 0W Erzeugung - 688W Netzbezug = 688 W Verbrauch

anselra avatar Sep 04 '22 18:09 anselra

Ich habe nochmal nachgeforscht, warum die invertierung nicht funktioniert. Die Invertierung funktioniert, wenn diese nach dem Befehl: mb.task() ausgeführt wird. Vermutlich hat das damit zu tun, dass die Variable power_meter im Modbus als uint16 verwendet wird.

andy5macht avatar Sep 06 '22 16:09 andy5macht

@anselra: hoffe damit funktionierts bei dir auch @steff393: hoffe die Änderung ist ok, nicht die schönste Lösung, aber mir ist nichts besseres eingefallen.

Add cfgWifiConnectTimeout + optimize PV-Load-Switch + fix Fronius Smartmeter #47

andy5macht avatar Sep 07 '22 17:09 andy5macht

@anselra: hoffe damit funktionierts bei dir auch @steff393: hoffe die Änderung ist ok, nicht die schönste Lösung, aber mir ist nichts besseres eingefallen.

cfgWifiConnectTimeout hinzufügen + PV-Load-Switch optimieren + Fronius Smartmeter #47 reparieren

Hey andy, bin leider erst jetzt dazu gekommen, leider funktioniert es nicht (/andy5macht/wbec). Ich bekomme keinen connect zu meinem Fronius. Hat sich in der cfg.json was geändert? Meine ist:

{"cfgApSsid":"wbec","cfgApPass":"wbec1234","cfgCntWb":1,"cfgMqttIp":"192.168.0.xxx","cfgMqttPort":1884,"cfgMqttLp":[3,1] ,"cfgMqttUser":"xxx","cfgMqttPass":"xxx","cfgInverterIp":"192.168.0.xxx","cfgInverterType":2}

Gruß Ralf

anselra avatar Sep 19 '22 16:09 anselra

Hallo Ralf, hat zwar mit dem Thema nichts zu tun, aber wenn du nur eine Wallbox hat, dann sollte cfgMqttLp nicht [3,1] sein, sondern nur [3]. Sorry, das Beispiel im Wiki war missverständlich dazu, werd ich ändern.

steff393 avatar Sep 19 '22 19:09 steff393

Hallo Ralf, die Config hat einen weiteren Parameter bekommen. Der aber nicht zwangsweise verwendet werden muss und außerdem nichts mit dem Wechselrichter zu tun hat. Ich verstehe aktuell noch nicht, warum der WBEC sich nicht mit deinem Wechselrichter verbinden soll...ich werde aber deine Config heute abend bei mir testen, dann sehen wir weiter.

andy5macht avatar Sep 20 '22 06:09 andy5macht

@anselra Mit deiner Config geht es wirklich nicht - was aber logisch ist... ich habe "cfgPvActive":1 zu deiner Config hinzugefügt und dann verbindet er auch mit dem Fronius.

Nur zum Ableich - meine Config sieht so aus: {"cfgApSsid":"wbec","cfgApPass":"wbec1234","cfgCntWb":1,"cfgMqttIp":"","cfgPvPhFactor":69,"cfgInverterIp":"192.168.0.XXX","cfgPvCycleTime":5,"cfgInverterType":2,"cfgBtnDebounce":200,"cfgStandby":4,"cfgPvActive":1,"cfgWifiConnectTimeout":180}

andy5macht avatar Sep 21 '22 17:09 andy5macht

@andy5macht danke, bei mir läuft es mit deiner conf auch. Sobald ich aber Mqtt dazu nehme geht es nicht mehr. Ich probiere noch rum, da ich dies ja schonmal am laufen hatte, wie weiter oben beschrieben mit dem Berechnungsproblem und dies ohne den Eintrag "cfgPvActive":1 . Wenn ich es im Wiki richtig verstehe hat dieser wert auch nur Auswirkungen auf die Funktion Überschussladen und nicht ob Werte vom WR geholt werden.

Edit: jetzt geht alles soweit bei mir mit folgender config: {"cfgApSsid":"wbec","cfgApPass":"wbec1234","cfgCntWb":1,"cfgMqttIp":"192.168.0.xxx","cfgMqttPort":1884,"cfgMqttLp":[1],"cfgMqttUser":"xxx","cfgMqttPass":"xxx","cfgPvPhFactor":69,"cfgInverterIp":"192.168.0.xxx","cfgPvCycleTime":5,"cfgInverterType":2,"cfgBtnDebounce":200,"cfgStandby":4,"cfgPvActive":1,"cfgWifiConnectTimeout":180}

anselra avatar Sep 22 '22 16:09 anselra

Hi zusammen, weiß jemand, wie man die Modbus-Adresse vom Smart-Meter rausfinden kann, wenn sie nicht 240 ist? Neuere Wechselrichter (GEN24) haben wohl 200. Kann man sich die im Wechselrichter anzeigen lassen?

steff393 avatar May 25 '23 14:05 steff393

@steff393 ich habe mir alle Einträge auf dem Interface angeschaut, habe unter dem User Service nicht gefunden

anselra avatar May 28 '23 07:05 anselra

Danke trotzdem! Hat jemand der Fronius-Nutzer schon mal beobachtet, dass die Werte nicht zur Anzeige in der Fronius App passen?

steff393 avatar Sep 14 '23 20:09 steff393

Danke trotzdem! Hat jemand der Fronius-Nutzer schon mal bemerkt, dass die Werte nicht zur Anzeige in der Fronius App passen?

@steff393 ich hatte es am Anfang mal verfolgt und festgestellt, dass ein gewisser zeitlicher Versatz gibt zwischen der WR Anzeige und der Fronius APP. Die Werte die über die IP des WR kommen passen bei mir zu der Anzeige am WR, hoffe das hilft.

anselra avatar Sep 26 '23 11:09 anselra