Sonos steuern

Begonnen von Will, 05 Januar 2013, 15:51:12

Vorheriges Thema - Nächstes Thema

Tobias

HI Andreas,
Wenn du Spotify Playlisten hast: in der Doku der WebApi von spotify steht eigentlich alles drin..... Ist aber ziewmlich aufwändig. Dieses ist "irgendwann mal" angedacht in das MediaLIst Modul(!) zu integrieren, aber 1. fehlt mir die Zeit und 2. nutze ich kein Spotify sondern nur meine Sammlung...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Sturi2011

Hallo Tobias,

momentan geht es mir primär um Prime...
Mal sehen ob es da eine API gibt.

Gruß Andreas

visionsurfer

Hallo,

also ich versteh es noch nicht ganz.

Meine Sonos Boxen sind alle angeschlossen und werden auch in FHEM gefunden.
Nun wollte ich ausprobieren gezielt bestimmte Musik abzuspielen.

Ich nutze aktuelle Amazon Prime Music Umlimited.

Das heißt in der Sonos App auf meinem Handy hab ich einfach mal ein paar CD´s und Musik zu "Meine Musik" hinzugefügt. In der Sonos App sehe ich dann auch die ganzen Alben.

Wenn ich dann in der App z.B. die Wiedergabe der Musik auf der Sonos Box im Bad starte, steht im List der Box von FHEM folgendes:


Internals:
   CFGFN
   DEF        RINCON_5CAAFD7AA19C01400_MR
   NAME       Sonos_Bad
   NR         796
   NTFY_ORDER 50-Sonos_Bad
   STATE      appeared
   TYPE       SONOSPLAYER
   UDN        RINCON_5CAAFD7AA19C01400_MR
   Readings:
     2016-12-23 21:46:33   AlarmList       {}
     2016-12-23 21:46:33   AlarmListIDs
     2016-12-23 21:46:33   AlarmListVersion RINCON_5CAAFD7AA18401400:0
     2016-12-23 21:46:27   AlarmRunning    0
     2016-12-23 21:46:27   AlarmRunningID
     2016-12-23 21:46:26   Balance         0
     2016-12-23 21:46:37   Bass            0
     2016-12-23 21:46:27   CrossfadeMode   0
     2016-12-23 21:46:33   DailyIndexRefreshTime
     2016-12-23 21:46:36   FavouritesVersion RINCON_B8E9378097A801400,1
     2016-12-23 21:46:30   GroupMute       0
     2016-12-23 21:46:30   GroupVolume     25
     2016-12-23 21:46:27   HeadphoneConnected 0
     2016-12-23 21:46:26   IsMaster        1
     2016-12-23 21:56:29   LastActionResult GetFavourites: "Kaffee am Morgen"
     2016-12-23 21:46:37   Loudness        1
     2016-12-23 21:46:34   MasterPlayer    Sonos_Bad
     2016-12-23 21:46:27   Mute            0
     2016-12-23 21:46:37   OutputFixed     0
     2016-12-23 21:46:36   PlaylistsVersion RINCON_B8E9378098B801400,3
     2016-12-23 22:01:25   QueueHash       1f6cbb399a9a0f55f22035ebf8f42374
     2016-12-23 22:01:24   QueueVersion    4
     2016-12-23 21:46:36   RadiosVersion   RINCON_B8E9378097A801400,1
     2016-12-23 21:46:27   Repeat          0
     2016-12-23 21:46:27   RepeatOne       0
     2016-12-23 21:46:27   Shuffle         0
     2016-12-23 21:46:26   SlavePlayer     []
     2016-12-23 21:46:27   SleepTimer      off
     2016-12-23 21:46:27   SleepTimerVersion
     2016-12-23 21:46:37   SubEnable       1
     2016-12-23 21:46:37   SubGain         0
     2016-12-23 21:46:37   SubPolarity     0
     2016-12-23 21:46:37   Treble          0
     2016-12-23 21:46:37   TruePlay        0
     2016-12-23 21:46:26   Volume          25
     2016-12-23 21:46:34   ZoneGroupID     RINCON_5CAAFD7AA19C01400:__
     2016-12-23 22:01:23   currentAlbum    Entspannungsmusik, Eine musikalische Traumreise
     2016-12-23 22:01:21   currentAlbumArtURI ./www/images/default/SONOSPLAYER/Sonos_Bad_AlbumArt.ERROR
     2016-12-23 22:01:23   currentAlbumArtURL http://192.168.178.62:1400/getaa?s=1&u=x-sonosapi-hls-static%3alibrary%2falbums%2fWellness_20Pur%2fEntspannungsmusik_2C_20Eine_20musikalische_20Traumreise%2f88948ce8-e97f-40eb-9fea-288c600c1ada%2f%3fsid%3d201%26flags%3d8224%26sn%3d1
     2016-12-23 21:47:34   currentAlbumArtist Martin Garrix & Bebe Rexha
     2016-12-23 22:01:23   currentArtist   Wellness Pur
     2016-12-23 21:46:26   currentNormalAudio 1
     2016-12-23 21:46:27   currentOriginalTrackNumber
     2016-12-23 21:46:27   currentSender
     2016-12-23 21:46:27   currentSenderCurrent
     2016-12-23 21:46:27   currentSenderInfo
     2016-12-23 22:01:23   currentStreamAudio 0
     2016-12-23 22:01:23   currentTitle    Traumreise
     2016-12-23 22:01:23   currentTrack    1
     2016-12-23 22:01:23   currentTrackDuration 0:16:48
     2016-12-23 22:01:23   currentTrackPosition 0:00:00
     2016-12-23 21:46:26   currentTrackProvider
     2016-12-23 22:01:23   currentTrackURI x-sonosapi-hls-static:library%2falbums%2fWellness_20Pur%2fEntspannungsmusik_2C_20Eine_20musikalische_20Traumreise%2f88948ce8-e97f-40eb-9fea-288c600c1ada%2f?sid=201&flags=8224&sn=1
     2016-12-23 21:46:26   fieldType
     2016-12-23 22:01:23   infoSummarize1  (Wellness Pur) 'Traumreise' vom Album 'Entspannungsmusik, Eine musikalische Traumreise'
     2016-12-23 22:01:28   infoSummarize2  PLAYING => (Wellness Pur) 'Traumreise' vom Album 'Entspannungsmusik, Eine musikalische Traumreise'
     2016-12-23 21:46:27   infoSummarize3  Lautstärke: 25 ~ Ton An ~ Balance: Mitte ~ Kein Kopfhörer
     2016-12-23 21:46:27   infoSummarize4
     2016-12-23 21:46:26   location        http://192.168.178.62:1400/xml/device_description.xml
     2016-12-23 22:01:23   nextAlbum       Entspannungsmusik, Eine musikalische Traumreise
     2016-12-23 22:01:23   nextAlbumArtURI ./www/images/default/SONOSPLAYER/Sonos_Bad_NextAlbumArt.ERROR
     2016-12-23 22:01:23   nextAlbumArtURL http://192.168.178.62:1400/getaa?s=1&u=x-sonosapi-hls-static%3alibrary%2falbums%2fWellness_20Pur%2fEntspannungsmusik_2C_20Eine_20musikalische_20Traumreise%2f7aa78a13-867c-41b8-a687-a517b676c944%2f%3fsid%3d201%26flags%3d8224%26sn%3d1
     2016-12-23 21:46:27   nextAlbumArtist
     2016-12-23 22:01:23   nextArtist      Wellness Pur
     2016-12-23 21:46:27   nextOriginalTrackNumber
     2016-12-23 22:01:23   nextTitle       Ein sonniger Tag am Meer
     2016-12-23 22:01:23   nextTrackDuration 0:07:52
     2016-12-23 21:46:27   nextTrackProvider
     2016-12-23 22:01:23   nextTrackURI    x-sonosapi-hls-static:library%2falbums%2fWellness_20Pur%2fEntspannungsmusik_2C_20Eine_20musikalische_20Traumreise%2f7aa78a13-867c-41b8-a687-a517b676c944%2f?sid=201&flags=8224&sn=1
     2016-12-23 22:01:23   numberOfTracks  4
     2016-12-23 21:46:26   playerType      S1
     2016-12-23 21:46:26   presence        appeared
     2016-12-23 21:46:35   roomIcon        bathroom
     2016-12-23 21:46:26   roomName        Bad
     2016-12-23 21:46:26   roomNameAlias   Bad
     2016-12-23 21:46:26   saveRoomName    Bad
     2016-12-23 21:46:26   serialNum       5C-AA-FD-7A-A1-9C:C
     2016-12-23 21:46:26   softwareRevision 7.0
     2016-12-23 21:46:27   state           appeared
     2016-12-23 22:01:28   transportState  PLAYING
