Hallo,
ich setze per userreadings ein paar werte.
Leider funktioniert der if Teil aber nicht:
fc0_LWP-WW09 {my $val=ReadingsNum("Wetter","fc0_temp09","0")-ReadingsNum("Wetter","fc0_cloud09","0")},
fc0_LWP-WW12 {my $val=ReadingsNum("Wetter","fc0_temp12","0")-ReadingsNum("Wetter","fc0_cloud12","0")},
fc0_LWP-WW15 {my $val=ReadingsNum("Wetter","fc0_temp15","0")-ReadingsNum("Wetter","fc0_cloud15","0")},
fc0_LWP-WW18 {my $val=ReadingsNum("Wetter","fc0_temp18","0")-ReadingsNum("Wetter","fc0_cloud18","0")},
fc0_LWP-WW_MAX {
my $maxlwp=ReadingsNum("Wetter", "fc0_LWP-WW12", 0);
my $maxtime="12";
my $lwp=ReadingsNum("Wetter", "fc0_LWP-WW15", 0);
if($lwp >= $maxtime) {
my $maxtime="15";
}
return $maxtime;
}
fc0_LWP-WW15 ist definitiv größer als fc0_LWP-WW12 und beides keine Komma zahlen falls das relevant ist.
Als Ergebnis erhalte ich aber immer nur die 12
Gruß
Björnar
Wenn du mit numerischen Werten zu tun hast, benötigst du keine Anführungszeichen. Nutzt du sie doch, vermutet Perl wohl einen String (und es wäre auch ein Stringvergleich fällig). Es müsste aber dann auch Warnungen im Log geben.
fc0_LWP-WW_MAX {
my $maxlwp=ReadingsNum("Wetter", "fc0_LWP-WW12", 0);
my $maxtime=12;
my $lwp=ReadingsNum("Wetter", "fc0_LWP-WW15", 0);
if($lwp >= $maxtime) {
my $maxtime=15;
}
return $maxtime;
}
gleiches Ergebnis, kein Eintrag im log.
Ich würde solche Dinge in die myUtils lagern. Aber das ist ggf. ein andere Thema (Übersicht).
Weißt du, was die Funktion macht? Wofür liest du $maxlwp? Diesen Wert verwendest du nicht wieder.
Mache doch mal selbst ein Debugging und baue ein paar Log-Zeilen ein (logge die Werte). Vorher würde ich das aber wirklich in eine myUtils auslagern und nur die sub aufrufen.
Tipp: Den Devicenamen bekommst du auch mit $name.
Wegen:
Zitatfc0_LWP-WW15 ist definitiv größer als fc0_LWP-WW12
denke ich du willst statt
if($lwp >= $maxtime)
eigentlich auf
if($lwp >= $maxlwp)
prüfen.
Gruß
Hans
Deswegen fragte ich, ob er weiß, was die Funktion macht.
Zitat von: Hans Franz am 18 Juli 2016, 12:00:39
Wegen:denke ich du willst statt
if($lwp >= $maxtime)
eigentlich auf
if($lwp >= $maxlwp)
prüfen.
Gruß
Hans
und der Teil hier:
{
my $maxtime=15;
}
bringt gar nichts, da einen neue Variable maxtime definiert wird, die dam Ende der Klammern auch gleich wieder weg ist. Der Wert der anderen Variablen verändert sich dadurch nicht.
Also ist das ganze if ein noop.
Vorschlag: Ein wenig in perl einarbeiten ...
fc0_LWP-WW_MAX {
my $maxlwp=ReadingsNum("Wetter", "fc0_LWP-WW12", 0);
my $maxtime=12;
my $lwp=ReadingsNum("Wetter", "fc0_LWP-WW15", 0);
if($lwp >= $maxtime) {
my $maxtime=15; <<== diese my-variable gibt es nur in dieser IF-Schleife
}
return $maxtime;
}
mach das "my" weg und es wird funktionieren.