PHP Sonos (Klasse zum Ansteuern einzelner Player)

Hi Tom,

du hast doch in deinem Code drinstehen, dass der Slave nichts ("") mehr abspielen soll. Was passiert denn, wenn du das rausnimmst?


$sonos = new PHPSonos($memberip); //Slave Sonos ZP IPAddress
// needed for stop of playback on Slave
$sonos->SetAVTransportURI("");
//Playing stops

Grüße Reiner

Hi Reiner,

leider nein - ich mache ja nur den „Addmember“-Teil. Wenn ich diese 4 Zeilen ausführe:

          $sonos = new PHPSonos($sonosip); //Sonos ZP IPAdresse 
          $AddMember = $sonos->AddMember($memberid); 
          // Talk to slave 
          $sonos = new PHPSonos($memberip); //Slave Sonos ZP IPAddress 
          // needed to start playback on Slave 
          $ret = $sonos->SetAVTransportURI("x-rincon:" . $sonosid); 

dann verbindet er Master und Slave zwar korrekt, aber wenn ich diese Gruppe z.B. mit der Sonos App trenne (also nicht mit dem Code hier) - dann stoppt die Wiedergabe auf beiden Geräten.

Verbinde ich aber die Gruppe auch über Sonos App, so stoppt die Wiedergabe nur auf dem Gerät, dass ich aus der Gruppe entferne.

Hi Tom,

ok, das ging aus dem Post nicht so hervor… hmmm…
Da kann ich jetzt leider auch nicht viel helfen, mir war das nur im Code aufgefallen.

Ich habe leider nur einen Player, so dass ich das nicht testen kann, und dir eine Lösung anbieten kann.
Hast du schon mal mit Wireshark (o.ä.) gelauscht, was der Controller so sendet, um die Zonen zu verbinden?

Daraus kann man immer einiges lernen…

Grüße Reiner

Hi,

ich bin ein wenig verloren und bitte um Hilfe.
Wenn ich die sonos.php aufrufe mit „http://linuxbox/sonos/sonos.php“ erhalte ich als output

Usage: sonos.php zone= action= [value=] Available Actions and Parameters: action=play action=pause action=stop action=mute [value=] action=setvolume value= action=volumeup [value=] action=volumedown [value=] action=subscribe value= action=getzonelist

Wie soll ich denn nun den Aufruf gestalten, wenn ich meinen Player lauter, leiser, mute, unmute, anderer Radiosender auswählen möchte? Mit leerzeichen kann es ja nicht gehen.

Um Mute anzuschalten funktioniert

http://linuxbox/sonos/sonos.php?zone=Schlafzimmer=action=mute

auch nicht.
Ich erhalte den gleichen Output im Browser.

Ich verwende das letzte von Reiner gepostete Paket und habe natürlich die Textdatei angepasst.
Hat jemand eine Hilfe für mich?

Besten Dank!!

Hallo zusammen,

mit Freude habe ich hier die PHP Lib für das Sonos System entdeckt, und gleich bei mir auf dem Webserver (QNap NAS) eingebunden.
Klappt soweit auch echt prima.
Nur hänge ich jetzt an den Radio Favoriten (Eigene Radiosender)

Ich kann die Sender auslesen mit:

$browselist = $sonos->Browse("R:0/0","c");

In

$browselist[1]['res']

sehe ich dann z.B.: ( .977 70’s Rock )
x-sonosapi-stream%3As48937%3Fsid%3D254%26amp%3Bflags%3D32
Die anderen Felder sind auch entsprechend (richtig) ausgelesen.

Wie kann ich das jetzt abspielen?

Folgendes klappt nicht:

$sonos->SetRadio(urldecode($browselist[1]['res']));
$sonos->Play();

Wie komme ich von diesem String auf die richtige Playlist?

Freue mich schon auf euer Feedback…

Danke und Gruß
Peter

Hi drloksoft,