Attributes:
   alias      Bad
   generateInfoSummarize1 <NormalAudio><Artist prefix="(" suffix=")"/><Title prefix=" '" suffix="'" ifempty="[Keine Musikdatei]"/><Album prefix=" vom Album '" suffix="'"/></NormalAudio> <StreamAudio><Sender suffix=":"/><SenderCurrent prefix=" '" suffix="' -"/><SenderInfo prefix=" "/></StreamAudio>
   generateInfoSummarize2 <TransportState/><InfoSummarize1 prefix=" => "/>
   generateInfoSummarize3 <Volume prefix="Lautstärke: "/><Mute instead=" ~ Kein Ton" ifempty=" ~ Ton An" emptyval="0"/> ~ Balance: <Balance ifempty="Mitte" emptyval="0"/><HeadphoneConnected instead=" ~ Kopfhörer aktiv" ifempty=" ~ Kein Kopfhörer" emptyval="0"/>
   generateVolumeSlider 1
   getAlarms  1
   group      Bad
   icon       icoSONOSPLAYER_icon-S1.png
   minVolume  0
   model      Sonos_S1
   room       Sonos
   sortby     1
   stateVariable Presence
   userReadings Favourites:LastActionResult.*?GetFavouritesWithCovers.* { if (ReadingsVal("Sonos_Bad", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Radios:LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal("Sonos_Bad", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, Playlists:LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal("Sonos_Bad", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }, currentTrackPosition:LastActionResult.*?GetCurrentTrackPosition.* { if (ReadingsVal("Sonos_Bad", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1; } }


Im meinem Resident Modul brauch ich ja diesen Befehl: set Sonos_Bedroom StartFavourite Evening%%20Chill

Anstatt "Evening Chill" soll ja meine Playlist oder halt eine bestimmte CD abgespielt werden.

Muss ich mit der App das Album erst zu Sonos Favoriten oder Sonos Playliste hinzufügen wählen ?
Wie sehe ich dann die Playlist in FHEM.

So ganz verstehe ich da noch nicht die Zusammenhänge.

Grüße,
Visionsurfer

Reinerlein

Hallo Visionsurfer,

du kannst deine Alben sowohl als Playlist als auch als Favorit ablegen (aber nicht nur im Amazon Prime Bereich, sondern im Sonos-Verwalteten Bereich) Das unterscheidet sich dann nur in deinem Aufruf an den Player.

Verfügbare Playlisten kannst du mit

get Sonos_Bad Playlists
verfügbare Favoriten mit

get Sonos_Bad Favourites
abfragen. Das Ergebnis landet jeweils asynchron im Reading "LastActionResult".

Dann gibt es die entsprechenden Startmethoden dazu:

set Sonos_Bad StartPlaylist <PlaylistNameOhneLeerzeichen>
bzw:

set Sonos_Bad StartFavourite <FavoritenNameOhneLeerzeichen>


Welche Variante du verwendest bleibt dir überlassen, das hat eher was mit deiner persönlichen Vorliebe der Ordnung innerhalb von Sonos zu tun...

Grüße
Reiner

visionsurfer

Hi,

ok. Cool. Danke. Jetzt hab ich es verstanden. Ich hatte die ganze Zeit gedachte ich kann es direkt aus Prime Music machen.
Nun hab ich mal eine Playliste in der Sonos App angelegt und dort dann meine gewünschten Alben hinzugefügt und jetzt funktioniert es auch super.

Wie bekommt man es hin, das z.B. wenn ich schlafen gehen will, die Musik langsam ausgeblendet wird ?
Also z.B. innerhalb von 5 Minuten immer leiser wird und dann ganz gestoppt wird ?

Geht sowas ?

Ich habe im Wiki etwas von Crossfademode gelesen. Leider steht nicht wirklich dabei, was der kann und wie man das einsetzen kann ?
Oder gibt es eine andere Möglichkeit ?

Grüße,
Visionsurfer

Reinerlein

Hi Visionsurfer,

da gehen nur drei von Sonos vordefinierte Rampen.
Hier mal der Auszug aus dem Wiki dazu:

Volume <VolumeLevel> [RampType]: Setzt die Lautstärke auf den angegebenen Wert. Der kann eine relative Angabe mittels + oder - sein. Dann wird um die entsprechende Höhe erhöht oder verringert. Wird eine relative Lautstärke angegeben, so kann diese mit einem folgenden Prozentzeichen als anteilige Änderung ausgeführt werden (z.B. +20%). Liefert als Ergebnis die neue Lautstärke.
Als optionaler Parameter ist ein Ramptype zulässig. Mögliche Werte sind 1 (SLEEP_TIMER_RAMP_TYPE), 2 (AUTOPLAY_RAMP_TYPE) und 3 (ALARM_RAMP_TYPE). Die Werte entsprechen verschiedenen Mustern bei der Geschwindigkeit nach oben oder unten.

Diese Rampen sind aber eher kurz (wenige Sekunden)...

Natürlich könntest du auch selber eine langsame Verringerung der Lautstärke bauen, solltest aber der Perfomance zuliebe nicht zuviele Änderungen der Lautstärke in zu kurzer Zeit machen.
Aber sowas wie "Lautstärke alle 30 Sekunden um 5 Einheiten verringern" sollte klappen...

Grüße
Reiner

rr725

hallo, hab mich durch zig beiträge gewühlt, aber nichts gefunden, oder übersehen.
ich hab da einmal eine frage....ich hab zwei sonos play 5 als stereopaar definiert.
an einem der beiden ist via klinkenstecker etwas angeschlossen

lautsprecher sind in fhem integriert und funktionieren tadellos.

besteht die möglichkeit mittels "set" den eingang auf line-in zu setzen !?

im wiki find ich auch nichts dazu...hm.......

vielen dank im voraus

Reinerlein

Hi rr725,

im Wiki unter "PlayURI" steht dazu schon was:)
Du kannst einfach einen Fhem-Sonos-Devicenamen angeben.

Also:

set Sonos_Bad PlayURI Sonos_Kueche
Danach spielt das Bad den Audio-Eingang der Küche ab. Die Küche selbst bleibt dabei stumm.

Soll das auf demselben Player erfolgen, so musst du

set Sonos_Kueche PlayURI Sonos_Kueche
angeben.

Grüße
Reinerlein

rr725

au mann......das war´s- es funktioniert.
vielen, vielen dank. du bist der beste !!!!


dogexan

Hat jemand mal wie im Wiki Beschrieben die "Anrufsignalisierung per MP3 bei einem Anruf" sauber ans laufen zu bekommen?

Ich versche mich momentan an der Variante:

Beispiel für beide Varianten beim Telefonanruf gleichzeitig

define fritzBox_anrufstartring_notify notify fritzBox:.*ring set Sonos_Wohnzimmer VolumeSave 15 \
      ;; set Sonos_Wohnzimmer PlayURITemp \\Server\Audio\RingRingRing.mp3 30
define fritzBox_anrufstartcall_notify notify fritzBox:.*call set Sonos_Wohnzimmer VolumeSave +0
define fritzBox_anrufende_notify notify fritzBox:.*disconnect set Sonos_Wohnzimmer VolumeRestore

Folgende Situation möchte ich umsetzten:
Ein Anruf geht ein. Via "CALLMONITOR" (Im Wikibeispiel fritzBox genannt) geht das Event ring ein. Daraufhin möchte ich eine mp3 Datei abspielen.
Wird der Hörer abgenommen tritt via CALLMONITOR das Event connect auf (im Wikibeispiel call genannt). Nun soll der Ton ausgeschaltet werden.
Ist das Telefonat beendet und es wurde aufgelegt tritt das Event disconnect auf und der Ton bzw. was vor dem Telefonat lief soll wieder abgespielt werden.

Mit dem Wikibeispiel ist dies leider nicht ganz umzusetzten.

Mit PlayURITemp soll nachdem abspielen der mp3 Datei das zuletzt abgespielte wieder laufen. Das Problem an der Sache ist, dass dies schon wieder wärend des Telefonats geschieht nach dem die mp3 Datei zuende ist. Der Ton bleibt also nur solange aus bis die mp3 Datei im Hintergrund zuende ist. :-\

Hat jemand das erfolgreich laufen oder kann mir jemand einen Tipp geben?

Vielen Dank im Voraus

Gruß Alex

Reinerlein

Hi Alex,

das Beispiel ist nur inspirativ gedacht (falls es dort Wort geben sollte :) ), und passt auf dein Ziel nicht ganz.
Ich hatte im Beispiel tatsächlich nur eine Anrufsignalisierung angedacht, und musste deshalb für die Lautstärkewiederherstellung auch auf "call" reagieren, da "disconnect" sowohl beim Beenden von ausgehenden als auch bei eingehenden Telefonaten erzeugt wird.

Du kannst mal folgendes versuchen:
- Bei ring Stoppst du die Wiedergabe und startest eine temporäre Wiedergabe mittels PlayURITemp
- Bei connect Stoppst du die Wiedergabe (das ist entweder noch dein Temp-Dingens, oder das ist schon fertig, und deine Wiedergabe ist sowieso schon gestoppt
- Bei Disconnect startest du die Wiedergabe wieder. Dass bedeutet aber, dass deine temporäre Wiedergabe kurz genug sein sollte, da sie jetzt spätestens fertig sein muss.

Mein Beispiel hat im Hintergrund die Wiedergabe weiterlaufen lassen, aber eben leiser, wegen des Telefonats. Darum die Arbeit mit VolumeSave und VolumeRestore...

Grüße
Reiner

Benni

<offtopic>
Zitat von: Reinerlein am 28 Dezember 2016, 19:59:50
falls es dort Wort geben sollte :)

Duden kennt es jedenfalls: http://www.duden.de/rechtschreibung/inspirativ

wobei die Erklärung mit "durch Inspiration wirkend" m.E. nicht ganz das ist, was ausgedrückt werden sollte.
Besser gepaßt hätten wohl eher "inspirierend" oder "zur/als Inspiration"

;D

</offtopic>

Reinerlein

<offtopic>
Hi Benny,

jetzt wo man es liest, klingt inspirierend auch viel logischer bzw. normaler :)
Naja, manchmal hat man komische Verwicklungen im Hirn :o

Reiner
</offtopic>

dogexan

Zitat
das Beispiel ist nur inspirativ gedacht (falls es dort Wort geben sollte :) ), und passt auf dein Ziel nicht ganz.
Ich hatte im Beispiel tatsächlich nur eine Anrufsignalisierung angedacht, und musste deshalb für die Lautstärkewiederherstellung auch auf "call" reagieren, da "disconnect" sowohl beim Beenden von ausgehenden als auch bei eingehenden Telefonaten erzeugt wird.

Du kannst mal folgendes versuchen:
- Bei ring Stoppst du die Wiedergabe und startest eine temporäre Wiedergabe mittels PlayURITemp
- Bei connect Stoppst du die Wiedergabe (das ist entweder noch dein Temp-Dingens, oder das ist schon fertig, und deine Wiedergabe ist sowieso schon gestoppt
- Bei Disconnect startest du die Wiedergabe wieder. Dass bedeutet aber, dass deine temporäre Wiedergabe kurz genug sein sollte, da sie jetzt spätestens fertig sein muss.

Mein Beispiel hat im Hintergrund die Wiedergabe weiterlaufen lassen, aber eben leiser, wegen des Telefonats. Darum die Arbeit mit VolumeSave und VolumeRestore...

Danke für deine schnelle Antwort Reiner :)

Ich habe nun folgende notify Defintionen laufen:
CALLMONITOR:.*ring set Sonos_Wohnzimmer Stop ; set Sonos_Wohnzimmer PlayURITemp \\IP\SonosSpeak\Klingelton.mp3 15
CALLMONITOR:.*connect set Sonos_Wohnzimmer Stop
CALLMONITOR:.*disconnect sleep 1 ; set Sonos_Wohnzimmer Play

ohne das sleep 1 ging es nicht, ist aber auch nicht schlimm.

Diese Konstellation funktioniert auch Prima wenn vor dem Anruf auch Musik oder was auch immer läuft. :)

2 Probleme habe ich jetzt aber noch :-\

1. Wenn der Anrufer auflegt bevor ich ans Telefon gehen kann wird natürlich nochmal der Klingelton abgespielt. Es wäre also nicht schlecht wenn das Abspielen abgebrochen werden könnte wenn der Anrufer auflegt. Zumindest ein 2. Mal abspielen möchte ich gerne vermeiden.

2. Musik oder was auch immer ist gerade aus. Es klingelt wieder -->gehe dran und telefoniere --> ich lege auf --> Musik wird durch den "Play" Befehl im disconnect Notify wieder abgespielt obwohl vorher keine lief. :o

Hast du Reiner oder jemand anderes dafür noch eine Lösung parat?

Besten Dank

Alex

visionsurfer

Hallo,

ich nutze relativ viel die Sonos Speak Funktion. Dabei werden ja dann immer kleine Dateien erzeugt und in dem angegebenen Verzeichnis gespeichert.
Kann man eigentlich irgendwie erreichen, dass diese ganzen Dateien nach einer gewissen Zeit automatisch gelöscht werden ?
Ich würde gerne das System halbwegs sauber halten.

Grüße,
Visionsurfer