FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: holle75 am 20 Oktober 2025, 19:49:23

Titel: DOIF_Readings|event_Readings mit Berechnung und Limits | InselPV, AC-Coupling
Beitrag von: holle75 am 20 Oktober 2025, 19:49:23
Saublöde Frage:

defmod XtenderSet_Max_Solar DOIF ([Studer485_VT:PV_Power_W])\
    (set openDTU/1164a011518f/cmd/limit_nonpersistent_absolute ZuBerechnendeGesamtleistung)
attr XtenderSet_Max_Solar DOIF_Readings ZuBerechnendeGesamtleistung:(2800 - [Studer485_VT:PV_Power_W])
attr XtenderSet_Max_Solar do always

wird ZuBerechnendeGesamtleistung im set den Mikrowechselrichters dann mit dem aktuellen Wert setten, oder mit dem alten Wert?
Ich weiss nichtmal, wie ich die Frage sinnvoll formulieren soll, aber ich hoffe, ihr wisst was ich meine?

Ich möchte durch Event PV_Power_W der Hauptsolaranlage dem Mikrowechselrichter mitteilen, dass er max die Differenz zu 2800W generieren darf.

EDIT: und eine weniger blöde Frage, wie bekomme ich ZuBerechnendeGesamtleistung über webCmd, StateFormat in Kombi mit DevStateIcon angezeigt?

Die volle Definition sieht gerade so aus und ich bekomme ZuBerechnendeGesamtleistung nicht eingebaut

defmod XtenderSet_Max_Solar DOIF ([Studer485_VT:PV_Power_W])\
    (set openDTU/1164a011518f/cmd/limit_nonpersistent_absolute ZuBerechnendeGesamtleistung)
attr XtenderSet_Max_Solar DOIF_Readings ZuBerechnendeGesamtleistung:(2800 - [Studer485_VT:PV_Power_W])
attr XtenderSet_Max_Solar devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1.*:general_an@green:disable
attr XtenderSet_Max_Solar do always
Titel: Aw: DOIF_Readings werden wann berechnet?
Beitrag von: Damian am 20 Oktober 2025, 20:11:29
DOIF_Readings werden zuerst berechnet, um sie dann in der Bedingung auszuwerten.

also:

defmod XtenderSet_Max_Solar DOIF ([$SELF:ZuBerechnendeGesamtleistung] > 0)
...

Deine Lösung triggert zwar auf das gleiche Event, sollte aber dennoch funktionieren, wenn du den set-Befehl korrekt definierst:

(set openDTU/1164a011518f/cmd/limit_nonpersistent_absolute [$SELF:ZuBerechnendeGesamtleistung])
Noch einfacher geht es allerdings mit dem Einzeiler ohne zusätzliche Attribute:

defmod XtenderSet_Max_Solar DOIF {fhem_set("openDTU/1164a011518f/cmd/limit_nonpersistent_absolute ".(2800-[Studer485_VT:PV_Power_W])}
Titel: Aw: DOIF_Readings werden wann berechnet?
Beitrag von: holle75 am 20 Oktober 2025, 20:19:14
Ah, lag ich also mal wieder umfassend komplett daneben mit meiner Syntax ;)
Danke Damian
Titel: Aw: DOIF_Readings werden wann berechnet?
Beitrag von: holle75 am 20 Oktober 2025, 20:46:56
Es ist jetzt das geworden. DOIF_readings noch gegen event_Readings getauscht um auch extern zugreifen zu können. Und mit diesem stateFormat wird auch Info/Icon untereinander angezeigt.

defmod XtenderSet_Max_Solar DOIF ([$SELF:ZuBerechnendeGesamtleistung] > 0 and [$SELF:ZuBerechnendeGesamtleistung] < 2000)\
(set openDTU/1164a011518f/cmd/limit_nonpersistent_absolute [$SELF:ZuBerechnendeGesamtleistung])
attr XtenderSet_Max_Solar devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1.*:general_an@green:disable
attr XtenderSet_Max_Solar do always
attr XtenderSet_Max_Solar event_Readings ZuBerechnendeGesamtleistung:(2800 - [Studer485_VT:PV_Power_W])
attr XtenderSet_Max_Solar stateFormat state\
<br>\
ZuBerechnendeGesamtleistung
Titel: Aw: DOIF_Readings werden wann berechnet?
Beitrag von: holle75 am 21 Oktober 2025, 10:03:08
Kann ich in event_Readings auch noch berechnen, dass wenn der Wert größer als 2000 ist, 2000 ausgespuckt wird? Mal wieder die Frage nach der Syntax ...

