Fronius Gen24 Speichersteuerung per Modbus

Begonnen von sky64, 17 Januar 2021, 18:52:26

Vorheriges Thema - Nächstes Thema

sky64

Hallo

Da in der Firmware des Gen24 fehlt die in der Doku vorhandene Speichersteuerung leider noch.
In der Vorgängerversion konnte man zwar die (versteckte) Webseite noch aufrufen, war aber ohne Funktion.
Deshalb habe ich heute mal mit dem Modbus die Register für die Speichersteuerung gesucht.
Und siehe da es funktioniert :)
Sicher kann das der eine oder andere gebrauchen.


   obj-h40109-format %.2f
   obj-h40109-len 2
   obj-h40109-reading Temperatur
   obj-h40109-unpack f>
   obj-h40358-reading StorCtl_Mod
   obj-h40358-set 1
   obj-h40360-expr $val/100
   obj-h40360-format %.2f %
   obj-h40360-reading BYD_min_Reserve
   obj-h40360-set 1
   obj-h40360-setexpr $val * 100
   obj-h40361-expr $val/100
   obj-h40361-format %.2f %
   obj-h40361-reading BYD_SoC
   obj-h40365-expr $val/100
   obj-h40365-format %.2f %
   obj-h40365-reading BYD_max_discharge
   obj-h40365-set 1
   obj-h40365-setexpr $val * 100
   obj-h40366-expr $val/100
   obj-h40366-format %.2f %
   obj-h40366-reading BYD_max_charge
   obj-h40366-set 1
   obj-h40366-setexpr $val * 100


Der Wert "StorCtl_Mod" sind eigentlich 2 Bit-Werte, Bit0 und Bit 1 für die Freigabe der Lade- bzw. Entladesteuerung.
Das war bei mir 0. Bit0 und Bit1 zusammen sind dann eben dezimal 3 und muss einmalig gesetzt werden.
Die Werte für die Lade-/Entladebegrenzung sind %-Werte der Speicherkapazität, zumindest bei mir mit 5,2Kwh (2 Module BYD HVS)
Das heißt bei mir sind 20% 1040W.
Es gibt zwar Register für die Watt-Zahl, aber das sind nur Read-Register.
Es gibt noch Readregister für den 100%-Wert. Wenn man es universell machen möchte und konkrete Wattzahlen lesen bzw. setzen möchten muss man das entsprechend umrechnen.
Es kann sein, das es bei größeren Batterien anderen Grenzwerte gibt.
Bei Fronius gibt es im Downloadbereich ein Zip mit enthaltenen Excel-Listen für alle verfügbaren Modbus-Register.
(Gen24_Primo_Symo_Inverter_Register_Map_Float_storage.xls)

Als nächstes steht dann die Einbindung der Sonnen-Prognose an.

Gruß Ron
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

ch.eick

Zitat von: sky64 am 17 Januar 2021, 18:52:26
Als nächstes steht dann die Einbindung der Sonnen-Prognose an.

Hallo Ron,
Wetter- / Leistungs-Prognose
Das läuft bei uns bereits seit 1 Jahr ziemlich gut :-) und ist unabhängig vom Wechselrichter verwendbar.
Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

sky64

Ja, Danke. Das ist sehr umfangreich.
Ich habe das schon mal versucht zu lesen, aber viele Sachen habe ich noch nicht verstanden.
Ich weiß das ich als nächstes mit DBlog anfangen muss.
Ohne zumindest etwas Verständnis was und wie das funktioniert geht es nicht wenn ich es für mich anpassen will.

Gruß Ron
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

ch.eick

Zitat von: sky64 am 17 Januar 2021, 19:40:06
Ich habe das schon mal versucht zu lesen, aber viele Sachen habe ich noch nicht verstanden.
Ich weiß das ich als nächstes mit DBlog anfangen muss.
Ohne zumindest etwas Verständnis was und wie das funktioniert geht es nicht wenn ich es für mich anpassen will.
Ich habe die Leistungsprognose für Dich mal in einen anderen Thread ausgelagert.
Leistungsprognose für Wechselrichter

VG
  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

yoda_gh

Hallo sky64

Zitat von: sky64 am 17 Januar 2021, 18:52:26
Deshalb habe ich heute mal mit dem Modbus die Register für die Speichersteuerung gesucht.
Und siehe da es funktioniert :)
Sicher kann das der eine oder andere gebrauchen.

[...]

Super, vielen Dank!! Das hilft mir sehr und erspart mir sicher die ein oder andere Stunde ausprobieren und graue Haare. :)

Aber.. bisher tut sich gar nix.

Ich habe das Device angelegt, erstmal nur mit den "obj-h40109-*"-Attributen, aber FHEM legt leider kein REading an. Kannst Du bitte mal das Define für's Device auch posten - oder idealerweise die ganze "Raw definition" von der Device-Seite? Bin mir bezüglich der anderen Settings noch nicht ganz sicher.

Einen Screenshot der Einstellungen im WR habe ich angehängt, hoffe das passt? Sicherheitshalber habe ich erstmal nur lesenden Zugriff aktiviert.


sky64

Hallo

.. also "..Steuerung über Modbus" muss du schon einschalten  ;)
Rest folgt morgen ..
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

yoda_gh

#6
Zitat von: sky64 am 17 Mai 2021, 22:08:46
.. also "..Steuerung über Modbus" muss du schon einschalten  ;)
Rest folgt morgen ..

Nein, es geht auch ohne, solange man nur Werte lesen möchte. Was mir noch gefehlt hat, war ein "obj-h40109-poll 1", sonst wird das Reading nur auf expliziten Trigger aktualisiert.

Hier mal meine aktuell funktionierende Definition:


define gen24 ModbusAttr 1 180 192.168.0.123:502 TCP
attr gen24 obj-h40109-format %.2f
attr gen24 obj-h40109-len 2
attr gen24 obj-h40109-poll 1
attr gen24 obj-h40109-reading CabinetTemperature
attr gen24 obj-h40109-unpack f>
attr gen24 room Solar


Vielleicht magst Du das noch in Deinen initialen Post aufnehmen?

Vermutlich will man noch eigene Typen definieren oder Defaults setzen, damit man nicht "-format", "-len", "-poll" etc. bei jedem einzelnen Register spezifizieren muss, das schaue ich mir nochmal an, wenn ich mehrere Register am Laufen habe. :)

yoda_gh

#7
Update 2022-04-22: Batterie und Schreibzugriff ergänzt

Hier mal meine komplette Definition für das Lesen und Schreiben von Werten (nur die aus meiner Sicht interessanten), für einen Gen24 mit Batterie:


define gen24 ModbusAttr 1 120 192.168.0.123:502 TCP
attr gen24 dev-h-combine 125
attr gen24 dev-h-defFormat %.1f
attr gen24 dev-h-defLen 2
attr gen24 dev-h-defPoll 1
attr gen24 dev-h-defUnpack f>
attr gen24 event-min-interval ACActEnergy:7200,ACPower:7200,Battery.*:7200
attr gen24 event-on-change-reading .*Energy:0.1,ACPower:1,DCPowerMPPT.*:1,status,Battery.*harge.*:1,BatteryState
attr gen24 obj-h40073-reading ACCurrentPhaseA
attr gen24 obj-h40075-reading ACCurrentPhaseB
attr gen24 obj-h40077-reading ACCurrentPhaseC
attr gen24 obj-h40085-reading ACVoltagePhaseA
attr gen24 obj-h40087-reading ACVoltagePhaseB
attr gen24 obj-h40089-reading ACVoltagePhaseC
attr gen24 obj-h40091-format %.0f
attr gen24 obj-h40091-reading ACPower
attr gen24 obj-h40093-reading ACFrequency
attr gen24 obj-h40109-reading CabinetTemperature
attr gen24 obj-h40117-format %s
attr gen24 obj-h40117-len 1
attr gen24 obj-h40117-map 1:off,2:sleeping,3:starting,4:active,5:throttled,6:shutdown,7:fault,8:standby
attr gen24 obj-h40117-reading status
attr gen24 obj-h40117-unpack n
attr gen24 obj-h40196-expr $val / 1000
attr gen24 obj-h40196-format %.2f
attr gen24 obj-h40196-len 4
attr gen24 obj-h40196-reading ACActEnergy
attr gen24 obj-h40196-unpack Q>
attr gen24 obj-h40267-format %d
attr gen24 obj-h40267-group 1-1
attr gen24 obj-h40267-len 1
attr gen24 obj-h40267-reading DCPowerScale
attr gen24 obj-h40267-unpack s>
attr gen24 obj-h40284-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40284-group 1-2
attr gen24 obj-h40284-len 1
attr gen24 obj-h40284-reading DCPowerMPPT1
attr gen24 obj-h40284-unpack n
attr gen24 obj-h40304-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40304-group 1-3
attr gen24 obj-h40304-len 1
attr gen24 obj-h40304-reading DCPowerMPPT2
attr gen24 obj-h40304-unpack n
attr gen24 obj-h40324-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40324-group 1-4
attr gen24 obj-h40324-len 1
attr gen24 obj-h40324-reading BatteryChargeWatt
attr gen24 obj-h40324-unpack n
attr gen24 obj-h40344-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40344-group 1-5
attr gen24 obj-h40344-len 1
attr gen24 obj-h40344-reading BatteryDischargeWatt
attr gen24 obj-h40344-unpack n
attr gen24 obj-h40355-len 1
attr gen24 obj-h40355-reading BatConfigMaxReferenceWatt
attr gen24 obj-h40355-unpack n
attr gen24 obj-h40358-format %s
attr gen24 obj-h40358-len 1
attr gen24 obj-h40358-map 0:none,1:chargeMax,2:dischrMax,3:bothMax
attr gen24 obj-h40358-reading BatConfigMaxEnabled
attr gen24 obj-h40358-set 1
attr gen24 obj-h40358-unpack n
attr gen24 obj-h40360-expr $val / 100
attr gen24 obj-h40360-len 1
attr gen24 obj-h40360-reading BatConfigReserve
attr gen24 obj-h40360-unpack n
attr gen24 obj-h40361-expr $val / 100
attr gen24 obj-h40361-len 1
attr gen24 obj-h40361-reading BatteryChargePercent
attr gen24 obj-h40361-unpack n
attr gen24 obj-h40364-format %s
attr gen24 obj-h40364-len 1
attr gen24 obj-h40364-map 1:off,2:empty,3:discharging,4:charging,5:full,6:holding,7:testing
attr gen24 obj-h40364-reading BatteryState
attr gen24 obj-h40364-unpack n
attr gen24 obj-h40365-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-len 1
attr gen24 obj-h40365-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-reading BatConfigMaxDischargeWatt
attr gen24 obj-h40365-set 1
attr gen24 obj-h40365-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40365-unpack s>
attr gen24 obj-h40366-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-len 1
attr gen24 obj-h40366-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-reading BatConfigMaxChargeWatt
attr gen24 obj-h40366-set 1
attr gen24 obj-h40366-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40366-unpack s>
attr gen24 stateFormat status BatteryState ACPower W
attr gen24 userReadings PVConsumedEnergy { ReadingsVal($name,"ACActEnergy",0) - ReadingsVal("gen24_meter","EnergyExported",0) }


