Hallo zusammen,
ich würde gerne folgenden Ablauf in FHEM nachbauen:
- set Befehl -> triggert notify
- notify führt setreading aus -> triggert filelog
- filelog schreibt werte (von set und von setreading) in Datei
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
Hi
set testdummy 12.34
setzt den Status und nicht das READING. Das Kommando wäre sowas wie "setreading'
Gruß Ralf
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
Lösung: setze im Ausführungsteil des notify ein "sleep 0.1;" vor den setreading Befehl.
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!