Hauptmenü

PERL WARNING: Argument ""

Begonnen von genna, 13 März 2017, 20:05:48

Vorheriges Thema - Nächstes Thema

genna

Hallo Zusammen,
seit ein paar Wochen erhalte ich folgende Meldungen im Log:

2017.03.13 19:34:01 1 : PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 336) line 1.
2017.03.13 19:34:01 1 : stacktrace:
2017.03.13 19:34:01 1 : main::__ANON__ called by (eval 336) (1)
2017.03.13 19:34:01 1 : (eval) called by ./FHEM/98_DOIF.pm (1070)
2017.03.13 19:34:01 1 : main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (1329)
2017.03.13 19:34:01 1 : main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (1449)
2017.03.13 19:34:01 1 : main::DOIF_Notify called by fhem.pl (3312)
2017.03.13 19:34:01 1 : main::CallFn called by fhem.pl (3233)
2017.03.13 19:34:01 1 : main::DoTrigger called by fhem.pl (3589)
2017.03.13 19:34:01 1 : main::Dispatch called by ./FHEM/36_JeeLink.pm (855)
2017.03.13 19:34:01 1 : main::JeeLink_Parse called by ./FHEM/36_JeeLink.pm (678)
2017.03.13 19:34:01 1 : main::JeeLink_Read called by fhem.pl (3312)
2017.03.13 19:34:01 1 : main::CallFn called by fhem.pl (675)


und

2017.03.13 19:34:41 1 : PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 436) line 1.
2017.03.13 19:34:41 1 : stacktrace:
2017.03.13 19:34:41 1 : main::__ANON__ called by (eval 436) (1)
2017.03.13 19:34:41 1 : (eval) called by ./FHEM/98_DOIF.pm (1070)
2017.03.13 19:34:41 1 : main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (1329)
2017.03.13 19:34:41 1 : main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (1449)
2017.03.13 19:34:41 1 : main::DOIF_Notify called by fhem.pl (3312)
2017.03.13 19:34:41 1 : main::CallFn called by fhem.pl (3233)
2017.03.13 19:34:41 1 : main::DoTrigger called by ./FHEM/30_DUOFERN.pm (1448)
2017.03.13 19:34:41 1 : main::DUOFERN_Parse called by fhem.pl (3508)
2017.03.13 19:34:41 1 : main::Dispatch called by ./FHEM/10_DUOFERNSTICK.pm (273)
2017.03.13 19:34:41 1 : main::DUOFERNSTICK_Parse called by ./FHEM/10_DUOFERNSTICK.pm (206)
2017.03.13 19:34:41 1 : main::DUOFERNSTICK_Read called by fhem.pl (3312)
2017.03.13 19:34:41 1 : main::CallFn called by fhem.pl (675)


dabei variieren die Zahlen im Klammern zwischen etwa 300 und 3000.

das schlimme dabei ist das ein teil der DOIF nicht mehr verlässlich funktionieren, events werden verpasst. Ausgefallene DOIF konnte ich bis jetzt nur durch löschen und neu einfügen wieder an laufen kriegen. Dabei fällt meistens einen anderen aus.

Updates sind auf den heutigen stand. Lieder konnte ich den ersten Ausfall zeitlich nicht auf den Tag genau eingrenzen.
Ich hoffe das  jemand eine Idee hat







rudolfkoenig

Laut stacktrace stammt das Problem aus einem DOIF, habe deswegen das Thema verschoben.

@Damian: falls du $main::cmdFromAnalyze vor dem evaluiren setzt, dann wird das in stacktrace mit ausgegeben, das erleichtert mAn die Ursachensuche.

Damian

#2
Zitat von: rudolfkoenig am 14 März 2017, 08:13:15
Laut stacktrace stammt das Problem aus einem DOIF, habe deswegen das Thema verschoben.

