FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Oliver1985 am 17 Juli 2017, 12:33:05

Titel: Perl und fhem Ebenen - Escape oder Klammerfehler
Beitrag von: Oliver1985 am 17 Juli 2017, 12:33:05
Guten Tag zusammen,
ich versuche nun seit Stunden die Bedingungen in einem notify zu setzen aber es wird einfach nicht akzeptiert.
RegEXP1:.* {
fhem("define TEST at +00:00:10 { if (Value("Dummy1") eq "off") { fhem("set Dummy2 on")}fhem("set Dummy3 on")}")
}

Daher meine Frage: Kann es sein, dass es nicht erlaubt ist beliebig oft fhem und Perl Befehle zu kombinieren?
Ich habe auch bereits versucht dutzende Semikolons an geeigneten Stellen zu platzieren (...wobei ich mir nicht sicher bin, ob ich bei diesem Szenario überhaupt Escapen muss...")

der define Befehl funktioniert übrigens wunderbar, wenn ich diesen direkt in die fhem Kommandozeile schreibe.

Vielen Dank im Voraus!
Titel: Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
Beitrag von: Beta-User am 17 Juli 2017, 13:39:44
Bin auch kein Perl-Held, aber versuch mal das:
RegEXP1:.* defmod TEST at +00:00:10 { fhem "set Dummy2,Dummy3 on" if (Value("Dummy1") eq "off")}

oder:
RegEXP1:.* defmod TEST at +00:00:10 { if (Value("Dummy1") eq "off") { fhem "set Dummy2 on";;fhem "set Dummy3 on"}}


Wenn Du mehrere "" ineinander verschachtelst (und das wirklich brauchst), mußt Du escapen, manchmal reicht es auch, zwischen " und ' zu wechseln.

Gruß, Beta-User
Titel: Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
Beitrag von: CoolTux am 17 Juli 2017, 13:48:48

Internals:
   CFGFN
   DEF        testDummy:.* {
fhem("define TEST at +00:00:10 { fhem\(\"set testDummy2 on;; set testDummy3 on\"\) if\( Value\(\"testDummy2\"\) ne \"on\") }");
}

   NAME       testNotify
   NOTIFYDEV  testDummy
   NR         31
   NTFY_ORDER 50-testNotify
   REGEXP     testDummy:.*
   STATE      2017-07-17 13:47:32
   TYPE       notify
   READINGS:
     2017-07-17 13:47:13   state           active
Attributes:


Getestet und für funktional befunden
Titel: Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
Beitrag von: Oliver1985 am 18 Juli 2017, 10:35:52
Hallo.
Danke euch beiden für die Antworten aber wenn ich mir euren Quellcode anschaue, erreicht dieser nicht das, was ich eigentlich wollte, oder?

Geplant gewesen ist folgendes: Wenn trigger, dann "define at" welches nach Zeit X den Zustand von Y ändert und den Zustand von Z nur ändert, wenn die zusätzliche Bedingung erfüllt ist.

Bei eurem Code wird die hat die if-Schleife Auswirkung auf beide Dummys...


Titel: Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
Beitrag von: CoolTux am 18 Juli 2017, 10:41:32
Nun kann man natürlich darauf warten das jemand daher kommt und einen genau für Deine Anforderung fertigen Code liefert, Oder aber man nimmt den gegebenen Code und versucht diesen Anhand vorhandener Gegebenheiten an zu passen.
Deine Entscheidung. Ich kann sagen das mein Code funktioniert. Er legt ein at an und das at führt den Befehl inklusive Bedingungsabfrage nach X Minuten aus.
Titel: Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
Beitrag von: Oliver1985 am 29 Juli 2017, 10:18:23
Danke CoolTux.

Der Ansatz mit den backslashs war genau richtig. Damit konnte ich meine Herausforderung umsetzen. Die Lösung, falls jemand diese mal brauchen sollte, lautet schlussendlich:

fhem("define TEST at +00:00:10 { fhem\(\"set dummy1 on\"\);; fhem\(\"set dummy2 on\"\) if\( Value\(\"dummy3\"\) ne \"on\") }");

Danke nochmal...