diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index e2b110e3b..6dc4e1014 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -47,6 +47,10 @@ # Changelog # # SVN-History: +# 30.01.2015 +# Commandref wurde optisch übersichtlicher gestaltet, und die Windows-Hinweise eingefügt. +# Bei der Anzeige des nächsten Titels in der Standard-ReadingsGroup stand "Artist". Das wurde auf "Interpret" korrigiert. +# Es gibt jetzt eine Prozedur "SONOSPLAYER_GetSlavePlayerNames()", mit der man sich die Teilnehmer einer Gruppe liefern lassen kann. Der Master wird nicht mit zurückgegeben. Man kann den Namen eines beliebigen Teilnehmers angeben. # 27.01.2015 # Bei den Befehlen "AddMember", "RemoveMember" und "CreateStereoPair" werden nun alle in Fhem verfügbaren Sonosplayer in einer Auswahl angeboten. Das erfolgt allerdings ungeachtet der Gültigkeit eines Players in diesem Kontext (z.B. kann man keinen Player aus der Gruppe entfernen, der nicht in der Gruppe ist, die Auswahl bietet aber alle an). # Es gibt jetzt eine Prozedur "SONOSPLAYER_GetMasterPlayerName()" mit der man sich den Devicenamen des Masterplayer zu dem übergebenen Playernamen geben lassen kann. @@ -659,7 +663,7 @@ sub SONOS_getTitleRG($;$) { # 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('
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
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.
+The client will be started by the module itself if not done in another way.
You can start this client on your own (to let it run instantly and independent from FHEM):
perl 00_SONOS.pm 4711
: Starts a UPnP-Client in an independant way who listens to connections on port 4711. This process can run a long time, FHEM can connect and disconnect to it.
define Sonos SONOS localhost:4711 30
define <name> SONOS [upnplistener [interval [waittime [delaytime]]]]
+define <name> SONOS [upnplistener [interval [waittime [delaytime]]]]
-[upnplistener]
The name and port of the external upnp-listener. If not given, defaults to localhost:4711
. The port has to be a free portnumber on your system. If you don't start a server on your own, the script does itself.
If you start it yourself write down the correct informations to connect.
[upnplistener]
localhost:4711
. The port has to be a free portnumber on your system. If you don't start a server on your own, the script does itself.
-[interval]
The interval is for alive-checking of Zoneplayer-device, because no message come if the host disappear :-)
If omitted a value of 10 seconds is the default.
[interval]
-[waittime]
With this value you can configure the waiting time for the starting of the Subprocess.
[waittime]
-[delaytime]
With this value you can configure a delay time before starting the network-part.
[delaytime]
set <name> Mute <state>
+Mute <state>
set <name> PauseAll
+PauseAll
set <name> Pause
+Pause
set <name> StopAll
+StopAll
set <name> Stop
+Stop
set <name> Groups <GroupDefinition>
+Groups <GroupDefinition>
get <name> Groups
+Groups
[Sonos_Kueche], [Sonos_Wohnzimmer, Sonos_Schlafzimmer]
. In this example there are two groups: the first consists of one player and the second consists of two players.Sonos_Wohnzimmer
), from which the current playlist and the current title playing transferred to the other member(s).attr <name> characterDecoding <codingname>
+characterDecoding <codingname>
attr <name> disable <value>
-attr <name> pingType <string>
+disable <value>
+pingType <string>
attr <name> generateProxyAlbumArtURLs <int>
+generateProxyAlbumArtURLs <int>
attr <name> proxyCacheDir <Path>
+proxyCacheDir <Path>
attr <name> proxyCacheTime <int>
+proxyCacheTime <int>
attr <name> targetSpeakDir <string>
+targetSpeakDir <string>
attr <name> targetSpeakURL <string>
+targetSpeakURL <string>
attr <name> targetSpeakFileTimestamp <int>
+targetSpeakFileTimestamp <int>
attr <name> targetSpeakFileHashCache <int>
+targetSpeakFileHashCache <int>
attr <name> Speak1 <Fileextension>:<Commandline>
+Speak1 <Fileextension>:<Commandline>
attr <name> Speak2 <Fileextension>:<Commandline>
+Speak2 <Fileextension>:<Commandline>
attr <name> Speak3 <Fileextension>:<Commandline>
+Speak3 <Fileextension>:<Commandline>
attr <name> Speak4 <Fileextension>:<Commandline>
+Speak4 <Fileextension>:<Commandline>
attr <name> SpeakCover <Filename>
+SpeakCover <Filename>
attr <name> Speak1Cover <Filename>
+Speak1Cover <Filename>
attr <name> Speak2Cover <Filename>
+Speak2Cover <Filename>
attr <name> Speak3Cover <Filename>
+Speak3Cover <Filename>
attr <name> Speak4Cover <Filename>
+Speak4Cover <Filename>
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
Das System besteht aus zwei Komponenten:
@@ -7076,44 +7091,41 @@ Man kann den Server unabhängig von FHEM selbst starten (um ihn dauerhaft und un
define Sonos SONOS localhost:4711 30
define <name> SONOS [upnplistener [interval [waittime [delaytime]]]]
+define <name> SONOS [upnplistener [interval [waittime [delaytime]]]]
-[upnplistener]
Name und Port eines externen UPnP-Client. Wenn nicht angegebenen wird localhost:4711
festgelegt. Der Port muss eine freie Portnummer ihres Systems sein.
Wenn sie keinen externen Client gestartet haben, startet das Skript einen eigenen.
Wenn sie einen eigenen Dienst gestartet haben, dann geben sie hier die entsprechenden Informationen an.
[upnplistener]
localhost:4711
festgelegt. Der Port muss eine freie Portnummer ihres Systems sein.
-[interval]
Das Interval wird für die Überprüfung eines Zoneplayers benötigt. In diesem Interval wird nachgeschaut, ob der Player noch erreichbar ist, da sich ein Player nicht mehr abmeldet, wenn er abgeschaltet wird :-)
Wenn nicht angegeben, wird ein Wert von 10 Sekunden angenommen.
[interval]
-[waittime]
Hiermit wird die Wartezeit eingestellt, die nach dem Starten des SubProzesses darauf gewartet wird.
[waittime]
-[delaytime]
Hiermit kann eine Verzögerung eingestellt werden, die vor dem Starten des Netzwerks gewartet wird.
[delaytime]
set <name> Mute <state>
+Mute <state>
set <name> PauseAll
+PauseAll
set <name> Pause
+Pause
set <name> StopAll
+StopAll
set <name> Stop
+Stop
set <name> Groups <GroupDefinition>
+Groups <GroupDefinition>
get <name> Groups
+Groups
[Sonos_Kueche], [Sonos_Wohnzimmer, Sonos_Schlafzimmer]
. In diesem Beispiel sind also zwei Gruppen definiert, von denen die erste aus einem Player und die zweite aus Zwei Playern besteht.Sonos_Wohnzimmer
), von dem die aktuelle Abspielliste un der aktuelle Titel auf die anderen Gruppenmitglieder übernommen wird.attr <name> characterDecoding <codingname>
+characterDecoding <codingname>
attr <name> disable <value>
+disable <value>
attr <name> pingType <string>
+pingType <string>
attr <name> generateProxyAlbumArtURLs <int>
+generateProxyAlbumArtURLs <int>
attr <name> proxyCacheDir <Path>
+proxyCacheDir <Path>
attr <name> proxyCacheTime <int>
+proxyCacheTime <int>
attr <name> targetSpeakDir <string>
+targetSpeakDir <string>
attr <name> targetSpeakURL <string>
+targetSpeakURL <string>
attr <name> targetSpeakFileTimestamp <int>
+targetSpeakFileTimestamp <int>
attr <name> targetSpeakFileHashCache <int>
+targetSpeakFileHashCache <int>
attr <name> Speak1 <Fileextension>:<Commandline>
+Speak1 <Fileextension>:<Commandline>
attr <name> Speak2 <Fileextension>:<Commandline>
+Speak2 <Fileextension>:<Commandline>
attr <name> Speak3 <Fileextension>:<Commandline>
+Speak3 <Fileextension>:<Commandline>
attr <name> Speak4 <Fileextension>:<Commandline>
+Speak4 <Fileextension>:<Commandline>
attr <name> SpeakCover <Absolute-Imagepath>
+SpeakCover <Absolute-Imagepath>
attr <name> Speak1Cover <Absolute-Imagepath>
+Speak1Cover <Absolute-Imagepath>
attr <name> Speak2Cover <Absolute-Imagepath>
+Speak2Cover <Absolute-Imagepath>
attr <name> Speak3Cover <Absolute-Imagepath>
+Speak3Cover <Absolute-Imagepath>
attr <name> Speak3Cover <Absolute-Imagepath>
+Speak3Cover <Absolute-Imagepath>
attr <name> Speak4Cover <Absolute-Imagepath>
+Speak4Cover <Absolute-Imagepath>
define Sonos_Wohnzimmer SONOSPLAYER RINCON_000EFEFEFEF401400_MR
define <name> SONOSPLAYER <udn>
+define <name> SONOSPLAYER <udn>
-<udn>
MAC-Address based identifier of the zoneplayer
<udn>
set <name> Alarm (Create|Update|Delete) <ID> <Datahash>
+Alarm (Create|Update|Delete) <ID> <Datahash>
set <name> DailyIndexRefreshTime <time>
+DailyIndexRefreshTime <time>
set <name> Name <Zonename>
+Name <Zonename>
set <name> Reboot
+Reboot
set <name> RoomIcon <Iconname>
+RoomIcon <Iconname>
set <name> Wifi <State>
+Wifi <State>
set <name> CurrentTrackPosition <TimePosition>
+CurrentTrackPosition <TimePosition>
set <name> Pause
+Pause
set <name> Previous
+Previous
set <name> Play
+Play
set <name> PlayURI <songURI> [Volume]
+PlayURI <songURI> [Volume]
set <name> PlayURITemp <songURI> [Volume]
+PlayURITemp <songURI> [Volume]
,PlayURI
, e.g. nothing is restored after playing.set <name> Next
+Next
set <name> Speak <Volume> <Language> <Text>
+Speak <Volume> <Language> <Text>
set <name> StartFavourite <Favouritename> [NoStart]
+StartFavourite <Favouritename> [NoStart]
/meine.hits/
.set <name> StartPlaylist <Playlistname> [EmptyQueueBeforeImport]
+StartPlaylist <Playlistname> [EmptyQueueBeforeImport]
set <name> StartRadio <Radiostationname>
+StartRadio <Radiostationname>
set <name> Stop
+Stop
set <name> Track <TrackNumber|Random>
+Track <TrackNumber|Random>
Random
a random track will be selected.set <name> Balance <BalanceValue>
+Balance <BalanceValue>
set <name> Bass <BassValue>
+Bass <BassValue>
set <name> CrossfadeMode <State>
+CrossfadeMode <State>
set <name> LEDState <State>
+LEDState <State>
set <name> Loudness <State>
+Loudness <State>
set <name> Mute <State>
+Mute <State>
set <name> MuteT
+MuteT
set <name> Repeat <State>
+Repeat <State>
set <name> Shuffle <State>
+Shuffle <State>
set <name> SleepTimer <Time>
+SleepTimer <Time>
set <name> Treble <TrebleValue>
+Treble <TrebleValue>
set <name> Volume <VolumeLevel> [RampType]
+Volume <VolumeLevel> [RampType]
set <name> VolumeD
+VolumeD
set <name> VolumeRestore
+VolumeRestore
set <name> VolumeSave <VolumeLevel>
+VolumeSave <VolumeLevel>
set <name> VolumeU
+VolumeU
set <name> AddURIToQueue <songURI>
+AddURIToQueue <songURI>
set <name> CurrentPlaylist
+CurrentPlaylist
set <name> EmptyPlaylist
+EmptyPlaylist
set <name> LoadPlaylist <Playlistname> [EmptyQueueBeforeImport]
+LoadPlaylist <Playlistname> [EmptyQueueBeforeImport]
/hits.2014/
.set <name> LoadRadio <Radiostationname>
+LoadRadio <Radiostationname>
/radio/
.set <name> SavePlaylist <Playlistname>
+SavePlaylist <Playlistname>
set <name> AddMember <devicename>
+AddMember <devicename>
set <name> CreateStereoPair <rightPlayerDevicename>
+CreateStereoPair <rightPlayerDevicename>
set <name> GroupMute <State>
+GroupMute <State>
set <name> GroupVolume <VolumeLevel>
+GroupVolume <VolumeLevel>
set <name> RemoveMember <devicename>
+RemoveMember <devicename>
set <name> SeparateStereoPair
+SeparateStereoPair
set <name> SnapshotGroupVolume
+SnapshotGroupVolume
get <name> Alarm <ID>
+Alarm <ID>
eval(ReadingsVal(<Devicename>, 'Alarmlist', ()))->{<ID>};
.get <name> EthernetPortStatus <PortNumber>
+EthernetPortStatus <PortNumber>
get <name> PossibleRoomIcons
+PossibleRoomIcons
get <name> Favourites
+Favourites
get <name> FavouritesWithCovers
+FavouritesWithCovers
get <name> Playlists
+Playlists
get <name> PlaylistsWithCovers
+PlaylistsWithCovers
get <name> Radios
+Radios
get <name> RadiosWithCovers
+RadiosWithCovers
get <name> CurrentTrackPosition
+CurrentTrackPosition
attr <name> disable <int>
+disable <int>
attr <name> generateSomethingChangedEvent <int>
+generateSomethingChangedEvent <int>
attr <name> generateVolumeEvent <int>
+generateVolumeEvent <int>
attr <name> generateVolumeSlider <int>
+generateVolumeSlider <int>
attr <name> getAlarms <int>
+getAlarms <int>
attr <name> volumeStep <int>
+volumeStep <int>
VolumeU
and VolumeD
.attr <name> generateInfoSummarize1 <string>
+generateInfoSummarize1 <string>
attr <name> generateInfoSummarize2 <string>
+generateInfoSummarize2 <string>
attr <name> generateInfoSummarize3 <string>
+generateInfoSummarize3 <string>
attr <name> generateInfoSummarize4 <string>
+generateInfoSummarize4 <string>
attr <name> stateVariable <string>
+stateVariable <string>
attr <name> maxVolume <int>
+maxVolume <int>
attr <name> minVolume <int>
+minVolume <int>
attr <name> maxVolumeHeadphone <int>
+maxVolumeHeadphone <int>
attr <name> minVolumeHeadphone <int>
+minVolumeHeadphone <int>
attr <name> buttonEvents <Time:Pattern>[ <Time:Pattern> ...]
+buttonEvents <Time:Pattern>[ <Time:Pattern> ...]
ButtonEvent
, the value is the defined button-sequence.2:MM
ButtonEvent
and has the value MM
.
define Sonos_Wohnzimmer SONOSPLAYER RINCON_000EFEFEFEF401400_MR
define <name> SONOSPLAYER <udn>
+define <name> SONOSPLAYER <udn>
-<udn>
MAC-Addressbasierter eindeutiger Bezeichner des Zoneplayer
-
-
+<udn>
MAC-Addressbasierter eindeutiger Bezeichner des Zoneplayer
set <name> Alarm (Create|Update|Delete) <ID> <Datahash>
+Alarm (Create|Update|Delete) <ID> <Datahash>
set <name> DailyIndexRefreshTime <time>
+DailyIndexRefreshTime <time>
set <name> Name <Zonename>
+Name <Zonename>
set <name> Reboot
+Reboot
set <name> RoomIcon <Iconname>
+RoomIcon <Iconname>
set <name> Wifi <State>
+Wifi <State>
set <name> CurrentTrackPosition <TimePosition>
+CurrentTrackPosition <TimePosition>
set <name> Pause
+Pause
set <name> Previous
+Previous
set <name> Play
+Play
set <name> PlayURI <songURI> [Volume]
+PlayURI <songURI> [Volume]
set <name> PlayURITemp <songURI> [Volume]
+PlayURITemp <songURI> [Volume]
PlayURI
ab, es wird also nichts am Ende (wenn es eines geben sollte) wiederhergestellt.set <name> Next
+Next
set <name> Speak <Volume> <Language> <Text>
+Speak <Volume> <Language> <Text>
PlayURITemp
als Durchsage abzuspielen. Mögliche Sprachen können auf der Google-Seite nachgesehen werden. Möglich sind z.B. "de", "en", "fr", "es"...set <name> StartFavourite <FavouriteName> [NoStart]
+StartFavourite <FavouriteName> [NoStart]
/meine.hits/
.set <name> StartPlaylist <Playlistname> [EmptyQueueBeforeImport]
+StartPlaylist <Playlistname> [EmptyQueueBeforeImport]
set <name> StartRadio <Radiostationname>
+StartRadio <Radiostationname>
set <name> Stop
+Stop
set <name> Track <TrackNumber|Random>
+Track <TrackNumber|Random>
Random
angegeben wird, dann wird eine zufällige Trackposition ausgewählt.set <name> Balance <BalanceValue>
+Balance <BalanceValue>
set <name> Bass <BassValue>
+Bass <BassValue>
set <name> CrossfadeMode <State>
+CrossfadeMode <State>
set <name> LEDState <State>
+LEDState <State>
set <name> Loudness <State>
+Loudness <State>
set <name> Mute <State>
+Mute <State>
set <name> MuteT
+MuteT
set <name> Repeat <State>
+Repeat <State>
set <name> Shuffle <State>
+Shuffle <State>
set <name> SleepTimer <Time>
+SleepTimer <Time>
set <name> Treble <TrebleValue>
+Treble <TrebleValue>
set <name> Volume <VolumeLevel> [RampType]
+Volume <VolumeLevel> [RampType]
set <name> VolumeD
+VolumeD
set <name> VolumeRestore
+VolumeRestore
VolumeSave
gespeicherte Lautstärke wieder her.set <name> VolumeSave <VolumeLevel>
+VolumeSave <VolumeLevel>
VolumeRestore
wiederhergestellt werden.set <name> VolumeU
+VolumeU
set <name> AddURIToQueue <songURI>
+AddURIToQueue <songURI>
set <name> CurrentPlaylist
+CurrentPlaylist
set <name> EmptyPlaylist
+EmptyPlaylist
set <name> LoadPlaylist <Playlistname> [EmptyQueueBeforeImport]
+LoadPlaylist <Playlistname> [EmptyQueueBeforeImport]
/hits.2014/
.set <name> LoadRadio <Radiostationname>
+LoadRadio <Radiostationname>
/radio/
.set <name> SavePlaylist <Playlistname>
+SavePlaylist <Playlistname>
set <name> AddMember <devicename>
+AddMember <devicename>
set <name> CreateStereoPair <rightPlayerDevicename>
+CreateStereoPair <rightPlayerDevicename>
set <name> GroupMute <State>
+GroupMute <State>
set <name> GroupVolume <VolumeLevel>
+GroupVolume <VolumeLevel>
set <name> RemoveMember <devicename>
+RemoveMember <devicename>
set <name> SeparateStereoPair
+SeparateStereoPair
set <name> SnapshotGroupVolume
+SnapshotGroupVolume
get <name> Alarm <ID>
+Alarm <ID>
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>
+EthernetPortStatus <PortNumber>
get <name> PossibleRoomIcons
+PossibleRoomIcons
get <name> Favourites
+Favourites
get <name> FavouritesWithCovers
+FavouritesWithCovers
get <name> Playlists
+Playlists
get <name> PlaylistsWithCovers
+PlaylistsWithCovers
get <name> Radios
+Radios
get <name> RadiosWithCovers
+RadiosWithCovers
get <name> CurrentTrackPosition
+CurrentTrackPosition
attr <name> disable <int>
+disable <int>
attr <name> generateSomethingChangedEvent <int>
+generateSomethingChangedEvent <int>
attr <name> generateVolumeEvent <int>
+generateVolumeEvent <int>
attr <name> generateVolumeSlider <int>
+generateVolumeSlider <int>
attr <name> getAlarms <int>
+getAlarms <int>
attr <name> volumeStep <int>
+volumeStep <int>
VolumeU
und VolumeD
.attr <name> generateInfoSummarize1 <string>
+generateInfoSummarize1 <string>
attr <name> generateInfoSummarize2 <string>
+generateInfoSummarize2 <string>
attr <name> generateInfoSummarize3 <string>
+generateInfoSummarize3 <string>
attr <name> generateInfoSummarize4 <string>
+generateInfoSummarize4 <string>
attr <name> stateVariable <string>
+stateVariable <string>
state
kopiert werden soll.attr <name> maxVolume <int>
+maxVolume <int>
attr <name> minVolume <int>
+minVolume <int>
attr <name> maxVolumeHeadphone <int>
+maxVolumeHeadphone <int>
attr <name> minVolumeHeadphone <int>
+minVolumeHeadphone <int>
attr <name> buttonEvents <Time:Pattern>[ <Time:Pattern> ...]
+buttonEvents <Time:Pattern>[ <Time:Pattern> ...]
ButtonEvent
, der Wert ist die definierte Tastenfolge2:MM
ButtonEvent
, und den Wert MM
.