A la
userReadings
Power__W_Bereinigt:Power__W.* {if (ReadingsVal("Xtender_AC_in","Power__W",0) < 0) {return 0;} else {return ReadingsVal("Xtender_AC_in","Power__W",0);};}
Titel: Aw: DOIF_Readings|event_Readings werden wann berechnet?
Beitrag von: Damian am 21 Oktober 2025, 11:38:04
Ja das geht. Ich würde es mit dem ternären Operator in Perl lösen:

attr XtenderSet_Max_Solar event_Readings Power__W_Bereinigt: {[Xtender_AC_in:Power__W] < 0 ? 0 : [Xtender_AC_in:Power__W]}
Titel: Aw: DOIF_Readings|event_Readings werden wann berechnet?
Beitrag von: holle75 am 21 Oktober 2025, 12:03:14
Wow, das funktioniert (und Stunden mit der anderen Syntax erfolglos rumprobiert). Danke. Hatte noch einen Fehler im set. Jetzt:

defmod XtenderSet_Max_Solar DOIF ([$SELF:ZuBerechnendeGesamtleistung] > 0 and [$SELF:ZuBerechnendeGesamtleistung] <= 2000)\
(set MQTT2_openDTU limit_absolute [$SELF:ZuBerechnendeGesamtleistung])
attr XtenderSet_Max_Solar devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1.*:general_an@green:disable
attr XtenderSet_Max_Solar do always
attr XtenderSet_Max_Solar event_Readings ZuBerechnendeGesamtleistung: {2800 - [Studer485_VT:PV_Power_W] > 2000 ? 2000 : [Studer485_VT:PV_Power_W]}
attr XtenderSet_Max_Solar group System_2
attr XtenderSet_Max_Solar room Xtender
attr XtenderSet_Max_Solar sortby 4
attr XtenderSet_Max_Solar stateFormat state\
<br>\
ZuBerechnendeGesamtleistung
Titel: Aw: DOIF_Readings|event_Readings mit Berechnung und Limits
Beitrag von: holle75 am 21 Oktober 2025, 16:10:45
.... und jetzt wird es doch wieder zur Knobelaufgabe. Falls jemand Lust hat mitzudenken:

Ich hol ein bißchen aus ...

InselPVanlage mit AC-gekoppelten Mikrowechselrichter. Max Leistung Hauptanlage Solar, je nach Jahreszeit 2400Wp. Der Mikro knapp 2000Wp.
GesamtStrom im Inselnetz darf 2800W nicht übersteigen (1:0-Regel). Das war die Ursprungsidee.

Bis anhin musste ich hart ca 6 mal im Jahr das Limit des Mikros manuell festlegen. So geht einiges an PV verloren, da dieses Limit immer entsprechend der zu erwartenden Maximalleistung der Hauptanlage gesetzt sein musste.

Jetzt dachte ich, ich kann das mit dem erarbeiteten DOIF optimieren.

Der Denkfehler: Wir stellen uns den perfekten Frühlingstag mit ein paar Wolken vor. Wolke verdeckt die Sonne, HauptPV fährt auf imaginäre 500W runter, das DOIF regelt den Mikro auf 2000W hoch ..... Wolke geht weg, wahrscheinlich reichen die 3 Sekunden die die HauptPV ausgelesen wird nicht aus, um den Mikro runterzuregeln und ich habe plötzlich ~ 4400W im InselNetz. Das gilt es dringenst zu vermeiden.

Schön wäre es, wenn der Mikro generell langsam hochfährt, dann könnte der Inselwechselrichter über die NetzFrequenz entspannt den Mikro runterregeln. HauptPV wie auch der Mikro regeln jedoch nach letzten Beobachtungen recht plötzlich hoch (was ich aber nochmal verifizieren werde).

Jetzt suche ich eine bessere Logik. Habe aber keine Idee, wie die Problematik abgefangen werden könnte. Noch nichtmal einen Ansatz.