Sonos Steuerung über Homematic und alle Einzelschritte
Moderator: Co-Administratoren
Re: Sonos Steuerung über Homematic und alle Einzelschritte
Hallo Ralf,
danke für deine Antwort.
Ich habe jetzt quasi noch einmal von vorne begonnen.
- USB Stick mit andrem Tool gemountet
- Name aber mit "Disk" auf dem Standardwert belassen
- phppro.tar auf den Stick kopiert und entpackt.
- php Server gestartet
- die sonos.php auf das www Verzeichnis kopiert
- skript ausgeführt und sieh da, es hat funktioniert...
Frag mich jetzt nicht warum ???
Beim ersten Mal hatte ich die Dateien mit Filezilla schon im entpackten Zustand auf den Stick kopiert -
vielleicht war das Schuld...
Was in der Log Datei jetzt anders ist - nach der 200 steht jetzt ein Wert, also nicht mehr 0...
Weiß du was der zweite Wert bedeutet ?
Möchte ganz gerne der Ursache auf den Grund gehen um im Fehlerfalle zu wissen, was zu tun ist
Lg Thomas
danke für deine Antwort.
Ich habe jetzt quasi noch einmal von vorne begonnen.
- USB Stick mit andrem Tool gemountet
- Name aber mit "Disk" auf dem Standardwert belassen
- phppro.tar auf den Stick kopiert und entpackt.
- php Server gestartet
- die sonos.php auf das www Verzeichnis kopiert
- skript ausgeführt und sieh da, es hat funktioniert...
Frag mich jetzt nicht warum ???
Beim ersten Mal hatte ich die Dateien mit Filezilla schon im entpackten Zustand auf den Stick kopiert -
vielleicht war das Schuld...
Was in der Log Datei jetzt anders ist - nach der 200 steht jetzt ein Wert, also nicht mehr 0...
Weiß du was der zweite Wert bedeutet ?
Möchte ganz gerne der Ursache auf den Grund gehen um im Fehlerfalle zu wissen, was zu tun ist
Lg Thomas
Re: Sonos Steuerung über Homematic und alle Einzelschritte
Hallo Thomas,
ich glaube es hängt mit dem Start des PHP-Servers zusammen.
In meiner obigen Anleitung fehlt ein Schritt, und zwar die Anpassung der Datei /var/datadisk/bin/myserver.
Hier muß auch noch das Verzeichnis angpaßt werden, also in meinem Fall auf datadisk geändert werden
"export LD_LIBRARY_PATH=/var/datadisk/lib/
lighttpd -f /var/datadisk/etc/mylighttpd.conf "
im Original steht dort /var/disk/lib/
Insofern hat dein geänderter Mount auf disk geholfen.
Also zusammenfassend und abweichend von meiner Anleitung:
1. für den USB stick ist das tool von Goglo empfehlenswert: viewtopic.php?f=31&t=9701&hilit=usb+stick+starten
Die Version 0.2 funktionierte bei mir
2. Die Datei /var/datadisk/myserver ist noch anzupassen von Verzeichnis /var/disk auf /var/datadisk zu ändern
Dann ein Troubleshoot, falls mal was nicht funktioniert:
- hat sich die Adresse der Homematic geändert ?
falls ja: müssen die Homematic Scripte angepaßt werden und der Router so eingestellt werden, dass immer dieselbe Adresse vergeben wird
- Haben sich die IP-Adressen der Sonos-Geräte geändert ?
falls ja: müssen PHP-Scripte angepaßt werden und der Router so eingestellt werden, dass immer dieselbe Adresse vergeben wird
die IP-Adressen von Sonos lassen sich über Sonos Desktop (PC) unter Hilfe "über mein Sonos System" -nachlesen
- ist der PHP-Server gestartet ?:
überprüfen auf Telnet Ebene: Befehl: PS.
es sollten zwei Prozesse am ende der Liste zu sehen sein: lightfpd.....etc
- ist richtige Verzeichnis in in datei /var/datadisk/etc/Mylighttpd.conf eingetragen ?
(Die Mylighttpd.conf im Original geht von /var/disk aus. also einfach /var/disk z.B. mit /var/datadisk ersetzen)
- Sind die Sonos spezifischen Steuerdateien Dateien in /var/datadisk/www abgelegt ?
z.B. heisst eine Datei bei mir: sonosBad .php. Die Datei sonosBad .php.txt ist angehängt im ersten Beitrag.
Die angepaßte Version (angepaßte IP-Adresse muß in /var/datadisk/www abgelegt werden.
Auch eine Überprüfung der Logs kann helfen:
- was steht im error log /var/log lighttpd.error.log
- was steht im Access log /var/log lighttpd.access.log
- was steht in der datei httpRequest im Verzeichnis /var/tmp ?
- und ggf auch die CCU Messages könnten helfen: /var/tmp/messages
Ich glaube das waren die wichtigsten checks.
Zusammen mit den Korrekturen der Anleitung sollte es möglich sein die Installation hinzubekommen und auch einen ersten Troubleshoot zu machen
ich glaube es hängt mit dem Start des PHP-Servers zusammen.
In meiner obigen Anleitung fehlt ein Schritt, und zwar die Anpassung der Datei /var/datadisk/bin/myserver.
Hier muß auch noch das Verzeichnis angpaßt werden, also in meinem Fall auf datadisk geändert werden
"export LD_LIBRARY_PATH=/var/datadisk/lib/
lighttpd -f /var/datadisk/etc/mylighttpd.conf "
im Original steht dort /var/disk/lib/
Insofern hat dein geänderter Mount auf disk geholfen.
Also zusammenfassend und abweichend von meiner Anleitung:
1. für den USB stick ist das tool von Goglo empfehlenswert: viewtopic.php?f=31&t=9701&hilit=usb+stick+starten
Die Version 0.2 funktionierte bei mir
2. Die Datei /var/datadisk/myserver ist noch anzupassen von Verzeichnis /var/disk auf /var/datadisk zu ändern
Dann ein Troubleshoot, falls mal was nicht funktioniert:
- hat sich die Adresse der Homematic geändert ?
falls ja: müssen die Homematic Scripte angepaßt werden und der Router so eingestellt werden, dass immer dieselbe Adresse vergeben wird
- Haben sich die IP-Adressen der Sonos-Geräte geändert ?
falls ja: müssen PHP-Scripte angepaßt werden und der Router so eingestellt werden, dass immer dieselbe Adresse vergeben wird
die IP-Adressen von Sonos lassen sich über Sonos Desktop (PC) unter Hilfe "über mein Sonos System" -nachlesen
- ist der PHP-Server gestartet ?:
überprüfen auf Telnet Ebene: Befehl: PS.
es sollten zwei Prozesse am ende der Liste zu sehen sein: lightfpd.....etc
- ist richtige Verzeichnis in in datei /var/datadisk/etc/Mylighttpd.conf eingetragen ?
(Die Mylighttpd.conf im Original geht von /var/disk aus. also einfach /var/disk z.B. mit /var/datadisk ersetzen)
- Sind die Sonos spezifischen Steuerdateien Dateien in /var/datadisk/www abgelegt ?
z.B. heisst eine Datei bei mir: sonosBad .php. Die Datei sonosBad .php.txt ist angehängt im ersten Beitrag.
Die angepaßte Version (angepaßte IP-Adresse muß in /var/datadisk/www abgelegt werden.
Auch eine Überprüfung der Logs kann helfen:
- was steht im error log /var/log lighttpd.error.log
- was steht im Access log /var/log lighttpd.access.log
- was steht in der datei httpRequest im Verzeichnis /var/tmp ?
- und ggf auch die CCU Messages könnten helfen: /var/tmp/messages
Ich glaube das waren die wichtigsten checks.
Zusammen mit den Korrekturen der Anleitung sollte es möglich sein die Installation hinzubekommen und auch einen ersten Troubleshoot zu machen
Re: Sonos Steuerung über Homematic und alle Einzelschritte
Hallo Ralf,
ja so ist es betimmt hin zu bekommen.
Ich hätte noch eine andere Frage:
Hast du auch ein Skript bzw. eine PHP Erweiterung wo ein Get Befehl möglich ist.
z.B. Auslesen der aktuellen Lautstärke um diese dann mit dem Wandtaster immer um
eins zu erhöhen.
Lg Thomas
ja so ist es betimmt hin zu bekommen.
Ich hätte noch eine andere Frage:
Hast du auch ein Skript bzw. eine PHP Erweiterung wo ein Get Befehl möglich ist.
z.B. Auslesen der aktuellen Lautstärke um diese dann mit dem Wandtaster immer um
eins zu erhöhen.
Lg Thomas
Re: Sonos Steuerung über Homematic und alle Einzelschritte
leider nein. Ich glaube, dass das mit den Scripts aus dem IP-Symcon Forum geht.
Wie ich aber schon weiter oben schrieb, habe ich es nicht hingekriegt die Scripts zu nutzen, da die CCU PHP Version einige Befehle nicht unterstützt. Das ist sicher hinzubekommen, allerdings müßte sich jemand mit PHP gut auskennen.
Ich arbeite in meinem Fall mit festen Lautstärken. Auf dem Taster verändere ich bei langem Druck die Lautstärke.
Oben: Laut - unten Leise. Insgesamt habe ich sechs feste Lautstärke Pegel, von denen ich wählen kann.
Das ist aber nur ein Workaround. Wenn jemand die PHP Klassen aus IP-Symcon portieren könnte, dann wäre das sicher die bessere Lösung.
Wie ich aber schon weiter oben schrieb, habe ich es nicht hingekriegt die Scripts zu nutzen, da die CCU PHP Version einige Befehle nicht unterstützt. Das ist sicher hinzubekommen, allerdings müßte sich jemand mit PHP gut auskennen.
Ich arbeite in meinem Fall mit festen Lautstärken. Auf dem Taster verändere ich bei langem Druck die Lautstärke.
Oben: Laut - unten Leise. Insgesamt habe ich sechs feste Lautstärke Pegel, von denen ich wählen kann.
Das ist aber nur ein Workaround. Wenn jemand die PHP Klassen aus IP-Symcon portieren könnte, dann wäre das sicher die bessere Lösung.
Re: Sonos Steuerung über Homematic und alle Einzelschritte
dann werde ich das mal angehen. Kenne da ein paar wirkliche PHP Profis.
Gebe Bescheid, sobald es funktioniert !
Lg Thomas
Gebe Bescheid, sobald es funktioniert !
Lg Thomas
Re: Sonos Steuerung über Homematic und alle Einzelschritte
Wenn ihr von der Klasse aus dem IP-Symcon Forum sprecht, meint ihr dann die PHPSonos.inc.php ?
Re: Sonos Steuerung über Homematic und alle Einzelschritte
Ja dann anbei mal ein Beispiel wie z.B. die Funktion Play aussehen muss damit die mit dem PHP Server auf der CCU kompatibel ist:
Original:
Angepasst:
Original:
Code: Alles auswählen
public function Play()
{
$content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
CONNECTION: close
HOST: '.$this->address.':1400
CONTENT-LENGTH: 266
CONTENT-TYPE: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>';
$this->sendPacket($content);
}
Code: Alles auswählen
public function Play()
{
// Sonos Player device port. e.g. 1400 (default)
$devicePort = 1400;
$nl = '
';
$headerPart1 = 'POST /MediaRenderer/AVTransport/Control HTTP/1.1'.$nl;
$headerPart2 = 'SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"'.$nl.$nl;
$content = '<u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">'.
'<InstanceID>0</InstanceID>'.
'<Speed>1</Speed>'.
'</u:Play>';
// envelope strings
$contentEnvelopeBegin = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>';
$contentEnvelopeEnd = '</s:Body></s:Envelope>';
// add envelope string legth to contentLength
$contentLength = strlen($contentEnvelopeBegin.$content.$contentEnvelopeEnd);
// build message header part 1
$headerMainPart = 'CONNECTION: close'.$nl.
'HOST: '.$this->address.':'.$devicePort.$nl.
'CONTENT-LENGTH: '.$contentLength.$nl.
'CONTENT-TYPE: text/xml; charset="utf-8"'.$nl;
// build complete UPnP-AV message for Sonos device
$streamMessage = $headerPart1.$headerMainPart.$headerPart2.$contentEnvelopeBegin.$content.$contentEnvelopeEnd;
$fileHandle = fsockopen ($this->address, $devicePort, $errorNumber, $errorString, 10);
$streamAnswer = '';
if (!$fileHandle)
{
// error output
echo "$errorString ($errorNumber)<br />\n";
}
else
{
fputs($fileHandle, $streamMessage);
$streamAnswer = "";
// get lines
while (!feof($fileHandle))
{
$streamAnswer .= fgets($fileHandle);
}
// close socket connection
fclose($fileHandle);
}
}
Re: Sonos Steuerung über Homematic und alle Einzelschritte
das kriegst du ja schnell hin
dieser Link: http://www.trautner.net/wp-content/uplo ... /Sonos.zip
enthält zwei Dateien. Die Originale Datei aus dem IP-Symcon Forum plus den add ons aus dem Beitrag.
Das Interessante sind nun die Addons aus der Datei index.php, weil diese die folgenden Funktionen bereitstellen:
index.php?zone=MeineZone&do=TogglePlayStop: schaltet um zwischen Play und Pause
index.php?zone=MeineZone&do=VolumeUp: Lautstärke wird pro Aufruf um 1 erhöht
index.php?zone=MeineZone&do=VolumeDown: Lautstärke wird pro Aufruf um 1 vermindert
index.php?zone=MeineZone&do=sendMessage&MesageId=1&Volume=30: Programm wird unterbrochen und Nachricht mit der ID 1 wird abgespielt.
Vielleicht ist es auch möglich, das CCU Script beizubehalten und einfach den Wrapper -also Datei index.php anzupassen ?
Ich kenne mich wirklich nicht gut genug aus um das einzuschätzen. Könntest du dir das mal ansehen ?
lG Ralf
dieser Link: http://www.trautner.net/wp-content/uplo ... /Sonos.zip
enthält zwei Dateien. Die Originale Datei aus dem IP-Symcon Forum plus den add ons aus dem Beitrag.
Das Interessante sind nun die Addons aus der Datei index.php, weil diese die folgenden Funktionen bereitstellen:
index.php?zone=MeineZone&do=TogglePlayStop: schaltet um zwischen Play und Pause
index.php?zone=MeineZone&do=VolumeUp: Lautstärke wird pro Aufruf um 1 erhöht
index.php?zone=MeineZone&do=VolumeDown: Lautstärke wird pro Aufruf um 1 vermindert
index.php?zone=MeineZone&do=sendMessage&MesageId=1&Volume=30: Programm wird unterbrochen und Nachricht mit der ID 1 wird abgespielt.
Vielleicht ist es auch möglich, das CCU Script beizubehalten und einfach den Wrapper -also Datei index.php anzupassen ?
Ich kenne mich wirklich nicht gut genug aus um das einzuschätzen. Könntest du dir das mal ansehen ?
lG Ralf
Re: Sonos Steuerung über Homematic und alle Einzelschritte
Die index.php kannst du so behalten. Die nimmt ja letztendlich nur die HTTP Requests entgegen und wertet dann aus welche Parameter mitgeschickt wurden.
Basierend da drauf wird dann die entsprechende Funkion aus der PHPSonos.inc.php aufgerufen.
Letztendlich muss fast jede Funktion aus der PHPSonos.inc.php so angepasst werden wie ich es anhand der Funktion 'Play' weiter oben beispielhaft erklärt habe wenn man will das das ganze mit dem PHP Server funktioniert den man direkt auf der CCU installiert hat (das Problem ist einfach das bei der CCU Version diverse Packages/Libs/Module fehlen die von dem Originalskript aber vorrausgesetzt werden -> deshalb ist es nötig das anders zu implementieren damit das eben auch mit dem PHP Server auf der CCU läuft).
Basierend da drauf wird dann die entsprechende Funkion aus der PHPSonos.inc.php aufgerufen.
Letztendlich muss fast jede Funktion aus der PHPSonos.inc.php so angepasst werden wie ich es anhand der Funktion 'Play' weiter oben beispielhaft erklärt habe wenn man will das das ganze mit dem PHP Server funktioniert den man direkt auf der CCU installiert hat (das Problem ist einfach das bei der CCU Version diverse Packages/Libs/Module fehlen die von dem Originalskript aber vorrausgesetzt werden -> deshalb ist es nötig das anders zu implementieren damit das eben auch mit dem PHP Server auf der CCU läuft).