Hallo,
ich habe bereits einige DOIFs im Einsatz. Daher dachte ich kein Problem, ich bastele mir schnell ein Neues für folgendes Szenario:
Vor Kurzem habe ich mir ein LG-TV angeschafft, auf welchem ich bei Anruf Nummer und Anrufer anzeigen lassen möchte (Modul LGTV_WebOS und FB CallMonitor ist eingerichtet). Wenn der TV aus ist, soll per Pushbullet die Info verschickt werden. Folgendes DOIF habe ich daher definiert (aus DEF kopiert):
([FB7390CallMonitor:event] eq "connect" and [WZ_TV_LG55:state] eq "on") (set WZ_TV_LG55 screenMsg Nummer:[FB7390CallMonitor:external_number] Anrufer:[FB7390CallMonitor:external_name]) DOELSEIF( ([FB7390CallMonitor:event] eq "connect" and [WZ_TV_LG55:state] eq "off") (set PB_Ingo message [FB7390CallMonitor:external_number] / [FB7390CallMonitor:external_name] | Anruf) )
Beim Ausführen des DOELSEIF kommt error: condition c02: Syntax error, ("
Kann mir jemand auf die Sprünge helfen, sehe den Fehler nicht.
Sorry und Danke
steht doch alles da:
error: condition c02: Syntax error, ("
DOELSEIF( ([FB73
zu dieser Klammer sehe ich keine geschlossene Klammer.
ich stehe wohl auf dem Schlauch, die Klammer ist doch geschlossen...
...DOELSEIF( ([FB7390CallMonitor:event] eq "connect" and [WZ_TV_LG55:state] eq "off") (set PB_Ingo message [FB7390CallMonitor:external_number] / [FB7390CallMonitor:external_name] | Anruf) )
...external_number] Anrufer:[FB7390CallMonitor:external_name]) DOELSEIF( ([FB7390CallMonitor:event] eq "connect" and [WZ_TV_LG55:state] eq "off"...
DOELSEIF( ([FB73
Ich bin mal so frei und ziehe Dir den Schlauch unter den Füßen weg
Syntax ist
( Bedingung ) ( Kommando )
und NICHT
( (Bedingung ) ( Kommando ) )
als zusätzliche Info: beim manuellen Ausführen von cmd_2 steht im Reading ein Warning
außerdem steht im Log noch: PERL WARNINGN: Bareword found where Operator expected at (eval 10006719) line 1, near "message ReadingValDoIf"
Nochmal:
ZitatSyntax ist
( Bedingung ) ( Kommando )
und NICHT
( (Bedingung ) ( Kommando ) )
([FB7390CallMonitor:event] eq "connect" and [WZ_TV_LG55:state] eq "on") (set WZ_TV_LG55 screenMsg Nummer:[FB7390CallMonitor:external_number] Anrufer:[FB7390CallMonitor:external_name]) DOELSEIF ([FB7390CallMonitor:event] eq "connect" and [WZ_TV_LG55:state] eq "off") (set PB_Ingo message [FB7390CallMonitor:external_number] / [FB7390CallMonitor:external_name] | Anruf)
Probiere mal so
kurze Rückmeldung: es lag am Klammersyntax
Syntax ist
( Bedingung ) ( Kommando )
und NICHT
( (Bedingung ) ( Kommando ) )
Vielen Dank an alle und für die Geduld
Grüße
Tipp für die Zukunft.
Wenn du ein DOIF definierst, dann mache es im WEB-Browser und nicht über das Editieren von fhem.cfg, dann wirst du bereits bei der Definition vom Modul auf solche Fehler hingewiesen und nicht erst zur Laufzeit, was immer mit unerwartetem Frust im Nachhinein verbunden ist.
Zitat von: Damian am 26 Juni 2017, 19:36:31
Tipp für die Zukunft.
Wenn du ein DOIF definierst, dann mache es im WEB-Browser und nicht über das Editieren von fhem.cfg, dann wirst du bereits bei der Definition vom Modul auf solche Fehler hingewiesen und nicht erst zur Laufzeit, was immer mit unerwartetem Frust im Nachhinein verbunden ist.
Danke für den Hinweis. Bin zwar so vorgegangen beim "define", aber die eigentlichen Bedingungen habe ich in Notepad++ erstellt.
Fazi: muß noch mehr DOIFs erstellen ;)
Habe das auch, wenn ich das so eingebe:
DOELSEIF [b]([/b][{sunrise("REAL",0,"04:00","07:30")}]) (set GWomi off)[b])[/b]
Gebe ich so ein:
DOELSEIF [{sunrise("REAL",0,"04:00","07:30")}] (set GWomi off)
kommt der Fehler:
no left bracket of condition: [{sunrise("REAL",0,"04:00","07:30")}] (set GWomi off)
10min später:
nimmt man einfach DOELSE, nicht DOELSEIF, dann geht es problemlos.
Zitat von: Neuhier am 28 Mai 2018, 11:31:26
kommt der Fehler:
Logisch, fehlen ja auch die Klammern. Einfacher Syntaxfehler.
Zitat von: Neuhier am 28 Mai 2018, 11:31:26nimmt man einfach DOELSE, nicht DOELSEIF, dann geht es problemlos.
Dann hast du allerdings völligen Murx, eine Bedingung nach DOELSE wird als Commando ausgeführt (bzw. versucht auszuführen). Der Teil in [] wird dann wahrscheinlich einfach nur ignoriert bzw. durch den Inhalt der nicht existierenden Variable ("0" oder "1", je nachdem, was sunrise zurückliefert) ersetzt -> NUL.
Unverständlich ist mir, daß ein Fehler aufpoppt, wenn eine Klammer darum ist.
Und ein Fehler, wenn keine Klammer darum ist.
Egal, habe ja einen Ausweg gefunden.
Zitat von: Neuhier am 28 Mai 2018, 13:19:05
Unverständlich ist mir, daß ein Fehler aufpoppt, wenn eine Klammer darum ist.
Und ein Fehler, wenn keine Klammer darum ist.
na wenn du die öffnendes und schließenden Klammern mal gezählt hättest, wäre dir bestimmt was aufgefallen.
Zitat von: Neuhier am 28 Mai 2018, 13:19:05
Egal, habe ja einen Ausweg gefunden.
ich hoffe du hast hinter dem DOELSE _keine_ Bedingung stehen (siehe dazu auch die Antwort von Per!)
ZitatDann hast du allerdings völligen Murx, eine Bedingung nach DOELSE wird als Commando ausgeführt (bzw. versucht auszuführen).
Können Götter nicht die Sonne aufgehen lassen? ;)
Ok, gefunden.
Manchmal sieht man die Klammer vor Zeichen nicht.
Da frage ich mich aber, warum der das im Webif angenommen hat und den Fehler erst bei:
set Nachtlicht cmd_2
ausgespuckt hat.
Hallo Zusammen,
habe leider die gleiche Meldung im Log und benötige bitte eure Hilfe :-(
2019.01.05 08:55:04 1: PERL WARNING: Bareword found where operator expected at (eval 28604) line 1, near ") ::ReadingValDoIf"
2019.01.05 08:57:05 1: PERL WARNING: Bareword found where operator expected at (eval 28744) line 1, near ") ::ReadingValDoIf"
2019.01.05 08:58:06 1: PERL WARNING: Bareword found where operator expected at (eval 28822) line 1, near ") ::ReadingValDoIf"
2019.01.05 08:59:07 1: PERL WARNING: Bareword found where operator expected at (eval 28903) line 1, near ") ::ReadingValDoIf"
Leider/anscheinend habe ich diese Meldung schon längere Zeit.
"Leider" kann ich keine nicht funktionierende DOIF beklagen.
Wie kann ich ermitteln, von welcher DOIF diese Meldung kommt?
Wird die Meldung auch von deaktivierten DOIFs ausgelöst?
Ist der Zeitpunkt zwangsläufig der Ausführungszeitpunkt einer DOIF?
Vielen Dank,
Kharim
Siehe https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche (https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche); hier z.B. Stacktrace.
Das Leben kann so einfach sein.
Dank dir :-) :-)
Stacktrace brachte direkt die defekte DOIF zum Vorschein und ja, es war eine Deaktivierte......