Bitte helft mir mal:
ich habe eine perl funktion:
sub rollo($)
{
my ($cmd) = @_;
serial_comm(4800,"/dev/ttyUSB0", $cmd);
}
die mir einen string auf die RS232 ausgibt.
Und eine test funktion:
sub test( )
{
rollo("zu"); #funktioniert
fhem( "define t1 at +00:00:10 set testvar 55" ); #nur so zum Test und funktioniert
fhem( "define t2 at +00:00:10 {rollo("stop")}" ); #funktioniert nicht Fehlermeldung: syntax error at ./FHEM/99_Utils.pm line 19, near ""define t1 at +00:00:10 {rollo("stop"
return;
}
Gebe ich im Befehlfenster von fhem
set testvar 55
und
{rollo("stop")}
ein, funktionierts einwandfrei.
letztendlich soll die Funktion den Rollo schliessen und, dass er nicht ganz zufährt, nach 10 Sekunden anhalten.
Kann mir bitte jemand erklären, was ich falsch mache?
Programmiere sonst in C, Perl bringt mich noch zum Wahnsinn!
Vielen Dank Willi
Setzte das "stop" mal in einfache Anführungszeichen, also 'stop', sonst unterbricht du den fhem( String
Gruß Niko
Hallo,
Zitatfhem( "define t1 at +00:00:10 set testvar 55" ); #nur so zum Test und funktioniert
fhem( "define t2 at +00:00:10 {rollo("stop")}" ); #funktioniert nicht Fehlermeldung: syntax error at ./FHEM/99_Utils.pm line 19, near ""define t1 at
Wenn ich das richtig interpretiere ist das der Gleiche Zeitpunkt - nämlich jetz + 10 sec. Versuche man für t2 "at +00:00:20"
Gruß Christoph
Der gleiche Zeitpunkt ist kein Problem. Die doppelten Anführungszeichen innehalb von doppelten Anführungszeichen sind das Prolem:
fhem( "define t2 at +00:00:10 {rollo('stop')}" );
Ich danke Euch vielmals, genau das wars und jetzt gehts.
Ich war der irrigen Meinung, dass man mit { von fhem in die Perl Ebene wechselt aus der man erst mit } wieder zurück kommt, oder so ähnlich.
Ist es dann egal, ob man in Perl strings in Anführungszeichen oder Apostrophen setzt?
Würde das dann auch so funktionieren?
fhem( 'define t2 at +00:00:10 {rollo("stop")}' );
Willi