Hallo zusammen,
wenn das folgende DOIF triggert, vermisse ich den Logeintrag:
## GoodWe SOC auf 90% beschränken
## SOC >= 90% => 0A Ladestrom
([GoodWe:SOC] >= 90)
(set GoodWe BMS_Charge_Current_Max 0)
## SOC < 90% => 25A Ladestrom
DOELSE
(set GoodWe BMS_Charge_Current_Max 25)
Im EventMonitor erscheint das Event allerdings.
2025-06-09 18:54:58 ModbusAttr GoodWe SOC: 92
2025-06-09 18:54:58 ModbusAttr GoodWe BMS_Charge_Current_Max: 0
Wenn ich manuell folgenden Kommando:
set GoodWe BMS_Charge_Current_Max 0
eingebe wird dieser auch im EVENT Monitor angezeigt UND in meinem Logfile geloggt, auch mehrmals, da event-on-update für das Reading definiert ist.
Hier ist mal die Definitionen des Filelogs:
Internals:
DEF ./log/WR-%Y-%m.log GoodWe|HZ.GoodWe|HZ.wr
FD 83
FUUID 6759e9d0-f33f-b6d9-84cf-91aadbb8f32c099a
NAME FileLog_WR
NOTIFYDEV GoodWe,HZ.GoodWe,HZ.wr
NR 708
NTFY_ORDER 50-FileLog_WR
REGEXP GoodWe|HZ.GoodWe|HZ.wr
STATE active
TYPE FileLog
addLogMinInterval 3600
currentlogfile ./log/WR-2025-06.log
logfile ./log/WR-%Y-%m.log
READINGS:
2025-06-10 06:00:56 linesInTheFile 17537
Attributes:
addLog HZ.wr:Ventilator:3600,HZ.GoodWe:Goodwe_Relay:3600
comment .*(PV_[1-2]_Power|PV_[1-2]_Voltage|stat|CONNECTED|Heizstab[1-3]).*
icon time_note
ignoreRegexp .*(PV_[1-2]_Power|PV_[1-2]_Voltage|stat|CONNECTED).*
nrarchive 1
room Logs,PV
Damian (Entwickler von DOIF) meint ich müsste auf der Seite des Loggens suchen...
Hier ist der Link:
https://forum.fhem.de/index.php?topic=141856.0
Ich selbst bin mittlerweile ratlos, kann mir das nicht erklären, und hoffe nun auf Unterstützung/Hilfe.
Da du ein und dasselbe Gerät als Auslöser und als Kommando-Ziel hast, würde ich auf die Benennung des DOIF bzw. FileLog als "Ursache" tippen.
Vermeiden von event-loops ;) => zuerst muss das DOIF greifen, dann erst das Log.
Habe jetzt mal auf notify umgestellt. Bringt das gleiche Ergebnis.
Im Event-Monitor wird der Event und die Action angezeigt, jedoch nicht geloggt:
Event Monitor:
2025-06-10 08:46:05 ModbusAttr GoodWe SOC: 54
2025-06-10 08:46:05 ModbusAttr GoodWe BMS_Charge_Current_Max: 25
2025-06-10 08:46:56 ModbusAttr GoodWe PV_Total_Power: 937
2025-06-10 08:46:56 ModbusAttr GoodWe Power_Battery: -514
2025-06-10 08:46:56 ModbusAttr GoodWe AC_ActivePower: 6
Logfile:
2025-06-10_08:45:56 GoodWe SOC: 54
2025-06-10_08:46:56 GoodWe PV_Total_Power: 937
2025-06-10_08:46:56 GoodWe Power_Battery: -514
2025-06-10_08:46:56 GoodWe AC_ActivePower: 6
....
Das verwendete notify:
GoodWe:SOC:.* {
if ($EVTPART1 >= '90' && ReadingsVal('GoodWe','BMS_Charge_Current_Max','0') != '0')
{fhem "set GoodWe BMS_Charge_Current_Max 0" }
if ($EVTPART1 < '90' && ReadingsVal('GoodWe','BMS_Charge_Current_Max','25') != '25')
{fhem "set GoodWe BMS_Charge_Current_Max 25" }
};
Also ist meiner Meinung nach als ursache das DOIF raus, da ja bei Notify das gleiche passiert..
Sehr Merkwürdig ..
Zitat von: Beta-User am 10 Juni 2025, 08:01:21Da du ein und dasselbe Gerät als Auslöser und als Kommando-Ziel hast, würde ich auf die Benennung des DOIF bzw. FileLog als "Ursache" tippen.
Vermeiden von event-loops ;) => zuerst muss das DOIF greifen, dann erst das Log.
Sorry, habe meinen letzen Betrag geschrieben, bevor ich Deinen hier gelesen habe.
OK, das Gerät auf das via DOIF oder Notify reagiert wird und gegen das das Kommand gesendet wird ist identisch, nämlich "GoodWe".
Das Logging Device heißt "FileLog_WR", das DOIF Device "SOC_Limit".
Sollte denn nicht das DOIF um eine Selbstriggerung zu vermeiden das Kommand gar nicht erst aussenden ?
Das DOIF sendet ja das Kommand, nur das Logging fehlt.
Oder verstehe ich da was faslch ?
Verwirrend sind auch die etwas unterschiedlichen Timestamps in Post #2, zwischen Event Monitor und Logfile.
Wobei ich nicht weiß, woher das kommt.
so wird es wahrscheinlich funktionieren:
GoodWe:SOC:.* {
if ($EVTPART1 >= '90' && ReadingsVal('GoodWe','BMS_Charge_Current_Max','0') != '0')
{sleep 0.1; fhem "set GoodWe BMS_Charge_Current_Max 0" }
if ($EVTPART1 < '90' && ReadingsVal('GoodWe','BMS_Charge_Current_Max','25') != '25')
{sleep 0.1; fhem "set GoodWe BMS_Charge_Current_Max 25" }
};
Mach mal eine 1 vor den DOIF-Namen.
Dann hat sich die Diskussion vielleicht erledigt bzw. es wird klarer....
@frank: vermutlich wird das nicht helfen, weil erst das Device geprüft wird, und erst bei der Ausführung die ganze regexp, afair.
Edith: mit sleep geht es natürlich....
Der sleep führte zum Erfolg !!
Ich habe jetzt im DOIF einen Wait 1:1 eingebaut, damit funktioniert es auch super.
Der rename des DOIF Devices von SOC_Limit nach 1SOC_Limit hat leider nichts gebracht.
Fazit: Ist wohl ein Timing Problem ..
@Beta-User und @frank => Vielen Dank für eure Hilfe !!
Zitat von: Rampler am 10 Juni 2025, 09:59:11Der sleep führte zum Erfolg !!
Ich habe jetzt im DOIF einen Wait 1:1 eingebaut, damit funktioniert es auch super.
Der rename des DOIF Devices von SOC_Limit nach 1SOC_Limit hat leider nichts gebracht.
Fazit: Ist wohl ein Timing Problem ..
@Beta-User und @frank => Vielen Dank für eure Hilfe !!
Evtl. müssten gewisse interne Strukturen neu initialisiert werden (z.B. durch einen Neustart), das rename _sollte_ m.E. prinzipiell auch funktionieren.
Vorteil: nur eine Event-loop für das log-Device.
Nachteil: man muss wissen, warum es (nicht) funktioniert....