From 4ac726d3cc1bb5c8f91933db9d402ed42e2ac0c9 Mon Sep 17 00:00:00 2001 From: rleins <> Date: Sun, 4 Jan 2015 01:02:53 +0000 Subject: [PATCH] Sonos: Displaying the title-informations during playing of a dock git-svn-id: https://svn.fhem.de/fhem/trunk@7424 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_SONOS.pm | 66 +++++++++++++++++++++++++++++++++++-- fhem/FHEM/21_SONOSPLAYER.pm | 4 +-- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index f5e1395d8..b971be5b4 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -32,8 +32,11 @@ # Changelog # # SVN-History: +# 04.01.2015 +# Wenn ein Player einen Dock (iPod) wiedergibt, dann werden die Titelinformationen dort mitgesetzt. Damit entfällt die Anzeige des Titels z.B. mit 'iPod von Reinerlein'. # 03.01.2015 # Dokumentation angepasst (commandref und Installationsdoku im Dateiheader) +# Fehler bei der Dockbehandlung behoben # 02.01.2015 # Anzeige bei der Wiedergabe eines Docks verbessert. Dort werden nun der Titel und Album/Artist-Informationen und ein Dock-Cover angezeigt. # Getter/Setter bei Bedarf um ":noArg" erweitert. @@ -1213,6 +1216,45 @@ sub SONOS_Read($) { # End the Bulk-Update, and trigger events SONOS_readingsEndUpdate($hash, 1); + + # Wenn es ein Dock ist, dann noch jeden abspielenden Player mit aktualisieren + if (ReadingsVal($hash->{NAME}, 'playerType', '') eq 'WD100') { + my $shortUDN = $1 if ($hash->{UDN} =~ m/(.*)_MR/); + for my $elem (SONOS_getAllSonosplayerDevices()) { + # Wenn es ein Player ist, der gerade das Dock wiedergibt, dann diesen Befüllen... + if (ReadingsVal($elem->{NAME}, 'currentTrackURI', '') eq 'x-sonos-dock:'.$shortUDN) { + # Alte Werte holen, muss komplett sein, um infoSummarize füllen zu können + my %currentElem = SONOS_GetReadingsToCurrentHash($elem->{NAME}, 0); + $currentElem{Title} = $current{Title}; + $currentElem{Artist} = $current{Artist}; + $currentElem{Album} = $current{Album}; + + # Loslegen + readingsBeginUpdate($elem); + + # Neue Werte setzen + SONOS_readingsBulkUpdateIfChanged($elem, "currentTitle", $currentElem{Title}); + SONOS_readingsBulkUpdateIfChanged($elem, "currentArtist", $currentElem{Artist}); + SONOS_readingsBulkUpdateIfChanged($elem, "currentAlbum", $currentElem{Album}); + + if (AttrVal($elem->{NAME}, 'generateSomethingChangedEvent', 0) == 1) { + readingsBulkUpdate($elem, "somethingChanged", 1); + } + + # InfoSummarize befüllen + SONOS_ProcessInfoSummarize($elem, \%currentElem, 'InfoSummarize1', 1); + SONOS_ProcessInfoSummarize($elem, \%currentElem, 'InfoSummarize2', 1); + SONOS_ProcessInfoSummarize($elem, \%currentElem, 'InfoSummarize3', 1); + SONOS_ProcessInfoSummarize($elem, \%currentElem, 'InfoSummarize4', 1); + + # State-Reading befüllen + SONOS_readingsBulkUpdateIfChanged($elem, 'state', $currentElem{AttrVal($elem->{NAME}, 'stateVariable', 'TransportState')}); + + # Alles verarbeiten lassen + SONOS_readingsEndUpdate($elem, 1); + } + } + } } else { SONOS_Log undef, 0, "Fehlerhafter Aufruf von CurrentBulkUpdate: $1"; } @@ -6583,10 +6625,13 @@ sub SONOS_Client_IsAlive() {
  • LWP::Simple
  • LWP::UserAgent
  • SOAP::Lite
  • -
  • HTTP::Request
  • +
  • HTTP::Request
  • +Installation e.g. as Debian-Packages (via "sudo apt-get install <packagename>"):

    Attention!
    This Module will not be functioning on any platform, because of the use of Threads and the neccessary Perl-modules.

    More information is given in a (german) Wiki-article: http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel

    -

    The system conists of two different components:
    +

    The system consists of two different components:
    1. A UPnP-Client which runs as a standalone process in the background and takes the communications to the sonos-components.
    2. The FHEM-module itself which connects to the UPnP-client to make fhem able to work with sonos.

    The client will be startet by the module itself if not done in another way.
    @@ -6618,9 +6663,15 @@ You can start this client on your own (to let it run instantly and independent f

  • set <name> PauseAll
    Pause all Zoneplayer.
  • +
  • +set <name> Pause +
    Alias for PauseAll.
  • set <name> StopAll
    Stops all Zoneplayer.
  • +
  • +set <name> Stop +
    Alias for StopAll.
  • Group-Commands

    +
  • HTTP::Request
  • +Installation z.B. als Debian-Pakete (mittels "sudo apt-get install <packagename>"):

    Achtung!
    Das Modul wird nicht auf jeder Plattform lauffähig sein, da Threads und die angegebenen Perl-Module verwendet werden.

    Mehr Informationen im (deutschen) Wiki-Artikel: http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel

    Das System besteht aus zwei Komponenten:
    @@ -6734,9 +6788,15 @@ Man kann den Server unabhängig von FHEM selbst starten (um ihn dauerhaft und un

  • set <name> PauseAll
    Pausiert die Wiedergabe in allen Zonen.
  • +
  • +set <name> Pause +
    Synonym für PauseAll.
  • set <name> StopAll
    Stoppt die Wiedergabe in allen Zonen.
  • +
  • +set <name> Stop +
    Synonym für StopAll.
  • Gruppenbefehle