Hallo Wissende,
ich habe in einem Dummy-Device ein "userReadings" angelegt.
Mittels "readingsBeginUpdate + readingsBulkUpdate + readingsEndUpdate" möchte ich nun Werte in das selbe Device schreiben.
Mein Test Device sieht so aus:
Internals:
CFGFN
FUUID 6a0c6901-f33f-3e1e-8c08-9261ebbfd1be5f43
NAME Test
NR 944
STATE ???
TYPE dummy
eventCount 5
OLDREADINGS:
READINGS:
2026-05-19 15:48:35 _reading_1 val-1
2026-05-19 15:48:35 _reading_2 val-2
2026-05-19 15:48:35 _trigger 2
Attributes:
event-on-update-reading _trigger
group Test
icon robot
readingList _trigger
room Buero
setList _trigger
sortby 00
userReadings _update_test:_trigger:.* {
my $hash = $defs{$name};
readingsBeginUpdate( $hash );
readingsBulkUpdate( $hash,"_reading_1","val-1" );
readingsBulkUpdate( $hash,"_reading_2","val-2" );
readingsEndUpdate( $hash,1 );
Log3 $name,3,"$name: _update_test done";
return "done";
}
Dabei bekomme ich immer folgende Logeinträge:
2026.05.19 15:47:43 3: Test: _update_test done
2026.05.19 15:47:43 1: readingsUpdate(Test,_update_test,done) missed to call readingsBeginUpdate first.
2026.05.19 15:47:43 1: stacktrace:
2026.05.19 15:47:43 1: main::readingsBulkUpdate called by fhem.pl (5025)
2026.05.19 15:47:43 1: main::readingsEndUpdate called by fhem.pl (5223)
2026.05.19 15:47:43 1: main::readingsSingleUpdate called by ./FHEM/98_dummy.pm (61)
2026.05.19 15:47:43 1: (eval) called by ./FHEM/98_dummy.pm (58)
2026.05.19 15:47:43 1: main::dummy_Set called by fhem.pl (4003)
2026.05.19 15:47:43 1: main::CallFn called by fhem.pl (1989)
2026.05.19 15:47:43 1: main::DoSet called by fhem.pl (2021)
2026.05.19 15:47:43 1: main::CommandSet called by fhem.pl (1285)
2026.05.19 15:47:43 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2859)
2026.05.19 15:47:43 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1005)
2026.05.19 15:47:43 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (616)
2026.05.19 15:47:43 1: main::FW_Read called by fhem.pl (4008)
2026.05.19 15:47:43 1: main::CallFn called by fhem.pl (789)
Lasse ich "readingsEndUpdate( $hash,1 )" weg, dann kommt kein Fehler und alles funktioniert wie es soll.
Falls das nicht erlaubt ist, wie muss/kann man sowas sonst umsetzen?
Oder liegt da ein Bug vor?
Danke für euren Input.
Gruß, Robert
Hallo Robert,
userReadings in einem Dummy device macht grundsätzlich wenig Sinn, denn es gibt ja kein event, welches triggern würde.
Ebenso macht Dein userReadings keinen Sinn. Es ist grundsätzlich dazu da genau ein reading zu erzeugen/ändern. Und das mit dem Return-Wert. In Deinem Fall also "done".
ZitatFalls das nicht erlaubt ist, wie muss/kann man sowas sonst umsetzen?
Dazu müsste man wissen, was Sinn und Zweck des dummys ist und wie der angesteuert werden soll.
Grüße
Markus
Hallo Markus,
danke für die Info, aber mir geht es nicht um die Sinnhaftigkeit, sondern um die technische Möglichkeit.
Mir ist aufgefallen, wenn man in "userReadings" die Kombination "readingsBeginUpdate + readingsBulkUpdate + readingsEndUpdate" und am Ende "return 'irgend ein Wert'" verwendet, immer dieser besagte Fehler kommt (egal bei welchem Device - Dummy, HTTPMOD, ...).
Funktionieren tut es, wenn man das "readingsEndUpdate" weglässt oder ein "setReadingsVal" verwendet.
Mich interessiert, welche Funktion man richtiger Weise verwendet, oder sich vielleicht sogar ein Bug versteckt.
Um auch ein praktisches Beispiel zu bringen, siehe: defmod sendMail dummy - https://wiki.fhem.de/wiki/E-Mail_senden
Da funktioniert es, da auf das "readingsBeginUpdate" und "readingsEndUpdate" verzichtet wurde.
Gruß, Robert
Hallo Bertl,
soweit ich weiss, ist es nicht erlaubt, innerhalb eines Usereadings für ein device, ein Reading des gleichen devices zu setzen.
Ich habe zum testen in einem dummy device mit den Namen "nothing", einfach mal ein userreading userReadings hallo:.* {fhem("setreading nothing bla Blubbern")} definiert, dann kommt auch die Fehlermeldung im Logfile 'setreading nothing bla Blubbern' called form userReadings is prohibited