FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bjoernar am 18 Juli 2016, 11:43:07

Titel: if funktioniert nicht
Beitrag von: Bjoernar am 18 Juli 2016, 11:43:07
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
Titel: Antw:if funktioniert nicht
Beitrag von: marvin78 am 18 Juli 2016, 11:44:54
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.
Titel: Antw:if funktioniert nicht
Beitrag von: Bjoernar am 18 Juli 2016, 11:47:13

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.
Titel: Antw:if funktioniert nicht
Beitrag von: marvin78 am 18 Juli 2016, 11:55:44
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.
Titel: Antw:if funktioniert nicht
Beitrag von: Hans Franz am 18 Juli 2016, 12:00:39
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
Titel: Antw:if funktioniert nicht
Beitrag von: marvin78 am 18 Juli 2016, 12:01:18
Deswegen fragte ich, ob er weiß, was die Funktion macht.
Titel: Antw:if funktioniert nicht
Beitrag von: viegener am 18 Juli 2016, 12:13:01
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 ...



Titel: Antw:if funktioniert nicht
Beitrag von: saxandl am 18 Juli 2016, 13:26:45
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.