Hallo,
Leider lässt sich das Problem/die Beobachtung nur sehr schwer erklären.
Seit ich mein Modul 82_LGTV_WebOS auf package umgestellt habe (sowohl LGTV_WebOS als auch FHEM::LGTV_WebOS) kommen keine Daten mehr über den Clientsocket.
Es ist schwer zu beschreiben. Die ReadFn wird immer aufgerufen, diese stellt fest das keine Daten vorhanden sind und schließt darauf hin die Verbindung
sub Open($) {
my $hash = shift;
my $name = $hash->{NAME};
my $host = $hash->{HOST};
my $port = 3000;
my $timeout = 0.1;
Log3 $name, 4, "LGTV_WebOS ($name) - Baue Socket Verbindung auf";
my $socket = new IO::Socket::INET(
PeerHost => $host,
PeerPort => $port,
Proto => 'tcp',
Timeout => $timeout
)
or return Log3 $name, 4,
"LGTV_WebOS ($name) Couldn't connect to $host:$port"; # open Socket
$hash->{FD} = $socket->fileno();
$hash->{CD} = $socket; # sysread / close won't work on fileno
$selectlist{$name} = $hash;
...
...
...
}
[code]
sub Read($) {
my $hash = shift;
my $name = $hash->{NAME};
my $len;
my $buf;
Log3 $name, 4, "LGTV_WebOS ($name) - ReadFn started";
$len = sysread( $hash->{CD}, $buf, 10240 );
if ( defined($len) and $len == 0 ) {
Close($hash);
return;
}
.....
.....
....
sub Close($) {
my $hash = shift;
my $name = $hash->{NAME};
return if ( !$hash->{CD} );
close( $hash->{CD} ) if ( $hash->{CD} );
delete( $hash->{FD} );
delete( $hash->{CD} );
delete( $selectlist{$name} );
readingsSingleUpdate( $hash, 'state', 'off', 1 );
...
...
...
}
Dies geschieht in einer Endlosschleife.
ABER!!!
So bald ich ein reload 82_LGTV_WebOS mache kommen sofort Daten an und die Verbindung bleibt stabil.
Hat jemand schon mal eine solche Beobachtung gemacht oder kann mir jemand Tipps geben wo ich mit einer Suche anfangen kann?
Grüße
Ich schupse das noch mal hoch.
ich hab da keine Idee zu, tut mir leid :-(
Bin selbst halb Blinder, wenn es um SubProcess.pm geht...
Zitat von: Loredo am 10 April 2019, 20:53:32
ich hab da keine Idee zu, tut mir leid :-(
Bin selbst halb Blinder, wenn es um SubProcess.pm geht...
Danke Dir fürs anschauen. Entweder teste ich einmal mit DevIo oder ich lasse es mit dem Package bei dem Modul.