FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: SofB am 01 Oktober 2016, 22:14:42

Titel: IF ELSE ELSIF... ich brech ab!
Beitrag von: SofB am 01 Oktober 2016, 22:14:42
Hallo zusammen,

ich versuche für das comingHOME event zu Unterscheiden, ob ich von schlafen zu Home transitiere oder von außerhalb des Hauses komme. Je nachdem und Wetteraussicht sollen die Jalos anders laufen.
Allerdings macht er immer ALLE Befehle.

Residents:home.*
{
    my $tempDay=(ReadingsVal("ProPlanta_Weather", "fc0_tempMax", 0));
    if (Residents.lastState eq "asleep" && $tempDay < 20) {
        fhem("set group=Blinds_Downstairs on; set IroningRoom_Blind on; set Office_Blind on;");;

    }
    elsif {
        if (Residents.lastState eq "asleep" && $tempDay > 20) {
            fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
        }
   }

fhem("set BathRoomBOOM on;
set BedsideBOOM on;
set OfficePi on;
set KitchenBOOM favorites sunshine_live;");;
}


Wer kann mir helfen? Ich habe schon viele if und else Verschachtelungen probiert und auch mit und ohne DoppelSemikolon gearbeitet, aber nix half :(

Danke im Voraus!
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: CoolTux am 01 Oktober 2016, 22:20:52

if (ReadingsVal("Residents","lastState","home") eq "asleep" bla bla
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: SofB am 01 Oktober 2016, 22:31:27
Hi CoolTux,

danke für die schnelle Hilfe (um diese Zeit...)

my $tempDay=(ReadingsVal("ProPlanta_Weather", "fc0_tempMax", 0));;
    my $resiState=(ReadingsVal("Residents","lastState","home"));;
    if ($resiState eq "asleep" && $tempDay < 20) {


So habe ich es angepasst. Leider ist das Verhalten noch das gleiche...
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: CoolTux am 01 Oktober 2016, 22:45:41

    if (ReadingsVal("Residents","lastState","home") eq "asleep" && ReadingsVal("ProPlanta_Weather","fc0_tempMax", 0) < 20) {
        fhem("set group=Blinds_Downstairs on; set IroningRoom_Blind on; set Office_Blind on;");;
    }

    elsif ReadingsVal("Residents","lastState","home") eq "asleep" && ReadingsVal("ProPlanta_Weather","fc0_tempMax", 0) > 20) {
            fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
       
    }


Bitte mal so versuche
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: KernSani am 01 Oktober 2016, 23:02:59
Hi,

was mir auffällt:


    elsif {
        if (Residents.lastState eq "asleep" && $tempDay > 20) {
            fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
        }

ist in der Form natürlich etwas umständlich

elsif ($resiState eq "asleep" && $tempDay < 20) {
fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
        }

würde ausreichen.
Insgesamt übersichtlicher wäre wahrscheinlich sowas:
if ($resiState eq "asleep") {
    if ($tempDay > 20) {
       # mach was
    }
    else {
     # mach was anderes
    }
}


2. Was machst du, wenn $tempDay = 20? ;-)

Das löst allerdings nicht deine ursprüngliche Frage... Ich gehe davon aus, dass du reload der 99_myUtils gemacht hast?
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: CoolTux am 01 Oktober 2016, 23:10:48
@KernSani
Bei Deinem elsif fehlt die Bedingung.


Grüße
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: KernSani am 01 Oktober 2016, 23:20:57
Zitat von: CoolTux am 01 Oktober 2016, 23:10:48
@KernSani
Bei Deinem elsif fehlt die Bedingung.
oooops... korrigiert :-)
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: SofB am 01 Oktober 2016, 23:23:42
Danke für Eure Hilfe!!
Ich habe das Notify nicht in der 99_myUtils, sondern direkt im fhem als notify definiert.
Mit Eurer Hilfe konnte ich es jetzt hinbekommen.
Mein Problem liegt nun (nur noch) darin, dass if (ReadingsVal("Residents","lastState","home") eq "asleep") immer TRUE zurückgibt.
Ich muss mal schauen, wo da der Wurm in meinem Resident ist...
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: SofB am 02 Oktober 2016, 00:31:06
Gelöst!!!
Ich bin schockiert und erfreut zugleich...

Residents:home.* {
    if


ist NICHT

Residents:home.*
{
    if


Das Enter darf NICHT sein vor der Klammer. Zwar wird das notify getriggert, aber dann funktionert der Code nicht?!?!
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: fiedel am 02 Oktober 2016, 09:05:28
In der myUtils hätte das vermutlich keine Rolle gespielt. Mangels ausreichendem Wissen um die Parameterübergabe habe ich diesen "Anfängerfehler" auch gemacht und verschiebe nun nach und nach den ganzen Code aus der CFG in Utils- Dateien. Hab auch das Gefühl, dass das stabiler läuft.
Titel: Antw:IF ELSE ELSIF... ich brech ab!
Beitrag von: KernSani am 02 Oktober 2016, 09:18:42
Ein "\" am Ende der Zeile "verbindet" Zeilen. Siehe http://fhem.de/commandref_DE.html#command. Macht es bei komplexerem Code aber auch nicht wirklich übersichtlich. Daher ist myUtils hier sicher der bessere Weg.