Beim Update eines Readings in HMCCU wird folgender Stacktrace generiert:
2022.07.07 20:32:28 1: PERL WARNING: Use of uninitialized value $minInt in numeric lt (<) at fhem.pl line 5070.
2022.07.07 20:32:28 1: stacktrace:
2022.07.07 20:32:28 1: main::__ANON__ called by fhem.pl (5070)
2022.07.07 20:32:28 1: main::readingsBulkUpdate called by ./FHEM/88_HMCCU.pm (9224)
2022.07.07 20:32:28 1: main::HMCCU_BulkUpdate called by ./FHEM/88_HMCCU.pm (4838)
2022.07.07 20:32:28 1: main::HMCCU_UpdateParamsetReadings called by ./FHEM/88_HMCCU.pm (4957)
2022.07.07 20:32:28 1: main::HMCCU_UpdateMultipleDevices called by ./FHEM/88_HMCCURPCPROC.pm (878)
2022.07.07 20:32:28 1: main::HMCCURPCPROC_Read called by fhem.pl (3950)
2022.07.07 20:32:28 1: main::CallFn called by fhem.pl (781)
Die Variable $minInt wird in fhem.pl ein paar Zeilen vor 5070 in einem split() Statement initialisiert. Aus dem Gedächtnis:
my (undef, $minInt) = split(':', $v[0])
Was könnte die Ursache sein? Ich vermute, dass ein Readingname oder Wert schuld ist. Leider kann ich es nicht nachvollziehen/reproduzieren. Ein Nutzer von HMCCU hat das Problem gemeldet.
Laienhafter Versuch meinerseits:
$v[0] enthält keinen Doppelpunkt, an dem gesplittet werden könnte?
Sowas würde zwangsweise auf 0 setzen:
my (undef, $minInt) = split m{:}x, $v[0];
$minInt //= 0;
Bin auch der Ansicht, dass jemand bei einem event-min-interval ein gueltiges Reading, aber kein Intervall angegeben hat.
Statt zwangsweise auf 0 zu setzen sollte mAn eher beim Setzen ueberprueft werden, dass was Numerisches vorhanden ist.
ok, danke! Also das Attribut event-min-reading ist falsch gesetzt.
Zitat von: rudolfkoenig am 08 Juli 2022, 10:34:55
Bin auch der Ansicht, dass jemand bei einem event-min-interval ein gueltiges Reading, aber kein Intervall angegeben hat.
Statt zwangsweise auf 0 zu setzen sollte mAn eher beim Setzen ueberprueft werden, dass was Numerisches vorhanden ist.
Das mit der 0 ist in dem Fall in der Tat in diesem Fall keine gute Idee :-[ .
Da es hier um die Syntaxprüfung der $readingFnAttriubutes (und ggf. ergänzend um disabledForIntervals etc?) geht: Wäre es nicht sinnvoll, das zu zentralisieren (ähnlich SetExtensions)? Also am Ende der AttrFn() eine Funktion aufrufen, die checkt, ob es sich um ein solches globales Attribut handelt und ggf. "laut" gibt, wenn irgendwas schräg ist?
ZitatWäre es nicht sinnvoll, das zu zentralisieren (ähnlich SetExtensions)? Also am Ende der AttrFn() eine Funktion aufrufen, die checkt, ob es sich um ein solches globales Attribut handelt und ggf. "laut" gibt, wenn irgendwas schräg ist?
Es wird bereits gecheckt, ob der Regexp sinnvoll ist, die Zahl aber noch nicht.
Ich habe das jetzt fuer event-min-interval eingebaut.