FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hackstall am 04 September 2020, 18:28:46

Titel: [Gelöst] > vs gt (movingAverage + isn't numeric in numeric gt (>) at Problem
Beitrag von: Hackstall am 04 September 2020, 18:28:46
Hallo eigentlich ein einfaches Thema aber irgendwie habe ich Probleme damit:

Die folgende Routine


fhem("get ZWave_SENSOR_MULTILEVEL_46.03 smStatus");
fhem("get ZWave_SENSOR_MULTILEVEL_46.04 smStatus");
fhem("get ZWave_SENSOR_MULTILEVEL_46.05 smStatus");
fhem("get ZWave_SENSOR_MULTILEVEL_46.06 smStatus");

my $tmp_Oben_Val = ReadingsVal("ZWave_SENSOR_MULTILEVEL_46.05","temperature",0.0);
my $tmp_Mitte_Val = ReadingsVal("ZWave_SENSOR_MULTILEVEL_46.04","temperature",0.0);
my $tmp_Unten_Val = ReadingsVal("ZWave_SENSOR_MULTILEVEL_46.03","temperature",0.0);
my $tmp_WW_Val = ReadingsVal("ZWave_SENSOR_MULTILEVEL_46.06","temperature",0.0);

my @tmp_oben =  split(/ /,$tmp_Oben_Val);
my @tmp_Mitte =  split(/ /,$tmp_Mitte_Val);
my @tmp_Unten =  split(/ /,$tmp_Unten_Val);
my @tmp_WW =  split(/ /,$tmp_WW_Val);


if (($tmp_Oben[0] < 100.0) && ($tmp_Oben[0] > 10.0))
   {
     fhem("set UG.KE.Pufferspeicher PS_Oben $tmp_Oben[0]");
   }
if (($tmp_Mitte[0] < 100.0) && ($tmp_Mitte[0] > 10.0))
   {
     fhem("set UG.KE.Pufferspeicher PS_Mitte $tmp_Mitte[0|");
   }
if (($tmp_Unten[0] < 100.0) && ($tmp_Unten[0] > 10.0))
   {
     fhem("set UG.KE.Pufferspeicher PS_Unten $tmp_Unten[0]");
   }
if (($tmp_WW[0] < 100.0) && ($tmp_WW[0] > 10.0))
   {
    fhem("set UG.KE.Pufferspeicher PS_WarmWasser $tmp_WW[0]");
   }
}


bringt im LOG immer 4 mal folgende Ausgaben:


2020.09.04 18:24:31 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 111730) line 1.
2020.09.04 18:24:31 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 111740) line 1.
2020.09.04 18:24:31 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 111750) line 1.
2020.09.04 18:24:31 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 111760) line 1.


Kann mir jemand weiterhelfen was an meiner Routine nicht stimmt oder sagen wenn nicht relevant wie man
dieses Log abschalten kann.

Danke Andreas
Titel: Antw:> vs gt
Beitrag von: Wzut am 04 September 2020, 18:51:30
Ersetze alle ReadingsVal("ZWave durch ReadingsNum("ZWave und erspare dir den Umweg über sie splitterei
Titel: Antw:> vs gt
Beitrag von: Hackstall am 04 September 2020, 23:08:51
Ja genau das hatte ich ich am Anfang mit gleicher Meldung, funktionierte somit auch nicht.

Übrigens  die Eingangswerte sind zBsp. 35.6 C

Das Resultat ohne splitting ist wie folgt:

Code (als at definiert:

+*00:02 {
fhem("get ZWave_SENSOR_MULTILEVEL_46.03 smStatus");
fhem("get ZWave_SENSOR_MULTILEVEL_46.04 smStatus");
fhem("get ZWave_SENSOR_MULTILEVEL_46.05 smStatus");
fhem("get ZWave_SENSOR_MULTILEVEL_46.06 smStatus");

my $tmp_Oben = ReadingsNum("ZWave_SENSOR_MULTILEVEL_46.05","temperature",0.0);
my $tmp_Mitte = ReadingsNum("ZWave_SENSOR_MULTILEVEL_46.04","temperature",0.0);
my $tmp_Unten = ReadingsNum("ZWave_SENSOR_MULTILEVEL_46.03","temperature",0.0);
my $tmp_WW = ReadingsNum("ZWave_SENSOR_MULTILEVEL_46.06","temperature",0.0);

Log 1, "Step 1";
if (($tmp_Oben < 100.0) && ($tmp_Oben > 10.0))
   {
     fhem("set UG.KE.Pufferspeicher PS_Oben $tmp_Oben");
   }
Log 1, "Step 2";
if (($tmp_Mitte < 100.0) && ($tmp_Mitte > 10.0))
   {
     fhem("set UG.KE.Pufferspeicher PS_Mitte $tmp_Mitte");
   }
Log 1, "Step 3";   
if (($tmp_Unten < 100.0) && ($tmp_Unten > 10.0))
   {
     fhem("set UG.KE.Pufferspeicher PS_Unten $tmp_Unten");
   }
Log 1, "Step 4";   
if (($tmp_WW < 100.0) && ($tmp_WW > 10.0))
   {
    fhem("set UG.KE.Pufferspeicher PS_WarmWasser $tmp_WW");
   }
}


Resultat:

2020.09.04 23:06:05 1: Step 1
2020.09.04 23:06:05 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 226205) line 1.
2020.09.04 23:06:05 1: Step 2
2020.09.04 23:06:05 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 226215) line 1.
2020.09.04 23:06:05 1: Step 3
2020.09.04 23:06:05 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 226225) line 1.
2020.09.04 23:06:05 1: Step 4
2020.09.04 23:06:05 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 226235) line 1.