@Damian: falls du $main::cmdFromAnalyze vor dem evaluiren setzt, dann wird das in stacktrace mit ausgegeben, das erleichtert mAn die Ursachensuche.

Das ist eine gute Idee.

Die Fehler kommen von nicht sauber durch User definierten Bedingungen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#3
Zitat von: Damian am 14 März 2017, 08:28:19
Das ist eine gute Idee.

Die Fehler kommen von nicht sauber durch User definierten Bedingungen.
Ich habe $cmdFromAnalyze vorbelegt und danach wieder auf undef gesetzt. Schöner wäre, wenn ich im Modul selbst die Warnung abfragen könnte, um sie dann wie bei Fehlern im error-Reading des Moduls zu protokollieren.

Dazu müsste ich dann aber den Warning-Handler  $SIG{__WARN__} = sub {... umbiegen - ich glaube aber, dass das nicht gewollt ist.

Edit: @genna: Mit der angehängten Version kannst du im Log auch ohne stacktrace schon mal sehen, aus welchem Modul die Warnung kommt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatDazu müsste ich dann aber den Warning-Handler  $SIG{__WARN__} = sub {... umbiegen - ich glaube aber, dass das nicht gewollt ist.

Ich kann mir vorstellen, dass man einen lokalen WARN Hander installieren kann. Allerdings waere es fuer die Benutzer verwirrend, wenn ja nach Modul die Meldung unterscheidlich ist.

Damian

Zitat von: rudolfkoenig am 14 März 2017, 14:14:54
Ich kann mir vorstellen, dass man einen lokalen WARN Hander installieren kann. Allerdings waere es fuer die Benutzer verwirrend, wenn ja nach Modul die Meldung unterscheidlich ist.

ja, ich bräuchte nur die Warnung als Text, um sie im Reading abzulegen. Könnte man nicht $msg aus dem Handler als globale Variable z. B. unter $cmdWarningMsg ablegen, auf die man im Modul zugreifen könnte.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Ich habe eine Variable lastWarningMsg eingefuehrt.
Wenn es nicht hilft, sag Bescheid, dann baue ich es wieder aus :)

genna

Hallo Zusammen,
danke für die Schnelle Hilfe.

@Damian ein großen Dank für das DOIF Modul, wie vermutet war der USER schuld. Ich hatte meinen Device WetterSensor einmal als Wettersensor eingetippt.




Damian

Zitat von: rudolfkoenig am 14 März 2017, 17:03:22
Ich habe eine Variable lastWarningMsg eingefuehrt.
Wenn es nicht hilft, sag Bescheid, dann baue ich es wieder aus :)

Es funktioniert gut - es kann so bleiben. Danke.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#9
neue Version eingecheckt:

1) Es gibt jetzt ein neues Reading namens "warning" dort wird die aktuelle Perl-Warnung aus der Auswertung einer DOIF-Bedingung angezeigt. Das Reading wird wieder gelöscht, wenn eine Bedingung ohne Perl-Warnung ausgewertet wird.

2) Im Log wird die Perl-Warnung genauer mit der Angabe des betroffenen DOIF-Moduls und der Nummer der Bedingung spezifiziert

3) Fehler in der Bedingung wird jetzt im Reading "error" mit der Angabe der Nummer der Bedingung userfreundlicher aufbereitet

4) die neue Version funktioniert nur mit der neuen Version von fhem.pl, beides morgen per Update verfügbar

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#10
Zitat von: genna am 14 März 2017, 18:16:55
Hallo Zusammen,
danke für die Schnelle Hilfe.

@Damian ein großen Dank für das DOIF Modul, wie vermutet war der USER schuld. Ich hatte meinen Device WetterSensor einmal als Wettersensor eingetippt.

Es war dein erster Post. Es lohnt sich immer wieder sich hier zu melden, denn damit hast du potenziell über zweieinhalb Tausend DOIF-User glücklicher gemacht, denn das Problem hatten viele.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF