FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: JensS am 25 Januar 2017, 18:44:35

Titel: sleep in 99_myUtils.pm[gelöst]
Beitrag von: JensS am 25 Januar 2017, 18:44:35
Hallo,

gestern habe ich ein IR-Sender mit ESPEasy zum laufen bekommen :). Das klappt auch wunderbar mit remotecontrol. Nun möchte ich auch gleich einige Favoriten per Button schalten. Einstellige Sender funktionieren, mehrstellige nicht. Ich nehme an, dass die Schleife zu schnell für den Fernseher läuft und habe ein sleep eingebaut. Damit geht gar nichts mehr. :(
sub TVCodes($){
my ($tvsender) = @_;
my @array=split(/_/,$tvsender);
foreach (@array){
fhem("set IRTransmitter irsend SAMSUNG $_ 32");
sleep(2);};
}

Was mache ich falsch?
Die Funktion wird über ein notify aufgerufen:
define FB_notify notify Fernbedienung {TVCodes("$EVENT");}
Als $EVENT wird E0E020DF (einstelliger Sender) bzw. E0E020DF_E0E0906F (zweistelliger Sender) übergeben.

Danke im voraus!
Gruß Jens
Titel: Antw:sleep in 99_myUtils.pm
Beitrag von: betateilchen am 25 Januar 2017, 18:57:31
Die von Dir verwendete perl Funktion sleep() ist eine ganz schlechte Idee.
Schau Dir besser mal in der commandref den fhem-Befehl sleep an.


fhem("sleep 2;; set IRTransmitter irsend SAMSUNG $_ 32");


irgendwie so...
Titel: Antw:sleep in 99_myUtils.pm
Beitrag von: JensS am 25 Januar 2017, 19:36:22
Danke, der Code lautet nun:
sub TVCodes($){

my ($tvsender) = @_;
my @array=split(/_/,$tvsender);
foreach (@array){
fhem("sleep 2;; set IRTransmitter irsend SAMSUNG $_ 32");
};
}


Dabei kommt das raus:

2017.01.25 19:31:42 4: [remotecontrol] set Fernbedienung E0E020DF_E0E0906F
2017.01.25 19:31:42 4: TV_FB_notify exec {TVCodes("$EVENT");;}
2017.01.25 19:31:42 3: sleep 2;; set IRTransmitter irsend SAMSUNG E0E020DF 32 : Cannot interpret 2; as seconds
2017.01.25 19:31:42 3: sleep 2;; set IRTransmitter irsend SAMSUNG E0E0906F 32 : Cannot interpret 2; as seconds
Titel: Antw:sleep in 99_myUtils.pm
Beitrag von: JensS am 25 Januar 2017, 21:34:18
Mit der folgenden Funktion geht's erstmal:
my @array=split(/_/,$tvsender);
foreach (@array){
GetFileFromURL("http://192.168.100.100:80/control?cmd=irsend,SAMSUNG,$_,32");
select(undef, undef, undef, 0.3);};
}


Nichts hält länger als ein Provisorium...
:) Gruß Jens
Titel: Antw:sleep in 99_myUtils.pm
Beitrag von: betateilchen am 25 Januar 2017, 21:36:20
Zitat von: dirigent am 25 Januar 2017, 19:36:22
Dabei kommt das raus:

Vermutlich ein Semikolon zuviel nach der 2 :)

Das Problem bei Deinem Provisorium: die perl-Funktion select() ist - bezogen auf das blocking-Verhalten - genau so schlecht wie perl-Funktion sleep(), der einzige Unterschied ist, dass man mit select auch Bruchteile von Sekunden angeben kann.
Titel: Antw:sleep in 99_myUtils.pm
Beitrag von: JensS am 25 Januar 2017, 22:19:42
Danke, nun klappts :) !
sub TVCodes($){
my ($tvsender) = @_;
my @array=split(/_/,$tvsender);
foreach (@array){
GetFileFromURL("http://192.168.100.100:80/control?cmd=irsend,SAMSUNG,$_,32");
fhem("sleep 0.3;");};
}

Gruß Jens