37_harmony.pm: try to fallback to xmpp if no discovery response is received. (segmented network)

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@18027 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2018-12-22 09:35:14 +00:00
parent 295d1e2c9a
commit 1191d74eda

View File

@ -61,7 +61,7 @@ sub
harmony_startDiscovery() harmony_startDiscovery()
{ {
if( defined($modules{harmony}{defptr}{'harmony:discovery'}) ) { if( defined($modules{harmony}{defptr}{'harmony:discovery'}) ) {
fhem( "set harmony:discovery discover" ); harmony_sendDiscovery();
} }
return if( $modules{harmony}{defptr}{'harmony:discovery'} ); return if( $modules{harmony}{defptr}{'harmony:discovery'} );
@ -88,8 +88,7 @@ harmony_startDiscovery()
$defs{$chash->{NAME}} = $chash; $defs{$chash->{NAME}} = $chash;
$selectlist{$chash->{NAME}} = $chash; $selectlist{$chash->{NAME}} = $chash;
my $sin = sockaddr_in(5224, inet_aton('255.255.255.255')); harmony_sendDiscovery();
$chash->{sendSocket}->send( "_logitech-reverse-bonjour._tcp.local.\n$chash->{PORT}", 0, $sin );
} else { } else {
Log3 undef, 2, "harmony: failed to start discovery" ; Log3 undef, 2, "harmony: failed to start discovery" ;
@ -100,6 +99,35 @@ harmony_startDiscovery()
} }
sub sub
harmony_sendDiscovery()
{
my $chash = $modules{harmony}{defptr}{'harmony:discovery'};
return if( !$chash );
Log3 undef, 3, "harmony: sending discovery" ;
my $sin = sockaddr_in(5224, inet_aton('255.255.255.255'));
$chash->{sendSocket}->send( "_logitech-reverse-bonjour._tcp.local.\n$chash->{PORT}", 0, $sin );
foreach my $chash ( values %{$modules{'harmony'}{defptr}} ) {
next if( $chash->{NAME} eq 'harmony:discovery' );
next if( $chash->{ConnectionState} eq 'Connected' );
next if( !defined($chash->{ip}) );
next if( $chash->{remoteId} );
RemoveInternalTimer($chash);
InternalTimer(gettimeofday()+10, "harmony_tryXMPP", $chash, 0);
}
}
sub
harmony_tryXMPP($)
{
my ($hash) = @_;
my $name = $hash->{NAME};
Log3 $name, 3, "$name no discovery response received, trying fallback to xmpp" ;
harmony_connect($hash);
}
sub
harmony_stopDiscovery() harmony_stopDiscovery()
{ {
my $chash = $modules{harmony}{defptr}{'harmony:discovery'}; my $chash = $modules{harmony}{defptr}{'harmony:discovery'};
@ -376,8 +404,7 @@ harmony_Set($$@)
my $list = "discover:noArg"; my $list = "discover:noArg";
if( $cmd eq "discover" ) { if( $cmd eq "discover" ) {
my $sin = sockaddr_in(5224, inet_aton('255.255.255.255')); harmony_sendDiscovery();
$hash->{sendSocket}->send( "_logitech-reverse-bonjour._tcp.local.\n$hash->{PORT}", 0, $sin );
return; return;
} }