Hallo zusammen,
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
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
Vielleicht die Änderung des BatMaxCharge-Readings als DOELSEIF-Zweig einbauen und dann dort ein set $self cmd_1 ausführen?
Also:
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;;)\
DOELSEIF ([$SELF:BatMaxCharge]) (set $SELF cmd_1)\
DOELSE\
(set PV_Batterie BatConfigMaxChargeWatt 0;; set PV_Batterie BatConfigMaxEnabled chargeMax;;)
Hallo passibe,
vielen Dank für deine Idee, aber so wie ich das verstehe würde das dann auch cmd_1 ausführen, obwohl der Akku garnicht geladen werden sollte, also keine der Bedingungen für cmd_1 wahr ist.
Das darf auch nicht sein.
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?