Die Register habe ich dem Dokument "Fronius GEN24 Modbus TCP & RTU" (z.Zt. https://www.fronius.com/~/downloads/Solar%20Energy/Operating%20Instructions/42%2C0410%2C2649.pdf) und vor allem den Tabellen in "gen24-modbus-api-external-docs.zip" (z.Zt. http://www.fronius.com/QR-link/0024) entnommen, wo es noch deutlich mehr Werte zum Abruf gibt...

Die event-*-Settings sind natürlich Geschmackssache - zur Reduzierung der Datenlast logge ich letztlich das hier mit (Regexp-Part vom FileLog-Device):


gen24:AC.*:.*|gen24:DCPowerMPPT.*:.*|gen24:Battery.*:.*|gen24:PVConsumedEnergy:.*|gen24:status:.*


sky64

Sorry, ein Tag zu spät.
hier mein Device zur Steuerung der Batterie am Fronius Gen24.
Alle anderen Werte lese ich z.Z. über die API aus.
Ich bin noch unschlüssig welcher Weg der bessere zur Abfrage ist. Zum Steuern geht nur Modbus, zum Auslesen ist die API einfacher, da sich das Device praktisch selbst konfiguriert.

list Modbus_Fronius
Internals:
   DEF        1 30 192.168.xxx.xxx:502 TCP
   DeviceName 192.168.xxx.xxx:502
   EXPECT     idle
   FD         11
   FUUID      5ff5cafd-f33f-5588-ce21-672f940aabac9443
   IODev      Modbus_Fronius
   Interval   30
   LASTOPEN   1621173510.31268
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.3.11 - 2.1.2021
   NAME       Modbus_Fronius
   NOTIFYDEV  global
   NR         336
   NTFY_ORDER 50-Modbus_Fronius
   PARTIAL   
   PROTOCOL   TCP
   STATE      SOC:40.10 | Reserve:15.00<br>
Begrenzung Entl.:100.00 | Lad.:20.00<br>
Temp: 52.93 °C
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2021-05-19 09:22:05   BYD_SoC         40.10
     2021-05-19 09:22:05   BYD_max_charge  20.00
     2021-05-19 09:22:05   BYD_max_discharge 100.00
     2021-05-19 09:22:05   BYD_min_Reserve 15.00
     2021-05-19 09:22:05   Hersteller      Fronius
     2021-05-19 09:22:05   StorCtl_Mod     3
     2021-05-19 09:22:05   Temperatur      52.93
     2021-05-16 15:58:30   state           opened
   REMEMBER:
     lid        1
     lname      Modbus_Fronius
     lrecv      1621408925.98864
     lsend      1621408925.98602
   defptr:
     Modbus_Fronius 1
   gotReadings:
     BYD_max_charge 20.00
Attributes:
   DbLogExclude .*
   obj-h40004-len 8
   obj-h40004-poll 900
   obj-h40004-reading Hersteller
   obj-h40004-unpack A*
   obj-h40109-format %.2f
   obj-h40109-len 2
   obj-h40109-poll 300
   obj-h40109-reading Temperatur
   obj-h40109-unpack f>
   obj-h40358-poll 60
   obj-h40358-reading StorCtl_Mod
   obj-h40358-set 1
   obj-h40360-expr $val/100
   obj-h40360-format %.2f
   obj-h40360-poll 60
   obj-h40360-reading BYD_min_Reserve
   obj-h40360-set 1
   obj-h40360-setexpr $val * 100
   obj-h40361-expr $val/100
   obj-h40361-format %.2f
   obj-h40361-poll 60
   obj-h40361-reading BYD_SoC
   obj-h40365-expr $val/100
   obj-h40365-format %.2f
   obj-h40365-poll 60
   obj-h40365-reading BYD_max_discharge
   obj-h40365-set 1
   obj-h40365-setexpr $val * 100
   obj-h40366-expr $val/100
   obj-h40366-format %.2f
   obj-h40366-poll 60
   obj-h40366-reading BYD_max_charge
   obj-h40366-set 1
   obj-h40366-setexpr $val * 100
   room       PV-Anlage,Verbrauch
   stateFormat SOC:BYD_SoC | Reserve:BYD_min_Reserve<br>
Begrenzung Entl.:BYD_max_discharge | Lad.:BYD_max_charge<br>
Temp: Temperatur °C
   verbose    1


RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

yoda_gh

#9
Inzwischen lese ich auch das Smart Meter TS65-A3 am Einspeisepunkt über Modbus, indirekt über TCP über den Gen24. Leider funktionieren die Summenzähler pro Phase nicht, da bekomme ich immer nur undefinierte Werte zurück, sonst aber alle Details, die man so möchte:


define gen24_meter ModbusAttr 200 120 192.168.0.123:502 TCP
attr gen24_meter dev-h-combine 125
attr gen24_meter dev-h-defFormat %.1f
attr gen24_meter dev-h-defLen 2
attr gen24_meter dev-h-defPoll 1
attr gen24_meter dev-h-defUnpack f>
attr gen24_meter event-min-interval Power[ABC].*:7200,Energy.*:7200
attr gen24_meter event-on-change-reading Power[ABC].*:1,Energy.*:0.1
attr gen24_meter obj-h40081-reading VoltageA
attr gen24_meter obj-h40083-reading VoltageB
attr gen24_meter obj-h40085-reading VoltageC
attr gen24_meter obj-h40095-reading Frequency
attr gen24_meter obj-h40097-reading Power
attr gen24_meter obj-h40099-reading PowerA
attr gen24_meter obj-h40101-reading PowerB
attr gen24_meter obj-h40103-reading PowerC
attr gen24_meter obj-h40123-reading PfA
attr gen24_meter obj-h40125-reading PfB
attr gen24_meter obj-h40127-reading PfC
attr gen24_meter obj-h40129-expr $val / 1000
attr gen24_meter obj-h40129-reading EnergyExported
attr gen24_meter obj-h40137-expr $val / 1000
attr gen24_meter obj-h40137-reading EnergyImported
attr gen24_meter room Zähler
attr gen24_meter stateFormat PA: PowerA PB: PowerB PC: PowerC
attr gen24_meter userReadings PowerA_oPV {\
  ReadingsVal($name,"PowerA",0) + ReadingsVal("gen24","ACPower",0)/3 },\
PowerB_oPV {\
  ReadingsVal($name,"PowerB",0) + ReadingsVal("gen24","ACPower",0)/3 },\
PowerC_oPV {\
  ReadingsVal($name,"PowerC",0) + ReadingsVal("gen24","ACPower",0)/3 }


Damit die userReadings besser funktionieren, nutze ich zusätzlich ein at-Device, dass möglichst zeitgleich das Lesen der Werte von "gen24_meter" und "gen24" (Definition siehe oben) anstößt:


defmod atMeterRead at +*00:02:00 set gen24 reread ;; sleep 5;; set gen24_meter reread


Wenn man das Lesen mit dem at-Device anstößt, ist das Lese-Intervall in den ModbusAttr-Definitionen jeweils auf 0 zu setzen (also die 120 im define für gen24 und gen24_meter jeweils durch eine 0 ersetzen),

sn0000py

Eine Frage funktioniert bei euch das noch?

Habe gerade den Modbus Atrr neu angelegt - ich möchte eben den -BYD Speicher steuern damit.

BYD_max_discharge
0.00 %
2022-01-09 16:44:54
BYD_min_Reserve
0.00 %
2022-01-09 16:45:04


und wenn ich den BYD_min_Reserve setze dann ändert isch nichts, auch wenn ich ein reread mache ändert sich an den readings nichts.

Ich möchte eben gerne zeitgesteuert und / oder prognose gesteuert den PV Speicher mal mehr mal weniger voll lassen über nacht.

sky64

Bei mir funktioniert es nach wie vor, aktuelle Gen24-Firmware.
Einstellungen wie oben.

Hat es bei dir schon funktioniert?
Wenn nicht, ist im WR Steuerung per Modbus freigegeben?
StorCtl_Mod auf 3?

RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

sn0000py

ah okay, jetztt gehts
ich hatte noch diese attr drinnen
attr gen24 dev-h-combine 125
attr gen24 dev-h-defFormat %.1f
attr gen24 dev-h-defLen 2
attr gen24 dev-h-defPoll 1
attr gen24 dev-h-defUnpack f>

die gelöscht und nun funkt es mal
danke

sn0000py

Eine Frage noch, gibt es eigentlich auch den Wert mit dem definiert wird mit wieviel Watt der Speicher aus demm Netz gealden wird?

Im Moment wird ja mit 500 Watt aus dem Netz geladen (von der PV mit nicht ganz 6kW) würde gerne einstellen das auch aus den Netz mit 6kW geladen werden kann (in der Nacht zB)

sky64

Man kann wohl den Speicher dazu bringen aus dem Netz zu laden.
Hab ich aber noch nicht versucht. Die 500W-Ladungen sind ja "nur" Zwangsladungen.
Das geht wohl wenn man die LadeLeistungsBegrenzung negativ setzt.
Aber wie gesagt ohne Gewähr.

Im WR kann/muss man sicher noch Laden aus dem Netz aktivieren.
Und zum dritten, darfst du das? Ich musste beim Netzanschlussantrag angeben ob ich aus dem Netz lade.
Macht es auch Sinn aus dem Netz zu laden, sprich hast du einen variablen Tarif und ist der so niedrig das er die Speicherverluste ausgleicht?
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

sn0000py

werd ich mal testen.

Ist im Moment nur eine überlegeung, (zumindest bei uns in Österreich) gibt es den Anbieter aWATTar, der hat stündliche preise, je nach Sonne und Wind  da gehen die preise von 5 cent/kw bis 37 cent/kw.
Und meistens sind die preise in der Nacht günstig (wenig verbrauch und eher viel Wind)

Und ob nun eine Auto mit Akku oder mein Akku von BYD dran hängt?

BOFH

hab mir gerade mal den modbus aktiviert.

Ich muss mal ahnungslos fragen.  Wozu möchte man denn den Ladestatus des Speichers steuern? Wo ist der benefit?
RasPi 4
ZWave.me ZME_UZB (Fibaro Auge Gen.2)/ HM-USB2 (Thermostat | Hutschienen Relais | 1-/2fach Schalter) / Enigma2 / PhilipsTV / Philips HUE (GO|Bulb|Stripe (plus)) / Somfy IO Rollos / BOSCH HSG636XS6 / SONOS (P1, P3, P5 2.Gen, SUB, Bar)

yoda_gh

#17
Zitat von: BOFH am 14 April 2022, 12:06:43
Ich muss mal ahnungslos fragen.  Wozu möchte man denn den Ladestatus des Speichers steuern? Wo ist der benefit?

Leider ist die Gen24-Ladesteuerung ziemlich dämlich: wenn vormittags Überschuss da ist, wird mit maximaler Leistung geladen, bis die Batterie voll ist. Und mittags drosselt sich dann die Anlage, um nicht zu viel Strom einzuspeisen...

Ich habe zum Beispiel die Lade-Leistung generell auf 2kW begrenzt, um die Batterie zu schonen. Außerdem wertet FHEM die vom DWD vorausgesagten Sonnenstunden aus - und an einem sonnigen Tag lade ich vormittags nur wenig und erst ab 11:00 dann mit 2 kW.

Ein weiterer Punkt ist, dass er an trüben Tagen, wenn die PV-Leistung knappi ist, ständig zwischen Laden und Entladen wechselt, was vermutlich für die Batterie alles andere als schonend ist. Dazu habe ich allerdings noch keine Lösung umgesetzt...

BOFH

hochinteressant ...
hab die Wetterprognose aus dem Wiki auch mal aktiviert - das kommt zwar noch nicht ganz hin aber schon ein guter Anhaltspunkt.

Mag denn jemand eventuell seine Geistige Überlegung/Code teilen zur steuerung des Lademanagement.
RasPi 4
ZWave.me ZME_UZB (Fibaro Auge Gen.2)/ HM-USB2 (Thermostat | Hutschienen Relais | 1-/2fach Schalter) / Enigma2 / PhilipsTV / Philips HUE (GO|Bulb|Stripe (plus)) / Somfy IO Rollos / BOSCH HSG636XS6 / SONOS (P1, P3, P5 2.Gen, SUB, Bar)

yoda_gh

#19
Gerne! Ich habe erstmal meine ModBusAttr-Definitionen weiter oben im Thread (https://forum.fhem.de/index.php/topic,117853.msg1157410.html#msg1157410 und https://forum.fhem.de/index.php/topic,117853.msg1158469.html#msg1158469) um die Batterie-Werte ergänzt.

Und hier die wichtigsten Eckpunkte zur Steuerung - wenn Du mehr Details brauchst, gerne fragen. :)

In der Früh setzt ein at-Device je nach erwarteter Sonnenintensität das Lade-Maximum auf 200 oder 2000 Watt:


define gen24_bat_morgens at *05:10\
{\
  if (ReadingsVal("dwd","globalstrhlg_11bis15",0) > 350)\
  {\
    fhem("set gen24 BatConfigMaxChargeWatt 200") \
  } else {\
    fhem("set gen24 BatConfigMaxChargeWatt 2000") \
  }\
}


Um 11:00 wird dann in jedem Fall auf 2000 W geschaltet:


define gen24_bat_mittags at *11:05\
{\
  if (ReadingsVal("gen24","BatConfigMaxChargeWatt",0) < 1700)\
  {\
    fhem("set gen24 BatConfigMaxChargeWatt 1700") \
  }\
}


Ich habe nur den Batterie-Minimalausbau, also 5,12 kWh, die 2000 W habe ich gewählt, um die Batterie etwas schonender aufzuladen als in der Standard-Konfiguration vom Gen24, der sie sonst in einer Stunde vollballert.

Hier noch die Definition des dwd-Devices:


defmod dwd DWD_OpenData
attr dwd forecastDays 0
attr dwd forecastProperties Td, TTT, FX1, Neff, RR1c, R110,R105,Rad1h,Sa3
attr dwd forecastResolution 1
attr dwd forecastStation K4xxx
attr dwd userReadings globalstrhlg_11bis15 { (ReadingsVal($name,"fc0_12_Rad1h",0) + ReadingsVal($name,"fc0_13_Rad1h",0) + ReadingsVal($name,"fc0_14_Rad1h",0) + ReadingsVal($name,"fc0_15_Rad1h",0)) / (4*3.6) }


(In Kurzfassung: hole einige Werte (TTT = Temperatur, ..., Rad1h = Sonnen-Globalstrahlung für eine Std) aus der Wettervorhersage nur für den aktuellen Tag (0 Days) für die Wetterstation K4xxx in einer Auflösung von einer Stunde. Das userReading addiert dann einfach die Stundenwerte für 12 Uhr, 13 Uhr, 14 Uhr und 15 Uhr. Was die anderen komischen Kürzel bedeuten und wie Du an die Station-ID für Deine Stadt kommst, ist in der Doku zu DWD_OpenData beschrieben - wenn was unklar ist, gerne fragen. :) )

