FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fhemRigge am 27 Juni 2025, 22:55:00

Titel: Warum wird mein FileLog nicht von 'setreading' in einem Notify getriggert?
Beitrag von: fhemRigge am 27 Juni 2025, 22:55:00
Hallo zusammen,

ich würde gerne folgenden Ablauf in FHEM nachbauen:

Mein Dummy ist:
list testdummy
Internals:
   CFGFN     
   FUUID      685ef2f1-f33f-eaf8-7ce9-52687fb54eb5bb01
   NAME       testdummy
   NR         1845
   STATE      12.34
   TYPE       dummy
   eventCount 16
   READINGS:
     2025-06-27 22:38:55   state           12.34
     2025-06-27 22:38:55   testReading     C: 12.34, I: 87.66
Attributes:
   readingList testReading
   room       Test

Mein Notify ist:
list testnotify1
Internals:
   CFGFN     
   DEF        testdummy:.* { my $inv = 100 - $EVENT; fhem("setreading $NAME testReading C: $EVENT, I: $inv"); Log 0, "$NAME $EVENT via testnotify1"; }
   FUUID      685ef48f-f33f-eaf8-d658-22d7b0680470d194
   NAME       testnotify1
   NOTIFYDEV  testdummy
   NR         1849
   NTFY_ORDER 50-testnotify1
   REGEXP     testdummy:.*
   STATE      2025-06-27 22:38:55
   TRIGGERTIME 1751056735.40611
   TYPE       notify
   eventCount 6
   READINGS:
     2025-06-27 22:34:27   state           active
     2025-06-27 22:38:55   triggeredByDev  testdummy
     2025-06-27 22:38:55   triggeredByEvent 12.34
Attributes:
   room       Test

Mein FileLog ist:
list testfilelog
Internals:
   CFGFN     
   DEF        ./log/cache/testfilelog.log testdummy:testReading.*
   FD         34
   FUUID      685f0124-f33f-eaf8-5117-869f951ddbb52e93
   NAME       testfilelog
   NOTIFYDEV  testdummy
   NR         1861
   NTFY_ORDER 50-testfilelog
   REGEXP     testdummy:testReading.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/cache/testfilelog.log
   logfile    ./log/cache/testfilelog.log
Attributes:
   room       Test

Dann führe ich den Set-Befehl aus:
set testdummy 12.34
Im Logfile sehe ich:
2025.06.27 22:38:55 0: testdummy 12.34 via testnotify1
2025.06.27 22:38:55 0: testdummy testReading: C: 12.34, I: 87.66 via testnotify2
Sieht soweit alles gut aus!

Aber leider bleibt mein FileLog/die Logdatei 'testfilelog.log' leer:
./log/cache $ ls -la testfilelog.log
-rw-r--r-- 1 fhem dialout 0 Jun 27 22:37 testfilelog.log

Warum wird das FileLog nicht getriggert?

Besten Dank und freundliche Grüße,
 Rigge
Titel: Aw: Warum wird mein FileLog nicht von 'setreading' in einem Notify getriggert?
Beitrag von: RalfRog am 28 Juni 2025, 09:04:24
Hi
set testdummy 12.34
setzt den Status und nicht das READING. Das Kommando wäre sowas wie "setreading'

Gruß Ralf
Titel: Aw: Warum wird mein FileLog nicht von 'setreading' in einem Notify getriggert?
Beitrag von: MadMax-FHEM am 28 Juni 2025, 09:14:01
Im notitfy hat er ja setreading ;)

Ich denke, dass genau hier ein Event unterdrückt wird, damit keine Schleife entsteht...
Evtl. sollte das sogar im Log stehen?

Weil das setreading auf das Device, welches grad das notity getriggert hat, würde das notify doch sofort wieder triggern usw. <- Schleife...

Gruß, Joachim
Titel: Aw: Warum wird mein FileLog nicht von 'setreading' in einem Notify getriggert?
Beitrag von: betateilchen am 28 Juni 2025, 10:16:09
Lösung: setze im Ausführungsteil des notify ein "sleep 0.1;" vor den setreading  Befehl.
Titel: [Gelöst] Warum wird mein FileLog nicht von 'setreading' in einem Notify getriggert?
Beitrag von: fhemRigge am 28 Juni 2025, 21:14:05
betateilchen hatte natürlich absolut recht mit:
ZitatLösung: setze im Ausführungsteil des notify ein "sleep 0.1;" vor den setreading  Befehl.

Danke!

Wieder mal gilt: "wer lesen kann ist klar im Vorteil" ;)
In der FHEM reference (commandref) steht nämlich:
setreading in der FHEM reference (https://fhem.de/commandref.html#setreading)
ZitatNote: setreading won't generate an event for device X, if it is called from a notify for device X. Use "sleep 0.1; setreading X Y Z" in this case.

Natürlich hatte auch MadMax-FHEM recht mit seinem Hinweis:
ZitatWeil das setreading auf das Device, welches grad das notity getriggert hat, würde das notify doch sofort wieder triggern usw. <- Schleife...

Das habe ich abgefangen durch ein "ignoreRegexp"-Attribut.

Mein Notify sieht jetzt so aus:
list testnotify1
Internals:
   CFGFN     
   DEF        testdummy:.* { my $inv = 100 - $EVENT; fhem("sleep 0.1;setreading $NAME testReading C: $EVENT, I: $inv"); Log 0, "$NAME $EVENT via testnotify1"; }
   FUUID      685ef48f-f33f-eaf8-d658-22d7b0680470d194
   NAME       testnotify1
   NOTIFYDEV  testdummy
   NR         1849
   NTFY_ORDER 50-testnotify1
   REGEXP     testdummy:.*
   STATE      2025-06-28 21:04:22
   TRIGGERTIME 1751137462.55082
   TYPE       notify
   eventCount 21
   READINGS:
     2025-06-28 21:03:29   state           active
     2025-06-28 21:04:22   triggeredByDev  testdummy
     2025-06-28 21:04:22   triggeredByEvent 1.7
Attributes:
   ignoreRegexp testdummy:testReading.*
   room       Test

Mein Problem ist damit gelöst.
Vielen Dank allen!