und...oder in einer Bedingung

Begonnen von Navigator, 07 März 2014, 23:41:41

Vorheriges Thema - Nächstes Thema

Navigator

Guten...

ich habe folgendes Script gebastelt und finde einfach keinen Fehler.  Es werden verschiedene Zustände mit && "und"  geprüft, dabei ist aber zustätzlich ein || "oder" Vergleich mit enthalten. Leider funktioniert das nicht so wie ich will.

Bewegung_1 {
    if ( Value("Anwesenheit") eq "ABWESEND" && Value("Bewegung_1") eq "on-old-for-timer" && (Value("Daemmerung_1") eq "on" || Value("Daemmerung_2")) eq "on")
     { fhem ("set Leuchte_Pflanze ON;set Leuchte_Deko dim100%%;set Anwesenheit ANWESEND")}
}

Oben genannte Bedingung soll nur ausgeführt werden wenn ABWESEND und Bewegung und (Daemmerung1 oder Dammerung2) geschaltet ist.  Wenn ich den zweiten Dämmerungszustand weg lasse funtioniert es, anscheinend klappt das mit dem "oder" nicht so ganz.   :(
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

Paul

Setz die Oder-Bedingung mal in klammern
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

Puschel74

#2
Hallo,

entweder nochmal Klammern (wie Paul vorgeschlagen hat),
oder die Oder in eine eigene If-Bedingung bringen (eine eigene Zeile erstellen).

Grüße

http://de.wikipedia.org/wiki/Logische_Verkn%C3%BCpfung

Edith: Die Tags dienen dazu den Text leserlicher zu machen - wäre nett wenn du dir dessen Benutzung angewöhnst - Danke.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Navigator

Tja mit noch mehr Klammern hat es leider auch nicht funktioniert. Merkwürdig das es keine Beispiele in der Wiki oder sonstwo zu finden sind wo && und || ein einer Bedingung stehen. Müssen doch noch andere benutzen.

Eine zweite Variante mit einer zweiten if schlägt auch fehl. Hat noch jemand einen Tip?


Leuchte_Pflanze {if (Value("Leuchte_Decke") eq "ON" || (Value("Leuchte_Kueche") eq "ON")
                  if (Value("PC") eq "ON"){
                   fhem set("Leuchte_Bild 100%%")
                  }
                }

Die Aktoren hab ich mal zum testen geändert.
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

Puschel74

Hallo,

entweder hab ich mich verzählt oder es fehlt eine )

Leuchte_Pflanze {if (Value("Leuchte_Decke") eq "ON" || (Value("Leuchte_Kueche") eq "ON"))

Das bedeutet bei dir nun das
Leuchte_Decke ODER Leucht_Kueche UND PC ein ON im STATE tragen.

Wenn es das ist was du willst ist das ja ok.

Grüße

P.S.: Der Klammerfehler müsste aber eine Fehlermeldung im Logfile gebracht haben.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Navigator

na hoppla, fehlte wirklich noch ne Klammer. Trotzdem bekomme ich noch die Meldung im Log.

ZitatUnknown command {if, try help

Davon mal abgesehen, geht nich auch die einfachere Klammervariante wie von Paul vorgeschlagen. Das ist am Ende auch lesbarer....wenns mal gehen sollte.. ::)
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

Puschel74

Hallo,

hier
fhem set("Leuchte_Bild 100%%")
sollte eigentlich noch ein ; an den Schluß wenn ich mich nicht täusche.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Navigator

Leider immernoch fehlerhaft. Ist das mein schlechtes Charma? Und nun? Muss doch möglich sein einfache Vergleiche zu basteln.  :-\
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

betateilchen

ich würde sagen, da sind einfach zu viele Klammern...

if(Value(bla) eq 'on' || Value(blub) eq 'on') {mach was}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Navigator

Die letzte Variante mit geduzierten Klammern sieht folgendermaßen aus.

Leuchte_Pflanze {if (Value("Leuchte_Decke") eq "ON" || Value("Leuchte_Kueche") eq "ON")
                  if (Value("PC") eq "ON"){
                   fhem set("Leuchte_Bild 100%%");
                  }
                }


Meldung: 2014.03.08 16:55:12 3: N_test return value: Unknown command {if, try help.
Unknown command }

Wie macht ihr das denn mit komplexen Vergleichen? Ich könnte natürlch noch nen Dummy setzen der die "oder" Funktion übernimmt, aber das ist ja wie auf die chinesische Mauer zu klettern um danach schwimmen zu gehen.
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

maxritti

Jetzt sind es meiner Meinung nach wieder zu wenig Klammern  ;)

Das mach was von betateilchen steht noch in { }

Müsste also so heißen:

Leuchte_Pflanze {if (Value("Leuchte_Decke") eq "ON" || Value("Leuchte_Kueche") eq "ON") {
                  if (Value("PC") eq "ON"){
                   fhem set("Leuchte_Bild 100%%");
                  }
                 }
                }

marvin78


Leuchte_Pflanze {
if (Value("PC") eq "ON" && (Value("Leuchte_Decke") eq "ON" || Value("Leuchte_Kueche") eq "ON")) {
                   fhem set("Leuchte_Bild 100%%");
}
}


Ich nehme an, das ist, was du möchtest (wenn ich richtig verstanden habe, was du bewirken möchtest). Klammern zählen und ein wenig logisches Denken (bzw. ein wenig Aussagenlogik) ist hier hilfreich.

betateilchen

Du machst echt schräge Sachen, und das auch noch völlig ohne Plan...

Nach einer runden schließenden Klammer eines if kann niemals direkt ein weiteres if kommen. Da fehlt mindestens eine geschweifte Klammer dazwischen.
Über die falsche Klammersetzung bei fhem() will ich jetzt mal gar nicht reden.

{ if( (Value("Leuchte_Decke") eq "ON" || Value("Leuchte_Kueche") eq "ON")  &&  Value("PC") eq "ON" ) { fhem ("set Leuchte_Bild 100%%") } }

Vielleicht solltest Du Dir irgendwann mal die Handvoll wichtigsten perl-Grundlagen anlesen, damit Du nicht mit "raten" arbeiten musst, das macht nur Frust.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Puschel74

Hallo,

ach du Schande.
Das ist mir ja garnicht aufgefallen  :o

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

marvin78

Ich bin ja der Meinung, dass an dieser Stelle perl-Kenntnisse das kleinste Problem sind. Logik ist das, was vorhanden sein muss. Mal ne Klammer vergessen passiert aber hier fehlt das grundsätzliche Verständnis. Das ist NICHT abwertend gemeint. ABER: das kann man lernen.