IF ELSE ELSIF... ich brech ab!

Begonnen von SofB, 01 Oktober 2016, 22:14:42

Vorheriges Thema - Nächstes Thema

SofB

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!
FHEM auf Debian Jessie VM - ESXi 6.0 Intel Nuc i5 4th Gen
HM-CFG-LAN | HM-CFG-USB | nanoCUL868 | nanoCUL433 | JeeLink868

CoolTux


if (ReadingsVal("Residents","lastState","home") eq "asleep" bla bla
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

SofB

#2
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...
FHEM auf Debian Jessie VM - ESXi 6.0 Intel Nuc i5 4th Gen
HM-CFG-LAN | HM-CFG-USB | nanoCUL868 | nanoCUL433 | JeeLink868

CoolTux


    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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

#4
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?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

@KernSani
Bei Deinem elsif fehlt die Bedingung.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Zitat von: CoolTux am 01 Oktober 2016, 23:10:48
@KernSani
Bei Deinem elsif fehlt die Bedingung.
oooops... korrigiert :-)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

SofB

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...
FHEM auf Debian Jessie VM - ESXi 6.0 Intel Nuc i5 4th Gen
HM-CFG-LAN | HM-CFG-USB | nanoCUL868 | nanoCUL433 | JeeLink868

SofB

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?!?!
FHEM auf Debian Jessie VM - ESXi 6.0 Intel Nuc i5 4th Gen
HM-CFG-LAN | HM-CFG-USB | nanoCUL868 | nanoCUL433 | JeeLink868

fiedel

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.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

KernSani

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.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...