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.
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...
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 (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
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...)