PHP Sonos (Klasse zum Ansteuern einzelner Player)

Hi Nicola,
dafür gibt´s hier im Thread Beispiele oder Du siehst Dir br_sonos an (SuFu aka Geheimfunktion benutzen!).

Außerdem kannst Du auf der Wiki-Seite und in der Inline Dokumentation (PDF) einiges finden.

Grüße, Benjamin

Hallo Jungs!

Ich bin bei meinem Redesign bei dem Punkt „Entertain“ angekommen.

Ich hab hier schon lange, lange den Überblick verloren. :o

Was ist denn jetzt die letzte Version der PHPSonos?
Ist die Wiki noch aktuell?

Ich habe hier mit nem halben Auge gelesen das einem
mit der neuen PHPSonos die Player abschmieren.
Ist das noch so?

Für eure Hilfe besten Dank.

Hallo Martin,
das Wiki ist weitgehend aktuell. Die aktuellste PHPSonos Klasse in Kombination mit br_sonos ist die vom 26.09.2011:
Br sonos

Das Problem mit dem Blacklisting bei tunein / radiotime ist in dieser Version auch behoben (eigener API Key).

Grüße, Benjamin

[EDIT: aktuellste PHPSonos.inc.php (SNAP) im Anhang - sollte mit der br_sonos vom 26.09. laufen; Wiki habe ich auch nochmal aktualisiert]

PHPSonos.inc-snap20111123.zip (14.6 KB)

Hallo Benjamin.

Du bis ne Bütz. :):slight_smile:

Besten Dank.

Moin Zusammen,
ich hab mal ne Frage. Ich mache gerade mein Webfront und iFront weiter und versuche die Funktionen für REPEAT und SHUFFLE ins Webfront zu bringen bzw. diese per Script und Webfront zu steuern.
In der PHPSonos.inc.php habe ich folgendes gefunden:

* @param string $mode "NORMAL" || "REPEAT_ALL" || "SHUFFLE_NOREPEAT" || "SHUFFLE"
 *
 * @return String
 */
	public function SetPlayMode($mode)

Wie schaltet Ihr unabhänging REPEAT und SHUFFLE? Ich seh es gerade nicht wie das Funktionieren soll?!
Denn beide Funktionen schalte ich doch mit dem gleichen Befehl aus und der ist „NORMAL“ oder nicht?

Ich hab mal getetest und hab folgendes herausgefunden:

NORMAL = SHUFFLE und REPEAT -->FALSE
REPEAT_ALL = REPEAT -->TRUE ( keine Auswirkung auf SHUFFLE )
SHUFFLE_NOREPEAT = SHUFFLE -->TRUE / REPEAT = FALSE
SHUFFLE = SHUFFLE und REPEAT -->TRUE

Wie kann ich denn REPEAT oder SHUFFLE unabhänging in FALSE bekommen?
Geht das? Wie habt Ihr das gelöst? Oder sehe ich es einfach nicht?

Danke,

Peter

Danke,
Peter

Hi Peter,
ich musste auch etwas rumprobieren. Hier die Logik aus br_sonos zum unabhängigen Schalten von shuffle und repeat:

		// Control via Coord
		case $id_Shuffle:
			$sonos = new PHPSonos($arrzoneplayers[$curCoord]['IPAddress']);
			$shuffleRepeat = $sonos->GetTransportSettings();
			
	    	echo "Shuffle set to: " . $IPS_VALUE . "

";
			if ($IPS_VALUE==1) {
				
			         if($shuffleRepeat['repeat']){
			            $sonos->SetPlayMode("SHUFFLE"); // true / false

						} else {
							$sonos->SetPlayMode("SHUFFLE_NOREPEAT"); 
						 br_objSetVar( $ParentID ,"Repeat",0);
						}
	
							
			} else {
         			 if($shuffleRepeat['repeat']){
			         	$sonos->SetPlayMode("REPEAT_ALL"); // true / false


						} else {
	         			$sonos->SetPlayMode("NORMAL"); // true / false

						}

			}
			break;
		case $id_Repeat:
 
		$sonos = new PHPSonos($arrzoneplayers[$curCoord]['IPAddress']);
			$shuffleRepeat = $sonos->GetTransportSettings();

	    	echo "Repeat set to: " . $IPS_VALUE . "

";
			if ($IPS_VALUE==1) {

			         if($shuffleRepeat['shuffle']){
									$sonos->SetPlayMode("SHUFFLE");
						} else {
							$sonos->SetPlayMode("REPEAT_ALL"); 
							br_objSetVar( $ParentID ,"Repeat",1);
						}
			} else {
         			if($shuffleRepeat['shuffle']){
			         	$sonos->SetPlayMode("SHUFFLE_NOREPEAT");
						} else {
	         			$sonos->SetPlayMode("NORMAL");
						}

			}
			break;

Das Skript wird per Ereignis bei Änderung der entsprechenden Repeat (bool) und Shuffle (bool) Variablen ausgeführt. Im case wird dann zwischen den Variablen als Absender unterschieden.

