(gelöst) missed to call readingsBeginUpdate first

Begonnen von gadget, 05 Dezember 2019, 18:34:21

Vorheriges Thema - Nächstes Thema

gadget

Hallo,

Ich habe immer wieder folgendes im Log:


2019.12.05 18:16:05 2: ROOMMATE set rr_Person1 home
2019.12.05 18:16:05 1: readingsUpdate(rr_Person1,svghelper,) missed to call readingsBeginUpdate first.
2019.12.05 18:16:05 1: stacktrace:
2019.12.05 18:16:05 1:     main::readingsBulkUpdate            called by fhem.pl (4718)
2019.12.05 18:16:05 1:     main::readingsEndUpdate             called by FHEM/RESIDENTStk.pm (727)
2019.12.05 18:16:05 1:     main::RESIDENTStk_Set               called by fhem.pl (3745)
2019.12.05 18:16:05 1:     main::CallFn                        called by fhem.pl (1892)
2019.12.05 18:16:05 1:     main::DoSet                         called by fhem.pl (1924)
2019.12.05 18:16:05 1:     main::CommandSet                    called by fhem.pl (1238)
2019.12.05 18:16:05 1:     main::AnalyzeCommand                called by fhem.pl (1091)
2019.12.05 18:16:05 1:     main::AnalyzeCommandChain           called by ./FHEM/98_DOIF.pm (1651)
2019.12.05 18:16:05 1:     main::ParseCommandsDoIf             called by ./FHEM/98_DOIF.pm (2085)
2019.12.05 18:16:05 1:     main::DOIF_cmd                      called by ./FHEM/98_DOIF.pm (2349)
2019.12.05 18:16:05 1:     main::DOIF_Trigger                  called by ./FHEM/98_DOIF.pm (2563)
2019.12.05 18:16:05 1:     main::DOIF_Notify                   called by fhem.pl (3750)
2019.12.05 18:16:05 1:     main::CallFn                        called by fhem.pl (3670)
2019.12.05 18:16:05 1:     main::DoTrigger                     called by fhem.pl (4733)
2019.12.05 18:16:05 1:     main::readingsEndUpdate             called by fhem.pl (4915)
2019.12.05 18:16:05 1:     main::readingsSingleUpdate          called by ./FHEM/98_dummy.pm (74)
2019.12.05 18:16:05 1:     main::dummy_Set                     called by fhem.pl (3745)
2019.12.05 18:16:05 1:     main::CallFn                        called by fhem.pl (1892)
2019.12.05 18:16:05 1:     main::DoSet                         called by fhem.pl (1924)
2019.12.05 18:16:05 1:     main::CommandSet                    called by fhem.pl (1238)
2019.12.05 18:16:05 1:     main::AnalyzeCommand                called by fhem.pl (1091)
2019.12.05 18:16:05 1:     main::AnalyzeCommandChain           called by ./FHEM/91_notify.pm (121)
2019.12.05 18:16:05 1:     main::notify_Exec                   called by fhem.pl (3750)
2019.12.05 18:16:05 1:     main::CallFn                        called by fhem.pl (3670)
2019.12.05 18:16:05 1:     main::DoTrigger                     called by fhem.pl (4036)
2019.12.05 18:16:05 1:     main::Dispatch                      called by ./FHEM/00_TCM.pm (495)
2019.12.05 18:16:05 1:     main::TCM_Read                      called by fhem.pl (3750)
2019.12.05 18:16:05 1:     main::CallFn                        called by fhem.pl (750)



Ich vermute einen Zusammenhang mit diesem UserReading


defmod rr_Person1 ROOMMATE rgr_Residents
(...)
attr rr_Person1 userReadings svghelper {if(ReadingsVal($name,"presence","") eq "absent") {return "display:none;;"} else {return ""}}


welches ich dann an anderer Stelle in einem FReplacer brauche (um in einem SVG ein Icon ein- bzw. auszublenden).

Das Reading soll bei Anwesenheit einen leeren String enthalten und bei Abwesenheit den String display:none;
(inklusive einem Strichpunkt am Ende!)

Was mache ich falsch ? Oder ist das ein Bug ?

Grüße,

gadget.






Beta-User

Versuch's mal so:
attr rr_Roland userReadings svghelper:presence.* {if(ReadingsVal($name,"presence","") eq "absent") {return 'display:none;'} else {return ""}}


Bitte darauf achten, zukünftig auch den trigger bei userReadings zu setzen.


Vielleicht nutzt du eine Suchmaschine und findest raus, welchen Unterschied es macht, ob man unter Perl ' oder " verwendet...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

gadget

#2

Super. Läuft ! Aber ich will nicht dumm sterben, daher zwei Rückfragen:


Zitat von: Beta-User am 06 Dezember 2019, 08:05:33
Bitte darauf achten, zukünftig auch den trigger bei userReadings zu setzen.

Commandref sagt

<reading>[:<trigger>] [<modifier>] { <perl code> }
Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).


Würde ich jetzt so verstehen, dass der Trigger optional ist und das userReading bei Weglassen halt bei jeder Änderung eines Readings des Devices aktualisiert wird (was jetzt vielleicht ein paar Nanosekunden Laufzeit verschwendet, aber sonst trotzdem funktionieren müßte ?

Zitat von: Beta-User am 06 Dezember 2019, 08:05:33
Vielleicht nutzt du eine Suchmaschine und findest raus, welchen Unterschied es macht, ob man unter Perl ' oder " verwendet...

Das war  Cut & Waste aus diversen Forumsbeispielen. oder z.B. hier:
https://wiki.fhem.de/wiki/If-condition

Aber Du hast im ersten Return jetzt auch ein einfaches Hochkomma und im zweiten Return doppelte Hochkommata ?
Kannst Du mich (und alle die das künftig evtl. mal lesen) bitte in die richtige Richtung stubsen, was Du genau meinst ?

Grüße, gadget


Beta-User

Ja, trigger ist optional. ABER:
Es sollte jedem FHEM-Nutzer (oder auch sonst jedem) aber daran gelegen sein, die Zahl der Verarbeitungsvorgänge da zu begrenzen, wo es sinnvoll ist, also z.B. auch Events nur zu erzeugen, wenn man sie braucht. Oder eben trigger (bei Eventhandlern allgemein, aber v.a. auch) bei userReadings entsprechend eng zu setzen. Denn auch die (unnötige) Aktualisierung des userReadings erzeugt wieder Events, und auch der Zeitstempel paßt uU. nicht (ist bei deinem Device vermutlich egal, da da nicht ständig irgendwelche Readings aktualisiert werden; ich habe aber z.B. auch Readings bei meinen "Residents", die die letzte von diesen gesandten Telegram-Messages enthalten usw.; das hat mit "Presence" aber in der Regel wenig zu tun (kann aber...).).
(Anm.: Fast alle userReadings, die hier im Forum so großzügig geteilt werden, sind entweder komplett unnötig, oder aus Gründen, die ich nicht verstehe ohne trigger. Es ist aber nichtsdesto trotz in der Regel schlicht ein Designfehler, wenn überhaupt, dann ohne trigger zu arbeiten...).

Zu den Quotes: https://www.perlmonks.org/?node_id=401006

(Will heißen: bei simplem Text macht es keinen Unterschied, und ich habe es nur da geändert, wo es m.E. nach eventuell problematisch war...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors