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
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
set <name> Pause
+set <name> StopAll
set <name> Stop
+HTTP::Request
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
set <name> Pause
+set <name> StopAll
set <name> Stop
+get <name> Alarm <ID>
-eval(ReadingsVal(, 'Alarmlist', ()))->{};
.eval(ReadingsVal(<Devicename>, 'Alarmlist', ()))->{<ID>};
.get <name> EthernetPortStatus <PortNumber>
get <name> Alarm <ID>
-eval(ReadingsVal(, 'Alarmlist', ()))->{};
, damit sich nicht jeder ausdenken muss, wie er jetzt am einfachsten an die Alarm-Informationen rankommen kann.eval(ReadingsVal(<Devicename>, 'Alarmlist', ()))->{<ID>};
, damit sich nicht jeder ausdenken muss, wie er jetzt am einfachsten an die Alarm-Informationen rankommen kann.get <name> EthernetPortStatus <PortNumber>