Hallo zusammen,
ich hab die Frage schonmal im Allgemeinen gestellt, aber hier ist sie sicher besser aufgehoben.
ich nutze ein DOIF um meinen PV Akku vorzugeben ob er nach dem PV Forecast nun geladen werden darf oder nicht.
Dazu stelle ich die maximale Ladeleistung auf 0, oder einen per reading definierten Wert.
Das klappt soweit auch gut, nur wenn ich das reading "BatMaxCharge" ändere wird keine Aktion ausgeführt, weil ja der DOIF Zweig wieder der gleiche wäre, also läd die Batterie weiter mit der alten Leistung.
Ein do always möchte ich aber nicht einfügen, weil ich sonst ständig die Befehle zur Batterie senden würde.
defmod doif_PvBatteryChargeForecast DOIF (\
([PV_SolarForecast:Battery_ChargeUnrestricted_01] == 1) or\
([PV_SolarForecast:Battery_ChargeRequest_01] == 1) or\
([Fronius_Symo1:Storage_0_Controller_StateOfCharge_Relative] < [PV_SolarForecast:Battery_OptimumTargetSoC_01:d])\
)\
(set PV_Batterie BatConfigMaxChargeWatt [$SELF:BatMaxCharge];; set PV_Batterie BatConfigMaxEnabled chargeMax;;)\
DOELSE\
(set PV_Batterie BatConfigMaxChargeWatt 0;; set PV_Batterie BatConfigMaxEnabled chargeMax;;)\
attr doif_PvBatteryChargeForecast checkall all
attr doif_PvBatteryChargeForecast event-min-interval .*:3600
attr doif_PvBatteryChargeForecast event-on-change-reading .*
attr doif_PvBatteryChargeForecast readingList BatMaxCharge
attr doif_PvBatteryChargeForecast room PV
attr doif_PvBatteryChargeForecast setList BatMaxCharge:selectnumbers,0,250,6000,0,lin
attr doif_PvBatteryChargeForecast webCmd enable:disable:BatMaxCharge
attr doif_PvBatteryChargeForecast webCmdLabel ::BatMaxCharge
setstate doif_PvBatteryChargeForecast cmd_1
setstate doif_PvBatteryChargeForecast 2025-08-05 19:26:45 BatMaxCharge 2500
setstate doif_PvBatteryChargeForecast 2025-08-06 19:16:27 Device Fronius_Symo1
setstate doif_PvBatteryChargeForecast 2025-08-06 17:10:31 cmd 1
setstate doif_PvBatteryChargeForecast 2025-08-06 17:10:31 cmd_event PV_SolarForecast
setstate doif_PvBatteryChargeForecast 2025-08-06 17:10:31 cmd_nr 1
setstate doif_PvBatteryChargeForecast 2025-08-06 19:16:27 e_Fronius_Symo1_Storage_0_Controller_StateOfCharge_Relative 79.7
setstate doif_PvBatteryChargeForecast 2025-08-06 18:42:12 e_PV_SolarForecast_Battery_ChargeRequest_01 0
setstate doif_PvBatteryChargeForecast 2025-08-06 19:11:36 e_PV_SolarForecast_Battery_ChargeUnrestricted_01 1
setstate doif_PvBatteryChargeForecast 2025-08-06 18:42:12 e_PV_SolarForecast_Battery_OptimumTargetSoC_01 20 %
setstate doif_PvBatteryChargeForecast 2025-08-04 19:14:12 mode enabled
setstate doif_PvBatteryChargeForecast 2025-08-06 17:10:31 state cmd_1
Ich hab mal ein bischen probiert.
Erstmal hab ich versucht nach dem Ändern händisch ein "set doif_PvBatteryChargeForecast checkall" aufzurufen.
Selbst da hat er den Befehl nicht nochmals mit dem neuen Wert geschrieben.
Erst nachdem ich
set doif_PvBatteryChargeForecast initialize
set doif_PvBatteryChargeForecast checkall
ausgeführt habe, war alles aktuell.
Kann ich das so einstellen, das ich das gleiche Verhalten automatisch bekomme?
Gibt es eine Möglichkeit bei der Änderung von [BatMaxCharge] den Zweig nochmals auszuführen um auch den aktuellen Wert zu senden?
Oder gibt es eine bessere Möglichkeit mit solchen parametrisierten DOIFs umzugehen?
Vielen Dank
Hadl
Ich würde grundsätzlich die Aufgabe auf zwei DOIFs aufteilen. Das eine kümmert sich um das Setzen der Maximalwerte in Abhängigkeit von irgendwelchen Bedingungen, das andere ist dann für die eigentliche Steuerung a'la Thermostat zuständig. checkall habe ich nur dazu programmiert Bedingungen mal zu überprüfen. Normalerweise sind die Zustände des Devices immer korrekt und brauchen nicht überprüft zu werden.
Hallo Damian,
hab ich dann nicht das gleiche Problem, wenn ich den Maximalwert in einem Reading eines anderen DOIF's habe, dann würde ich doch bei einer Änderung des Maximalwertes "BatMaxCharge" auch nicht den Zweig nochmal ausführen der den Maximalwert schreibt, solange dies der gleiche Zweig wie mit dem alten Maximalwert ist.
Im Unterschied zu einem Thermostat ist der Wert ja nicht Teil der Bedingung und führt bei relevanter Änderung zur Ausführung eines anderen Zweigs.
Hast du mal ein Beispiel wie das aussehen könnte? Vielleicht sehe ich auch nur den Wald vor lauter Bäumen nicht.
Vielen Dank
Hadl