Hauptmenü

Perl funkionsaufruf

Begonnen von lt1014, 05 August 2014, 22:59:58

Vorheriges Thema - Nächstes Thema

lt1014

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
Fritzbox 7490
Raspberry 3
Eigenbau 433MHz Sender
Rolläden Rohrmotor24

Niko

Setzte das  "stop" mal in einfache Anführungszeichen, also 'stop', sonst unterbricht du den fhem( String
Gruß Niko

Bennemannc

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
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

marvin78

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')}" );   

lt1014

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
Fritzbox 7490
Raspberry 3
Eigenbau 433MHz Sender
Rolläden Rohrmotor24