Wenn Shuffle beispielsweise deaktiviert werden soll und Repeat ist an, muss man REPEAT_ALL senden.

Grüße, Benjamin

Etwas ist gut, mir qualmt der Kopf!! :smiley:

Danke für die schnelle Hilfe. Ich hab oben in der Aufzählung auch ein Fehler.
REPEAT_ALL schaltet auch SHUFFLE --> FALSE. Jetzt macht es auch Sinn!

Danke,

Peter

Ja, gern geschehen. :slight_smile:

Ich habe Deine Testergebnisse (mit der von Dir oben geschriebenen Korrektur) jetzt für die Nachwelt festgehalten und in die Inline-Documentation meiner phpsonos Arbeitskopie eingebaut. Damit sollten Sie dann demnächst auch in der documentation.pdf landen.

Grüße, Benjamin

[Edit: Link zu Deiner Frage ist jetzt auch in der Inline Doku]

Hallo Peter, ich hab das wie folgt gelöst:

ich habe eine Varible „repeat“ und eine „shuffle“ (beide bool). Beide kann ich im Webfront ansteuern (an oder aus mit toggle). Ich schauen immer auf den status der jeweils anderen variable, sprich wenn ich shuffle mach, schaue ich nach dem repeat um den playmode dann im player richtig zu setzen.

