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. :(
Setz die Oder-Bedingung mal in klammern
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 (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.
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.
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.
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.. ::)
Hallo,
hier
fhem set("Leuchte_Bild 100%%")
sollte eigentlich noch ein ; an den Schluß wenn ich mich nicht täusche.
Grüße
Leider immernoch fehlerhaft. Ist das mein schlechtes Charma? Und nun? Muss doch möglich sein einfache Vergleiche zu basteln. :-\
ich würde sagen, da sind einfach zu viele Klammern...
if(Value(bla) eq 'on' || Value(blub) eq 'on') {mach was}
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.
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%%");
}
}
}
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.
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.
Hallo,
ach du Schande.
Das ist mir ja garnicht aufgefallen :o
Grüße
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.
Zitat von: marvin78 am 08 März 2014, 17:10:32
aber hier fehlt das grundsätzliche Verständnis. Das ist NICHT abwertend gemeint. ABER: das kann man lernen.
Genau darauf wollte ich hinaus. Und da es hier um perl geht, hatte ich das Aneignen der Logik-Kenntnisse gleich in Kombination mit der perl-Syntax vorgeschlagen.
Na das war ne Klatsche.. aber danke, scheint so zu funktioniern, jetzt wo es da so steht, siehts ganz einfach aus. An fehlender Logik kanns aber nicht ganz liegen, sonst würden die Programme nicht woanders so schon laufen. Aber die Trennung von FHEM und Pearl Code mit daraus resultierender anderer Klammersetzung sind mir immernoch suspekt.
so suspekt, dass Du nach 728 verschiedenen Syntaxfragen hier im Forum immer noch nicht verstanden hast, dass es perl heißt und nicht pearl ;)
Vielleicht sollte ich mir doch mal eine entprechende Wiki ansehen. :-[
Nach diesem http://www.amazon.de/Programmieren-Perl-Rainer-Krienke/dp/3446220135/ref=sr_1_2?ie=UTF8&qid=1394297160&sr=8-2&keywords=perl+programmieren (http://www.amazon.de/Programmieren-Perl-Rainer-Krienke/dp/3446220135/ref=sr_1_2?ie=UTF8&qid=1394297160&sr=8-2&keywords=perl+programmieren) ... werd ich euch weiter mit Fragen löchern. ::)
Zitat von: Puschel74 am 08 März 2014, 17:10:01
ach du Schande.
Das ist mir ja garnicht aufgefallen
*g* auf-die-Zunge-beiss... 8)
Ja ich weiß - das war mal wieder ein Steilvorlage ;D
Naja, nicht so ganz, die Idee mit einer weiteren Verschachtelung mit ( vor dem if hatte ich hier aus dem Forum.
define test notify lamp
IF ([lamp:state] eq "on") (
IF ([outdoor:humidity] < 70)
(set lamp off)
ELSE
(set lamp on)
) ELSE
(set switch on)
http://forum.fhem.de/index.php?topic=17895.0
...also bitte nicht so nachtragend.
Zitat von: Dittel am 08 März 2014, 19:52:39
Naja, nicht so ganz, die Idee mit einer weiteren Verschachtelung mit ( vor dem if hatte ich hier aus dem Forum.
Du darfst
IF nicht mit
if verwechseln.
Gruß
Damian