br_sonos

ahaaa cool danke raketenschnecke, dann werd ich das probieren. yep die sind fest und v^fuer immer so :-)) werd einfach eine der ips verwenden…

Hallo Benjamin,
habe gerade mal die Funktion RampToVolume mit folgendem Script getestet:

<?

require ("functions.inc.php"); // use PHPSonos.inc.php here
// Player has no configured input
$sonos = new PHPSonos("192.168.2.134"); //Sonos ZP IPAdresse
//$sonos = new PHPSonos(br_objGetVar($ParentID,"SONOS_IP")); //Sonos ZP IPAdresse

// ****************************** Volume Ramp EXAMPLE****************************/

echo "RampTime: ". $sonos->RampToVolume("SLEEP_TIMER_RAMP_TYPE",40) . "
";


?>

Bekomme jedoch nur ne Fehlermeldung:

Fatal error: Uncaught exception 'Exception' with message 'Error sending command: HTTP/1.1 500 Internal Server Error CONTENT-LENGTH: 347 CONTENT-TYPE: text/xml; charset="utf-8" EXT: SERVER: Linux UPnP/1.0 Sonos/15.4-44250 (ZP120) Connection: close s:ClientUPnPError' in C:\IP-Symcon\scripts\PHPSonos.inc.php:2263
Stack trace:
#0 C:\IP-Symcon\scripts\PHPSonos.inc.php(739): PHPSonos->sendPacket('POST /MediaRend...')
#1 C:\IP-Symcon\scripts\52605.ips.php(10): PHPSonos->RampToVolume('SLEEP_TIMER_RAM...', 40)
#2 {main} thrown in C:\IP-Symcon\scripts\PHPSonos.inc.php on line 2263

Ist die Funktion noch nicht implementiert?

Grüße, Jürgen

Hi Immergut,
RampToVolume ist eigentlich implementiert (und funktioniert bei mir auch). :slight_smile: ?
Grüße, Benjamin

Danke für die Info. Kannst du mal im obigen Post in mein Script schauen und mir sagen, was die besagte Fehlermeldung bedeutet und wo der Fehler liegt?

Gruß, Jürgen

ich hab mich damit auch schon ein paar mal versucht, klappt bei mir auch nicht. Daher hab ich mir ne Funktion gebaut die die Lautstärke hoch und runter fährt

Danke Raketenschnecke.
Hast du in deiner Funktion verschiedene Lautstärkelevel gesetzt und die mit IPS_Sleep getrennt, oder wie hast du das gemacht?
Vielleicht hat Benjamin ja auch noch eine Idee, woran es bei uns hängt und RampToVolume nicht geht?

Grüße, Jürgen

Hi Immergut,

ganz dicht dran

hier meine quick-and-dirty Fade-Function:

übergeben werden die Sonos-IP, Volume Ist-Wert und Volume Soll-Wert,

anpassen solltest Du die "$s1_volume_id " in der Funktion (oder die Funktion anpassen :D)


// Fade-Function +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function VolumeFade($Sonos_IP, $Ist, $Ziel)
{
	$sonos = new PHPSonos($Sonos_IP);
	$s1_volume_id = 37141 /*[Sonos II\Schlafen\Volume]*/ ;
   
	if ($Ist < $Ziel) // Volume Fade up
	{
		$delta = ($Ziel - $Ist );
		for ($count = 1; $count <= ($delta + 1); $count++)
		{
			//setValueInteger($s1_volume_id, $Ist ++);
			$sonos->SetVolume($Ist ++);
			IPS_sleep(30);
		}
	}
	if ($Ist > $Ziel) // Volume Fade down
	{
		$delta = ($Ist - $Ziel);
		for ($count = 1; $count <= ($delta); $count++)
		{
		   //setValueInteger($s1_volume_id, $Ist --);
	      $sonos->SetVolume($Ist --);
			IPS_sleep(200);
		}
	}
	setValueInteger($s1_volume_id, $Ist);
}