am beispiel „shuffle“:
das skript wird ausgelöst, wenn die variable „shuffle“ = false wird. (was ja durch das schalten im webfront passiert.

<?
include("PHPSonos.inc.php");
$sonosip = GetValue(54945 /*[Sonos\Player Übersicht\Stüberl\ip stueberl]*/);
$sonos = new PHPSonos($sonosip); //Sonos ZP IPAdresse

if (GetValue (34142 /*[Sonos\Stüberl meins\Sonos steuerung\Repeat]*/) == "true")
{
$sonos->SetPlayMode("REPEAT_ALL");
}

else
{
$sonos->SetPlayMode("NORMAL");
}
?>

das zweite skript wird ausgelöst, wenn die variable „shuffle“ = true wird:

<?
include("PHPSonos.inc.php");
$sonosip = GetValue(54945 /*[Sonos\Player Übersicht\Stüberl\ip stueberl]*/);
$sonos = new PHPSonos($sonosip); //Sonos ZP IPAdresse

if (GetValue (34142 /*[Sonos\Stüberl meins\Sonos steuerung\Repeat]*/) == "true")
{
$sonos->SetPlayMode("SHUFFLE");
}

else
{
$sonos->SetPlayMode("SHUFFLE_NOREPEAT");
}

?>

Hallo zusammen,

damit nach den vielen Monaten auch mal eine nicht als „Test“ markierte Klasse zugänglich ist, veröffentliche ich die nun seit einiger Zeit genutze Klasse mit den Änderungen der letzten Zeit und den Updates der Inline-Dokumentation.

Historie:


...

- 110530 - br edited Browse() to reflect upnp possibilities
- 110601 - br renamed GetAlarmtime to ListAlarms to reflect upnp Names
- 110601 - iamking improved ListAlarms - added ProgramURI, ProgramMetaData, PlayMode,
Volume, IncludeLinkedZones
- 110614 - br added parameters to Browse / http://www.ip-symcon.de/forum/f53/php-sonosklasse-
ansteuern-einzelner-player-7676/index10.html#post120977
- 110627 - talun edited GetSonosPlaylists: urlencode file
- 110711 - br fixed Problems in SetAVTransportUri

- 110821 - br/talun edited Browse to return duration
- 110821 - br added GetAudioInputAttributes
- 110828 - br added Radiotime Radio Cover for GetPositionInfo (patching´in Raditiome Cover
URI)
- 110901 - br shifted Radiotime Functions from getpositioninfo to new Function
RadiotimeGetNowPlaying (returns array)
- 110905 - br fixed Bug in getpositioninfo for getting the actual Track in a playlist (quickfix)
- 110907 - br deleted, added and edited comment lines
- 110908 - br added phpdoc tags for documentation
- 110909 - br found sendpacket commented out in RemoveMember and reenabled the
sending now (TEST?!)
- 110911 - br added phpdoc tags for documentation
- 110915 - br added PhpSonos API key/ partnerid for Intune (usable for ANYONE who uses
the PHPSonos class noncommercial or commercial) - thanks to Ben@tunein for advocation
and great support!
Drop me a note if you are a PHPSonos developer and need access to
documentation of tunein APIs.
- 110916 - br added GetCurrentTransportActions() which returns the currently valid actions
(nearly always returns all actions "Play, Stop, Pause, Seek, Next, Previous" for me)...
- 110916 - br added Get and SetInvisible to make it possible to change visibilty for party
mode or other things (kids should not see their player in the night *g)
- 110916 - br improved phpdoc tags
- 111021 - br added soap parameters to ramptovolume (function did not work anymore
- 111028 - br added parameters id and parentid to setradio (only very rare use for this)
- 111130 - br minor improvements: phpdoc tags
- 120205 - PeterChrisben/br improved phpdoc for setplaymode and gettransportsettings

Die Todos sind jetzt auch mit @todo gekennzeichnet.

Ich wünsche Euch weiterhin viel Spaß mit IPS und den Sonos Kisten! :loveips::smiley:
Es ist Jeder eingeladen zu Testen / Entwickeln und Fragen zu stellen. :wink:

(Die Aktualisierung des Wikis mache ich gleich noch.)

[EDIT: Die Wiki Seite PHPSonos ist jetzt angepasst]

[EDIT: Üblicherweise ist die br_sonos_test.php - das ist meine pers. Datei um Fehler aus dem Forum nachzuvollziehen und Neues auszuprobieren im ZIP enthalten. Diesmal ist im Zip leider nur eine veraltete Datei, darum reiche ich jetzt meine Testdatei mit aktuellen Beispielen als Anhang an diesen Post nach.]
Viele Grüße, Benjamin

PHPSonos.inc-20120205.zip (108 KB)

documentation-20120205.pdf (132 KB)

br_sonos_test.php.txt (11.5 KB)

Danke. Wenn der Umzug durch ist und der neue Server steht werde ich das bei mir einbauen und testen.
Wie gesagt Danke und weiter so…

Hat jemand von Euch gerade mal den aktuellen N.Joy Radiostream parat ?

Möchte den gern auf Knopfdruck ansteuern, Sonos spuckt mir den ja aber nirgends aus, ist fest in den Favoriten…

Hi roadster,

irgendwo hier gab ein Scriptschnipsel, über das man die Favoriten auslesen und via IPS ansteuern kann - hilft das weiter?
… komm grad nicht an mein IPS, kann ich aber heute Abend raussuchen

hi roadster,

müßte der hier sein: http://88.151.102.8:8030
ich suche mir die Sender immer bei shoutcast.com dann die linkadresse kopieren, dann ins itunes mit „stream öffnen“. dann unter information steht die url.
klappt bei mir recht gut.

gruß iamking

bzw. für sonos:
$sonos->SetRadio(„x-rincon-mp3radio://88.151.102.8:8030“, „n joy“);

Danke dafür.

Bin ein wenig verwirrt ob der letzten Änderung in der Anwendung.

Trotz mehrmaligem lesen der Beschreibung bekomme ich es nicht hin einen Radiostream abzuspielen.

Ging mal per „Sonos->SetRaio („StreamURL“)“ und fertig… Jetzt schein mehr nötig. Kann das jemand erläutern ?

Die Änderungen scheinen bisher auch nur die Radio Funktion zu betreffen, die ganzen anderen Standardfunktionen gehen !

hallo roadster,

ich kenne nur die oben angegebene schreibweise.
ich meine bei (mir als alt) bekannten sonos.inc war kein radiosendername mit einzutragen??
das rincon… davor brauchst du ja für sonos, ode rhabe ich dich falsch verstanden?

Hab mir die Wiki nochmal durchgelesen, damit komme ich besser zurecht als mit der Doku.

Sollte eigentlich so klappen ? Alle Meine Befehle sehen sonst auch so aus…

<?
include("PHPSonos.inc.php");

$sonos = new PHPSonos("192.168.178.37"); //Sonos ZP IPAdresse

$sonos->SetRadio("http://www.antenne.de/webradio/antenne.m3u", "Radio Antenne");
//$sonos->Play();

?>

Erhalte das als 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/16.7-48310 (ZP100)
Connection: close

s:ClientUPnPError’ in C:\IP-Symcon\scripts\PHPSonos.inc.php:2308
Stack trace:
#0 C:\IP-Symcon\scripts\PHPSonos.inc.php(1674): PHPSonos->sendPacket(‚POST /MediaRend…‘)
#1 C:\IP-Symcon\scripts\PHPSonos.inc.php(1643): PHPSonos->SetAVTransportURI(‚http://www.ante…‘, ‚<DIDL-Lite x…‘)
#2 C:\IP-Symcon\scripts\58148.ips.php(10): PHPSonos->SetRadio(‚http://www.ante…‘, ‚Klassik Radio‘)
#3 {main}
thrown in C:\IP-Symcon\scripts\PHPSonos.inc.php on line 2308

$sonos->SetRadio(„x-rincon-mp3radio://www.antenne.de/webradio/antenne.m3u“, „Radio Antenne“);

LG Jürgen

…so einfach manchmal.

Ich hatte den vorgesetzten Befehlsteil einem anderen Stream zugeordnet.

Danke ! :smiley:

Hi,
das geht übrigens auch noch ohne den Paramter für den Radionamen zu setzen. Der P. ist optional. :slight_smile:

Radio Favoriten aus dem SOnos lesen und per IPS automatisch schaltbar machen geht so (Link aufs Wiki).
Grüße, Benjamin