eigentlich habe ich die Skripte ausschließlich für die Konsole gedacht, da ich das von meinen bestehenden Skripten (Systemkommandos) aus aufgerufen habe. Da ich wegen Urlaubsreise gerade keinen Zugriff auf den Code habe, kann ich leider gerade nicht reinschauen.

Hast du schon mal die Schreibweise:

http://linuxbox/sonos/sonos.php?zone=Schlafzimmer&action=mute&value=on

versucht?

Ansonsten müsstest du dir vielleicht ein einfaches Skript drumherumbauen, welches von dir per Webbrowser aufgerufen wird, und den von mir geschrieben Teil seinerseits aufruft.

Da kannst du dir dann auch ein paar Parameter besser organisieren, da du ja nicht die komplette Freiheit benötigst…

Grüße Reiner

Hallo, ich habe die Diskussionen hier vermutlich nicht komplett verfolgt, ist Reiner’s zip-file vom 20.11.2012 der aktuelle Stand?

Danke&Gruß,
Marc

P.S. Hatte Reiner mit seinen Plänen bzg. Perl Script weitergemacht?

Hi Reiner,
danke für die schnelle Antwort. Wenn ich es aufrufe, wie Du es beschreibst, erhalte ich wieder den gleichen Output und am Sonos tut sich gar nichts. Ich wollte es aus dem Browser aufrufen, da es hiermit schneller geht. Final rufe ich es natürlich aus der Kommandozeile auf, nur wenn es so schon nicht klappt, scheint das Problem ursächlich noch nicht gefunden zu sein … mist …

Andere Ideen?
Besten Dank!!

Grüße
Jürgen

Iss klar … auf der Kommandozeile funktioniert Dein Script.
Ok, nun muss ich nur noch heraus finden, wie ich es als http aufruf aufrufen kann.

Ich habe mir nun eine webeingabe.php erstellt, welche die sonos.php aufruft.

Die webeingabe.php könnte ich wie folgt aufrufen, damit ich den Player stumm schalte:

http://linuxbox/sonos/webeingabe.php?zone=Schlafzimmer&action=mute&value=off

Die Datei sieht so aus:


<?PHP
// Version 0.1 von drloksoft am 8.7.2013
$zone   = $_GET["zone"];
$action = $_GET["action"];
$value  = $_GET["value"];
$command = "php sonos.php zone=" .$zone. " action=" .$action. " value=" .$value ;
echo "Ich führe folgendes Kommando aus: <br />";
echo $command;
exec($command);
?>

Grüße
Jürgen

Hallo Jürgen, hallo Marc,

@Jürgen: super, dann funktioniert das Skript ja zumindest wie vorgesehen :slight_smile:
Wie gesagt, es war für mich eher ein kleiner Zwischenschritt und ist hauptsächlich als Bastelei zu sehen…
Die eigentliche Stärke wäre ja jetzt das Reagieren auf Änderungs-Events des Players, wo momentan hauptsächlich eine Konsolenausgabe des Titels erfolgt, und mein alter FHEM-Aufruf drinsteht.

@Marc: Das ist die aktuellste, ich habe seitdem an der Stelle für PHP auch nichts weitergemacht.

Ich habe dann begonnen ein FHEM-Modul zu entwickeln (das läuft in Perl). Damit bin auch schon recht weit, musste aber zwischendurch mal eine Pause machen (wegen familiärer Gründe:-)
Ich habe dort noch ein bißchen die Problematik mit den Perl-Threads, die ich demnächst komplett umbauen möchte. Für einen Player (wie das bis vor drei Wochen bei mir zuhause noch stand) lief das bereits stabil. Für mehrere leider noch nicht so (aus den oben genannten Thread-Gründen).

Probieren kann man es natürlich, da dort der Funktionsumfang diesen hier bei weitem übersteigt. Wer sich dafür interessiert, kann ja mal meinen Wiki-Eintrag dazu überfliegen: http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel.

Grüße Reiner

Wow!
Das ist ja super umfangreich. Ich ziehe es mir mal in Ruhe rein :slight_smile:

