SONOS PHP Class

zu blöd:eek: Das war’s.

Nun klappt das Registrieren und im Debug Fenster des Sockets sieht man Nachrichten hereinkommen.
Die Nachrichten werden auch im SonosSplitterScript verarbeitet, aber mehr passiert noch nicht.

  • außer der SID wird keine weitere Variable des Gerätes aktualisiert
  • es werden im Debug Pfad (bei mir c:\ip-symcon\logs) ganz viele Logdateien angelegt, die ich aber noch nicht verstehe

Sollte da nicht schon mehr passieren?

Auch kommen bei Lautstärkeänderungen oder Mute On/Off noch keine Events.

Soweit als kurzer Zwischenbericht.

Viele Grüße

Burkhard

Danke dir Burkhard, die vielen log dateien … hab ich vergesen den debug_path raus zunehmen? die dateien sollten nur immer komplette events beinhalten und ich habe die gebraucht um die dateien zu untersuchen. Außerdem nutze ich die gleicht konstellation auch mit versuchen bei der Fritzbox und dem Homematic und dem Sony-Verstärker und dem Samsung TV … hahaha, so viel zu den Log Dateien. grins
Ich hatte das Problem auch da lag es eindeutig daran dass der Player neu gestartet werden musste. In den Log dateien sieht man zb. aud die SID die übertragen wurde. Diese MUSS auch in der CONFIG der SplitterInstace als serialized array abgelegt sein.
Du kannst, solltest aber auch im Message Log fenster Nachriten wie SEND oder READ ect. sehen wenn DEBUG > 0

cu
Xaver

Also bei mit steht in der Var „Debug Pfad für Events zb. d: mp“ nur True.
d: mp gibts bei mir nicht.
Wird dann trotzdem geloggt?
Wenn ja, wohin?
Nicht dass mir das die Festplatte zumüllt.

nein, den habe ich eingetragen, um den Zusammenhängen auf die Spur zu kommen.:slight_smile:

Das sieht eigentlich gut aus bei mir. Werde ich morgen mal näher untersuchen.

Die Verzögerungen sehe ich aber auch bei mir. Und Events bei Lautstärkeveränderungen scheine ich auch keine zu bekommen. Was müsste denn da in den Logs stehen?

Auch habe ich den Eindruck, dass die Registrierung nach ein paar Minuten automatisch beendet wird, obwohl ich 3600 sec vorgegeben habe.

Momentan bin ich mir noch nicht sicher, ob sich der Ansatz wirklich zur dauerhaften Playerüberwachung eignet. Wie bekommt denn wohl die SONOS App die Veränderungen mit? Das geht blitzschnell, fast „realtime“.

Viele Grüße

Burkhard

Ja das stimmt, ich denke bevor ich weiter an dem Outfit bastle sollte ich das mit den Events in den Griff bekommen.
Das ist auch in soweit Interessant das es die NOTIFYS bei vielen Geräten gibt.
Habe gestern mal die Packete gescannt und mir ist aufgefallen, dass die SonosSoftware auch einen oder zwei ports öffnet.

Was ich verstehe ist der erste Post der Software:
SUBSCRIBE /MediaRenderer/RenderingControl/Event HTTP/1.1
CALLBACK: <http://192.168.112.100:3400/notify>

Was ich (noch) nicht verstehe ist dieser Post:

SUBSCRIBE /upnphost/udhisapi.dll?event=uuid:e52add57-4517-4c32-ba18-672b515fb2f8+urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar HTTP/1.1
USER-AGENT: Linux UPnP/1.0 Sonos/28.1-83040 (ZPS1)
HOST: 192.168.112.100:2869
SID: uuid:9708122f-74a5-48ad-ac26-db1911cd3c77
TIMEOUT: Second-3600

Da wird doch irgend was über Windows Registriert ?

cu
Xaver

Hallo,

vielen Dank für das Script.

An einer Stelle stehe ich auf dem Schlauch und würde mich über einen Wink in die richtige Richtung freuen. Ich möchte herausfinden, ob der Sonos gerade etwas abspielt und dafür GetTransportInfo() nutzen.

So sieht das Script aus:

$p=new SonosUpnpDevice('192.168.100.20');
print_r($p->GetTransportInfo());

das Ergebnis:

Array
(
    [CurrentTransportState] => PLAYING
    [CurrentTransportStatus] => OK
    [CurrentSpeed] => 1
)

Ich möchte den CurrentTransportState in eine Variable schreiben. Kann mir da kurz jemand in Form eines 3-Zeilers auf die Sprünge helfen?

Danke und Gruß,
Christoph


:
:
$p->GetTransportInfo();
SetValue(Var_ID, $p['CurrentTransportState']);

:wink:

Danke - aber genau so in der Art hatte ich es schon versucht.

Ich habe mit

echo $p['CurrentTransportState'];

getestet, aber sowohl bei meiner als auch bei Deiner Variante kommt:

Fatal error:  Cannot use object of type SonosUpnpDevice as array in D:\Programme\IP-Symcon\scripts\45356.ips.php on line 18

Grüße,
Christoph

include('sonos\Sonos.IPS.class.php');
$p=new SonosUpnpDevice('192.168.178.58');
print_r($p = $p->GetTransportInfo());
echo($p['CurrentTransportState']);

Vielen Dank!

Moment, ohne die Zeile mit print_r läuft das nicht. Lässt sich das irgendwie umgehen?

Ich will das Ergebnis, also hier „PLAYING“ einfach nur in eine String-Variable schreiben.

SetValue(53006  /*[Allgemein\SONOS\Status]*/, $p = $p['CurrentTransportState']);

geht nicht - selbe Fehlermeldung.

Kann mir da noch mal jemand weiterhelfen?

Danke und Gruß,
Christoph


include('sonos\Sonos.IPS.class.php');
$p=new SonosUpnpDevice('192.168.178.58');
$p = $p->GetTransportInfo();
//echo($p['CurrentTransportState']);
SetValue(23621  /*[Test\Sonstige Tests	est irgendwas\string]*/, $p['CurrentTransportState']);

Ich danke Dir!

:loveips: