Sonos Modul

Hallo,

kann ich nicht sagen, ich habe es nicht verstanden…

Was meinst Du denn mit „Musikordner“?
Ein Verzeichnis, dass im Netzwerk verfügbar ist?
Oder was lokales?
Oder ist das was im IPS, was ich noch nicht kenne?

Gruß,
Thorsten

kann ich nicht sagen, ich habe es nicht verstanden…

Ein Verzeichnis das im Netzwerk verfügbar ist.

Was ich mir auch vorstellen könnte wäre ein eigenes modul das dei Daten von den Sonos Modulen wie
IP Adresse und Rincon ausliest und eine eigen Variable anlegt. Dort kann man dann z.b. sonos Box in der Küche auswählen und dort wird dan der Tietel oder das Album wiedergegeben.
Ich habe mich bis jetzt noch nicht mit dem erstellen von Modulen beschäftigt. Also könnte es noch etwas dauern bis ich ein eigenes Modul erstellt habe.

Ich habe die Ursache für das nichtanzeigen des Covers bei Radio TuneIn herausgefunden. Da alle 3sec. Daten an den
Serverdienst der die CoverUri bereitstellt gesendet werden, blockt warscheinlich die Firewall des Server die anfrage so ca nach 6h ab.
Lösung: Die Anfrage an den Server nur bei Senderwechsel senden.
Habe das script vom Modul angepasst wenn es Jemand interessiert.

Hi,

schick es mit doch mal, das sollte für alle interessant sein.
Ich schau es mir mal an, und versuche es generell einzubauen.

Gruß,
Thorsten

Lösung: Die Anfrage an den Server nur bei Senderwechsel senden.

Also ich hab die Probleme bisher nicht. Aber das fänd ich jetzt nicht so prickelnd. SWR3 ändert das Cover mit verschiednen Sendungen. Dann bekäm ich im lauf des Tages keine Änderungen mehr mit.

Evtl wäre hier stündlich kurz nach den Nachrichten (ca 5 Min) besser. Dann wärs nur kurz nach den Nachrichten nicht aktuell.

Wäre es möglich für das Status Update das Intervall manuell einstellbar zu machen?
oder wenn der Player läuft, alle 5 sekunden, und wenn er aus ist alle 60 sekunden?

Moin Freunde!

Habe ständig Probleme hiermit:

Fatal error: Uncaught exception ‚Exception‘ with message ‚Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION)‘ in /var/lib/symcon/modules/SymconSonos/Sonos/sonosAccess.php:552
Stack trace:
#0 /var/lib/symcon/modules/SymconSonos/Sonos/sonosAccess.php(282): SonosAccess->processSoapCall(’/MediaRenderer/…’, ‚urn:schemas-upn…‘, ‚Pause‘, Array)
#1 /var/lib/symcon/modules/SymconSonos/Sonos/module.php(481): SonosAccess->Pause()
#2 /var/lib/symcon/scripts/__generated.inc.php(252): Sonos->PlayFilesGrouping(Array, Array, 30)
#3 /var/lib/symcon/scripts/19034.ips.php(11): SNS_PlayFilesGrouping(22691, Array, Array, 30)
#4 {main}
thrown in /var/lib/symcon/modules/SymconSonos/Sonos/sonosAccess.php on line 552

Habe jetzt mal alle Instanzen gelöscht, das Modul, eine Instanz hinzugefügt mittels IP und bei Ausführung kommt immer dieser Fehler.
IPS 4.0 - 63324d97b597 auf einem RPI 2

mein Code den ich benutzt habe:

<?
$Uhrzeit = date("H:i");  // Stunde:Minute:Sekunde
$aktuelle_Temperatur = GetValueFloat(40886 /*[Wunderground\Temperatur]*/);
$bedingung = GetValueString(23549 /*[Wunderground\Wetterbedingung]*/);
$feutigkeit = GetValueInteger(37904 /*[Wunderground\Luftfeuchtigkeit]*/);
SNS_PlayFilesGrouping(22691 /*[Musik\Schlafzimmer]*/, array (27869 => array ("volume" => 30),
																				 29675 => array ("volume" => 30),
																			    50971 => array ("volume" => 30)),
Array(IVNTTS_saveMP3(57700 /*[Musik\Ivona]*/,"Guten Morgen! Es ist: ".$Uhrzeit."Uhr. Das aktuelle Wetter in kurzer Zusammenfassung.
 Die aktuelle Temperatur beträgt: ".$aktuelle_Temperatur."Grad.
 Die Wetterbedinungen sind: ".$bedingung.".
 Die Luftfeuchtigkeit beträgt: ".$feutigkeit."Prozent")), 30);
?>

Edit:
Kann es sein das der Fehler auftritt wenn SNS_PlayFilesGrouping nicht der Gruppen „Chef“ ist?

Edit2:
Fehler wohl gefunden! Die Instanz muss CoordinatorInstance aktiviert haben, eigentlich logisch :smiley:

Hallo Thorsten,

erst nochmal vielen Dank für dein Super Modul. Das Modul war ein Grund das ich mein Sonos System um einige Player erweitert haben. :smiley:

Ich habe aber noch mal eine Frage bzw. ein Problem.
Ich bekomme sporadisch vielleicht so ca. 5-mal am Tag folgende Fehlermeldung

IPS-Err-PHP  2016-07-31 17:01:11.641  Warning: SoapClient::__doRequest(): connect() failed: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.

   Error in Script C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on Line 546
  134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
   37 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
      in IPSLogger_PhpErrorHandler
      in __doRequest
  546 in modules\SymconSonos\Sonos\sonosAccess.php (call __soapCall)
   39 in modules\SymconSonos\Sonos\sonosAccess.php (call processSoapCall)
  104 in scripts\38685.ips.php (call BrowseContentDirectory)
IPS-Err-PHP  2016-07-31 17:01:11.654  Error: Uncaught exception 'Exception' with message 'Error during Soap Call: Could not connect to host HTTP' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:554
Stack trace:
#0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(39): SonosAccess->processSoapCall('/MediaServer/Co...', 'urn:schemas-upn...', 'Browse', Array)
#1 C:\IP-Symcon\scripts\38685.ips.php(104): SonosAccess->BrowseContentDirectory('R:0/0')
#2 {main}
  thrown
   Error in Script C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on Line 554
  134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
   33 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
  121 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_PhpErrorHandler)
      in IPSLogger_PhpFatalErrorHandler

Der Fehler tritt nur bei einem Player auf obwohl der Player ohne Probleme und Aussetzte Funktioniert.
Hast zu vielleicht eine Idee woran das liegen könnte?

Gruß Stephan

Hallo,

ja, habe ich.

An der im Fehler angegebenen Stelle wird der SOAP Call zur Box in ausgeführt. Der scheint auf einen Timeout zu laufen.
Ich habe leider keine Ahnug auf was das im Default steht, und auch gerade keine Zeit zu suchen.
Evtl. kann hier ja jemand anders aushelfen.

Da scheint es aber so zu sein, dass Diese eine Box manchmal für den Soap Call zu langsam antwortet.
Evtl. dauert da das „SonosAccess->BrowseContentDirectory(‚R:0/0‘)“ zu lange oder so.

Wie man das lösen kann, bin ich momentan überfragt.
Klar, könnte man einen hohen wert für den Timeout hinterlegen, aber das finde ich nicht so gut.

Gruß,
Thorsten

Hallo Thorsten,

ich habe immer den Fehler:


Fatal error:  Uncaught exception 'Exception' with message 'Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION)' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:552
Stack trace:
#0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(282): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'Pause', Array)
#1 C:\IP-Symcon\modules\SymconSonos\Sonos\module.php(407): SonosAccess->Pause()
#2 C:\IP-Symcon\scripts\__generated.inc.php(427): Sonos->PlayFiles(Array, 50)
#3 C:\IP-Symcon\scripts\38698.ips.php(24): SNS_PlayFiles(35488, Array, 50)
#4 {main}
  thrown in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on line 552
Abort Processing during Fatal-Error: Uncaught exception 'Exception' with message 'Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION)' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:552
Stack trace:
#0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(282): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'Pause', Array)
#1 C:\IP-Symcon\modules\SymconSonos\Sonos\module.php(407): SonosAccess->Pause()
#2 C:\IP-Symcon\scripts\__generated.inc.php(427): Sonos->PlayFiles(Array, 50)
#3 C:\IP-Symcon\scripts\38698.ips.php(24): SNS_PlayFiles(35488, Array, 50)
#4 {main}
  thrown
   Error in Script C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on Line 552

Durch Zufall habe ich herausgefunden, wenn ich mit:

SNS_PlayFiles($SonosInstID , array($Jingle , IVNTTS_saveMP3($IvonaInstID,$Text_1)) , $Vol);

eine Durchsage auf einem Player absetzen will und sich dieser in einer Gruppe befindet (nicht als Gruppenmaster), nichts weiter passiert und der o.g. Fehler kommt. Dabei spielt es keine Rolle, ob in der Gruppe gerade etwas abgespielt wird, oder nicht.

Nehme ich den Player via WebFront aus der Gruppe, funktioniert auch der „SNS_PlayFiles“-Befehl. Ich dachte der Befehl nimmt den Player, falls erforderlich, automatisch aus einer Gruppe, spielt die Datei ab, und fügt ihn dann wieder der vorhergehenden Gruppe hinzu.

Gruß Proxima

Hallo,

und mit dieser Info bin ich der Ursache des Fehlers auf die Schliche gekommen.

Immer wenn eine Box in einer Gruppe ist, meldet GetTransportInfo() zurück, sie wäre im „modus“ Play, egal was die Gruppe sagt.

Das hat dann aber nur zu dem Fehler geführt, wenn die Lautstärke geändert werden sollte…

Ich habe jetzt eingebaut, dass alternativ die Box zuerst aus der Gruppe genommen wird, falls sie in einer ist.

Ich hoffe das hat nichts anderes kaputt gemacht. Hatte leider nicht viel Zeit zum testen.

Update ist jetzt online.

Gruß,
Thorsten

Hi Thorsten,

ich will aktuell auch in IPS-View von der Sonos-Library zu Deinem Modul wechseln.

Leider habe ich hier das „schlichte“ Problem, dass die SONOS-Playlist zwar alle als Button im WebFront angezeigt werden, ich dies scheinbar aber nicht für IPS-View nutzen kann. Die Playlist-Variable ist ja „entsprechen der SONOS-Logik“ leer. Wie kann ich denn an die Playlisten kommen?

Ciao
herbertf

Hallo,

die geladenen Playlisten sind als Assoziation für das Profil „Playlist.SONOS“ verfügbar.
Wie man das in IPS-View verwendet, kann ich Dir nicht so richtig sagen…

Gruß,
Thorsten

Guten Morgen,

versuche den Sleeptimmer durch ein Ereignis zu überschreiben.
Das geht auch, wird aber nach ca. 5sec wieder zurückgesetzt.

Gruß Gerold

Sonos_Sleeptimmer_001.pdf (76.8 KB)

Moin,

wie überschreibst Du den denn?
Mit der Funktion SNS_SetSleeptimer sollte es gehen.
Direktes Schreiben der Variabken hat keine Wirkung.

Gruß,
Thorsten

Auszug aus meinem Modul LCN2Sonos,
Immer wenn der Bewegungsmelder triggert, wird der Speeptimer auf 6 Minuten gesetzt.

<?
$SonosId = IPS_GetProperty(IPS_GetParent($_IPS["SELF"]), "Sonos_ID");

if (@IPS_GetObjectIDByName("Sleeptimer", $SonosId)){
    $ip = IPS_GetProperty($SonosId, "IPAddress");
    if (Sys_Ping($ip, 1000) == true) {
        $s_steuer = GetValue(IPS_GetObjectIDByName("Timer", IPS_GetParent($_IPS["SELF"])));
        $s_bmi_aktiv = GetValue(IPS_GetObjectIDByName("Timer", IPS_GetParent($_IPS["SELF"])));
        include_once("../modules/SymconSonos/Sonos/sonosAccess.php");

      	if ($s_bmi_aktiv  == 1){
      		$sonos = new SonosAccess($ip); //Sonos ZP IPAdresse
      		$sonos->Play();
      		$sonos = new SonosAccess($ip); //Sonos ZP IPAdresse
      		$sonos->SetSleeptimer(0,6,0);
      	}
    }
}
?>

Ich benutzte jetzt noch eine zusätzliche Variable für die Darstellung von einem Slider für einer Fortschrittsbalken siehe Balken unter Cover.

Dazu habe ich mir eine weitere Variable PositionP erstellt vom Typ Integer. Darauf habe ich dann ein Ereignis gelegt das bei Variablenaktualisierung der Variable Position ausgeführt wird.

Das Skript berechnet einfach den Prozentwert und schreibt diesen in die Variable.


$Position = GetValue(31801 /*[Geräte\Heimkino\Audio\Sonos\Sonos Wohnzimmer\Position]*/);
$TrackDuration = GetValue(12947 /*[Geräte\Heimkino\Audio\Sonos\Sonos Wohnzimmer\TrackDuration]*/);
if (!$Position == "")
{
$Position = explode(":", $Position);
$TrackDuration = explode(":", $TrackDuration);
$PositionSec = ($Position[0]*3600)+($Position[1]*60)+$Position[2];
$TrackDurationSec = ($TrackDuration[0]*3600)+($TrackDuration[1]*60)+$TrackDuration[2];
$PositionP = round(($PositionSec/$TrackDurationSec*100), 0);
SetValue(54146 /*[Geräte\Heimkino\Audio\Sonos\Sonos Erweiterte Variablen\Sonos Wohnzimmer PositionP]*/, $PositionP);

Vielleicht könnte man das ja noch in das Modul einbauen ansonsten kann man das aber ja auch schnell händisch ergänzen wer es braucht.

Zitat aus der Quelle:

API für alle
Ab dem kommenden Frühjahr soll Entwicklern laut Ernsting zudem eine offizielle Software-Schnittstelle zur Verfügung stehen. Darüber lässt sich das Musikverteilsystem dann beispielsweise auf einfache Wiese in Smart-Home-Infrastrukturen integrieren.

Es gibt aktuell bereits eine ganze Reihe von Smart-Home-Systemen, die Sonos-Geräte steuern könnnen; Sonos hatte diese Einbindung auf breiter Basis bislang aber lediglich geduldet und nicht offiziell unterstützt. Mit der neuen Software-Schnittstelle soll nun nicht nur die Integration vereinfacht werden. Es stünden dann laut Ernsting auch Funktionen bereit, die über die bislang übliche reine Wiedergabe-Steuerung hinausgehen – etwa um Gruppierungen zu nutzen. (nij)

Grüße,
Chris

Hatte ich die Tage auch gelesen und war hocherfreut.
Die Einschränkung dabei: die volle Einbindung von Sonos wird wohl nur mit einem Crestron-System möglich sein (hab ich auch zu Hause, bin damit aber ziemlich in der Minderheit in DE), für alle anderen sind wohl nur die Basis-Funktionen verfügbar.

http://ce-pro.eu/2016/08/sonos-integrates-crestron/

Hallo Zusammen,

habe aktuell ein Problem mit dem Sonos Modul ohne das ich irgendetwas geändert habe.
Beim Versuch mit SNS_PlayFiles eine Sounddatei abzuspielen bekomme ich folgende Fehlermeldung

Fatal error:  Uncaught exception 'Exception' with message 'Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION)' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:552
Stack trace:
#0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(293): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'Play', Array)
#1 C:\IP-Symcon\modules\SymconSonos\Sonos\module.php(441): SonosAccess->Play()
#2 C:\IP-Symcon\scripts\__generated.inc.php(203): Sonos->PlayFiles(Array, '0')
#3 C:\IP-Symcon\scripts\54198.ips.php(9): SNS_PlayFiles(15713, Array, '0')
#4 {main}
  thrown in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on line 552
Abort Processing during Fatal-Error: Uncaught exception 'Exception' with message 'Error during Soap Call: UPnPError s:Client 701 (ERROR_AV_UPNP_AVT_INVALID_TRANSITION)' in C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php:552
Stack trace:
#0 C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php(293): SonosAccess->processSoapCall('/MediaRenderer/...', 'urn:schemas-upn...', 'Play', Array)
#1 C:\IP-Symcon\modules\SymconSonos\Sonos\module.php(441): SonosAccess->Play()
#2 C:\IP-Symcon\scripts\__generated.inc.php(203): Sonos->PlayFiles(Array, '0')
#3 C:\IP-Symcon\scripts\54198.ips.php(9): SNS_PlayFiles(15713, Array, '0')
#4 {main}
  thrown
   Error in Script C:\IP-Symcon\modules\SymconSonos\Sonos\sonosAccess.php on Line 552

Hat jemand eine Idee.

Gruß Stephan

Hallo zusammen,

ich haben den Fehler gefunden. Es lag an der Ordner bzw. Dateifreigabe.
Es geht wieder alles. :smiley:

Gruß Stephan