Die Globalstrahlung ist nicht perfekt, da sie nicht linear mit der PV-Leistung korreliert - im Winter bekomme ich bei deutlich niedrigerer Globalstrahlung volle PV-Leistung als im Sommer, aber es funktionert so trotzdem schon diverse Monate ganz gut.

Wenn ich mich richtig erinnere, hatte ich mir damals auch den Wolkenbedeckungs-Grad und die Sonnenstunden im Vergleich zur PV-Leistung angeschaut, aber die Globalstrahlung schien mir trotzdem am besten zu korrelieren.

yoda_gh

Was mir noch (immer) nicht gefällt, ist, dass der Gen24 an trüben Tagen x-fach schnell zwischen Laden und Entladen der Batterie hin- und herschaltet, wenn die PV-Leistung unseren Stromverbrauch nur zeitweise abdeckt. Ich dachte eigentlich, das Umschalten zwischen Entladen und Laden wäre der Haupt-Stress für einen Akku (neben 0% oder 100% Entladen/Laden), daher ist mein Plan, das Entladen komplett zu verbieten, bis der Akku einen gewissen Füllstand erreicht hat - in der Hoffnung, damit die Lebensdauer der Akku-Zellen zu verlängern.

Ob das aber wirklich notwendig/sinnvoll ist, weiß ich nicht und umgesetzt habe ich es auch noch nicht...

Syon

#21
Darf ich mich mal einharken?
Ich habe
define Fronius_GEN24 fronius 192.168.2.10
attr Fronius_GEN24 icon measure_photovoltaic_inst
attr Fronius_GEN24 room Solar
#attr fronius delay 600
#
# FileLog Definition
#
define FroniusLog.File FileLog ./log/Fronius-%Y-%m.log Fronius_GEN24:Inverter_Common_PAC_Value|Fronius_GEN24:Inverter_Common_DAY_ENERGY_Value
attr FroniusLog.File icon icoLog
attr FroniusLog.File logtype text
attr FroniusLog.File nrarchive 12
attr FroniusLog.File room Solar
#
# Chart
#
define SVG_FroniusLog.File SVG FroniusLog.File:SVG_FroniusLog.File:CURRENT
attr SVG_FroniusLog.File room Solar
attr SVG_FroniusLog.File title "Solarleistung Min $data{min1}kW, Max $data{max1}kW, Letzter $data{currval1}kW"

Aber zum einen wird nur Inverter_Common_PAC_Value geloggt und zum anderen liefert mein Gen24 bei den Tageswerten nur 0

