Autor Thema: Bug bei der Verwendung von TimeSeries in fhem.pl  (Gelesen 1853 mal)

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1839
Bug bei der Verwendung von TimeSeries in fhem.pl
« am: 04 November 2018, 23:54:34 »
Wenn man sich einen event-aggregator z. B. wie folgt anlegt:

attr Revolt_5d31 event-aggregator power::none:median:120,energy::none:median:120,avgpower::none:median:120
dann kommt es öfter zu folgendem Fehler im Logfile:

2018.11.01 11:58:07 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at FHEM/TimeSeries.pm line 265.
2018.11.01 11:58:07 1: stacktrace:
2018.11.01 11:58:07 1:     main::__ANON__                      called by FHEM/TimeSeries.pm (265)
2018.11.01 11:58:07 1:     TimeSeries::elapsed                 called by fhem.pl (4719)
2018.11.01 11:58:07 1:     main::readingsBulkUpdate            called by ./FHEM/19_Revolt.pm (138)
2018.11.01 11:58:07 1:     main::Revolt_Parse                  called by fhem.pl (3795)
2018.11.01 11:58:07 1:     main::Dispatch                      called by ./FHEM/00_CUL.pm (948)
2018.11.01 11:58:07 1:     main::CUL_Parse                     called by ./FHEM/00_CUL.pm (832)
2018.11.01 11:58:07 1:     main::CUL_Read                      called by fhem.pl (3599)
2018.11.01 11:58:07 1:     main::CallFn                        called by fhem.pl (726)

Die Ursache ist eigentlich ganz simpel. In fhem.pl wird ein TimeSeries Objekt erzeugt und dabei ein Parameter autoreset übergeben.

      my (undef,$duration,$method,$function,$holdTime) = split(":", $v[0], 5);
      my $ts;
      if(defined($readings->{".ts"})) {
        $ts= $readings->{".ts"};
      } else {
        require "TimeSeries.pm";
        $ts= TimeSeries->new( { method => $method,
                                autoreset => $duration,
                                holdTime => $holdTime } );

Dummerweise wird hier nicht geprüft, ob $duration nicht eventuell ein Leerstring ist und dieser Leerstring wird dann übergeben. Innerhalb von TimeSeries wird autoreset aber nur mit defined überprüft, was dann in der elapsed Methode von TimeSeries zum Fehler führt. Man müsste in fhem.pl $defined also in ein undef umwandeln, falls defined ein Leerstring enthält.
Man müsste daher diesen Code:

        require "TimeSeries.pm";
        $ts= TimeSeries->new( { method => $method,
                                autoreset => $duration,
                                holdTime => $holdTime } );

durch eventuell sowas ersetzen:

        require "TimeSeries.pm";
        $ts= TimeSeries->new( { method => $method,
                                autoreset => (looks_like_number($duration) ? $duration : undef),
                                holdTime => $holdTime } );

Ich bin mir nicht ganz sicher, aber eventuell müsste man für holdtime sowas ähnliches auch machen? Ist bei mir immer gesetzt, deshalb habe ich keine Ahnung...

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1839
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #1 am: 15 November 2018, 13:12:00 »
Besteht kein Interesse das Problem zu beheben? Soll/Kann ich noch etwas beisteuern?

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 25676
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #2 am: 22 November 2018, 15:31:43 »
Interessant finde ich das sonst noch keiner sowas gemeldet hat. Scheint eher selten gebraucht zu werden.
Ich stupse es aber mal an da ich den "Fehler" Codetechn. mir erklären/nachvollziehen kann.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1839
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #3 am: 22 November 2018, 16:26:15 »
Es gab dazu 2-3 Erwähnungen im Forum. Wenn man nach timeseries sucht, wird man fündig.

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1839
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #4 am: 03 Dezember 2019, 02:05:25 »
Kann bitte der folgende Patch aufgenommen werden? Er verhindert die hier beschriebenen Warnings:

fhem/fhem.pl | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fhem/fhem.pl b/fhem/fhem.pl
index d8dccc86a..9f3e23a60 100755
--- a/fhem/fhem.pl
+++ b/fhem/fhem.pl
@@ -4874,8 +4874,8 @@ readingsBulkUpdate($$$@)
       } else {
         require "TimeSeries.pm";
         $ts= TimeSeries->new( { method => $method,
-                                autoreset => $duration,
-                                holdTime => $holdTime } );
+                                autoreset => (looks_like_number($duration) ? $duration : undef),
+                                holdTime => (looks_like_number($holdTime) ? $holdTime : undef) } );
         $readings->{".ts"}= $ts;
         # access from command line:
         # { $defs{"myClient"}{READINGS}{"myValue"}{".ts"}{max} }

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22534
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #5 am: 03 Dezember 2019, 09:40:18 »
Habe den Patch eingecheckt.

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4755
  • Are we just self-replicating DNA?
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #6 am: 24 Januar 2020, 18:51:22 »
Please revert.

$duration und $holdTime müssen Zahlen sein, sonst hat der User was falsch gemacht und dafür sind die Warnings da. Das erschließt sich mir zunächst aus der Commandref zu event-aggregator (von mir ;-).

Wir müssen nur an der richtigen Stelle prüfen, ob diese Werte gesetzt sind. Wenn nicht, ist was anderes im Code falsch, weil man mit undef nicht rechnen kann. Ich weiß aber nicht, ob ich da so bald dazukomme.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22534
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #7 am: 24 Januar 2020, 18:57:36 »
Zitat
Please revert.
Erledigt.

Zitat
$duration und $holdTime müssen Zahlen sein, sonst hat der User was falsch gemacht und dafür sind die Warnings da.
Gerne, aber wieso stoert dann der Patch?

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4755
  • Are we just self-replicating DNA?
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #8 am: 24 Januar 2020, 19:00:43 »
Erledigt.
Gerne, aber wieso stoert dann der Patch?

Danke.

Ich bin mir nicht sicher, ob der Patch stört. Dass müsste frickelpiet nun morgen nach dem Update testen.

Mich stört der Patch, weil er das Problem nicht lösen kann.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1839
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #9 am: 24 Januar 2020, 21:12:25 »
Stimmt. Darum wollte ich mich kümmern, habe aufgrund meiner Kinder leider für gar nichts mehr Zeit. Die Warnungen waren zwar weg, die Funktion leider auch, wenn :: anstatt :0: verwendet wurde. Tut mir leid.

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4755
  • Are we just self-replicating DNA?
Antw:Bug bei der Verwendung von TimeSeries in fhem.pl
« Antwort #10 am: 25 Januar 2020, 20:46:38 »
Konnte die Finger nicht davonlassen.

Kann mal bitte jemand probieren, in fhem.pl die Zeile 4866

      my (undef,$duration,$method,$function,$holdTime) = split(":", $v[0], 5);

nach

      my (undef,$duration,$method,$function,$holdTime) = map { $_ eq "" ? undef : $_ } split(":", $v[0], 5);

zu ändern und berichten, ob es geht?

Ungetestet!

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

 

decade-submarginal