FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Benwish am 28 Juli 2016, 10:28:15

Titel: Perl Code nach FHEM Anweisungen schreiben?
Beitrag von: Benwish am 28 Juli 2016, 10:28:15
Hallo zusammen,

ich lasse über ein at meine Rollläden abends zeitgesteuert herunterfahren. Bisher sah der Code so aus:

*{twilight("myTwilight","ss_civil","18:00","23:00")} set Rollladen_Kueche pct 0; set Rollladen_Seitentuer pct 0; set Rollladen_HST_Links pct 0; set Rollladen_WC pct 0; set Rollladen_HST_Rechts pct 0

Nun wollte ich das Ganze erweitern, dass der eine Rollladen (Terassentür) nur herunterfährt wenn entweder keine Bewegung im Garten erkannt wird, oder keiner zuhause ist. Daher habe wollte ich das letzte set Kommando mit einem Perl-Code ersetzen:

*{twilight("myTwilight","ss_civil","18:00","23:00")} set Rollladen_Kueche pct 0; set Rollladen_Seitentuer pct 0; set Rollladen_HST_Links pct 0; set Rollladen_WC pct 0; {
my $r1 = Value("MotionDetector_Garten");
my $r2 = Value("rgr_Bewohner");
if ($r1 eq "nomotion" || $r2 eq "absent") {
fhem "set Rollladen_HST_Rechts pct 0";
}
}


Ich dache eigentlich, über die geschweiften Klammern könnte ich einen Perl Code jederzeit ausführen. Wenn ich den Code in eine Funktion in der 99_myUtils.pm packe und über FHEM einzeln zum Test über { MyTest(); } aufrufe, funktioniert der Perl Code auch. Nur in der oben geschriebenen Konstellation schmeißt mir FHEM folgende Fehler in's log.

2016.07.27 22:10:01 3: Rollladen_Runter: Unknown command {
my, try help.
Unknown command my, try help.
Unknown command if, try help.
Unknown command }
}, try help.


Kann mir jemand sagen, warum das nicht funktioniert?
Titel: Antw:Perl Code nach FHEM Anweisungen schreiben?
Beitrag von: Benni am 28 Juli 2016, 11:13:24
Das geht so nicht, entweder du hast FHEM-Kommandos (bspw. die set-Kommandos bei dir), die du im Ausführungsteil des at verkettest, oder du hast perl-Code, der dann in geschweiften Klammern angegeben wird. Eine Vermischung aus beiden ist an der Stelle so nicht möglich.
Am einfachsten ist du packst das alles in die perl-Ebene, am allerbesten in einer eigenen sub in der 99_myUtils.pm.

Von der perl-Ebene aus kannst du problemlos FHEM-Kommandos mit der Funktion fhem() ausführen, so wie du es in deinem letzten perl-Teil auch schon machst.
Titel: Antw:Perl Code nach FHEM Anweisungen schreiben?
Beitrag von: Benwish am 28 Juli 2016, 11:26:28
Achso ok...also nur entweder, oder. Gut, dann schreibe ich alles in Perl und lagere es aus. Danke dir! :-)