2022-08-26_19:47:36 Fronius_GEN24 connected
2022-08-26_19:47:36 Fronius_GEN24 API_BaseURL: /solar_api/v1/
2022-08-26_19:47:36 Fronius_GEN24 API_CompatibilityRange: 1.7-6
2022-08-26_19:47:36 Fronius_GEN24 API_APIVersion: 1
2022-08-26_19:47:41 Fronius_GEN24 DeviceInfo_Inverter_1_DT: 1
2022-08-26_19:47:41 Fronius_GEN24 DeviceInfo_Inverter_1_Serial: xxx
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Inverters_1_DT: 1
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Inverters_1_E_Day: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Inverters_1_E_Year: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Inverters_1_P: 1.43144738674164
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Inverters_1_E_Total: 967224.642222222
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Version: 12
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_rel_SelfConsumption: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_P_PV: 109.232788085938
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_E_Total: 967224.642222222
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_rel_Autonomy: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_P_Akku: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_E_Year: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_Mode: produce-only
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_P_Load: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_Meter_Location: unknown
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_BackupMode: false
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_E_Day: 0
2022-08-26_19:47:46 Fronius_GEN24 PowerFlow_Site_P_Grid: 0
2022-08-26_19:47:46 Fronius_GEN24 MPPT1_DC_W: 0
2022-08-26_19:47:46 Fronius_GEN24 MPPT2_DC_W: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_TOTAL_ENERGY_Values_1: 967224.642222222
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_TOTAL_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_PAC_Unit: W
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_PAC_Values_1: 0.951520919799805
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_YEAR_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_YEAR_ENERGY_Values_1: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_DAY_ENERGY_Values_1: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_System_DAY_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_UAC_L2_Unit: V
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_UAC_L2_Value: 237.169464111328
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_IAC_L2_Value: 0.0178749337792397
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_IAC_L2_Unit: A
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_UAC_L1_Value: 237.860488891602
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_UAC_L1_Unit: V
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_IAC_L3_Value: 0.0165197961032391
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_IAC_L3_Unit: A
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_IAC_L1_Unit: A
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_IAC_L1_Value: 0.0177133418619633
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_UAC_L3_Value: 237.573181152344
2022-08-26_19:47:52 Fronius_GEN24 Inverter_3P_UAC_L3_Unit: V
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IAC_Value: 0.052108071744442
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IAC_Unit: A
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UDC_2_Value: 482.462158203125
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UDC_2_Unit: V
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UDC_3_Value: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UDC_3_Unit: V
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_FAC_Unit: Hz
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_FAC_Value: 49.987922668457
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IDC_Value: 0.126352742314339
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IDC_Unit: A
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IDC_2_Value: 0.11182726174593
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IDC_2_Unit: A
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UAC_Unit: V
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UAC_Value: 237.720748901367
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_TOTAL_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_TOTAL_ENERGY_Value: 967224.642222222
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_SAC_Unit: VA
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_SAC_Value: 12.3756160736084
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_DAY_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_DAY_ENERGY_Value: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UDC_Unit: V
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_UDC_Value: 433.023223876953
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_PAC_Unit: W
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_PAC_Value: 0.951520919799805
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_YEAR_ENERGY_Value: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_YEAR_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_DeviceStatus_ErrorCode: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_DeviceStatus_InverterState: Running
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_DeviceStatus_StatusCode: 7
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IDC_3_Unit: A
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Common_IDC_3_Value: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_PAC_Unit: W
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_PAC_Value: 0.951520919799805
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_TOTAL_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_TOTAL_ENERGY_Value: 967224.642222222
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_YEAR_ENERGY_Value: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_YEAR_ENERGY_Unit: Wh
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_DeviceStatus_InverterState: Running
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_DeviceStatus_StatusCode: 7
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_DeviceStatus_ErrorCode: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_DAY_ENERGY_Value: 0
2022-08-26_19:47:52 Fronius_GEN24 Inverter_Cumulation_DAY_ENERGY_Unit: Wh

Habe ich irgendwas übersehen?

ZeitlerW

Hi Syon,

Du hast leider den Thread verwechselt, da hier über die Modbus - Anbindung diskutiert wird. Hier gehts zum API - Modul https://forum.fhem.de/index.php/topic,113850.0.html

... Aber ja, ich hatte das Problem mit dem Inverter_Common_PAC_Value und habe dies wie folgt über Modbus gelöst:

defmod gen24 ModbusAttr 1 30 192.168.6.215:502 TCP
attr gen24 DbLogInclude (Limit|ACPower|ArbeitGesamt|statArbeitGesamtDayLast|statArbeitGesamtHourLast)
attr gen24 dev-h-combine 125
attr gen24 dev-h-defFormat %.2f
attr gen24 dev-h-defUnpack f>
attr gen24 event-on-change-reading .*
attr gen24 obj-h40091-len 2
attr gen24 obj-h40091-reading ACPower
attr gen24 obj-h40101-len 2
attr gen24 obj-h40101-poll 1
attr gen24 obj-h40101-reading ACEnergy
attr gen24 obj-h40107-len 2
attr gen24 obj-h40107-poll 1
attr gen24 obj-h40107-reading DCPower
attr gen24 obj-h40109-len 2
attr gen24 obj-h40109-poll 1
attr gen24 obj-h40109-reading CabinetTemperature
attr gen24 obj-h40242-format %d
attr gen24 obj-h40242-len 1
attr gen24 obj-h40242-reading Limit
attr gen24 obj-h40242-set 1
attr gen24 obj-h40242-setexpr $val
attr gen24 obj-h40242-unpack s>
attr gen24 obj-h40243-len 1
attr gen24 obj-h40243-reading TimeWindow
attr gen24 obj-h40243-set 1
attr gen24 obj-h40243-setexpr $val
attr gen24 obj-h40243-unpack s>
attr gen24 obj-h40244-len 1
attr gen24 obj-h40244-reading TimePeriod
attr gen24 obj-h40244-set 1
attr gen24 obj-h40244-setexpr $val
attr gen24 obj-h40244-unpack s>
attr gen24 obj-h40245-len 1
attr gen24 obj-h40245-reading TimeRamp
attr gen24 obj-h40245-set 1
attr gen24 obj-h40245-setexpr $val
attr gen24 obj-h40245-unpack s>
attr gen24 obj-h40246-format %d
attr gen24 obj-h40246-len 1
attr gen24 obj-h40246-reading Enabled
attr gen24 obj-h40246-set 1
attr gen24 obj-h40246-setexpr $val
attr gen24 obj-h40246-unpack n
attr gen24 room Zaehler
attr gen24 userReadings ArbeitGesamt { sprintf("%.3f",ReadingsVal($name,"ACEnergy",0)/1000)}


lG
Wolfgang

Syon

ZitatDu hast leider den Thread verwechselt
Oups... sorry  ::)

Zitat... und habe dies wie folgt über Modbus gelöst:
Das teste ich direkt mal, Danke

geoker

Hallo,
zum einen: Die bisherigen Dinge haben sehr geholfen. Danke!

Ein Hinweis: Fronius stellt die Schnittstellen-Doku bereit. Man muss sich nur mit einer E-Mail anmelden:
z.B. Hier:
https://www.fronius.com/en/solar-energy/installers-partners/technical-data/all-products/system-monitoring/open-interfaces/modbus-tcp

Ich selber habe jetzt einen neuen Stromtarif bekommen: Niedertarif 30Ct/kWh 22-6h; Hochtarif 60Ct/kWh
Da lohnt sich die Nachtladung.

Anmerkung: Da ich aus der Batterie keinen Strom ins Netz Einspeise, sondern nur selbst verbrauche, macht es nichts, wenn "Graustrom" dabei ist. Die EEG Vergütung (8.5Ct/kWh) erhalte ich nur für EEG-Strom Einspeisung aus der PV (wenn die Batterie voll ist). Wer will die schon eine Einspeisevergütung, wenn man Faktor 5 mehr bezahlt, als man bekommt? Damit erschleiche ich mir also keine "EEG-Förderung" und das Vorgehen ist so auch sauber.


