Warum wird mein FileLog nicht von 'setreading' in einem Notify getriggert?

Begonnen von fhemRigge, 27 Juni 2025, 22:55:00

Vorheriges Thema - Nächstes Thema

fhemRigge

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
FHEM 6.3 (Rev 29043), Raspi Model B Rev 2 bullseye, 1xCUL (V 1.67 CUL868), 1xnanoCUL (VTS 0.39 CSM868), 1xSIGNALduino (V 3.4.0 SIGNALduino), 1xRFXtrx433, 1xHM-LC-Sw1-PI-DN-R1, 3xHM-LC-BL1PBU-FM, 1xMAX! Wandthermostat, 10xMAX! Heizkörperthermostat und einiges mehr.

RalfRog

Hi
set testdummy 12.34
setzt den Status und nicht das READING. Das Kommando wäre sowas wie "setreading'

Gruß Ralf
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen

Lösung: setze im Ausführungsteil des notify ein "sleep 0.1;" vor den setreading  Befehl.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fhemRigge

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
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!
FHEM 6.3 (Rev 29043), Raspi Model B Rev 2 bullseye, 1xCUL (V 1.67 CUL868), 1xnanoCUL (VTS 0.39 CSM868), 1xSIGNALduino (V 3.4.0 SIGNALduino), 1xRFXtrx433, 1xHM-LC-Sw1-PI-DN-R1, 3xHM-LC-BL1PBU-FM, 1xMAX! Wandthermostat, 10xMAX! Heizkörperthermostat und einiges mehr.