Hauptmenü

if funktioniert nicht

Begonnen von Bjoernar, 18 Juli 2016, 11:43:07

Vorheriges Thema - Nächstes Thema

Bjoernar

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

marvin78

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.

Bjoernar


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.

marvin78

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.

Hans Franz

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
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

marvin78

Deswegen fragte ich, ob er weiß, was die Funktion macht.

viegener

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 ...



Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

saxandl

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.