userReadings - readingsBulkUpdate - Fehlermeldung

Begonnen von bertl, 19 Mai 2026, 16:46:35

Vorheriges Thema - Nächstes Thema

bertl

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

KölnSolar

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
RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

bertl

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

Jamo

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
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee2MQTT, Conbee III, FB7690, Signal, Alexa (fhem-lazy), Geotracking, LaCrosse JeeLink, LoRaWan (TTN / Chirpstack), Sonos, ESPresence, HomeAssistant via MQTT, Meshtastic