mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-20 07:16:03 +00:00
71_PHILIPS_AUDIO: fixed crash of fhem server while shutdown/restart
git-svn-id: https://svn.fhem.de/fhem/trunk@14027 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
fb6cc58b2c
commit
1c6e7339ca
@ -1,5 +1,6 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- bugfix: 71_PHILIPS_AUDIO: fhem.pl crash while server shutdown
|
||||
- feature: 33_readingsGroup: allow "set magic" reding pre- and suffixes
|
||||
- bugfix: 71_PHILIPS_AUDIO: Corrected gavorites behaviour if more than 16
|
||||
- chnage: 17_EGPM2LAN.pm: Password handling changed; removed from config
|
||||
|
@ -130,8 +130,8 @@ sub PHILIPS_AUDIO_GetStatus
|
||||
# Check for Presets availability
|
||||
if
|
||||
(
|
||||
(not defined($hash->{READINGS}{"totalPresets"})) and
|
||||
(ReadingsVal($name, "presence", "no") eq "present") and
|
||||
(not defined($hash->{READINGS}{"totalPresets"})) and
|
||||
(ReadingsVal($name, "presence", "no") eq "present") and
|
||||
(AttrVal($name, "autoGetPresets", "0") eq "1")
|
||||
)
|
||||
{
|
||||
@ -146,8 +146,8 @@ sub PHILIPS_AUDIO_GetStatus
|
||||
# Check for Favorites availability
|
||||
if
|
||||
(
|
||||
(not defined($hash->{READINGS}{"totalFavorites"})) and
|
||||
(ReadingsVal($name, "presence", "no") eq "present") and
|
||||
(not defined($hash->{READINGS}{"totalFavorites"})) and
|
||||
(ReadingsVal($name, "presence", "no") eq "present") and
|
||||
(AttrVal($name, "autoGetFavorites", "0") eq "1")
|
||||
)
|
||||
{
|
||||
@ -159,17 +159,6 @@ sub PHILIPS_AUDIO_GetStatus
|
||||
return;
|
||||
}
|
||||
|
||||
# Don't interfere with manual operation. Will cause wrong responses from device.
|
||||
#if
|
||||
#(
|
||||
# (ReadingsVal($name, "playerListStatus", "ready") eq "ready") and
|
||||
# ($hash->{helper}{manualOperation} == 0) and
|
||||
# ($hash->{helper}{playerState} eq "home")
|
||||
#)
|
||||
#{
|
||||
# #PHILIPS_AUDIO_SendCommand($hash, "/nowplay", "","nowplay", "noArg");
|
||||
#}
|
||||
|
||||
PHILIPS_AUDIO_ResetTimer($hash) if(not ($local == 1)); # getStatus
|
||||
return;
|
||||
}
|
||||
@ -269,38 +258,50 @@ sub PHILIPS_AUDIO_Set
|
||||
|
||||
my @favoriteList;
|
||||
my @favoriteNumber;
|
||||
|
||||
foreach my $readings (keys % {$hash->{READINGS}})
|
||||
{
|
||||
push @favoriteList,$1."_".substr($hash->{READINGS}{$readings}{VAL}, 0, 25) if($readings =~ m/^.inetRadioFavorite_(..)$/);
|
||||
push @favoriteNumber, $1 if($readings =~ m/^.inetRadioFavorite_(..)/);
|
||||
# $1 $2
|
||||
if($readings =~ m/(.inetRadioFavorite_)(..)$/)
|
||||
{
|
||||
push @favoriteList, $2."_".substr($hash->{READINGS}{$readings}{VAL}, 0, 25);
|
||||
push @favoriteNumber, $2;
|
||||
}
|
||||
}
|
||||
|
||||
(s/\*/\[asterisk\]/g) for @favoriteList; # '*' not shown correctly
|
||||
(s/#/\[hash\]/g) for @favoriteList; # '#' not shown correctly
|
||||
(s/[ :;,'.\\]/_/g) for @favoriteList; # Replace not allowed characters
|
||||
(s/[\\]//g) for @favoriteList; # Replace \
|
||||
(s/[ :;,']/_/g) for @favoriteList; # Replace not allowed characters
|
||||
|
||||
my @presetList;
|
||||
my @presetNumber;
|
||||
|
||||
foreach my $readings (keys % {$hash->{READINGS}})
|
||||
{
|
||||
push @presetList, $1."_".substr($hash->{READINGS}{$readings}{VAL}, 0, 25) if($readings =~ m/^.inetRadioPreset_(..)/);
|
||||
push @presetNumber, $1 if($readings =~ m/^.inetRadioPreset_(..)/);
|
||||
# $1 $2
|
||||
if($readings =~ m/(.inetRadioPreset_)(..)$/)
|
||||
{
|
||||
push @presetList, $2."_".substr($hash->{READINGS}{$readings}{VAL}, 0, 25);
|
||||
push @presetNumber, $2;
|
||||
}
|
||||
}
|
||||
|
||||
(s/\*/\[asterisk\]/g) for @presetList; # '*' not shown correctly
|
||||
(s/#/\[hash\]/g) for @presetList; # '#' not shown correctly
|
||||
(s/[ :;,'.\\]/_/g) for @presetList; # Replace not allowed characters
|
||||
(s/[\\]//g) for @presetList; # Replace \
|
||||
(s/[ :;,']/_/g) for @presetList; # Replace not allowed characters
|
||||
|
||||
$usage .= "selectFavorite:" .join(",",("---",(sort @favoriteList))) . " ";
|
||||
$usage .= "selectPreset:" .join(",",("---",(sort @presetList))) . " ";
|
||||
$usage .= "selectPresetByNumber:" .join(",",("---",(sort @presetNumber))) . " ";
|
||||
$usage .= "selectFavoriteByNumber:".join(",",("---",(sort @favoriteNumber))) . " ";
|
||||
$usage .= "selectFavorite:" .join(",",("---",(sort @favoriteList))) . " ";
|
||||
$usage .= "selectPreset:" .join(",",("---",(sort @presetList))) . " ";
|
||||
$usage .= "selectPresetByNumber:" .join(",",("---",(sort @presetNumber))) . " ";
|
||||
$usage .= "selectFavoriteByNumber:".join(",",("---",(sort @favoriteNumber))). " ";
|
||||
|
||||
# Direct stream selection if any
|
||||
|
||||
my @selectStream;
|
||||
my @selectStream;
|
||||
|
||||
for(my $lvl = 1; $lvl < int(ReadingsVal($name, ".listDepthLevel", "1") - 1); $lvl++)
|
||||
for(my $lvl = 1; $lvl < int(ReadingsVal($name, ".listDepthLevel", "1") - 1); $lvl++)
|
||||
{
|
||||
my $listLevelName = $hash->{READINGS}{".lvl_".$lvl."_name"};
|
||||
push @selectStream, "lvl_".$lvl."_".$listLevelName;
|
||||
@ -308,14 +309,16 @@ sub PHILIPS_AUDIO_Set
|
||||
|
||||
foreach my $readings (keys % {$hash->{READINGS}})
|
||||
{
|
||||
push @selectStream,$1."_".substr($hash->{READINGS}{$readings}{VAL}, 0, 25) if($readings =~ m/^listItem_(.*)/);
|
||||
# $1 $2
|
||||
push @selectStream, $2."_".substr($hash->{READINGS}{$readings}{VAL}, 0, 25) if($readings =~ m/(listItem_)(...)$/);
|
||||
}
|
||||
|
||||
@selectStream = sort map{s/\*/\[asterisk\]/g;$_;} grep/._..*$/,@selectStream; # Replace *
|
||||
@selectStream = sort map{s/#/\[hash\]/g;$_;} grep/._..*$/,@selectStream; # Replace #
|
||||
@selectStream = sort map{s/[ :;,'.\\]/_/g;$_;} grep/._..*$/,@selectStream; # Replace not allowed characters
|
||||
(s/\*/\[asterisk\]/g) for @selectStream; # '*' not shown correctly
|
||||
(s/#/\[hash\]/g) for @selectStream; # '#' not shown correctly
|
||||
(s/[\\]//g) for @selectStream; # Replace \
|
||||
(s/[ :;,']/_/g) for @selectStream; # Replace not allowed characters
|
||||
|
||||
$usage .= "selectStream:".join(",",("---",(sort @selectStream))) . " ";
|
||||
$usage .= "selectStream:".join(",",("---",(sort @selectStream))) . " ";
|
||||
|
||||
Log3 $name, 5, "PHILIPS_AUDIO ($name) - set ".join(" ", @a);
|
||||
|
||||
@ -795,21 +798,6 @@ sub PHILIPS_AUDIO_Define
|
||||
return;
|
||||
}
|
||||
|
||||
sub PHILIPS_AUDIO_Notify
|
||||
{
|
||||
my ($hash, $dev) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
return "" if ($dev->{NAME} ne "global");
|
||||
|
||||
my $events = deviceEvents($dev, AttrVal($name, "addStateEvent", 0));
|
||||
|
||||
return if(!$events); # Some previous notify deleted the array.
|
||||
#
|
||||
# Code to be executed on notify
|
||||
#
|
||||
return;
|
||||
}
|
||||
|
||||
sub PHILIPS_AUDIO_Attr
|
||||
{
|
||||
my ($cmd, $name, $attrName, $attrVal) = @_;
|
||||
@ -1717,15 +1705,15 @@ sub PHILIPS_AUDIO_ParseResponse
|
||||
my $address = $hash->{IP_ADDRESS};
|
||||
my $port = "";
|
||||
|
||||
if ($hash->{MODEL} eq "NP3700")
|
||||
if (uc($hash->{MODEL}) eq "NP3700")
|
||||
{
|
||||
$port = 7123;
|
||||
}
|
||||
elsif($hash->{MODEL} eq "NP3900")
|
||||
elsif(uc($hash->{MODEL}) eq "NP3900")
|
||||
{
|
||||
$port = 49153;
|
||||
}
|
||||
elsif($hash->{MODEL} eq "AW9000")
|
||||
elsif(uc($hash->{MODEL}) eq "AW9000")
|
||||
{
|
||||
$port = "";
|
||||
}
|
||||
@ -1789,11 +1777,6 @@ sub PHILIPS_AUDIO_ParseResponse
|
||||
#Log3 $name, 5, "ListedItems: $listedItems";
|
||||
}
|
||||
|
||||
#if ($data =~ /'totalitems':(.+),/)
|
||||
#{
|
||||
# $listedItems = $1;
|
||||
#}
|
||||
|
||||
$data =~ s/\R//g; # Remove new lines
|
||||
|
||||
while ($data =~ /{'title':'(.+?)',/g)
|
||||
@ -1804,7 +1787,6 @@ sub PHILIPS_AUDIO_ParseResponse
|
||||
if($data =~ /'id':(.+?),/g)
|
||||
{
|
||||
$presetID = $1;
|
||||
#Log3 $name, 5, "PresetIDLoop: $presetID";
|
||||
}
|
||||
if ($presetID ne "" and $presetName ne "")
|
||||
{
|
||||
@ -1812,8 +1794,6 @@ sub PHILIPS_AUDIO_ParseResponse
|
||||
}
|
||||
}
|
||||
|
||||
#Log3 $name, 5, "PresetIDNachLoop: $presetID";
|
||||
|
||||
if($presetID < ($hash->{helper}{TOTALINETRADIOPRESETS})) # Maximum listed items = 8. Get the next items by sending the nextreqURL
|
||||
{
|
||||
# External Command. Not from buffer timer.
|
||||
@ -1878,25 +1858,17 @@ sub PHILIPS_AUDIO_ParseResponse
|
||||
{
|
||||
$hash->{helper}{TOTALINETRADIOFAVORITES} = $1;
|
||||
readingsBulkUpdate($hash, "totalFavorites", $1);
|
||||
#Log3 $name, 5, "ListedItems: $listedItems";
|
||||
}
|
||||
|
||||
#if ($data =~ /'totalitems':(.+),/)
|
||||
#{
|
||||
# $listedItems = $1;
|
||||
#}
|
||||
|
||||
$data =~ s/\R//g; # Remove new lines
|
||||
|
||||
while($data =~ /{'title':'(.+?)',/g)
|
||||
{
|
||||
$favoriteName = $1;
|
||||
#Log3 $name, 5, "FavoriteName: $favoriteName";
|
||||
|
||||
if($data =~ /'id':(.+?),/g)
|
||||
{
|
||||
$favoriteID = $1;
|
||||
#Log3 $name, 5, "FavoriteIDLoop: $favoriteID";
|
||||
}
|
||||
if ($favoriteID ne "" and $favoriteName ne "")
|
||||
{
|
||||
@ -1926,7 +1898,6 @@ sub PHILIPS_AUDIO_ParseResponse
|
||||
}
|
||||
elsif($cmd =~ /input|selectStream/)
|
||||
{
|
||||
|
||||
$data =~ s/\R//g; # Remove new lines for regex
|
||||
|
||||
if($arg eq "---")
|
||||
@ -1963,8 +1934,6 @@ sub PHILIPS_AUDIO_ParseResponse
|
||||
{
|
||||
$errorMessage = $1;
|
||||
}
|
||||
|
||||
#Log3 $name, 3, "PHILIPS_AUDIO ($name) - Player response: Media Library change not successful ($errorMessage).";
|
||||
# Delete old readings
|
||||
delete $hash->{READINGS}{$_} foreach (grep /listItem_...$/, keys %{$hash->{READINGS}});
|
||||
delete $hash->{READINGS}{$_} foreach (grep /.listItemTarget_...$/, keys %{$hash->{READINGS}});
|
||||
@ -2298,15 +2267,19 @@ sub PHILIPS_AUDIO_getMediaRendererDesc
|
||||
my $url = "";
|
||||
my $port = "";
|
||||
|
||||
if ($hash->{MODEL} eq "NP3500")
|
||||
if(uc($hash->{MODEL}) eq "NP3500")
|
||||
{
|
||||
# TBD
|
||||
}
|
||||
elsif($hash->{MODEL} eq "NP3700")
|
||||
elsif(uc($hash->{MODEL}) eq "NP3700")
|
||||
{
|
||||
$url = "http://$hash->{IP_ADDRESS}:7123/DeviceDescription.xml";
|
||||
}
|
||||
elsif(($hash->{MODEL} eq "NP3900") or ($hash->{MODEL} eq "AW9000"))
|
||||
elsif
|
||||
(
|
||||
(uc($hash->{MODEL}) eq "NP3900") or
|
||||
(uc($hash->{MODEL}) eq "AW9000")
|
||||
)
|
||||
{
|
||||
$url = "http://$hash->{IP_ADDRESS}:49153/nmrDescription.xml";
|
||||
}
|
||||
@ -2403,7 +2376,7 @@ sub PHILIPS_AUDIO_getMediaRendererDesc
|
||||
<li><b>selectFavoriteByNumber [ number ]</b> – Selects a favorite by its number. Empty if no favorites found. (see also getFavorites)</li>
|
||||
<li><b>selectPreset [ name ]</b> – Selects a preset. Empty if no presets found. (see also getPresets)</li>
|
||||
<li><b>selectPresetByNumber [ number ]</b> – Selects a preset by its number. Empty if no presets found. (see also getPresets)</li>
|
||||
<li><b>selectStream [ name ]</b> – Context-sensitive. Selects a stream depending on the current input and player list content</li>
|
||||
<li><b>selectStream [ name ]</b> – Context-sensitive. Selects a stream depending on the current input and player list content. A 'c'-prefix represents a 'container' (directory). An 'i'-prefix represents an 'item' (audio stream).</li>
|
||||
<li><b>shuffle [ on | off ]</b> – Sets the shuffle mode</li>
|
||||
<li><b>standbyButton</b> – Emulates the standby button. Toggles between standby and power on</li>
|
||||
<li><b>volume</b> – Sets the relative volume 0...100%</li>
|
||||
@ -2544,7 +2517,7 @@ sub PHILIPS_AUDIO_getMediaRendererDesc
|
||||
<li><b>selectFavoriteByNumber [ number ]</b> – Wählt einen Favoriten anhand seiner Speichernummer. Leer falls keine Favoriten vorhanden (s. getFavorites)</li>
|
||||
<li><b>selectPreset [ name ]</b> – Wählt einen Preset. Leer falls keine Presets vorhanden (s. getPresets)</li>
|
||||
<li><b>selectPresetByNumber [ number ]</b> – Wählt einen Preset anhand seiner Speichernummer. Leer falls keine Presets vorhanden (see also getPresets)</li>
|
||||
<li><b>selectStream [ name ]</b> – Context-sensitive. Wählt einen Audiostream. Hängt vom aktuellen Inhalt der Playerlist ab.</li>
|
||||
<li><b>selectStream [ name ]</b> – Context-sensitive. Wählt einen Audiostream. Hängt vom aktuellen Inhalt der Playerlist ab. Ein 'c'-Präfix repräsentiert einen 'Container' (Directory). ein 'i'-Präfix repräsentiert ein 'Item' (audio stream).</li></li>
|
||||
<li><b>shuffle [ on | off ]</b> – Wählt den gewünschten Shuffle Modus</li>
|
||||
<li><b>standbyButton</b> – Emuliert den standby-Knopf. Toggelt zwischen standby und power on</li>
|
||||
<li><b>volume</b> – Setzt die relative Lautstärke 0...100%</li>
|
||||
@ -2614,3 +2587,4 @@ sub PHILIPS_AUDIO_getMediaRendererDesc
|
||||
=end html_DE
|
||||
|
||||
=cut
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user