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
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...
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
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
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.
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