[gelöst] DOIT-Syntaxfehler bei Perl-Ausdruck/Befehl

Begonnen von td, 24 November 2014, 14:12:37

Vorheriges Thema - Nächstes Thema

td

Hallo zusammen,

ich fange gerade an, mit DOIF zu arbeiten und möchte als Befehl eine Reihe von Perl-Kommandos absetzen:
define rauchmelder.th.alarm DOIF ([rauchmelder.th] eq "smoke_detect: on") ({system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");;fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");;Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"})

Derselbe Code funktioniert in einem Notify einwandfrei, erzeugt aber bei Auslösung der DOIF-Bedingung:
rauchmelder.th.alarm: { system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"}: Unknown command {, try help.
Daß Perl-Anweisungen grundsätzlich möglich sind, entnehme ich der Commandref ("Waschmaschinen-Fertig"-Beispiel).

Was mache ich falsch?

Gruß
td

Damian

Zitat von: td am 24 November 2014, 14:12:37
Hallo zusammen,

ich fange gerade an, mit DOIF zu arbeiten und möchte als Befehl eine Reihe von Perl-Kommandos absetzen:
define rauchmelder.th.alarm DOIF ([rauchmelder.th] eq "smoke_detect: on") ({system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");;fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");;Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"})

Derselbe Code funktioniert in einem Notify einwandfrei, erzeugt aber bei Auslösung der DOIF-Bedingung:
rauchmelder.th.alarm: { system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"}: Unknown command {, try help.
Daß Perl-Anweisungen grundsätzlich möglich sind, entnehme ich der Commandref ("Waschmaschinen-Fertig"-Beispiel).

Was mache ich falsch?

Gruß
td
Das liegt offenbar an dem Komma-Zeichen. Damit Komma nicht als Trennzeichen gilt, muss man die Befehlszeile, wo das Komma vorkommt zusätzlich Klammern (siehe Commandref von DOIF), also:

define rauchmelder.th.alarm DOIF ([rauchmelder.th] eq "smoke_detect: on") (({system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");;fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");;Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"}))


Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

td

Hallo Damian,

vielen Dank für die Antwort, aber leider hat sich nichts geändert:
rauchmelder.th.alarm: {system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"}: Unknown command {system(, try help.
Unknown command fhem("set, try help.
Unknown command Log, try help.

Woran könnte es noch liegen?

Gruß
td

Damian

Zitat von: td am 27 November 2014, 00:22:33
Hallo Damian,

vielen Dank für die Antwort, aber leider hat sich nichts geändert:
rauchmelder.th.alarm: {system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"}: Unknown command {system(, try help.
Unknown command fhem("set, try help.
Unknown command Log, try help.

Woran könnte es noch liegen?

Gruß
td

Habe leider keine Zeit das nachzustellen. Du kannst die Sache zum Testen erst mal abspecken, also zu erst nur
({system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'")})

angeben. Und wenn das läuft den nächsten Befehl erstmal separat und dann in Kombination mit dem ersten probieren, usw. bis man die Ursache eingekreist hat.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

td

#4
Hallo Damian,

ich habe getestet, bin aber leider nicht weitergekommen:
Falls ich nur einen, dem ersten, Befehl ("system(...)") nutze, arbeitet DOIF einwandfrei.
Füge ich den zweiten, den fhem-Aufruf, hinzu, tritt der genannte Fehler auf. Die doppelte Klammerung spielt dabei keine Rolle.

Nachtrag:
Interessanterweise löst

define rauchmelder.th.alarm DOIF ([rauchmelder.th] eq "smoke_detect: on") ({system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");; fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");; (Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!")})

also die Ursprungsvariante mit einem Leerzeichen nach den doppelten Semikola gar keine Reaktion aus.

Gruß
td

Damian

Zitat von: td am 27 November 2014, 18:22:17
Hallo Damian,

ich habe getestet, bin aber leider nicht weitergekommen:
Falls ich nur einen, dem ersten, Befehl ("system(...)") nutze, arbeitet DOIF einwandfrei.
Füge ich den zweiten, den fhem-Aufruf, hinzu, tritt der genannte Fehler auf. Die doppelte Klammerung spielt dabei keine Rolle.

Nachtrag:
Interessanterweise löst

define rauchmelder.th.alarm DOIF ([rauchmelder.th] eq "smoke_detect: on") ({system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'");; fhem("set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600");; (Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!")})

also die Ursprungsvariante mit einem Leerzeichen nach den doppelten Semikola gar keine Reaktion aus.

Gruß
td

Ich habe das jetzt bei mir nachgestellt. Die Lösung ist ganz einfach. Du musst im DEF-Editor zwei Semikolons jeweils angeben (in der cfg also vier) oder eleganter so:

define rauchmelder.th.alarm DOIF ([rauchmelder.th] eq "smoke_detect: on")
({system( "/root/bin/fhem/bin/fhem-mail 2 'Alarm Rauchmelder Treppenhaus (Dachgeschoß): Rauchdetektierung (%)!'")},set push2android msg 'Rauchmelder-Alarm' 'Rauchmelder Treppenhaus (Dachgeschoß meldet!)' '' 2 'siren' 30 3600,{Log 1, "Rauchmelder Treppenhaus (Dachgeschoß) meldet!"})


Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

td