Die Nachladefunktion selber ist ein DOIF
Variablen:

gen24 / Das Modbus-TCP-Modul
Tarifinfo /  "Dummy" der HT/NT im FHEM nun ermittelt (über at gesteuert)
SpeicherExtSOC /  "Dummy" der die "Zielnachladung" als SOC enthält. Dort soll später mal abhängig von der Wetterprognose ein Nachlade-wert in der NT-Zeit eingespeichert werden. (Regen&Schnee z.B. 96%, Sonne ab 8:00 z.B. 20%)




## 1 Lade mit 1.3kW damit in 8h 10 kWh sicher geladen werden können
([Tarifinfo:state] eq "NT" and [gen24:BatteryChargePercent] <= ([SpeicherExtSOC]-5))
   ({Log 1, "Speicher ext. Laden"}, set gen24 BatConfigMaxDischargeWatt -1300)
## 2 Reduziere langsam die Ladeleistung
DOELSEIF
([Tarifinfo:state] eq "NT" and [gen24:BatteryChargePercent] <= ([SpeicherExtSOC]-3))
   ({Log 1, "Speicher ext. Laden"}, set gen24 BatConfigMaxDischargeWatt -750)
## 3 Reduziere weiter die ladeleistung
DOELSEIF
([Tarifinfo:state] eq "NT" and [gen24:BatteryChargePercent] <= ([SpeicherExtSOC]-1))
   ({Log 1, "Speicher ext. Laden"}, set gen24 BatConfigMaxDischargeWatt -250)
## 4 Totband im Bereich um Ziel-0.99% bis Ziel SOC-0.01% - Dort wird entweder weiter geladen oder das laden nicht gestartet
DOELSEIF
([Tarifinfo:state] eq "NT" and [gen24:BatteryChargePercent] < ([SpeicherExtSOC]-0))
   ({Log 1, "änder nichts am Zustand = Totband"})
## 5 -  Ziel SOC erreicht - Laden beenden
DOELSEIF ([Tarifinfo:state] eq "NT" and [gen24:BatteryChargePercent] == [SpeicherExtSOC])
   ({Log 1, "Speicher ext. Pause"}, set gen24 BatConfigMaxDischargeWatt 0)
## 6 - Default setze in autmatischen Regelmodus im vollen Bereich
DOELSE
   ({Log 1, "Speicher ext. Laden beenden"}, set gen24 BatConfigMaxDischargeWatt 10240.0)



Vielleicht nützt es ja wem für Copy&Paste.
Wenn irgendwer einen tipp hat wie man den "Wetterabhängigen Energiebedarf" pfiffig ermittelt und den SOC-Setzt  - Danke :)

Marlen

Hi, die Verbindung hab ich soweit hin bekommen,
aber wie kann ich jetzt die min. Ladeleistung einstellen?

LG
  Marlen

Marlen

Siehe Anhang

Ich möchte diese Regeln per Modbus aktivieren bzw. deaktivieren.
Ideal wäre natürlich die Werte per Modbus anzupassen.

LG
Marlen

mediastudio

Hallo, ich habe da ein Problem das wohl bestimmt gelöst ist.
Ich habe nun auch ein Fronius symo gen24 8.0 plus mit Speicher.
Die Anbindung über Modbus TCP mit FHEM funktioniert.
ich habe auch die Modbus Register, leider zeigen die mir Werte mit denen ich nichts anfangen kann.
Ich brauche den Momentanwert der PV-Leistung. Mit meinem SMA ist das kein Problem gewesen,
aber hier bin ich am verzweifeln. Wer kann mir denn da mal helfen.

Marlen

Das geht mit dem Fronius Modul.

LG
  Marlen

sky64

Stimmt das Datenformat int bzw float?
Das muss mit der Einstellung im Wechselrichter übereinstimmen.
Außerdem muss man von den Registernummer aus dem Fronius xml immer 1 abziehen.


Für die aktuelle Leistung kann man auch über die Web-API abfragen.
Das Fronius-Modul macht das auch so. Ich habe es aber wieder aufgegeben, da dort immer sporadisch falsche Zahlen kamen. Ich frage die API selbst per HTTPMOD ab und das läuft stabil.
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

mediastudio

Hallo, ich hänge hier am modbus fest.
Die Ankopplung Modbus / TCP kein Problem, Daten in Fhem werden ausgelesen und auch
aktualisiert, aber mit den Weten kann ich nichts anfangen sind für mich noch
leider nicht richtig dargestellt. Ich habe seit dem 30.02.2023 einen 
Fronius Symo Gen24 8.0 PLUS Solar PV HybridWechselrichter und ein
Fronius Smart Meter TS 65A-3 Bidirektionale Zähler das über den Modbus mit dem
Dem Wechselrichter verbunden ist. Zusätzlich wurde auch ein BYD Batteriespeicher
B-Box Premium HVS 7.7 kWh installiert. Zuvor war ein SMA Wechselrichter ohne Speicher
im Betrieb. Vom SMA habe ich die Werte ohne Probleme sauber angezeigt.
Ich brauche unbedingt den ,,Aktuelle Leistung von der PV-Anlage" dann auch vom Smart Meter
ob Leistung ins Netz gespeist oder gezogen wird.
So sieht es bei mir aus, ich bekomme von allen Registern Werte.