die IPS_Sleep-Phasen würde ich nicht oder nur geringfügig anpassen - sonst kann das Script schnell mal in einen Time-Out laufen (Stichwort "Max. Scriptlaufzeit)

Hum, die lustigen Sonos Kisten bestehen wohl in den letzten Firmware-Versionen auf ein paar mehr Parameter. :mad:

So sollte es klappen (in die PHPSonos einbauen), wobei man mit der Ramp Funktion schon ein wenig experimentieren muss um das gewünschtes Ergebnis zu bekommen. :smiley:

	public function RampToVolume($ramp_type, $volume) //added br // added soap parameters 20111021
	{


$header='POST /MediaRenderer/RenderingControl/Control HTTP/1.1
HOST: '.$this->address.':1400
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:RenderingControl:1#RampToVolume"
';
$xml='<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body><u:RampToVolume xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1"><InstanceID>0</InstanceID><Channel>Master</Channel><RampType>'.$ramp_type.'</RampType><DesiredVolume>'.$volume.'</DesiredVolume>
<ResetVolumeAfter>false</ResetVolumeAfter><ProgramURI></ProgramURI>
</u:RampToVolume></s:Body></s:Envelope>';
$content=$header . 'Content-Length: '. strlen($xml) .'

'. $xml;


		return (int) $this->sendPacket($content);

	}

Grüße, Benjamin

Danke für eure Antworten. Werde die Sachen mal ausprobieren.

Hallo zusammen,

welches ist hier die letzte stabile Version? Ich habe wohl beim Lesen des Threads anscheinend eine falsche erwischt - bekomme bei Webradio immer noch den „Devision by Zero“ Fehler. Kann noch mal jemand die letzte Version bereitstellen, die ordentlich läuft?

Dankeschön!

Christoph

Hi Christoph,
starte mal mit dieser Testversion http://www.ip-symcon.de/forum/f53/br_sonos-14938/index10.html#post133623 (vom 26.09.2011) Die aktuellen Versionen sind auch immer im Wiki verlinkt.
Viele Grüße, Benjamin

Hallo zusammen,

ganz kurz am Anfang: Ich bin IPS und Sonos/Sonos br Anfänger und habe das Script zur Sonos-Steuerung gestern Abend zum ersten mal installiert.
Soweit klappt alles sehr gut! Eine echt tolle Arbeit!

Was mir allerdings heute Morgen aufgefallen ist (habe deswegen verschlafen :D):
Sonos br scheint irgendwie in den normalen Sonos Wecker einzugreifen. Das äußert sich darin das der Wecker zwar wie gewünscht startet, allerdings mit sehr geringer Lautstärke (zufällig, irgendwas zwischen 2 und 5% Lautstärke) und damit unhörbar ist.
Das hier ist im Log (Wecker-start ist 9:38, Lautstärke des Weckers und des Sonos auf etwa 30% gestellt)

Seltsam, oder?
Irgendwas scheint den Wecker dann direkt ab Start auf 4% zu stellen (im Sonos-Wecker ist aber 30% eingestellt, auch ein verändern des Wertes bringt nichts)!
Hab ihr eine Idee was das sein könnte? Hab ihr den Fehler auch?

Viele Grüße und schon mal vielen Dank!
Gruss
Micha

Hallo Micha,
Herzlich Willkommen in der IPS und der Sonos Welt! :wink:

Was mir allerdings heute Morgen aufgefallen ist (habe deswegen verschlafen :D):

Seltsam, oder?
Irgendwas scheint den Wecker dann direkt ab Start auf 4% zu stellen (im Sonos-Wecker ist aber 30% eingestellt, auch ein verändern des Wertes bringt nichts)!
Hab ihr eine Idee was das sein könnte? Hab ihr den Fehler auch?

Was passiert:
(ich habe das gerade mehrmals komplett nachgestellt… ) Das Problem ist (wie Du ja vermutet hast) br_sonos_read liest eine neue Lautstärke, schreibt sie in eine Var und br_sonos_update sendet dieses Update an den Player. Leider erhält man während das Ramps (also dem Faden der Lautstärke beim Wecker) am Anfang den auch richtigen, kleinen Wert und dieser wird dann am Sonos Gerät gesetzt. Der Effekt ist der sofortige Abbruch des Ramps und eine zufällige Lautstärke die davon abhängt, wann br_sonos_read zufällig gelesen hat. :o :mad: Das Ergebnis ist insbesondere bei hoher Weckerlautsärke dann bei entsprechd kurzem Abfragetimer ein recht kleiner Lautstärkewert. :eek:

Warum prüft br_sonos_update nicht, ob gerade ein Volume Fade läuft?
Ob Jemand bewusst am Webfront oder über Ändern der Variablenlautstärke die Lautstärke beeinflussen möchte oder ob dies einfach nur der aktuelle Zustand ist prüfen die Skripte derzeit nicht (die Logik bilden ja auch zwei verschiedene Skripte). Ich hab gerade im Devicespy die Events geprüft, darüber erkennt man auch keinen Ramp/ Fade.

Fazit:
Das Verhindern des Problems ist sicher möglich, wenn man ein update verhindert falls die Info aus dem ZP ausgelesen wurde und nicht aus IPS stammt.

Wie genau man diese Logik baut und die Info vom read zum update Skript mitnimmt, muss ich mir allerdings noch überlegen… :confused:

Grüße, Benjamin

[TODO]

Hallo Benjamin,

danke dafür dass du es auch ausprobiert hast - dann liegt es wenigstens nicht an meiner Unfähigkeit :wink:
Deine Erklärung klingt logisch für mich. Eine Idee hätte ich vielleicht noch:
Eine Rampe wird ja wahrscheinlich nur im Falle des Weckers gefahren.
Hier bekommen die Controller ja dann auch ein entsprechendes Signal (sie zeigen ja die ‚Schlummer‘ Taste oder halt die kleine Glocke im Display, bzw. auf dem PC an. Meinst du es wäre möglich diese abzufangen/auszulesen (ich habe eben mal geschaut aber ich kann eine entsprechendene Status-Flag nicht finden)?

Viele Grüße & lieben Dank!
Gruss
Micha

:eek:

Nein, ja, aber die Rückmeldung gibts nur per Subscribe. :cool:

Hi,

ich habe mir jetzt mal kurzfristig mit einer Schleife im ‚br_sonos.inc.php‘ (ab 258) abgeholfen die einfach alle 1s überprüft ob ‚Volume‘ sich noch ändert:

// ********************** / ZoneMaster *******************************************/
// Get from actual player
                          
$volume = $sonos->GetVolume();								// gibt die Lautstärke als Integer zurück
sleep(1);
while ($sonos->GetVolume() <> $volume) {              // überprüft alle 1s ob die Lautstärke sich in der Zone noch ändert solange bis konstant (Workaround für Rampe)
   $volume = $sonos->GetVolume();
   sleep(1);
}

Ich weiß nichts über die Charakteristik der Rampe, aber das sollte bei delta t < 1s helfen (und hat es in ein paar Testläufen auch immer getan…)
Vielleicht gibt es ja irgendwann eine bessere Lösung…

Viele Grüße & Danke
Micha

Hi Micha,
ich hab Deinen Workaround jetzt bei mir auch mal eingebaut. :slight_smile: Bin gespannt, ob sich bei den wenigen Rampen die ich benutze etwas verändert.

Viele Grüße, Benjamin

Hi all,

gibt es eigentlich schon einen Befehl mit dem die Lautstärke einer Gruppe verändert werden kann?

Hintergrund (ich mmuss etwas weiter ausholen - vielleicht hat jemand ne ganz andere Idee ;):
jedesmal wenn ich IPS neu starte reißt die ClientSocket-Verbindung in IPS zum DENON AVR ab. Beheben läßt sich das nur durch Aus- und Einschalten des AVR (was ich scriptgesteuert via HM-Steckdose mache).
Únmittelbar nach dem Einschalten des DENON passiert nun folgendes: die an den AVR angeschlossene Sonos schaltet auf den Line-In Eingang um und die Lautstärke des Sonossis fährt auf 100% hoch (kann man auch schön im Sonos Desktop Controller sehen).
Wenn ich dann auf Musikstream-Wiedergabe zurück schalte kann sich jeder vorstellen was die possierlichen Brüllwürfel in meinem (Wohn-)Gehäuse anstellen (das ist mir tats. schon mitten in der Nacht passiert).
Also suche ich nach ner Möglichkeit das gesamte Sonos-Rudel Volume-seitig mit einem Befehl auf 0% zu bringen. Hat jemand ne Idee?

Ein IPS_ApplyChanges des CSK reicht nicht zum neuverbinden.

wenn das die selbe Wirkung wie das manuelle deaktivieren hat - dann nicht :mad: