diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm
index 6d61aff8a..099451e82 100755
--- a/fhem/FHEM/00_SONOS.pm
+++ b/fhem/FHEM/00_SONOS.pm
@@ -1,6 +1,6 @@
########################################################################################
#
-# SONOS.pm (c) by Reiner Leins, December 2014
+# SONOS.pm (c) by Reiner Leins, January 2015
# rleins at lmsoft dot de
#
# $Id$
@@ -30,6 +30,8 @@
# Changelog
#
# SVN-History:
+# 01.01.2015
+# Anzeige in der Player-ReadingsGroup für die Darstellung von disappeared angepasst, dabei auch gleich die Höhenverhältnisse etwas angepasst.
# 31.12.2014
# Das Bilden von Stereopaaren wird nun unterstützt. Dafür gibt es die Anweisungen 'CreateStereoPair' und 'SeparateStereoPair' an einem Playerdevice.
# 28.12.2014
@@ -466,6 +468,8 @@ sub SONOS_getCoverTitleRG($;$$) {
$width = 500 if (!defined($width));
my $transportState = ReadingsVal($device, 'transportState', '');
+ my $presence = ReadingsVal($device, 'presence', 'disappeared');
+ $presence = 'disappeared' if ($presence =~ m/~~NotLoadedMarker~~/i);
my $currentRuntime = 1;
my $currentStarttime = 0;
@@ -488,7 +492,7 @@ sub SONOS_getCoverTitleRG($;$$) {
$transportState = FW_makeImage('audio_pause', 'Paused', 'SONOS_Transportstate') if ($transportState eq 'PAUSED_PLAYBACK');
$transportState = FW_makeImage('audio_stop', 'Stopped', 'SONOS_Transportstate') if ($transportState eq 'STOPPED');
- my $fullscreenDiv = '
'.ReadingsVal($device, 'roomName', $device).$transportState.'
'.ReadingsVal($device, 'infoSummarize1', '').'
'.md5_hex(ReadingsVal($device, 'roomName', $device).ReadingsVal($device, 'infoSummarize2', '').ReadingsVal($device, 'currentTrackPosition', '').ReadingsVal($device, 'currentAlbumArtURL', '')).'
'.(($normalAudio) ? '
'.$currentRuntime.'
'.$currentStarttime.'
'.$playing.'
' : '').'
';
+ my $fullscreenDiv = ''.ReadingsVal($device, 'roomName', $device).$transportState.'
'.((lc($presence) eq 'disappeared') ? 'Player disappeared' : ReadingsVal($device, 'infoSummarize1', '')).'
'.md5_hex(ReadingsVal($device, 'roomName', $device).ReadingsVal($device, 'infoSummarize2', '').ReadingsVal($device, 'currentTrackPosition', '').ReadingsVal($device, 'currentAlbumArtURL', '')).'
'.(($normalAudio) ? '
'.$currentRuntime.'
'.$currentStarttime.'
'.$playing.'
' : '').'
';
my $javascriptTimer = 'function refreshTime'.$device.'() {
var playing = document.getElementById("prog_playing_'.$device.'");
@@ -556,9 +560,12 @@ sub SONOS_getCoverTitleRG($;$$) {
########################################################################################
sub SONOS_getCoverRG($;$) {
my ($device, $height) = @_;
- $height = '175px' if (!defined($height));
+ $height = '10.75em' if (!defined($height));
- return '';
+ my $presence = ReadingsVal($device, 'presence', 'disappeared');
+ $presence = 'disappeared' if ($presence =~ m/~~NotLoadedMarker~~/i);
+
+ return '';
}
########################################################################################
@@ -568,7 +575,15 @@ sub SONOS_getCoverRG($;$) {
########################################################################################
sub SONOS_getTitleRG($;$) {
my ($device, $space) = @_;
- $space = 20 if (!defined($space));
+ $space = '1em' if (!defined($space));
+ $space .= 'px' if (looks_like_number($space));
+
+ # Wenn der Player weg ist, nur eine Kurzinfo dazu anzeigen
+ my $presence = ReadingsVal($device, 'presence', 'disappeared');
+ $presence = 'disappeared' if ($presence =~ m/~~NotLoadedMarker~~/i);
+ if (lc($presence) eq 'disappeared') {
+ return 'Player disappeared
';
+ }
my $infoString = '';
@@ -576,11 +591,12 @@ sub SONOS_getTitleRG($;$) {
$transportState = 'Spiele' if ($transportState eq 'PLAYING');
$transportState = 'Pausiere' if ($transportState eq 'PAUSED_PLAYBACK');
$transportState = 'Stop bei' if ($transportState eq 'STOPPED');
+ # 55
# Läuft Radio oder ein "normaler" Titel
if (ReadingsVal($device, 'currentNormalAudio', 1) == 1) {
my $showNext = ReadingsVal($device, 'nextTitle', '') || ReadingsVal($device, 'nextArtist', '') || ReadingsVal($device, 'nextAlbum', '');
- $infoString = sprintf('%s Titel %s von %s
Titel:
%sInterpret:
%sAlbum:
%s'.($showNext ? '
Nächste Wiedergabe:
Titel: %s
Artist: %s
Album: %s
' : ''),
+ $infoString = sprintf('%s Titel %s von %s
Titel:
%sInterpret:
%sAlbum:
%s'.($showNext ? '
Nächste Wiedergabe:
Titel: %s
Artist: %s
Album: %s
' : ''),
$transportState,
ReadingsVal($device, 'currentTrack', ''),
ReadingsVal($device, 'numberOfTracks', ''),
@@ -1012,7 +1028,7 @@ sub SONOS_Read($) {
}
# Die aktuellen Abspielinformationen werden Schritt für Schritt übertragen, gesammelt und dann in einem Rutsch ausgewertet.
- # Dafür eignet sich eine Sub-Statische Variable am Besten
+ # Dafür eignet sich eine Sub-Statische Variable am Besten.
state %current;
# Hier könnte jetzt eine ganze Liste von Anweisungen enthalten sein, die jedoch einzeln verarbeitet werden müssen
@@ -1096,6 +1112,39 @@ sub SONOS_Read($) {
CommandDefine(undef, $1);
} elsif ($line =~ m/CommandAttr:(.*)/) {
CommandAttr(undef, $1);
+ } elsif ($line =~ m/deleteCurrentNextTitleInformationAndDisappear:(.*)/) {
+ my $hash = SONOS_getSonosPlayerByUDN($1);
+
+ # Start the updating...
+ readingsBeginUpdate($hash);
+
+ # Updating...
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentTrack", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentTrackURI", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentTrackDuration", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentTrackPosition", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentTitle", 'Disappeared');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentArtist", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentAlbum", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentOriginalTrackNumber", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentAlbumArtist", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentAlbumArtURL", '/fhem/sonos/cover/empty.jpg');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentSender", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentSenderCurrent", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentSenderInfo", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentStreamAudio", 0);
+ SONOS_readingsBulkUpdateIfChanged($hash, "currentNormalAudio", 1);
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextTrackDuration", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextTrackURI", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextTitle", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextArtist", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextAlbum", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextAlbumArtist", '');
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextAlbumArtURL", '/fhem/sonos/cover/empty.jpg');
+ SONOS_readingsBulkUpdateIfChanged($hash, "nextOriginalTrackNumber", '');
+
+ # End the Bulk-Update, and trigger events...
+ SONOS_readingsEndUpdate($hash, 1);
} elsif ($line =~ m/GetReadingsToCurrentHash:(.*?):(.*)/) {
my $hash = SONOS_getSonosPlayerByUDN($1);
@@ -4227,6 +4276,8 @@ sub SONOS_IsAlive($) {
$result = 0;
SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'presence', 'disappeared');
+ # Brauchen wir das wirklich? Dabei werden die lokalen Infos nicht aktualisiert...
+ #SONOS_Client_Notifier('deleteCurrentNextTitleInformationAndDisappear:'.$udn);
SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'state', 'disappeared');
$doDeleteProxyObjects = 1;
} else {
diff --git a/fhem/FHEM/21_SONOSPLAYER.pm b/fhem/FHEM/21_SONOSPLAYER.pm
index d08c3a21b..fc3925c5d 100755
--- a/fhem/FHEM/21_SONOSPLAYER.pm
+++ b/fhem/FHEM/21_SONOSPLAYER.pm
@@ -1,6 +1,6 @@
########################################################################################
#
-# SONOSPLAYER.pm (c) by Reiner Leins, December 2014
+# SONOSPLAYER.pm (c) by Reiner Leins, January 2015
# rleins at lmsoft dot de
#
# $Id$