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', '').'
'.(($normalAudio) ? '
' : '').'
'; + my $fullscreenDiv = '
'.ReadingsVal($device, 'roomName', $device).$transportState.'
'.((lc($presence) eq 'disappeared') ? 'Player disappeared' : ReadingsVal($device, 'infoSummarize1', '')).'
'.(($normalAudio) ? '
' : '').'
'; 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: %s
Interpret: %s
Album: %s'.($showNext ? '
Nächste Wiedergabe:
Titel: %s
Artist: %s
Album: %s
' : ''), + $infoString = sprintf('
%s Titel %s von %s
Titel: %s
Interpret: %s
Album: %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$