Danke Andreas
Titel: Antw:> vs gt
Beitrag von: amenomade am 04 September 2020, 23:16:23
Mach mal ein Log 1, "Step 1: tmp_Oben=$tmp_Oben"; dann siehst Du was du kriegst
Titel: Antw:> vs gt
Beitrag von: Hackstall am 05 September 2020, 00:21:11
Hallo ich habe etwas weiter recherchiert und herausgefunden dass die Fehlermeldung wohl irreführend ist.

Am Ende verursacht das set Statement wohl das Problem:

fhem("set UG.KE.Pufferspeicher PS_Unten $tmp_Unten");


Dieses triggert ein UserReading welches wiederum die movingAverage Funktion aufruft:

attr UG.KE.Pufferspeicher userReadings PS_WarmWasser.av {movingAverage("UG.KE.Pufferspeicher","PS_WarmWasser",900);;},PS_Oben.av {movingAverage("UG.KE.Pufferspeicher","PS_Oben",900);;},PS_Mitte.av {movingAverage("UG.KE.Pufferspeicher","PS_Mitte",1);;;;},PS_Unten.av {movingAverage("UG.KE.Pufferspeicher","PS_Unten",900);;}


1) Hier werden Float Werte an die Moving Average übergeben. Ich denke dass sollte doch der MovingAverage Funktion egal sein oder?
2) Sowie ich die Moving Average Funktion per Attribute lösche gibt es auch keine Einträge über "isn't numeric in numeric gt" mehr.

Habt Ihr Ideen oder Erfahrungen?

Im übrigen funktioniert jedoch alles wie erwartet. Es sind nur die Fehlermeldungen die mein Log Vollschreiben.

Danke Andeas
Titel: Antw:> vs gt
Beitrag von: Wzut am 05 September 2020, 07:42:38
Zitat von: Hackstall am 05 September 2020, 00:21:11
dass sollte doch der MovingAverage Funktion egal sein oder?
nein wieso ? Es kommt ja drauf an wie sich MV die Werte holt. D.h. wieder ReadingsVal vs. ReadingsNum oder ganz anders.
Nutzt du pahs Original aus dem Wiki -> https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen ?
dann legt das Problem hier
my @new = my ($val,$time) = ($hash->{READINGS}{$reading}{VAL},$hash->{READINGS}{$reading}{TIME});
bei mir sieht die schon lange so aus :
my @new = my ($val,$time) = (ReadingsNum($name,$reading,0),$hash->{READINGS}{$reading}{TIME});
Titel: Antw:[Gelöst] > vs gt (movingAverage + isn't numeric in numeric gt (>) at Problem
Beitrag von: Hackstall am 05 September 2020, 09:34:52
Danke für die Antwort und den Hinweis.

Ja ich hatte noch die alte Version ohne ReadingsNum aber das war nicht mein Fehler.

Ich hatte nochmals detailliert geforscht und herausgefunden dass ein Reading falsch geschrieben war und als Default Wert "" zurückgegeben werden sollte. Blöder Fehler schwer zu finden da das Reading erst im weiteren DOIF verwendet wurde.

Danke für Eure Hilfe

Gruss Andreas