Autor Thema: Perl und fhem Ebenen - Escape oder Klammerfehler  (Gelesen 218 mal)

Offline Oliver1985

  • New Member
  • *
  • Beiträge: 4
Perl und fhem Ebenen - Escape oder Klammerfehler
« 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!

Offline Beta-User

  • Hero Member
  • *****
  • Beiträge: 1399
  • Hausaufgaben schon gemacht?
    • Perpetual beta
Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
« Antwort #1 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
Ubuntu 16.04 (headless server)@ARM-TV-Box | ConfigDB | VCCU | MySensors seriell (2.2.0-beta, RS485+nRF24) | DS18B20@MySensors | Milight@ESP-GW | SIGNALduino | MapleCUN
Bitte beachten: https://forum.fhem.de/index.php/topic,71806.0.html

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 10275
Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
« Antwort #2 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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Offline Oliver1985

  • New Member
  • *
  • Beiträge: 4
Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
« Antwort #3 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...



Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 10275
Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
« Antwort #4 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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Oliver1985

  • New Member
  • *
  • Beiträge: 4
Antw:Perl und fhem Ebenen - Escape oder Klammerfehler
« Antwort #5 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...
Gefällt mir Gefällt mir x 1 Liste anzeigen

 

decade-submarginal