################################ 
### Fronius symo gen24 8.0 plus
################################
define gen24 ModbusAttr 1 10 192.168.10.49:502 TCP
attr gen24 dev-h-defExpr $val & 0x1FFFFFFF
attr gen24 dev-h-defLen 2
attr gen24 dev-h-defPoll 1
attr gen24 dev-h-defUnpack N
attr gen24 devStateIcon ok:on fault:message_attention warnings:message_attention
attr gen24 room FRONIUS
attr gen24 obj-h40109-format %.2f
attr gen24 obj-h40109-len 2
attr gen24 obj-h40109-reading Temperatur
attr gen24 obj-h40109-unpack f>
attr gen24 obj-h40344-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40344-len 1
attr gen24 obj-h40344-reading BatteryDischargeWatt
attr gen24 obj-h40344-unpack n
attr gen24 obj-h40073-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40073-reading ACCurrentPhaseA
attr gen24 obj-h40075-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40075-reading ACCurrentPhaseB
attr gen24 obj-h40077-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40077-reading ACCurrentPhaseC
attr gen24 obj-h40058-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40085-reading ACVoltagePhaseA
attr gen24 obj-h40087-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40087-reading ACVoltagePhaseB
attr gen24 obj-h40089-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40089-reading ACVoltagePhaseC
attr gen24 obj-h40091-format %.0f
attr gen24 obj-h40091-reading ACPower
attr gen24 obj-h40093-expr ($val  & 0x1FFFFFFF ) / 500
attr gen24 obj-h40093-format %.0f
attr gen24 obj-h40093-len 2
attr gen24 obj-h40093-reading ACFrequency
attr gen24 obj-h40117-format %s
attr gen24 obj-h40117-len 1
attr gen24 obj-h40117-map 1:off,2:sleeping,3:starting,4:active,5:throttled,6:shutdown,7:fault,8:standby
attr gen24 obj-h40117-reading status
attr gen24 obj-h40117-unpack n
attr gen24 obj-h40196-expr $val / 1000
attr gen24 obj-h40196-format %.2f
attr gen24 obj-h40196-len 4
attr gen24 obj-h40196-reading ACActEnergy
attr gen24 obj-h40196-unpack Q>
attr gen24 obj-h40267-format %d
attr gen24 obj-h40267-len 1
attr gen24 obj-h40267-reading DCPowerScale
attr gen24 obj-h40267-unpack s>
attr gen24 obj-h40304-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40304-len 1
attr gen24 obj-h40304-reading DCPowerMPPT2
attr gen24 obj-h40304-unpack n
attr gen24 obj-h40324-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40324-reading BatteryChargeWatt
attr gen24 obj-h40324-unpack n
attr gen24 stateFormat Wirkleistung: Watt  Aktuelle Leistung
attr gen24 userattr obj-h30775-reading obj-h30775-unpack obj-h30775-poll obj-h30775-len
attr gen24 obj-h30201-map 35:fault,303:off,307:ok,455:warnings
attr gen24 obj-h30211-map 336:Contact manufacturer, 337:Contact installer, 338:invalid, 887:none
attr gen24 obj-h40355-len 1
attr gen24 obj-h40355-reading BatConfigMaxReferenceWatt
attr gen24 obj-h40355-unpack n
attr gen24 obj-h40358-format %s
attr gen24 obj-h40358-len 1
attr gen24 obj-h40358-map 0:none,1:chargeMax,2:dischrMax,3:bothMax
attr gen24 obj-h40358-reading BatConfigMaxEnabled
attr gen24 obj-h40358-set 1
attr gen24 obj-h40358-unpack n
attr gen24 obj-h40360-expr $val / 100
attr gen24 obj-h40360-len 1
attr gen24 obj-h40360-reading BatConfigReserve
attr gen24 obj-h40360-unpack n
attr gen24 obj-h40361-expr $val / 100
attr gen24 obj-h40361-len 1
attr gen24 obj-h40361-reading BatteryChargePercent
attr gen24 obj-h40361-unpack n
attr gen24 obj-h40364-format %s
attr gen24 obj-h40364-len 1
attr gen24 obj-h40364-map 1:off,2:empty,3:discharging,4:charging,5:full,6:holding,7:testing
attr gen24 obj-h40364-reading BatteryState
attr gen24 obj-h40364-unpack n
attr gen24 obj-h40365-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-len 1
attr gen24 obj-h40365-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-reading BatConfigMaxDischargeWatt
attr gen24 obj-h40365-set 1
attr gen24 obj-h40365-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40365-unpack s>
attr gen24 obj-h40366-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-len 1
attr gen24 obj-h40366-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-reading BatConfigMaxChargeWatt
attr gen24 obj-h40366-set 1
attr gen24 obj-h40366-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40366-unpack s>

Wer kann mir denn da auf die Sprünge helfen.
Gruß Wilfried

sky64

Bei mir sieht es so aus.
Attributes:
   DbLogExclude .*
   event-min-interval BYD_SoC:300
   event-on-change-reading BYD_SoC,Isolation,ChaSt
   obj-h40004-len 8
   obj-h40004-poll 900
   obj-h40004-reading Hersteller
   obj-h40004-unpack A*
   obj-h40091-expr $val/1
   obj-h40091-len 2
   obj-h40091-poll 30
   obj-h40091-reading AC-Power
   obj-h40091-unpack f>
   obj-h40109-format %.2f
   obj-h40109-len 2
   obj-h40109-poll 300
   obj-h40109-reading Temperatur
   obj-h40109-unpack f>
   obj-h40235-expr $val/100
   obj-h40235-poll 300
   obj-h40235-reading Isolation
   obj-h40325-expr $val/100000
   obj-h40325-len 2
   obj-h40325-min 1
   obj-h40325-poll 300
   obj-h40325-reading Summe_Ladung
   obj-h40325-unpack N
   obj-h40345-expr $val/100000
   obj-h40345-len 2
   obj-h40345-min 1
   obj-h40345-poll 300
   obj-h40345-reading Summe_Entladung
   obj-h40345-unpack N
   obj-h40355-poll 300
   obj-h40355-reading WChaMax
   obj-h40358-poll 300
   obj-h40358-reading StorCtl_Mod
   obj-h40358-set 1
   obj-h40360-expr $val/100
   obj-h40360-format %.2f
   obj-h40360-max 100
   obj-h40360-min 7
   obj-h40360-poll 60
   obj-h40360-reading BYD_min_Reserve
   obj-h40360-set 1
   obj-h40360-setexpr $val * 100
   obj-h40361-expr $val/100
   obj-h40361-format %.2f
   obj-h40361-poll 60
   obj-h40361-reading BYD_SoC
   obj-h40364-poll 60
   obj-h40364-reading ChaSt
   obj-h40365-expr $val/100
   obj-h40365-format %.2f
   obj-h40365-max 100
   obj-h40365-min 0
   obj-h40365-poll 60
   obj-h40365-reading BYD_max_discharge
   obj-h40365-set 1
   obj-h40365-setexpr $val * 100
   obj-h40366-expr $val/100
   obj-h40366-format %.2f
   obj-h40366-max 100
   obj-h40366-min 0
   obj-h40366-poll 60
   obj-h40366-reading BYD_max_charge
   obj-h40366-set 1
   obj-h40366-setexpr $val * 100


Wie gesagt mit dem Datenmodell float im WR!
RaspBerryPi + RFXTRX + GPIO4-1W-Sensoren + EMT7110(Strom/Spannungsmesser) an RF-Soap-Nachbau + 320x240 LowCost LCD-Mudul

mediastudio

Hallo, ich bekomme die Fehlermeldunggen 24: unknown attribute DbLogExclude. Type 'attr gen24 ?' for a detailed list.
und es wird so nur BYD_SoC als Wert aktualisiert. Ich bin habe eigentlich alle Fronius Datamanager Register Map als Excel Tabelle.
ich bekomme ja auch Werte ausgelesen ich kann die Daten nur nicht richtig zuordnen.
Das habe ich nun gemacht, habe deine attr eingetragen, aber funktioniert bei mir noch nicht.

################################ 
### Fronius symo gen24 8.0 plus
################################
define gen24 ModbusAttr 1 10 192.168.10.49:502 TCP
attr gen24 room FRONIUS
attr gen24 alias Fronius symo gen24 8.0 plus

