mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-20 19:36:02 +00:00
71_PHILIPS_AUDIO: Reverted to previous version. Module not working on RPi.
git-svn-id: https://svn.fhem.de/fhem/trunk@8113 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
003ab0a6c2
commit
7ad9a2b049
@ -37,7 +37,6 @@ use Time::HiRes qw(gettimeofday sleep);
|
|||||||
use Time::Piece;
|
use Time::Piece;
|
||||||
use POSIX qw{strftime};
|
use POSIX qw{strftime};
|
||||||
use HttpUtils;
|
use HttpUtils;
|
||||||
use IO::Socket::INET;
|
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
sub PHILIPS_AUDIO_Initialize
|
sub PHILIPS_AUDIO_Initialize
|
||||||
@ -49,7 +48,6 @@ sub PHILIPS_AUDIO_Initialize
|
|||||||
$hash->{SetFn} = "PHILIPS_AUDIO_Set";
|
$hash->{SetFn} = "PHILIPS_AUDIO_Set";
|
||||||
$hash->{AttrFn} = "PHILIPS_AUDIO_Attr";
|
$hash->{AttrFn} = "PHILIPS_AUDIO_Attr";
|
||||||
$hash->{UndefFn} = "PHILIPS_AUDIO_Undefine";
|
$hash->{UndefFn} = "PHILIPS_AUDIO_Undefine";
|
||||||
$hash->{ReadFn} = "PHILIPS_AUDIO_SocketRead";
|
|
||||||
|
|
||||||
$hash->{AttrList} = "do_not_notify:0,1 disable:0,1 request-timeout:1,2,3,4,5 ".$readingFnAttributes;
|
$hash->{AttrList} = "do_not_notify:0,1 disable:0,1 request-timeout:1,2,3,4,5 ".$readingFnAttributes;
|
||||||
|
|
||||||
@ -61,73 +59,17 @@ sub PHILIPS_AUDIO_GetStatus
|
|||||||
{
|
{
|
||||||
my ($hash, $local) = @_;
|
my ($hash, $local) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
my $power;
|
||||||
|
|
||||||
$local = 0 unless(defined($local));
|
$local = 0 unless(defined($local));
|
||||||
|
|
||||||
return "" if((!defined($hash->{IP_ADDRESS})) or (!defined($hash->{helper}{OFF_INTERVAL})) or (!defined($hash->{helper}{ON_INTERVAL})));
|
return "" if((!defined($hash->{IP_ADDRESS})) or (!defined($hash->{helper}{OFF_INTERVAL})) or (!defined($hash->{helper}{ON_INTERVAL})));
|
||||||
|
|
||||||
if(!defined($hash->{MODEL}))
|
my $device = $hash->{IP_ADDRESS};
|
||||||
{
|
|
||||||
|
|
||||||
if(!defined($hash->{helper}{UPNP_SSDP_RESPONSE}))
|
|
||||||
{
|
|
||||||
PHILIPS_AUDIO_GetDeviceDescription($hash);
|
|
||||||
# Wait 5 seconds for UPNP renderers response
|
|
||||||
PHILIPS_AUDIO_ResetTimer($hash, 5);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!defined($hash->{UPNP_DEVICE_DESCRIPTION_URL}))
|
|
||||||
{
|
|
||||||
my $upnp_response = $hash->{helper}{UPNP_SSDP_RESPONSE};
|
|
||||||
my $ip_addr = $hash->{IP_ADDRESS};
|
|
||||||
|
|
||||||
# Replace all \r\n by \n
|
|
||||||
$upnp_response =~ s/\r\n/\n/mg;
|
|
||||||
|
|
||||||
while($upnp_response =~ /Location: (.*)/ig)
|
|
||||||
{
|
|
||||||
my $url = $1;
|
|
||||||
|
|
||||||
if($1 =~ /http:\/\/(.*):(\d.*?)(\/.*)/)
|
|
||||||
{
|
|
||||||
my $location_ip = $1;
|
|
||||||
my $port = $2;
|
|
||||||
my $deviceDescriptionPath = $3;
|
|
||||||
|
|
||||||
if($location_ip eq $ip_addr)
|
|
||||||
{
|
|
||||||
$hash->{UPNP_DEVICE_DESCRIPTION_URL} = $url;
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Received model description URL: $url\r\n";
|
|
||||||
$hash->{UPNP_PORT} = $port;
|
|
||||||
$hash->{STATE} = "on";
|
|
||||||
# Empty receive buffer
|
|
||||||
$hash->{helper}{UPNP_SSDP_RESPONSE} = "";
|
|
||||||
# Close UDP in socket
|
|
||||||
close($hash->{CD});
|
|
||||||
delete($hash->{FD});
|
|
||||||
delete($hash->{CD});
|
|
||||||
delete($selectlist{$name});
|
|
||||||
# Jump to the loop immidiately
|
|
||||||
PHILIPS_AUDIO_ResetTimer($hash, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PHILIPS_AUDIO_GetModel($hash);
|
|
||||||
PHILIPS_AUDIO_ResetTimer($hash, 5);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PHILIPS_AUDIO_SendCommand($hash, "/nowplay", "","nowplay", "noArg");
|
PHILIPS_AUDIO_SendCommand($hash, "/nowplay", "","nowplay", "noArg");
|
||||||
PHILIPS_AUDIO_ResetTimer($hash) unless($local == 1);
|
PHILIPS_AUDIO_ResetTimer($hash) unless($local == 1);
|
||||||
return;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,10 +81,17 @@ sub PHILIPS_AUDIO_Get
|
|||||||
my $return;
|
my $return;
|
||||||
|
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
my $address = $hash->{IP_ADDRESS};
|
my $address = $hash->{IP_ADDRESS};
|
||||||
|
$hash->{IP_ADDRESS} = $address;
|
||||||
|
|
||||||
return "argument is missing" if(int(@a) != 2);
|
return "argument is missing" if(int(@a) != 2);
|
||||||
|
|
||||||
|
if(not defined($hash->{MODEL}))
|
||||||
|
{
|
||||||
|
return "Please provide the model information as argument.";
|
||||||
|
}
|
||||||
|
|
||||||
$what = $a[1];
|
$what = $a[1];
|
||||||
|
|
||||||
if(exists($hash->{READINGS}{$what}))
|
if(exists($hash->{READINGS}{$what}))
|
||||||
@ -174,7 +123,12 @@ sub PHILIPS_AUDIO_Set
|
|||||||
{
|
{
|
||||||
my ($hash, @a) = @_;
|
my ($hash, @a) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $port = $hash->{PRESENTATION_PORT};
|
my $port = $hash->{PORT};
|
||||||
|
|
||||||
|
if(not defined($hash->{MODEL}))
|
||||||
|
{
|
||||||
|
return "Please provide the model information as argument.";
|
||||||
|
}
|
||||||
|
|
||||||
return "No Argument given" if(!defined($a[1]));
|
return "No Argument given" if(!defined($a[1]));
|
||||||
|
|
||||||
@ -351,18 +305,23 @@ sub PHILIPS_AUDIO_Define
|
|||||||
|
|
||||||
if(! @a >= 4)
|
if(! @a >= 4)
|
||||||
{
|
{
|
||||||
my $msg = "Wrong syntax: define <name> PHILIPS_AUDIO <ip-or-hostname> [<ON-statusinterval>] [<OFF-statusinterval>] ";
|
my $msg = "Wrong syntax: define <name> PHILIPS_AUDIO <model> <ip-or-hostname> [<ON-statusinterval>] [<OFF-statusinterval>] ";
|
||||||
Log3 $name, 2, $msg;
|
Log3 $name, 2, $msg;
|
||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
$hash->{IP_ADDRESS} = $a[2];
|
if(defined($a[2]))
|
||||||
$hash->{PRESENTATION_PORT} = 8889;
|
{
|
||||||
|
$hash->{MODEL} = $a[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
$hash->{IP_ADDRESS} = $a[3];
|
||||||
|
$hash->{PORT} = 8889;
|
||||||
|
|
||||||
# if an update interval was given which is greater than zero, use it.
|
# if an update interval was given which is greater than zero, use it.
|
||||||
if(defined($a[3]) and $a[3] > 0)
|
if(defined($a[4]) and $a[4] > 0)
|
||||||
{
|
{
|
||||||
$hash->{helper}{OFF_INTERVAL} = $a[3];
|
$hash->{helper}{OFF_INTERVAL} = $a[4];
|
||||||
# Minimum interval 3 sec
|
# Minimum interval 3 sec
|
||||||
if($hash->{helper}{OFF_INTERVAL} < 3)
|
if($hash->{helper}{OFF_INTERVAL} < 3)
|
||||||
{
|
{
|
||||||
@ -374,9 +333,9 @@ sub PHILIPS_AUDIO_Define
|
|||||||
$hash->{helper}{OFF_INTERVAL} = 30;
|
$hash->{helper}{OFF_INTERVAL} = 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(defined($a[4]) and $a[4] > 0)
|
if(defined($a[5]) and $a[5] > 0)
|
||||||
{
|
{
|
||||||
$hash->{helper}{ON_INTERVAL} = $a[4];
|
$hash->{helper}{ON_INTERVAL} = $a[5];
|
||||||
# Minimum interval 3 sec
|
# Minimum interval 3 sec
|
||||||
if($hash->{helper}{ON_INTERVAL} < 3)
|
if($hash->{helper}{ON_INTERVAL} < 3)
|
||||||
{
|
{
|
||||||
@ -455,7 +414,7 @@ sub PHILIPS_AUDIO_SendCommand
|
|||||||
my ($hash,$url,$data,$cmd,$arg) = @_;
|
my ($hash,$url,$data,$cmd,$arg) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $address = $hash->{IP_ADDRESS};
|
my $address = $hash->{IP_ADDRESS};
|
||||||
my $port = $hash->{PRESENTATION_PORT};
|
my $port = $hash->{PORT};
|
||||||
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - execute nonblocking \"$cmd".(defined($arg) ? " ".(split("\\|", $arg))[0] : "")."\" on $name: $data";
|
Log3 $name, 5, "PHILIPS_AUDIO ($name) - execute nonblocking \"$cmd".(defined($arg) ? " ".(split("\\|", $arg))[0] : "")."\" on $name: $data";
|
||||||
|
|
||||||
@ -704,58 +663,17 @@ sub PHILIPS_AUDIO_ParseResponse
|
|||||||
readingsBulkUpdate($hash, "playing", "no");
|
readingsBulkUpdate($hash, "playing", "no");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Eventual future UPNP implementation. Requests IO::Socket::Multicast non-standard module.
|
||||||
elsif ($cmd eq "getModel")
|
elsif ($cmd eq "getModel")
|
||||||
{
|
{
|
||||||
# Get avail. services
|
|
||||||
if($data =~ /<serviceList>(.+)<\/serviceList>/ims)
|
|
||||||
{
|
|
||||||
my $service = $1;
|
|
||||||
|
|
||||||
while($service =~ /<service>(.+?)<\/service>/imsg)
|
|
||||||
{
|
|
||||||
my $serviceTypeLoop = $1;
|
|
||||||
my $serviceType;
|
|
||||||
|
|
||||||
if($serviceTypeLoop =~ /<serviceType>(.+)<\/serviceType>/i)
|
|
||||||
{
|
|
||||||
if($1 eq "urn:schemas-upnp-org:service:RenderingControl:1")
|
|
||||||
{
|
|
||||||
$serviceType = "RenderingControl";
|
|
||||||
}
|
|
||||||
elsif($1 eq "urn:schemas-upnp-org:service:ConnectionManager:1")
|
|
||||||
{
|
|
||||||
$serviceType = "ConnectionManager";
|
|
||||||
}
|
|
||||||
elsif($1 eq "urn:schemas-upnp-org:service:AVTransport:1")
|
|
||||||
{
|
|
||||||
$serviceType = "AVTransport";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if($serviceTypeLoop =~ /<controlURL>(.+)<\/controlURL>/i)
|
|
||||||
{
|
|
||||||
$hash->{"UPNP_" . uc($serviceType) . "_URL"} = $1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($data =~ /<friendlyName>(.+)<\/friendlyName>/)
|
if($data =~ /<friendlyName>(.+)<\/friendlyName>/)
|
||||||
{
|
{
|
||||||
$hash->{FRIENDLY_NAME} = $1;
|
$hash->{FRIENDLY_NAME} = $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($data =~ /<manufacturer>(.+)<\/manufacturer>/)
|
|
||||||
{
|
|
||||||
$hash->{MANUFACTURER} = $1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($data =~ /<manufacturerURL>(.+)<\/manufacturerURL>/)
|
|
||||||
{
|
|
||||||
$hash->{MANUFACTURER_URL} = $1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($data =~ /<UDN>(.+)<\/UDN>/)
|
if($data =~ /<UDN>(.+)<\/UDN>/)
|
||||||
{
|
{
|
||||||
$hash->{UPNP_UNIQUE_DEVICE_NAME} = $1;
|
$hash->{UNIQUE_DEVICE_NAME} = uc($1);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $modelName = "";
|
my $modelName = "";
|
||||||
@ -765,12 +683,6 @@ sub PHILIPS_AUDIO_ParseResponse
|
|||||||
{
|
{
|
||||||
$modelName = $1;
|
$modelName = $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($data =~ /<presentationURL>(.+)<\/presentationURL>/)
|
|
||||||
{
|
|
||||||
$hash->{PRESENTATION_URL} = $1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($data =~ /<modelNumber>(.+)<\/modelNumber>/)
|
if($data =~ /<modelNumber>(.+)<\/modelNumber>/)
|
||||||
{
|
{
|
||||||
$modelNumber = $1;
|
$modelNumber = $1;
|
||||||
@ -807,11 +719,12 @@ sub PHILIPS_AUDIO_ParseResponse
|
|||||||
|
|
||||||
while ($data =~ /<url>(.+?)<\/url>/g)
|
while ($data =~ /<url>(.+?)<\/url>/g)
|
||||||
{
|
{
|
||||||
$hash->{"MODEL_ICON_$i"} = "http://".$address.":".$arg."/".$1;
|
$hash->{"NP_ICON_$i"} = "http://".$address.":".$arg."/".$1;
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -871,152 +784,6 @@ sub PHILIPS_AUDIO_STREAMIUMNP2txt
|
|||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
#############################
|
|
||||||
# Send UPNP Discovery UPD Multicast Message to the network
|
|
||||||
# 239.255.255.250:1900
|
|
||||||
#
|
|
||||||
# M-SEARCH * HTTP/1.1
|
|
||||||
# HOST: 239.255.255.250:1900
|
|
||||||
# MAN: ssdp:discover
|
|
||||||
# MX: 10
|
|
||||||
# ST: ssdp:all
|
|
||||||
#
|
|
||||||
# UPNP Response includes the device description XML
|
|
||||||
#
|
|
||||||
# NP3900 : Port 49153 /nmrDescription.xml
|
|
||||||
# NP3700 : Port 7123 /DeviceDescription.xml
|
|
||||||
|
|
||||||
sub PHILIPS_AUDIO_GetDeviceDescription
|
|
||||||
{
|
|
||||||
my ($hash) = @_;
|
|
||||||
my $name = $hash->{NAME};
|
|
||||||
my ($socket_in_udp, $socket_out_udp);
|
|
||||||
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Opening UDP multicast socket for UPNP discovery...";
|
|
||||||
|
|
||||||
$socket_out_udp = IO::Socket::INET->new(LocalPort => '1900', PeerAddr => '239.255.255.250', PeerPort => '1900', Proto => 'udp', Broadcast => '1', ReuseAddr => '1');
|
|
||||||
|
|
||||||
if(!$socket_out_udp)
|
|
||||||
{
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Opening UDP out socket unsuccessful...";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if incoming UDP socket exists
|
|
||||||
|
|
||||||
if(!defined($hash->{CD}))
|
|
||||||
{
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Opening UDP incoming socket for UPNP discovery...";
|
|
||||||
|
|
||||||
# Socket for UDP packet transmission. Port 1900 reserved for UPNP SSDP.
|
|
||||||
$socket_in_udp = IO::Socket::INET->new(LocalPort => '1900', Proto => 'udp', ReuseAddr => '1');
|
|
||||||
|
|
||||||
if(!$socket_in_udp)
|
|
||||||
{
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Opening UDP in socket unsuccessful...";
|
|
||||||
$socket_out_udp->close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$hash->{FD} = $socket_in_udp->fileno();
|
|
||||||
$hash->{CD} = $socket_in_udp;
|
|
||||||
$selectlist{$name} = $hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
# UPNP/DLNA spec: http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf
|
|
||||||
# ssdp:all, upnp:rootdevice, uuid:xxxx-xxxx-xxxx, urn:schemas-upnp-org:device:MediaRenderer:1,
|
|
||||||
|
|
||||||
# Discover UPNP Digital Media Renderers
|
|
||||||
my $ssdp_header .= "M-SEARCH * HTTP/1.1\r\n";
|
|
||||||
$ssdp_header .= "HOST: 239.255.255.250:1900\r\n";
|
|
||||||
$ssdp_header .= "MAN: \"ssdp:discover\"\r\n";
|
|
||||||
$ssdp_header .= "MX: 2\r\n";
|
|
||||||
$ssdp_header .= "ST: urn:schemas-upnp-org:device:MediaRenderer:1\r\n";
|
|
||||||
#$ssdp_header .= "ST: upnp:rootdevice\r\n";
|
|
||||||
$ssdp_header .= "\r\n"; # Acc. to UPNP protocol last empty line is mandatory.
|
|
||||||
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Sending UPNP SSDP multicast message...\r\n".$ssdp_header;
|
|
||||||
|
|
||||||
$socket_out_udp->send($ssdp_header);
|
|
||||||
$socket_out_udp->close();
|
|
||||||
|
|
||||||
# The reply is processed by PHILIPS_AUDIO_SocketRead()
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################
|
|
||||||
# ReadFn for UDP socket
|
|
||||||
#
|
|
||||||
|
|
||||||
sub PHILIPS_AUDIO_SocketRead
|
|
||||||
{
|
|
||||||
my ($hash) = @_;
|
|
||||||
my $name = $hash->{NAME};
|
|
||||||
|
|
||||||
my $buf;
|
|
||||||
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Incoming UDP packet.";
|
|
||||||
|
|
||||||
if (!defined($hash->{helper}{UPNP_SSDP_RESPONSE}))
|
|
||||||
{
|
|
||||||
$hash->{helper}{UPNP_SSDP_RESPONSE} = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - UDP.";
|
|
||||||
|
|
||||||
my $ret = sysread($hash->{CD}, $buf, 1024);
|
|
||||||
|
|
||||||
# In case of a broken connection
|
|
||||||
if(!defined($ret) || $ret <= 0)
|
|
||||||
{
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - UDP connection broken. Restarting device discovery.";
|
|
||||||
PHILIPS_AUDIO_ResetTimer($hash);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $data = $hash->{helper}{UPNP_SSDP_RESPONSE};
|
|
||||||
|
|
||||||
#Log3 $name, 5, "PHILIPS_AUDIO ($name) - Received UPNP SSDP response. \r\n".$buf;
|
|
||||||
|
|
||||||
# Filter out responses to own request.
|
|
||||||
if($buf =~ /^HTTP\/1.1 200 OK/)
|
|
||||||
{
|
|
||||||
$data .= $buf;
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - Received UPNP SSDP response. \r\n".$buf;
|
|
||||||
$hash->{helper}{UPNP_SSDP_RESPONSE} = $data;
|
|
||||||
}
|
|
||||||
# Evaluate the incoming info immy
|
|
||||||
PHILIPS_AUDIO_ResetTimer($hash, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################
|
|
||||||
# Request Model Information
|
|
||||||
#
|
|
||||||
|
|
||||||
sub PHILIPS_AUDIO_GetModel
|
|
||||||
{
|
|
||||||
my ($hash) = @_;
|
|
||||||
my $name = $hash->{NAME};
|
|
||||||
my $url = $hash->{UPNP_DEVICE_DESCRIPTION_URL};
|
|
||||||
|
|
||||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - execute nonblocking \"MediaRendererDesc\"";
|
|
||||||
|
|
||||||
HttpUtils_NonblockingGet
|
|
||||||
({
|
|
||||||
url => $url,
|
|
||||||
timeout => AttrVal($name, "request-timeout", 5),
|
|
||||||
noshutdown => 1,
|
|
||||||
data => "",
|
|
||||||
loglevel => ($hash->{helper}{AVAILABLE} ? undef : 5),
|
|
||||||
hash => $hash,
|
|
||||||
cmd => "getModel",
|
|
||||||
arg => $hash->{UPNP_PORT},
|
|
||||||
callback => \&PHILIPS_AUDIO_ParseResponse
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
@ -1030,13 +797,12 @@ sub PHILIPS_AUDIO_GetModel
|
|||||||
<br><br>
|
<br><br>
|
||||||
<ul>
|
<ul>
|
||||||
<code>
|
<code>
|
||||||
define <name> PHILIPS_AUDIO <ip-address> [<status_interval>]<br><br>
|
define <name> PHILIPS_AUDIO <device model> <ip-address> [<status_interval>]<br><br>
|
||||||
define <name> PHILIPS_AUDIO [<off_status_interval>] [<on_status_interval>]
|
define <name> PHILIPS_AUDIO <device model> [<off_status_interval>] [<on_status_interval>]
|
||||||
</code>
|
</code>
|
||||||
<br><br>
|
<br><br>
|
||||||
This module controls a Philips Audio Player e.g. MCi, Streamium or Fidelio and (potentially) any other device including a navigation server.<br>
|
This module controls a Philips Audio Player e.g. MCi, Streamium or Fidelio and (potentially) any other device including a navigation server.<br>
|
||||||
To check, open the following URL in the browser: http://[ip # of your device]:8889/index<br>
|
To check, open the following URL in the browser: http://[ip # of your device]:8889/index
|
||||||
The device will be discovered automatically according to the UPNP/DLNA protocol.
|
|
||||||
<br><br>
|
<br><br>
|
||||||
Currently implemented features:
|
Currently implemented features:
|
||||||
<br><br>
|
<br><br>
|
||||||
@ -1063,13 +829,13 @@ sub PHILIPS_AUDIO_GetModel
|
|||||||
<ul><br>
|
<ul><br>
|
||||||
Add the following code into the <b>fhem.cfg</b> configuration file and restart fhem:<br><br>
|
Add the following code into the <b>fhem.cfg</b> configuration file and restart fhem:<br><br>
|
||||||
<code>
|
<code>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15<br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15<br>
|
||||||
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
||||||
# With custom status interval of 60 seconds<br>
|
# With custom status interval of 60 seconds<br>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15 <b>60</b><br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15 <b>60</b><br>
|
||||||
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
||||||
# With custom "off"-interval of 60 seconds and "on"-interval of 10 seconds<br>
|
# With custom "off"-interval of 60 seconds and "on"-interval of 10 seconds<br>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15 <b>60 10</b><br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15 <b>60 10</b><br>
|
||||||
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
||||||
</code>
|
</code>
|
||||||
</ul>
|
</ul>
|
||||||
@ -1105,7 +871,7 @@ sub PHILIPS_AUDIO_GetModel
|
|||||||
Add the following code into the <b>fhem.cfg</b> configuration file:<br><br><br>
|
Add the following code into the <b>fhem.cfg</b> configuration file:<br><br><br>
|
||||||
<ul>
|
<ul>
|
||||||
<code>
|
<code>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15 30 5<br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15 30 5<br>
|
||||||
attr PHAUDIO_player webCmd volume:mute:inetRadioPreset
|
attr PHAUDIO_player webCmd volume:mute:inetRadioPreset
|
||||||
</code>
|
</code>
|
||||||
</ul><br><br>
|
</ul><br><br>
|
||||||
@ -1186,13 +952,12 @@ sub PHILIPS_AUDIO_GetModel
|
|||||||
<b>Define</b><br><br>
|
<b>Define</b><br><br>
|
||||||
<ul>
|
<ul>
|
||||||
<code>
|
<code>
|
||||||
define <name> PHILIPS_AUDIO <ip-address> [<status_interval>]<br><br>
|
define <name> PHILIPS_AUDIO <device model> <ip-address> [<status_interval>]<br><br>
|
||||||
define <name> PHILIPS_AUDIO [<off_status_interval>] [<on_status_interval>]
|
define <name> PHILIPS_AUDIO <device model> [<off_status_interval>] [<on_status_interval>]
|
||||||
</code>
|
</code>
|
||||||
<br><br>
|
<br><br>
|
||||||
Mit Hilfe dieses Moduls lassen sich Philips Audio Netzwerk Player wie z.B. MCi, Streamium oder Fidelio via Ethernet steuern.<br>
|
Mit Hilfe dieses Moduls lassen sich Philips Audio Netzwerk Player wie z.B. MCi, Streamium oder Fidelio via Ethernet steuern.<br>
|
||||||
Theoretisch sollten alle Geräte, die über einer implementierten HTTP Server am Port 8889 haben (http://[ip Nummer des Gerätes]:8889/index), bedient werden können.<br>
|
Theoretisch sollten alle Geräte, die über einer implementierten HTTP Server am Port 8889 haben (http://[ip Nummer des Gerätes]:8889/index), bedient werden können.<br>
|
||||||
Das Gerät wird anhand des UPNP/DLNA Protokolls automatisch erkannt.
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
Die aktuelle Implementierung ermöglicht u.a. den folgenden Funktionsumfang:<br><br>
|
Die aktuelle Implementierung ermöglicht u.a. den folgenden Funktionsumfang:<br><br>
|
||||||
@ -1217,13 +982,13 @@ sub PHILIPS_AUDIO_GetModel
|
|||||||
<ul><br>
|
<ul><br>
|
||||||
Definition in der <b>fhem.cfg</b> Konfigurationsdatei:<br><br>
|
Definition in der <b>fhem.cfg</b> Konfigurationsdatei:<br><br>
|
||||||
<code>
|
<code>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15<br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15<br>
|
||||||
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
||||||
# 60 Sekunden Intervall<br>
|
# 60 Sekunden Intervall<br>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15 <b>60</b><br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15 <b>60</b><br>
|
||||||
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset<br><br>
|
||||||
# 60 Sekunden Intervall für "off" und 10 Sekunden für "on"<br>
|
# 60 Sekunden Intervall für "off" und 10 Sekunden für "on"<br>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15 <b>60 10</b><br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15 <b>60 10</b><br>
|
||||||
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset
|
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset
|
||||||
</code>
|
</code>
|
||||||
</ul>
|
</ul>
|
||||||
@ -1257,7 +1022,7 @@ sub PHILIPS_AUDIO_GetModel
|
|||||||
Beispieldefinition in der <b>fhem.cfg</b> Konfigurationsdatei:<br><br><br>
|
Beispieldefinition in der <b>fhem.cfg</b> Konfigurationsdatei:<br><br><br>
|
||||||
<ul>
|
<ul>
|
||||||
<code>
|
<code>
|
||||||
define PHAUDIO_player PHILIPS_AUDIO 192.168.0.15 30 5<br>
|
define PHAUDIO_player PHILIPS_AUDIO NP3900 192.168.0.15 30 5<br>
|
||||||
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset
|
attr PHAUDIO_player webCmd input:volume:mute:inetRadioPreset
|
||||||
</code>
|
</code>
|
||||||
</ul><br><br>
|
</ul><br><br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user