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
Ersetze alle ReadingsVal("ZWave durch ReadingsNum("ZWave und erspare dir den Umweg über sie splitterei
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
Mach mal ein Log 1, "Step 1: tmp_Oben=$tmp_Oben";
dann siehst Du was du kriegst
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
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});
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