attr gen24 DbLogExclude .*
attr gen24 event-min-interval BYD_SoC:10
attr gen24 event-on-change-reading BYD_SoC,Isolation,ChaSt
attr gen24 obj-h40004-len 8
attr gen24 obj-h40004-poll 900
attr gen24 obj-h40004-reading Hersteller
attr gen24 obj-h40004-unpack A*
attr gen24 obj-h40091-expr $val/1
attr gen24 obj-h40091-len 2
attr gen24 obj-h40091-poll 10
attr gen24 obj-h40091-reading AC-Power
attr gen24 obj-h40091-unpack f>
attr gen24 obj-h40109-format %.2f
attr gen24 obj-h40109-len 2
attr gen24 obj-h40109-poll 10
attr gen24 obj-h40109-reading Temperatur
attr gen24 obj-h40109-unpack f>
attr gen24 obj-h40235-expr $val/100
attr gen24 obj-h40235-poll 10
attr gen24 obj-h40235-reading Isolation
attr gen24 obj-h40325-expr $val/100000
attr gen24 obj-h40325-len 2
attr gen24 obj-h40325-min 1
attr gen24 obj-h40325-poll 10
attr gen24 obj-h40325-reading Summe_Ladung
attr gen24 obj-h40325-unpack N
attr gen24 obj-h40345-expr $val/100000
attr gen24 obj-h40345-len 2
attr gen24 obj-h40345-min 1
attr gen24 obj-h40345-poll 10
attr gen24 obj-h40345-reading Summe_Entladung
attr gen24 obj-h40345-unpack N
attr gen24 obj-h40355-poll 10
attr gen24 obj-h40355-reading WChaMax
attr gen24 obj-h40358-poll 10
attr gen24 obj-h40358-reading StorCtl_Mod
attr gen24 obj-h40358-set 1
attr gen24 obj-h40360-expr $val/100
attr gen24 obj-h40360-format %.2f
attr gen24 obj-h40360-max 100
attr gen24 obj-h40360-min 7
attr gen24 obj-h40360-poll 10
attr gen24 obj-h40360-reading BYD_min_Reserve
attr gen24 obj-h40360-set 1
attr gen24 obj-h40360-setexpr $val * 100
attr gen24 obj-h40361-expr $val/100
attr gen24 obj-h40361-format %.2f
attr gen24 obj-h40361-poll 60
attr gen24 obj-h40361-reading BYD_SoC
attr gen24 obj-h40364-poll 10
attr gen24 obj-h40364-reading ChaSt
attr gen24 obj-h40365-expr $val/100
attr gen24 obj-h40365-format %.2f
attr gen24 obj-h40365-max 100
attr gen24 obj-h40365-min 0
attr gen24 obj-h40365-poll 10
attr gen24 obj-h40365-reading BYD_max_discharge
attr gen24 obj-h40365-set 1
attr gen24 obj-h40365-setexpr $val * 100
attr gen24 obj-h40366-expr $val/100
attr gen24 obj-h40366-format %.2f
attr gen24 obj-h40366-max 100
attr gen24 obj-h40366-min 0
attr gen24 obj-h40366-poll 10
attr gen24 obj-h40366-reading BYD_max_charge
attr gen24 obj-h40366-set 1
attr gen24 obj-h40366-setexpr $val * 100

mediastudio

Das Funktioniert in soweit das die Werte alle 10 Sekunden erneuert werden.
Aber mir sagen die noch nichts.

################################ 
### Fronius symo gen24 8.0 plus
################################
define gen24 ModbusAttr 1 10 192.168.10.49:502 TCP
#attr gen24 dev-h-defExpr $val & 0x1FFFFFFF
attr gen24 dev-h-defLen 2
attr gen24 dev-h-defPoll 1
#attr gen24 dev-h-defUnpack N
#attr gen24 devStateIcon ok:on fault:message_attention warnings:message_attention
attr gen24 room FRONIUS
attr gen24 alias Fronius symo gen24 8.0 plus
attr gen24 obj-h40109-format %.2f
attr gen24 obj-h40109-len 2
attr gen24 obj-h40109-reading Temperatur
attr gen24 obj-h40109-unpack f>
attr gen24 obj-h40344-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40344-len 1
attr gen24 obj-h40344-reading BatteryDischargeWatt
attr gen24 obj-h40344-unpack n
attr gen24 obj-h40073-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40073-reading ACCurrentPhaseA
attr gen24 obj-h40075-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40075-reading ACCurrentPhaseB
attr gen24 obj-h40077-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40077-reading ACCurrentPhaseC
attr gen24 obj-h40058-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40085-reading ACVoltagePhaseA
attr gen24 obj-h40087-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40087-reading ACVoltagePhaseB
attr gen24 obj-h40089-expr ($val  & 0x1FFFFFFF ) / 1000
attr gen24 obj-h40089-reading ACVoltagePhaseC
attr gen24 obj-h40091-format %.0f
attr gen24 obj-h40091-reading ACPower
attr gen24 obj-h40093-expr ($val  & 0x1FFFFFFF ) / 500
attr gen24 obj-h40093-format %.0f
attr gen24 obj-h40093-len 2
attr gen24 obj-h40093-reading ACFrequency
attr gen24 obj-h40117-format %s
attr gen24 obj-h40117-len 1
attr gen24 obj-h40117-map 1:off,2:sleeping,3:starting,4:active,5:throttled,6:shutdown,7:fault,8:standby
attr gen24 obj-h40117-reading status
attr gen24 obj-h40117-unpack n
attr gen24 obj-h40196-expr $val / 1000
attr gen24 obj-h40196-format %.2f
attr gen24 obj-h40196-len 4
attr gen24 obj-h40196-reading ACActEnergy
attr gen24 obj-h40196-unpack Q>
attr gen24 obj-h40267-format %d
attr gen24 obj-h40267-len 1
attr gen24 obj-h40267-reading DCPowerScale
attr gen24 obj-h40267-unpack s>
attr gen24 obj-h40304-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40304-len 1
attr gen24 obj-h40304-reading DCPowerMPPT2
attr gen24 obj-h40304-unpack n
attr gen24 obj-h40324-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40324-reading BatteryChargeWatt
attr gen24 obj-h40324-unpack n
attr gen24 stateFormat Wirkleistung: Watt  Aktuelle Leistung
attr gen24 userattr obj-h30775-reading obj-h30775-unpack obj-h30775-poll obj-h30775-len
attr gen24 obj-h30201-map 35:fault,303:off,307:ok,455:warnings
attr gen24 obj-h30211-map 336:Contact manufacturer, 337:Contact installer, 338:invalid, 887:none
attr gen24 obj-h40355-len 1
attr gen24 obj-h40355-reading BatConfigMaxReferenceWatt
attr gen24 obj-h40355-unpack n
attr gen24 obj-h40358-format %s
attr gen24 obj-h40358-len 1
attr gen24 obj-h40358-map 0:none,1:chargeMax,2:dischrMax,3:bothMax
attr gen24 obj-h40358-reading BatConfigMaxEnabled
attr gen24 obj-h40358-set 1
attr gen24 obj-h40358-unpack n
attr gen24 obj-h40360-expr $val / 100
attr gen24 obj-h40360-len 1
attr gen24 obj-h40360-reading BatConfigReserve
attr gen24 obj-h40360-unpack n
attr gen24 obj-h40361-expr $val / 100
attr gen24 obj-h40361-len 1
attr gen24 obj-h40361-reading BatteryChargePercent
attr gen24 obj-h40361-unpack n
attr gen24 obj-h40364-format %s
attr gen24 obj-h40364-len 1
attr gen24 obj-h40364-map 1:off,2:empty,3:discharging,4:charging,5:full,6:holding,7:testing
attr gen24 obj-h40364-reading BatteryState
attr gen24 obj-h40364-unpack n
attr gen24 obj-h40365-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-len 1
attr gen24 obj-h40365-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-reading BatConfigMaxDischargeWatt
attr gen24 obj-h40365-set 1
attr gen24 obj-h40365-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40365-unpack s>
attr gen24 obj-h40366-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-len 1
attr gen24 obj-h40366-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-reading BatConfigMaxChargeWatt
attr gen24 obj-h40366-set 1
attr gen24 obj-h40366-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40366-unpack s>