FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: karpate am 26 Juni 2017, 11:12:34

Titel: DOIF Fehler
Beitrag von: karpate am 26 Juni 2017, 11:12:34
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
Titel: Antw:DOIF Fehler
Beitrag von: Damian am 26 Juni 2017, 11:14:24
steht doch alles da:

error: condition c02: Syntax error, ("

DOELSEIF( ([FB73

zu dieser Klammer sehe ich keine geschlossene Klammer.
Titel: Antw:DOIF Fehler
Beitrag von: karpate am 26 Juni 2017, 11:25:13
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) )
Titel: Antw:DOIF Fehler
Beitrag von: CoolTux am 26 Juni 2017, 11:35:34

...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
Titel: Antw:DOIF Fehler
Beitrag von: amenomade am 26 Juni 2017, 12:00:55
Syntax ist
( Bedingung ) ( Kommando )

und NICHT
( (Bedingung ) ( Kommando ) )
Titel: Antw:DOIF Fehler
Beitrag von: karpate am 26 Juni 2017, 12:15:44
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"
Titel: Antw:DOIF Fehler
Beitrag von: amenomade am 26 Juni 2017, 12:17:59
Nochmal:
ZitatSyntax ist
( Bedingung ) ( Kommando )

und NICHT
( (Bedingung ) ( Kommando ) )
Titel: Antw:DOIF Fehler
Beitrag von: CoolTux am 26 Juni 2017, 12:22:08

([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
Titel: Antw:DOIF Fehler
Beitrag von: karpate am 26 Juni 2017, 19:24:41
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
Titel: Antw:DOIF Fehler
Beitrag 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.

Titel: Antw:DOIF Fehler
Beitrag von: karpate am 26 Juni 2017, 19:38:45
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 ;)
Titel: Antw:DOIF Fehler
Beitrag von: Neuhier am 28 Mai 2018, 11:31:26
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.
Titel: Antw:DOIF Fehler
Beitrag von: Per am 28 Mai 2018, 11:50:22
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.
Titel: Antw:DOIF Fehler
Beitrag 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.

Egal, habe ja einen Ausweg gefunden.
Titel: Antw:DOIF Fehler
Beitrag von: nils_ am 28 Mai 2018, 14:56:08
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!)
Titel: Antw:DOIF Fehler
Beitrag von: rabehd am 28 Mai 2018, 15:24:09
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?  ;)
Titel: Antw:DOIF Fehler
Beitrag von: Neuhier am 28 Mai 2018, 15:26:47
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.
Titel: Antw:DOIF Fehler
Beitrag von: Kharim am 05 Januar 2019, 16:58:41
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
Titel: Antw:DOIF Fehler
Beitrag von: Ellert am 05 Januar 2019, 19:29:22
Siehe https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche (https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche); hier z.B. Stacktrace.
Titel: Antw:DOIF Fehler
Beitrag von: Kharim am 06 Januar 2019, 11:29:15
Das Leben kann so einfach sein.
Dank dir :-) :-)
Stacktrace brachte direkt die defekte DOIF zum Vorschein und ja, es war eine Deaktivierte......