Hallo,

habe mal die Meldungsausgabe aus Post #69 ausprobiert.
Der lfd. Radiosender macht zwar eine Pause, aber es erfolgt darin keine Ausgabe der Meldung.wav
Ich habe es mit verschiedenen .wav-Dateien getestet, ohne Erfolg.
Wenn ich statt einer .wav eine .mp3 benutze, funktioniert das Script.

Habe ich etwas übersehen? Kann mir jemand einen Tipp geben?

Gruß, Peter

Hi Peter,

geht die Datei denn, wenn du sie normal über das Sonos System abspielst (also in den Index übernehmen, und als normalen Titel abspielen)?

Sonos hat den Support für diverse Formate immer mal wieder beendet, und irgendwann dürfte auch mal eine eigene Datei betroffen sein :slight_smile:

Grüße Reiner

Hallo Reiner,
habe die .wav-Datei in meine Musik-Bibliothek übernommen und in die playlist eingestellt.

wird ganz normal abgespielt!

Gruß, Peter

Hi Peter,

hast du denn den Pfad überprüft?

in dem Beispiel wird ja folgendes verwendet:

$sonos->SetAVTransportURI("x-file-cifs://touch/IP-Symcon$/media/Meldung.wav"); 

Deinen Pfad kannst du z.B. auf deinem normalen Rechner mal als Datei-öffnen versuchen. Bei Linux wie beschrieben mit Schrägstrichen, bei Windows diese am Besten vorher durch „“ ersetzen.
Manchmal wird auch der Name des Servers der Freigabe nicht sauber aufgelöst. Zum Testen vielleicht also auch mal direkt mit der IP versuchen (also sowas wie: x-file-cifs://192.168.0.1/freigabename/Dateiname.wav).
Hast du auf Groß-/Kleinschreibung geachtet?

Ich gebe zu, dass das nur gestochere ist, aber so eine richtige Idee habe ich da jetzt auch nicht…

Grüße Reiner

Hallo Reiner,

danke für die vielen Ansatzpunkte. Genauso bin ich in meinen weiteren Tests vorgegangen.
Leider liegt das Problem in meiner Standard-Meldungsdatei Meldung.WAV . Irgendetwas verhindert den Zugriff von SONOS.
Wenn ich die Meldung.WAV nach test.wav kopiere (gleiches Verzeichnis) funktioniert es.

Gruß, Peter

Hi Peter,

wie sieht es denn aus, wenn du die Datei mal so im Index stehen lässt, und dann versuchst, die Meldung abspielen zu lassen?
Also, Sonos „kennt“ die Meldung.wav und könnte sie auch normal über den Controller abspielen, und du startest dann mal deine Wiedergabe aus dem PHP-Skript heraus (natürlich mit dem dazu passenden Pfad).

Grüße Reiner

Hallo zusammen,
ist ja schon ein langer Thread! Wow, da stehen viele wichtige Infos drin! Wenn möglich, möchte ich mich mit einer Frage beteiligen.

Ich habe eine Sonos Soundbar, welche Optisch mit meinem TV verbunden ist. Ich möchte, diesen digitalen Input gerne über Script aufrufen. Was ich in den „FAQ“ gefunden habe:
$sonos->SetAVTransportURI(„x-rincon-stream:RINCON_000E5832231C01400“);
Dies ist okay für einen analogen Eingang. Aber scheint nok zu sein für den TV Eingang. Kann mir da jemand weiterhelfen?

tv.JPG

Gruss & Danke

Nachtrag: über http://IP:1400/status/toslink sieht man schön den Status. Aber eben, die Frage bleibt, wie per PHP ansprechen :slight_smile:

Hallo Spacecraft,

du könntest den Kanal mal einstellen, und dir dann die Position-Info mittels „GetPositionInfo()“ am entsprechenden Zoneplayer auslesen. Dort sollte im Feld „TrackURI“ dann das von dir gesuchte drinstehen.

Probiers mal.

Grüße Reiner