Hallo,
findet hier jemand den Syntaxfehler?
define Licht_Bad_OG1_Test notify Licht_Bad_1_Test:on.* {\
if (Value("OUT2_A1") eq "on") && (Value("OUT2_A3") eq "on") {\
fhem ("set OUT_2 PortA1 off")\
}\
elsif (Value("OUT2_A1") eq "on") && (Value("OUT2_A3") eq "off") {\
fhem ("set OUT_2 PortA1 off" ;; "set OUT_2 PortA2 off")\
}\
elsif Value("OUT2_A1") eq "off" {\
fhem ("set OUT_2 PortA1 on" ;; "set OUT_2 PortA2 on")\
}\
}\
}
Hab das ganze von hier rausgeholt und modifiziert: http://www.fhemwiki.de/wiki/Trick_der_Woche#Struktur_von_.22else_if.22_Verzweigungen (http://www.fhemwiki.de/wiki/Trick_der_Woche#Struktur_von_.22else_if.22_Verzweigungen)
im Log bekomme ich:
Zitat2016.09.21 11:20:18 1: PERL WARNING: Bareword found where operator expected at (eval 1545) line 7, near "" ; "set"
2016.09.21 11:20:18 3: eval: my $TYPE='dummy';my $NAME='Licht_Bad_1_Test';my $EVTPART0='on';my $SELF='Licht_Bad_OG1_Test';my $EVENT='on';{
if (Value("OUT2_A1") eq "on") && (Value("OUT2_A3") eq "on") {
fhem ("set OUT_2 PortA1 off")
}
elsif (Value("OUT2_A1") eq "on") && (Value("OUT2_A3") eq "off") {
fhem ("set OUT_2 PortA1 off" ; "set OUT_2 PortA2 off")
}
elsif Value("OUT2_A1") eq "off" {
fhem ("set OUT_2 PortA1 on" ; "set OUT_2 PortA2 on")
}
}
}
2016.09.21 11:20:18 3: Licht_Bad_OG1_Test return value: Can't find string terminator '"' anywhere before EOF at (eval 1545) line 7.
Wers findet bekomt nen Bier. :-)
/Frank
Beim zweiten elsif fehlen die Klammern!
Gruß
Dan
Zitat von: Frank_Huber am 21 September 2016, 11:27:20
Hallo,
findet hier jemand den Syntaxfehler?
define Licht_Bad_OG1_Test notify Licht_Bad_1_Test:on.* {\
if (Value("OUT2_A1") eq "on") && (Value("OUT2_A3") eq "on") {\
fhem ("set OUT_2 PortA1 off")\
}\
elsif (Value("OUT2_A1") eq "on") && (Value("OUT2_A3") eq "off") {\
fhem ("set OUT_2 PortA1 off" ;; "set OUT_2 PortA2 off")\
}\
elsif Value("OUT2_A1") eq "off" {\
fhem ("set OUT_2 PortA1 on" ;; "set OUT_2 PortA2 on")\
}\
}\
}
Hab das ganze von hier rausgeholt und modifiziert: http://www.fhemwiki.de/wiki/Trick_der_Woche#Struktur_von_.22else_if.22_Verzweigungen (http://www.fhemwiki.de/wiki/Trick_der_Woche#Struktur_von_.22else_if.22_Verzweigungen)
im Log bekomme ich:
Wers findet bekomt nen Bier. :-)
/Frank
Was schon mal auffällt: eine '}' zuviel und evtl. mal statt 'elsif Value("OUT2_A1") eq "off"' -> 'elsif (Value("OUT2_A1") eq "off")'
Zitat von: Frank_Huber am 21 September 2016, 11:27:20
fhem ("set OUT_2 PortA1 on" ; "set OUT_2 PortA2 on")
Hallo Frank, das mit dem Semikolon zwischen Anführungsstrichen finde ich persönlich komisch, ist aber sicher nicht falsch. Ich würde sowas ohne die Anführungsstriche schreiben und besser noch zusammengefasst:
fhem ("set OUT_2 PortA1,OUT_2 PortA2 on")
Dies nur als Tip, denn syntaktisch ist das ja nicht falsch.
Zitat von: FHEMAN am 21 September 2016, 11:49:22
Hallo Frank, das mit dem Semikolon zwischen Anführungsstrichen finde ich persönlich komisch, ist aber sicher nicht falsch. Ich würde sowas ohne die Anführungsstriche schreiben und besser noch zusammengefasst:
fhem ("set OUT_2 PortA1,OUT_2 PortA2 on")
Dies nur als Tip, denn syntaktisch ist das ja nicht falsch.
Das ist in der Tat einfacher! Am Besten noch mit FILTER verwenden um die Last gering zu halten.
Das mit der einen geschweiften Klammer zu viel stimmt auch!
Des Weiteren hat sich im ersten fhem noch ein falsches " dawischen gemogelt!
So sollte es gehen:
define Licht_Bad_OG1_Test notify Licht_Bad_1_Test:on.*{\
if (Value("OUT2_A1") eq "on" && Value("OUT2_A3") eq "on")\
{\
fhem ("set OUT_2 PortA1 off")\
}\
elsif (Value("OUT2_A1") eq "on" && Value("OUT2_A3") eq "off")\
{\
fhem ("set OUT_2 PortA1 off" ;; "set OUT_2 PortA2 off")\
}\
elsif (Value("OUT2_A1") eq "off")\
{\
fhem ("set OUT_2 PortA1 on" ;; "set OUT_2 PortA2 on")\
}\
}
Gruß
Dan
EDIT: Sorry, war noch nicht richtig! Hatte etwas zwischendurch übersehen im Code. Ist nun berichtigt.
Das mit FILTER ist hier leider doch nicht so einfach wie ich dachte...
EDIT2: Hab noch ein paar zu viele Klammern entdeckt und entfernt!
Danke euch allen!
mit den Formatierungen, Klammern und all dem tu ich mich manchmal noch schwer,
super dass hier dann immer so super schnell geholfen wird!
Die Anführungsstriche ums Semikolon hatte ich mal rein zum Test. man probiert ja erstmal rum wenns ned geht. :-)
Die set Befehle habe ich jetzt auch zusammengefasst. und eine Leerstelle eingefügt nach :on.*
Hintergrung des Ganzen ist ein Bad mit zwei Zugängen. in der Mitte als "Raumteiler" die Dusche.
Ich will an jeder Tür nen Licht-Taster und das Licht der Dusche in Abhängigkeit zu den Beiden Seiten mit an oder ausschalten. :-)
Jetzt gibts dann noch den zweiten Notify für die andere Seite und dann wird getestet.
define Licht_Bad_OG1_Test notify Licht_Bad_1_Test:on.* {\
if (Value("OUT2_A1") eq "on" && Value("OUT2_A3") eq "on")\
{\
fhem ("set OUT_2 PortA1 off")\
}\
elsif (Value("OUT2_A1") eq "on" && Value("OUT2_A3") eq "off")\
{\
fhem ("set OUT_2 PortA1,A2 off")\
}\
elsif (Value("OUT2_A1") eq "off")\
{\
fhem ("set OUT_2 PortA1,A2 on")\
}\
}
Als gut gemeinten Tipp kann ich Dir dazu nur Folgendes mitgeben:
- NIEMALS die fhem.cfg manuell bearbeiten! Meine fhem.cfg ist innerhalb FHEMs gar nicht editierbar/speicherbar.
- Alle Definitionen über die FHEM Eingabezeile anlegen und über DEF manuell verändern, das spart auch die ganzen doppelten Semikolon und Zeilenabschlüsse, da diese dann automatisch ergänzt werden. Finde es auch sehr müßig ständig überlegen zu müssen ob nun doppeltes Semikolon oder Zeilenabschluss oder oder oder...
- Am besten bearbeiten lässt sich Code immer noch in einem dafür geeigneten Editor. Als Beispiel nenne ich hier "Sublime Text" da ich mit diesem aufgrund anderer Code-Schreibereien am besten umgehen kann. Dieser hat auch eine Autovervollständigung mit drin und Code-Folding und und und.....
Meine 99_myUtils.pm bearbeite ich ausschließlich mit dem externen Editor. Wenn ich fertig bin wird alles innerhalb der Datei kopiert und dann in FHEM->edit files in die Datei eingefügt und gespeichert.
Für komplexere notify(s) oder at(s) mache ich das genau so. Den Code aus der DEF holen, im externen Editor bearbeiten und dann wieder in DEF einfügen und speichern.
Vielleicht hilft Dir das etwas besser mit der Materie klar zu kommen.
Gruß
Dan